From fe0e168b3b74e5914783ffccf26b40ad97d745f7 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Tue, 7 Oct 2014 18:22:09 -0400 Subject: [PATCH 1/5] Add *.test to gitignore. These files are left by some go commands. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 88f3293fc..031b270ab 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ etcd *.swp /hack/insta-discovery/.env +*.test From 3ad0df37226b4d4ea460bd3abc4902a311c96d3b Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Tue, 7 Oct 2014 18:22:35 -0400 Subject: [PATCH 2/5] Raft: fix problems reported by golint. --- raft/node.go | 5 +++++ raft/raft.go | 3 +++ raft/raft_test.go | 6 +++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/raft/node.go b/raft/node.go index b3d6bfdb5..23a4134b1 100644 --- a/raft/node.go +++ b/raft/node.go @@ -11,6 +11,8 @@ import ( var ( emptyState = pb.HardState{} + + // ErrStopped is returned by methods on Nodes that have been stopped. ErrStopped = errors.New("raft: stopped") ) @@ -68,10 +70,12 @@ func isHardStateEqual(a, b pb.HardState) bool { return a.Term == b.Term && a.Vote == b.Vote && a.Commit == b.Commit } +// IsEmptyHardState returns true if the given HardState is empty. func IsEmptyHardState(st pb.HardState) bool { return isHardStateEqual(st, emptyState) } +// IsEmptySnap returns true if the given Snapshot is empty. func IsEmptySnap(sp pb.Snapshot) bool { return sp.Index == 0 } @@ -81,6 +85,7 @@ func (rd Ready) containsUpdates() bool { len(rd.Entries) > 0 || len(rd.CommittedEntries) > 0 || len(rd.Messages) > 0 } +// Node represents a node in a raft cluster. type Node interface { // Tick increments the internal logical clock for the Node by a single tick. Election // timeouts and heartbeat timeouts are in units of ticks. diff --git a/raft/raft.go b/raft/raft.go index 91c3aad08..2d9741c94 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -8,6 +8,7 @@ import ( pb "github.com/coreos/etcd/raft/raftpb" ) +// None is a placeholder node ID used when there is no leader. const None int64 = 0 type messageType int64 @@ -42,12 +43,14 @@ func (mt messageType) String() string { var errNoLeader = errors.New("no leader") +// Possible values for StateType. const ( StateFollower StateType = iota StateCandidate StateLeader ) +// StateType represents the role of a node in a cluster. type StateType int64 var stmap = [...]string{ diff --git a/raft/raft_test.go b/raft/raft_test.go index 1923c553c..18ae89082 100644 --- a/raft/raft_test.go +++ b/raft/raft_test.go @@ -91,13 +91,13 @@ func TestLogReplication(t *testing.T) { t.Errorf("#%d.%d: committed = %d, want %d", i, j, sm.raftLog.committed, tt.wcommitted) } - ents := make([]pb.Entry, 0) + ents := []pb.Entry{} for _, e := range nextEnts(sm) { if e.Data != nil { ents = append(ents, e) } } - props := make([]pb.Message, 0) + props := []pb.Message{} for _, m := range tt.msgs { if m.Type == msgProp { props = append(props, m) @@ -1237,7 +1237,7 @@ func (nw *network) recover() { } func (nw *network) filter(msgs []pb.Message) []pb.Message { - mm := make([]pb.Message, 0) + mm := []pb.Message{} for _, m := range msgs { if nw.ignorem[m.Type] { continue From 36558b1924963d58c8cf4d678be1a87d070b90ab Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Tue, 7 Oct 2014 18:25:13 -0400 Subject: [PATCH 3/5] Raft: fix printf strings found by go vet. --- raft/node_test.go | 4 ++-- raft/raft_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/raft/node_test.go b/raft/node_test.go index 64db7d649..1e9b6b7aa 100644 --- a/raft/node_test.go +++ b/raft/node_test.go @@ -31,7 +31,7 @@ func TestNodeStep(t *testing.T) { if msgt == msgBeat || msgt == msgHup { select { case <-n.recvc: - t.Errorf("%d: step should ignore msgHub/msgBeat", i, mtmap[i]) + t.Errorf("%d: step should ignore msgHub/msgBeat", i) default: } } else { @@ -74,7 +74,7 @@ func TestNodeStepUnblock(t *testing.T) { select { case err := <-errc: if err != tt.werr { - t.Errorf("#%d: err = %v, want %v", err, tt.werr) + t.Errorf("#%d: err = %v, want %v", i, err, tt.werr) } //clean up side-effect if ctx.Err() != nil { diff --git a/raft/raft_test.go b/raft/raft_test.go index 18ae89082..a8203e716 100644 --- a/raft/raft_test.go +++ b/raft/raft_test.go @@ -618,7 +618,7 @@ func TestRecvMsgVote(t *testing.T) { continue } if g := msgs[0].Reject; g != tt.wreject { - t.Errorf("#%d, m.Reject = %d, want %d", i, g, tt.wreject) + t.Errorf("#%d, m.Reject = %d, want %v", i, g, tt.wreject) } } } From 1083ce8f73c0c461f00d53d0dc445d893b26d677 Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Tue, 7 Oct 2014 18:34:32 -0400 Subject: [PATCH 4/5] raft: remove misleading labels in array definition Since these are arrays instead of maps, the "keys" here are actually (useless) goto labels. What really matters is that the ordering is the same between the constant declarations and the array. --- raft/raft.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/raft/raft.go b/raft/raft.go index 2d9741c94..8d65f06b5 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -26,15 +26,15 @@ const ( ) var mtmap = [...]string{ - msgHup: "msgHup", - msgBeat: "msgBeat", - msgProp: "msgProp", - msgApp: "msgApp", - msgAppResp: "msgAppResp", - msgVote: "msgVote", - msgVoteResp: "msgVoteResp", - msgSnap: "msgSnap", - msgDenied: "msgDenied", + "msgHup", + "msgBeat", + "msgProp", + "msgApp", + "msgAppResp", + "msgVote", + "msgVoteResp", + "msgSnap", + "msgDenied", } func (mt messageType) String() string { @@ -54,9 +54,9 @@ const ( type StateType int64 var stmap = [...]string{ - StateFollower: "StateFollower", - StateCandidate: "StateCandidate", - StateLeader: "StateLeader", + "StateFollower", + "StateCandidate", + "StateLeader", } func (st StateType) String() string { From d2e858587fa005233b65d17539c171b4107ee0fc Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Wed, 8 Oct 2014 15:07:11 -0400 Subject: [PATCH 5/5] Raft: a few more improvements to test messages. --- raft/node_test.go | 2 +- raft/raft_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/raft/node_test.go b/raft/node_test.go index 1e9b6b7aa..9b00ef3b7 100644 --- a/raft/node_test.go +++ b/raft/node_test.go @@ -31,7 +31,7 @@ func TestNodeStep(t *testing.T) { if msgt == msgBeat || msgt == msgHup { select { case <-n.recvc: - t.Errorf("%d: step should ignore msgHub/msgBeat", i) + t.Errorf("%d: step should ignore %s", i, mtmap[i]) default: } } else { diff --git a/raft/raft_test.go b/raft/raft_test.go index a8203e716..171966c4f 100644 --- a/raft/raft_test.go +++ b/raft/raft_test.go @@ -618,7 +618,7 @@ func TestRecvMsgVote(t *testing.T) { continue } if g := msgs[0].Reject; g != tt.wreject { - t.Errorf("#%d, m.Reject = %d, want %v", i, g, tt.wreject) + t.Errorf("#%d, m.Reject = %v, want %v", i, g, tt.wreject) } } }