First attemt to fix issue #1636

This commit is contained in:
capone
2016-08-23 19:09:20 +03:00
parent d1ed8950bd
commit 1a37bc33c6
2 changed files with 24 additions and 1 deletions

View File

@@ -47,6 +47,12 @@ func (r *CheckRunner) Start() {
r.started = true
}
func (r *CheckRunner) Started() bool {
r.startedLock.Lock()
defer r.startedLock.Unlock()
return r.started
}
// Stop is used to stop the check.
func (r *CheckRunner) Stop() {
r.stopLock.Lock()

View File

@@ -394,7 +394,7 @@ func (c *Syncer) syncChecks() error {
}
// Synchronize checks with Consul
missingChecks, _, changedChecks, staleChecks := c.calcChecksDiff(consulChecks)
missingChecks, existingChecks, changedChecks, staleChecks := c.calcChecksDiff(consulChecks)
for _, check := range missingChecks {
if err := c.registerCheck(check); err != nil {
mErr.Errors = append(mErr.Errors, err)
@@ -403,6 +403,9 @@ func (c *Syncer) syncChecks() error {
c.trackedChecks[consulCheckID(check.ID)] = check
c.registryLock.Unlock()
}
for _, check := range existingChecks {
c.ensureCheckRunning(check)
}
for _, check := range changedChecks {
// NOTE(sean@): Do we need to deregister the check before
// re-registering it? Not deregistering to avoid missing the
@@ -684,6 +687,20 @@ func (c *Syncer) registerCheck(chkReg *consul.AgentCheckRegistration) error {
return c.client.Agent().CheckRegister(chkReg)
}
// ensureCheckRunning verifies that registerd check is in running state
func (c *Syncer) ensureCheckRunning(chk *consul.AgentCheckRegistration) {
c.registryLock.RLock()
defer c.registryLock.RUnlock()
cr, ok := c.checkRunners[consulCheckID(chk.ID)]
if !ok {
return
}
if !cr.Started() {
c.logger.Printf("[DEBUG] ensureCheckRunning Running existing check. %v", chk)
cr.Start()
}
}
// createCheckReg creates a Check that can be registered with Nomad. It also
// creates a Nomad check for the check types that it can handle.
func (c *Syncer) createCheckReg(check *structs.ServiceCheck, serviceReg *consul.AgentServiceRegistration) (*consul.AgentCheckRegistration, error) {