func (l *Leadership) run(ctx context.Context, candidate *leadership.Candidate) error { electedCh, errCh := candidate.RunForElection() for { select { case elected := <-electedCh: l.onElection(elected) case err := <-errCh: return err case <-ctx.Done(): l.candidate.Resign() return nil } } }
func run(candidate *leadership.Candidate, server *api.Server, primary *mux.Router, replica *api.Replica) { electedCh, errCh, err := candidate.RunForElection() if err != nil { return } for { select { case isElected := <-electedCh: if isElected { log.Info("Leader Election: Cluster leadership acquired") server.SetHandler(primary) } else { log.Info("Leader Election: Cluster leadership lost") server.SetHandler(replica) } case err := <-errCh: log.Error(err) return } } }
func run(cl cluster.Cluster, candidate *leadership.Candidate, server *api.Server, primary *mux.Router, replica *api.Replica) { electedCh, errCh := candidate.RunForElection() var watchdog *cluster.Watchdog for { select { case isElected := <-electedCh: if isElected { log.Info("Leader Election: Cluster leadership acquired") watchdog = cluster.NewWatchdog(cl) server.SetHandler(primary) } else { log.Info("Leader Election: Cluster leadership lost") cl.UnregisterEventHandler(watchdog) server.SetHandler(replica) } case err := <-errCh: log.Error(err) return } } }