From 040f63cd47d4f0b22bfecd46e64df20cba0df3a4 Mon Sep 17 00:00:00 2001 From: Dong Chen Date: Tue, 15 Mar 2016 19:30:35 -0700 Subject: [PATCH] Force node spec update. Signed-off-by: Dong Chen --- cluster/engine.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cluster/engine.go b/cluster/engine.go index f766fb98a0..b3299f5be1 100644 --- a/cluster/engine.go +++ b/cluster/engine.go @@ -692,6 +692,12 @@ func (e *Engine) updateContainer(c dockerclient.Container, containers map[string // refreshLoop periodically triggers engine refresh. func (e *Engine) refreshLoop() { const maxBackoffFactor int = 1000 + // engine can hot-plug CPU/Mem or update labels. but there is no events + // from engine to trigger spec update. + // add an update interval and refresh spec for healthy nodes. + const specUpdateInterval = 5 * time.Minute + lastSpecUpdatedAt := time.Now() + for { var err error @@ -710,11 +716,16 @@ func (e *Engine) refreshLoop() { return } - if !e.IsHealthy() { + healthy := e.IsHealthy() + if !healthy || time.Since(lastSpecUpdatedAt) > specUpdateInterval { if err = e.updateSpecs(); err != nil { log.WithFields(log.Fields{"name": e.Name, "id": e.ID}).Errorf("Update engine specs failed: %v", err) continue } + lastSpecUpdatedAt = time.Now() + } + + if !healthy { e.client.StopAllMonitorEvents() e.StartMonitorEvents() }