mirror of https://github.com/status-im/consul.git
Improve autopilot shutdown to be idempotent
This commit is contained in:
parent
4c90fbfd90
commit
33c5afdb31
|
@ -38,8 +38,10 @@ type Autopilot struct {
|
||||||
clusterHealth OperatorHealthReply
|
clusterHealth OperatorHealthReply
|
||||||
clusterHealthLock sync.RWMutex
|
clusterHealthLock sync.RWMutex
|
||||||
|
|
||||||
|
enabled bool
|
||||||
removeDeadCh chan struct{}
|
removeDeadCh chan struct{}
|
||||||
shutdownCh chan struct{}
|
shutdownCh chan struct{}
|
||||||
|
shutdownLock sync.Mutex
|
||||||
waitGroup sync.WaitGroup
|
waitGroup sync.WaitGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,6 +64,14 @@ func NewAutopilot(logger *log.Logger, delegate Delegate, interval, healthInterva
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Autopilot) Start() {
|
func (a *Autopilot) Start() {
|
||||||
|
a.shutdownLock.Lock()
|
||||||
|
defer a.shutdownLock.Unlock()
|
||||||
|
|
||||||
|
// Nothing to do
|
||||||
|
if a.enabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
a.shutdownCh = make(chan struct{})
|
a.shutdownCh = make(chan struct{})
|
||||||
a.waitGroup = sync.WaitGroup{}
|
a.waitGroup = sync.WaitGroup{}
|
||||||
a.clusterHealth = OperatorHealthReply{}
|
a.clusterHealth = OperatorHealthReply{}
|
||||||
|
@ -69,11 +79,21 @@ func (a *Autopilot) Start() {
|
||||||
a.waitGroup.Add(2)
|
a.waitGroup.Add(2)
|
||||||
go a.run()
|
go a.run()
|
||||||
go a.serverHealthLoop()
|
go a.serverHealthLoop()
|
||||||
|
a.enabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Autopilot) Stop() {
|
func (a *Autopilot) Stop() {
|
||||||
|
a.shutdownLock.Lock()
|
||||||
|
defer a.shutdownLock.Unlock()
|
||||||
|
|
||||||
|
// Nothing to do
|
||||||
|
if !a.enabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
close(a.shutdownCh)
|
close(a.shutdownCh)
|
||||||
a.waitGroup.Wait()
|
a.waitGroup.Wait()
|
||||||
|
a.enabled = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// run periodically looks for nonvoting servers to promote and dead servers to remove.
|
// run periodically looks for nonvoting servers to promote and dead servers to remove.
|
||||||
|
|
Loading…
Reference in New Issue