in store/engine/consul/consul.go [229:262]
func (c *Consul) electLoop() {
defer c.wg.Done()
for {
select {
case <-c.quitCh:
return
default:
}
sessionID, _, err := c.client.Session().Create(&api.SessionEntry{
Name: c.electPath,
Behavior: "release",
TTL: fmt.Sprintf("%v", sessionTTL),
LockDelay: lockDelay,
}, nil)
if err != nil {
logger.Get().With(
zap.Error(err),
).Error("Failed to create session")
time.Sleep(sessionTTL / 3)
continue
}
kvPair := &api.KVPair{
Key: c.electPath,
Value: []byte(c.myID),
Session: sessionID,
}
if c.leaderElection(kvPair) {
return
}
}
}