func()

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
		}
	}
}