in controller/controller.go [124:153]
func (c *Controller) syncLoop(ctx context.Context) {
defer c.wg.Done()
prevTermLeader := ""
if c.clusterStore.IsLeader() {
c.becomeLeader(ctx, prevTermLeader)
prevTermLeader = c.clusterStore.ID()
}
c.readyCh <- struct{}{}
for {
select {
case <-c.clusterStore.LeaderChange():
if c.clusterStore.IsLeader() {
if prevTermLeader != c.clusterStore.ID() {
c.becomeLeader(ctx, prevTermLeader)
prevTermLeader = c.clusterStore.ID()
}
} else {
if prevTermLeader != c.clusterStore.ID() {
continue
}
c.suspend()
logger.Get().Warn("Lost the leader, suspend the controller")
}
case <-c.closeCh:
return
}
}
}