func()

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