(ctx context.Context)
| 122 | } |
| 123 | |
| 124 | func (c *Controller) syncLoop(ctx context.Context) { |
| 125 | defer c.wg.Done() |
| 126 | |
| 127 | prevTermLeader := "" |
| 128 | if c.clusterStore.IsLeader() { |
| 129 | c.becomeLeader(ctx, prevTermLeader) |
| 130 | } |
| 131 | prevTermLeader = c.clusterStore.Leader() |
| 132 | |
| 133 | c.readyCh <- struct{}{} |
| 134 | for { |
| 135 | select { |
| 136 | case <-c.clusterStore.LeaderChange(): |
| 137 | if c.clusterStore.IsLeader() { |
| 138 | if prevTermLeader != c.clusterStore.ID() { |
| 139 | c.becomeLeader(ctx, prevTermLeader) |
| 140 | prevTermLeader = c.clusterStore.ID() |
| 141 | } |
| 142 | } else { |
| 143 | if prevTermLeader != c.clusterStore.ID() { |
| 144 | continue |
| 145 | } |
| 146 | c.suspend() |
| 147 | prevTermLeader = c.clusterStore.Leader() |
| 148 | logger.Get().Warn("Lost the leader, suspend the controller") |
| 149 | } |
| 150 | case <-c.closeCh: |
| 151 | return |
| 152 | } |
| 153 | } |
| 154 | } |
| 155 | |
| 156 | func (c *Controller) leaderEventLoop() { |
| 157 | defer c.wg.Done() |
no test coverage detected