MCPcopy Create free account
hub / github.com/apache/kvrocks-controller / syncLoop

Method syncLoop

controller/controller.go:124–154  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

122}
123
124func (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
156func (c *Controller) leaderEventLoop() {
157 defer c.wg.Done()

Callers 1

StartMethod · 0.95

Calls 7

becomeLeaderMethod · 0.95
suspendMethod · 0.95
GetFunction · 0.92
IsLeaderMethod · 0.80
LeaderMethod · 0.65
LeaderChangeMethod · 0.65
IDMethod · 0.65

Tested by

no test coverage detected