Browse Source

raft: node.Add needs the pubAddr field

Xiang Li 11 years ago
parent
commit
e9cb510ef5
3 changed files with 16 additions and 16 deletions
  1. 2 2
      raft/cluster_test.go
  2. 3 9
      raft/node.go
  3. 11 5
      raft/node_test.go

+ 2 - 2
raft/cluster_test.go

@@ -92,10 +92,10 @@ func buildCluster(size int) (nt *network, nodes []*Node) {
 	}
 	}
 	nt = newNetwork(nis...)
 	nt = newNetwork(nis...)
 
 
-	lead := Dictate(nodes[0])
+	lead := dictate(nodes[0])
 	lead.Next()
 	lead.Next()
 	for i := 1; i < size; i++ {
 	for i := 1; i < size; i++ {
-		lead.Add(i)
+		lead.Add(i, "")
 		nt.send(lead.Msgs()...)
 		nt.send(lead.Msgs()...)
 		for j := 0; j < i; j++ {
 		for j := 0; j < i; j++ {
 			nodes[j].Next()
 			nodes[j].Next()

+ 3 - 9
raft/node.go

@@ -13,8 +13,8 @@ type Interface interface {
 type tick int
 type tick int
 
 
 type config struct {
 type config struct {
-	NodeId  int
-	Address string
+	NodeId int
+	Addr   string
 }
 }
 
 
 type Node struct {
 type Node struct {
@@ -39,12 +39,6 @@ func New(id int, heartbeat, election tick) *Node {
 	return n
 	return n
 }
 }
 
 
-func Dictate(n *Node) *Node {
-	n.Step(Message{Type: msgHup})
-	n.Add(n.Id())
-	return n
-}
-
 func (n *Node) Id() int { return n.sm.id }
 func (n *Node) Id() int { return n.sm.id }
 
 
 func (n *Node) HasLeader() bool { return n.sm.lead != none }
 func (n *Node) HasLeader() bool { return n.sm.lead != none }
@@ -56,7 +50,7 @@ func (n *Node) propose(t int, data []byte) {
 	n.Step(Message{Type: msgProp, Entries: []Entry{{Type: t, Data: data}}})
 	n.Step(Message{Type: msgProp, Entries: []Entry{{Type: t, Data: data}}})
 }
 }
 
 
-func (n *Node) Add(id int) { n.updateConf(AddNode, &config{NodeId: id}) }
+func (n *Node) Add(id int, addr string) { n.updateConf(AddNode, &config{NodeId: id, Addr: addr}) }
 
 
 func (n *Node) Remove(id int) { n.updateConf(RemoveNode, &config{NodeId: id}) }
 func (n *Node) Remove(id int) { n.updateConf(RemoveNode, &config{NodeId: id}) }
 
 

+ 11 - 5
raft/node_test.go

@@ -89,7 +89,7 @@ func TestResetElapse(t *testing.T) {
 }
 }
 
 
 func TestStartCluster(t *testing.T) {
 func TestStartCluster(t *testing.T) {
-	n := Dictate(New(0, defaultHeartbeat, defaultElection))
+	n := dictate(New(0, defaultHeartbeat, defaultElection))
 	n.Next()
 	n.Next()
 
 
 	if len(n.sm.ins) != 1 {
 	if len(n.sm.ins) != 1 {
@@ -104,9 +104,9 @@ func TestStartCluster(t *testing.T) {
 }
 }
 
 
 func TestAdd(t *testing.T) {
 func TestAdd(t *testing.T) {
-	n := Dictate(New(0, defaultHeartbeat, defaultElection))
+	n := dictate(New(0, defaultHeartbeat, defaultElection))
 	n.Next()
 	n.Next()
-	n.Add(1)
+	n.Add(1, "")
 	n.Next()
 	n.Next()
 
 
 	if len(n.sm.ins) != 2 {
 	if len(n.sm.ins) != 2 {
@@ -118,9 +118,9 @@ func TestAdd(t *testing.T) {
 }
 }
 
 
 func TestRemove(t *testing.T) {
 func TestRemove(t *testing.T) {
-	n := Dictate(New(0, defaultHeartbeat, defaultElection))
+	n := dictate(New(0, defaultHeartbeat, defaultElection))
 	n.Next()
 	n.Next()
-	n.Add(1)
+	n.Add(1, "")
 	n.Next()
 	n.Next()
 	n.Remove(0)
 	n.Remove(0)
 	n.Step(Message{Type: msgAppResp, From: 1, Term: 1, Index: 3})
 	n.Step(Message{Type: msgAppResp, From: 1, Term: 1, Index: 3})
@@ -133,3 +133,9 @@ func TestRemove(t *testing.T) {
 		t.Errorf("id = %d, want 0", n.sm.id)
 		t.Errorf("id = %d, want 0", n.sm.id)
 	}
 	}
 }
 }
+
+func dictate(n *Node) *Node {
+	n.Step(Message{Type: msgHup})
+	n.Add(n.Id(), "")
+	return n
+}