From 45c36a08086a8a5caf5b87c63e4695af11daa145 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 12 Nov 2014 11:39:22 -0800 Subject: [PATCH 1/2] raft: add a test for node.Tick --- raft/node_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/raft/node_test.go b/raft/node_test.go index e25513f67..20e0fd4a4 100644 --- a/raft/node_test.go +++ b/raft/node_test.go @@ -140,6 +140,20 @@ func TestBlockProposal(t *testing.T) { } } +// TestNodeTick ensures that node.Tick() will increase the +// elapsed of the underly raft state machine. +func TestNodeTick(t *testing.T) { + n := newNode() + r := newRaft(1, []uint64{1}, 10, 1) + go n.run(r) + elapsed := r.elapsed + n.Tick() + n.Stop() + if r.elapsed != elapsed+1 { + t.Errorf("elapsed = %d, want %d", r.elapsed, elapsed+1) + } +} + func TestReadyContainUpdates(t *testing.T) { tests := []struct { rd Ready From d834324e973e22900cade94ebf3b944f9a2c58b1 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Wed, 12 Nov 2014 12:32:20 -0800 Subject: [PATCH 2/2] raft: stop the node synchronously --- raft/node.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/raft/node.go b/raft/node.go index 003db937f..13a50db31 100644 --- a/raft/node.go +++ b/raft/node.go @@ -192,6 +192,7 @@ type node struct { advancec chan struct{} tickc chan struct{} done chan struct{} + stop chan struct{} } func newNode() node { @@ -204,11 +205,13 @@ func newNode() node { advancec: make(chan struct{}), tickc: make(chan struct{}), done: make(chan struct{}), + stop: make(chan struct{}), } } func (n *node) Stop() { - close(n.done) + n.stop <- struct{}{} + <-n.stop } func (n *node) run(r *raft) { @@ -302,7 +305,9 @@ func (n *node) run(r *raft) { } r.raftLog.stableTo(prevLastUnstablei) advancec = nil - case <-n.done: + case <-n.stop: + n.stop <- struct{}{} + close(n.done) return } }