mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #1080 from coreos/check_id
main: check node id is not noneid
This commit is contained in:
commit
29f9372370
3
main.go
3
main.go
@ -57,6 +57,9 @@ func startEtcd() http.Handler {
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if id == raft.None {
|
||||
log.Fatalf("etcd: cannot use None(%d) as etcdserver id", raft.None)
|
||||
}
|
||||
|
||||
if peers.Pick(id) == "" {
|
||||
log.Fatalf("%#x=<addr> must be specified in peers", id)
|
||||
|
22
raft/raft.go
22
raft/raft.go
@ -8,7 +8,7 @@ import (
|
||||
pb "github.com/coreos/etcd/raft/raftpb"
|
||||
)
|
||||
|
||||
const none = 0
|
||||
const None = 0
|
||||
|
||||
type messageType int64
|
||||
|
||||
@ -113,12 +113,12 @@ type raft struct {
|
||||
}
|
||||
|
||||
func newRaft(id int64, peers []int64, election, heartbeat int) *raft {
|
||||
if id == none {
|
||||
if id == None {
|
||||
panic("cannot use none id")
|
||||
}
|
||||
r := &raft{
|
||||
id: id,
|
||||
lead: none,
|
||||
lead: None,
|
||||
raftLog: newLog(),
|
||||
prs: make(map[int64]*progress),
|
||||
electionTimeout: election,
|
||||
@ -127,11 +127,11 @@ func newRaft(id int64, peers []int64, election, heartbeat int) *raft {
|
||||
for _, p := range peers {
|
||||
r.prs[p] = &progress{}
|
||||
}
|
||||
r.becomeFollower(0, none)
|
||||
r.becomeFollower(0, None)
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *raft) hasLeader() bool { return r.lead != none }
|
||||
func (r *raft) hasLeader() bool { return r.lead != None }
|
||||
|
||||
func (r *raft) String() string {
|
||||
s := fmt.Sprintf(`state=%v term=%d`, r.state, r.Term)
|
||||
@ -231,8 +231,8 @@ func (r *raft) maybeCommit() bool {
|
||||
|
||||
func (r *raft) reset(term int64) {
|
||||
r.Term = term
|
||||
r.lead = none
|
||||
r.Vote = none
|
||||
r.lead = None
|
||||
r.Vote = None
|
||||
r.elapsed = 0
|
||||
r.votes = make(map[int64]bool)
|
||||
for i := range r.prs {
|
||||
@ -342,7 +342,7 @@ func (r *raft) Step(m pb.Message) error {
|
||||
case m.Term > r.Term:
|
||||
lead := m.From
|
||||
if m.Type == msgVote {
|
||||
lead = none
|
||||
lead = None
|
||||
}
|
||||
r.becomeFollower(m.Term, lead)
|
||||
case m.Term < r.Term:
|
||||
@ -417,7 +417,7 @@ func stepCandidate(r *raft, m pb.Message) {
|
||||
r.becomeLeader()
|
||||
r.bcastAppend()
|
||||
case len(r.votes) - gr:
|
||||
r.becomeFollower(r.Term, none)
|
||||
r.becomeFollower(r.Term, None)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -425,7 +425,7 @@ func stepCandidate(r *raft, m pb.Message) {
|
||||
func stepFollower(r *raft, m pb.Message) {
|
||||
switch m.Type {
|
||||
case msgProp:
|
||||
if r.lead == none {
|
||||
if r.lead == None {
|
||||
panic("no leader")
|
||||
}
|
||||
m.To = r.lead
|
||||
@ -438,7 +438,7 @@ func stepFollower(r *raft, m pb.Message) {
|
||||
r.elapsed = 0
|
||||
r.handleSnapshot(m)
|
||||
case msgVote:
|
||||
if (r.Vote == none || r.Vote == m.From) && r.raftLog.isUpToDate(m.Index, m.LogTerm) {
|
||||
if (r.Vote == None || r.Vote == m.From) && r.raftLog.isUpToDate(m.Index, m.LogTerm) {
|
||||
r.elapsed = 0
|
||||
r.Vote = m.From
|
||||
r.send(pb.Message{To: m.From, Type: msgVoteResp, Index: r.raftLog.lastIndex()})
|
||||
|
@ -537,25 +537,25 @@ func TestRecvMsgVote(t *testing.T) {
|
||||
voteFor int64
|
||||
w int64
|
||||
}{
|
||||
{stateFollower, 0, 0, none, -1},
|
||||
{stateFollower, 0, 1, none, -1},
|
||||
{stateFollower, 0, 2, none, -1},
|
||||
{stateFollower, 0, 3, none, 2},
|
||||
{stateFollower, 0, 0, None, -1},
|
||||
{stateFollower, 0, 1, None, -1},
|
||||
{stateFollower, 0, 2, None, -1},
|
||||
{stateFollower, 0, 3, None, 2},
|
||||
|
||||
{stateFollower, 1, 0, none, -1},
|
||||
{stateFollower, 1, 1, none, -1},
|
||||
{stateFollower, 1, 2, none, -1},
|
||||
{stateFollower, 1, 3, none, 2},
|
||||
{stateFollower, 1, 0, None, -1},
|
||||
{stateFollower, 1, 1, None, -1},
|
||||
{stateFollower, 1, 2, None, -1},
|
||||
{stateFollower, 1, 3, None, 2},
|
||||
|
||||
{stateFollower, 2, 0, none, -1},
|
||||
{stateFollower, 2, 1, none, -1},
|
||||
{stateFollower, 2, 2, none, 2},
|
||||
{stateFollower, 2, 3, none, 2},
|
||||
{stateFollower, 2, 0, None, -1},
|
||||
{stateFollower, 2, 1, None, -1},
|
||||
{stateFollower, 2, 2, None, 2},
|
||||
{stateFollower, 2, 3, None, 2},
|
||||
|
||||
{stateFollower, 3, 0, none, -1},
|
||||
{stateFollower, 3, 1, none, -1},
|
||||
{stateFollower, 3, 2, none, 2},
|
||||
{stateFollower, 3, 3, none, 2},
|
||||
{stateFollower, 3, 0, None, -1},
|
||||
{stateFollower, 3, 1, None, -1},
|
||||
{stateFollower, 3, 2, None, 2},
|
||||
{stateFollower, 3, 3, None, 2},
|
||||
|
||||
{stateFollower, 3, 2, 2, 2},
|
||||
{stateFollower, 3, 2, 1, -1},
|
||||
@ -599,16 +599,16 @@ func TestStateTransition(t *testing.T) {
|
||||
wterm int64
|
||||
wlead int64
|
||||
}{
|
||||
{stateFollower, stateFollower, true, 1, none},
|
||||
{stateFollower, stateCandidate, true, 1, none},
|
||||
{stateFollower, stateLeader, false, -1, none},
|
||||
{stateFollower, stateFollower, true, 1, None},
|
||||
{stateFollower, stateCandidate, true, 1, None},
|
||||
{stateFollower, stateLeader, false, -1, None},
|
||||
|
||||
{stateCandidate, stateFollower, true, 0, none},
|
||||
{stateCandidate, stateCandidate, true, 1, none},
|
||||
{stateCandidate, stateFollower, true, 0, None},
|
||||
{stateCandidate, stateCandidate, true, 1, None},
|
||||
{stateCandidate, stateLeader, true, 0, 1},
|
||||
|
||||
{stateLeader, stateFollower, true, 1, none},
|
||||
{stateLeader, stateCandidate, false, 1, none},
|
||||
{stateLeader, stateFollower, true, 1, None},
|
||||
{stateLeader, stateCandidate, false, 1, None},
|
||||
{stateLeader, stateLeader, true, 0, 1},
|
||||
}
|
||||
|
||||
@ -664,7 +664,7 @@ func TestAllServerStepdown(t *testing.T) {
|
||||
sm := newRaft(1, []int64{1, 2, 3}, 0, 0)
|
||||
switch tt.state {
|
||||
case stateFollower:
|
||||
sm.becomeFollower(1, none)
|
||||
sm.becomeFollower(1, None)
|
||||
case stateCandidate:
|
||||
sm.becomeCandidate()
|
||||
case stateLeader:
|
||||
@ -686,10 +686,10 @@ func TestAllServerStepdown(t *testing.T) {
|
||||
}
|
||||
wlead := int64(2)
|
||||
if msgType == msgVote {
|
||||
wlead = none
|
||||
wlead = None
|
||||
}
|
||||
if sm.lead != wlead {
|
||||
t.Errorf("#%d, sm.lead = %d, want %d", i, sm.lead, none)
|
||||
t.Errorf("#%d, sm.lead = %d, want %d", i, sm.lead, None)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user