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