Add --elect-force-state
This commit is contained in:
29
candidate.go
29
candidate.go
@@ -3,6 +3,7 @@ package elect
|
|||||||
import (
|
import (
|
||||||
"crypto/hmac"
|
"crypto/hmac"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@@ -48,6 +49,8 @@ var StateName = map[CandidateState]string{
|
|||||||
StateNotLeader: "NOT_LEADER",
|
StateNotLeader: "NOT_LEADER",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var electForceState = flag.String("elect-force-state", "", "'', 'leader', 'notleader'")
|
||||||
|
|
||||||
func NewCandidate(numVoters int, signingKey string) *Candidate {
|
func NewCandidate(numVoters int, signingKey string) *Candidate {
|
||||||
change := make(chan CandidateState, 100)
|
change := make(chan CandidateState, 100)
|
||||||
|
|
||||||
@@ -207,6 +210,32 @@ func (c *Candidate) elect(v *vote) {
|
|||||||
c.c <- state
|
c.c <- state
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
switch *electForceState {
|
||||||
|
case "":
|
||||||
|
// Not forced
|
||||||
|
|
||||||
|
case "leader":
|
||||||
|
log.Printf("[elect] state forced to leader")
|
||||||
|
|
||||||
|
state = StateLeader
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
case "not-leader":
|
||||||
|
fallthrough
|
||||||
|
case "not_leader":
|
||||||
|
fallthrough
|
||||||
|
case "notleader":
|
||||||
|
log.Printf("[elect] state forced to not leader")
|
||||||
|
|
||||||
|
state = StateNotLeader
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
default:
|
||||||
|
panic("invalid --elect-force-state")
|
||||||
|
}
|
||||||
|
|
||||||
if v != nil {
|
if v != nil {
|
||||||
v.received = time.Now()
|
v.received = time.Now()
|
||||||
c.votes[v.VoterID] = v
|
c.votes[v.VoterID] = v
|
||||||
|
|||||||
Reference in New Issue
Block a user