mirror of https://github.com/docker/docs.git
Force node spec update.
Signed-off-by: Dong Chen <dongluo.chen@docker.com>
This commit is contained in:
parent
73179d4dd8
commit
040f63cd47
|
@ -692,6 +692,12 @@ func (e *Engine) updateContainer(c dockerclient.Container, containers map[string
|
||||||
// refreshLoop periodically triggers engine refresh.
|
// refreshLoop periodically triggers engine refresh.
|
||||||
func (e *Engine) refreshLoop() {
|
func (e *Engine) refreshLoop() {
|
||||||
const maxBackoffFactor int = 1000
|
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 {
|
for {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
@ -710,11 +716,16 @@ func (e *Engine) refreshLoop() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !e.IsHealthy() {
|
healthy := e.IsHealthy()
|
||||||
|
if !healthy || time.Since(lastSpecUpdatedAt) > specUpdateInterval {
|
||||||
if err = e.updateSpecs(); err != nil {
|
if err = e.updateSpecs(); err != nil {
|
||||||
log.WithFields(log.Fields{"name": e.Name, "id": e.ID}).Errorf("Update engine specs failed: %v", err)
|
log.WithFields(log.Fields{"name": e.Name, "id": e.ID}).Errorf("Update engine specs failed: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
lastSpecUpdatedAt = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
if !healthy {
|
||||||
e.client.StopAllMonitorEvents()
|
e.client.StopAllMonitorEvents()
|
||||||
e.StartMonitorEvents()
|
e.StartMonitorEvents()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue