From c24b6b41505ccf8e8e40a727fce5fa9733f88bca Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Fri, 13 Jun 2014 14:41:22 -0700 Subject: [PATCH] raft: init stateMachine in New --- raft/cluster_test.go | 1 - raft/node.go | 21 +++++++-------------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/raft/cluster_test.go b/raft/cluster_test.go index 09c4efbdc..a9a67e190 100644 --- a/raft/cluster_test.go +++ b/raft/cluster_test.go @@ -95,7 +95,6 @@ func buildCluster(size int) (nt *network, nodes []*Node) { Dictate(nodes[0]).Next() for i := 1; i < size; i++ { nt.send(nodes[0].newConfMessage(configAdd, &Config{NodeId: i})) - nodes[i].Start() for j := 0; j < i; j++ { nodes[j].Next() } diff --git a/raft/node.go b/raft/node.go index 644f58bcd..0be355f35 100644 --- a/raft/node.go +++ b/raft/node.go @@ -39,31 +39,24 @@ func New(addr int, heartbeat, election tick) *Node { heartbeat: heartbeat, election: election, addr: addr, + sm: newStateMachine(addr, []int{addr}), } return n } +func Dictate(n *Node) *Node { + n.Step(Message{Type: msgHup}) + n.Step(n.newConfMessage(configAdd, &Config{NodeId: n.addr})) + return n +} + // Propose asynchronously proposes data be applied to the underlying state machine. func (n *Node) Propose(data []byte) { m := Message{Type: msgProp, Entries: []Entry{{Data: data}}} n.Step(m) } -func Dictate(n *Node) *Node { - n.sm = newStateMachine(n.addr, []int{n.addr}) - n.Step(Message{Type: msgHup}) - n.Step(n.newConfMessage(configAdd, &Config{NodeId: n.addr})) - return n -} - -func (n *Node) Start() { - if n.sm != nil { - panic("node is started") - } - n.sm = newStateMachine(n.addr, nil) -} - func (n *Node) Add(addr int) { n.Step(n.newConfMessage(configAdd, &Config{NodeId: addr})) }