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

Method electLoop

store/engine/etcd/etcd.go:217–254  ·  view source on GitHub ↗
(ctx context.Context)

Source from the content-addressed store, hash-verified

215}
216
217func (e *Etcd) electLoop(ctx context.Context) {
218 defer e.wg.Done()
219 for {
220 select {
221 case <-e.quitCh:
222 return
223 default:
224 }
225
226 reset:
227 session, err := concurrency.NewSession(e.client, concurrency.WithTTL(sessionTTL))
228 if err != nil {
229 logger.Get().With(
230 zap.Error(err),
231 ).Error("Failed to create session")
232 time.Sleep(sessionTTL / 3)
233 continue
234 }
235 election := concurrency.NewElection(session, e.electPath)
236 e.electionCh <- election
237 for {
238 if err := election.Campaign(ctx, e.myID); err != nil {
239 logger.Get().With(
240 zap.Error(err),
241 ).Error("Failed to acquire the leader campaign")
242 continue
243 }
244 select {
245 case <-session.Done():
246 logger.Get().Warn("Leader session is done")
247 goto reset
248 case <-e.quitCh:
249 logger.Get().Info("Exit the leader election loop")
250 return
251 }
252 }
253 }
254}
255
256func (e *Etcd) observeLeaderEvent(ctx context.Context) {
257 defer e.wg.Done()

Callers 1

NewFunction · 0.95

Calls 3

GetFunction · 0.92
ErrorMethod · 0.80
InfoMethod · 0.80

Tested by

no test coverage detected