|
@@ -195,7 +195,7 @@ func TestProgressWaitReset(t *testing.T) {
|
|
|
|
|
|
|
|
// TestProgressDecr ensures raft.heartbeat decreases progress.wait by heartbeat.
|
|
// TestProgressDecr ensures raft.heartbeat decreases progress.wait by heartbeat.
|
|
|
func TestProgressDecr(t *testing.T) {
|
|
func TestProgressDecr(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage(), 0)
|
|
|
r.becomeCandidate()
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
r.becomeLeader()
|
|
|
r.prs[2].Wait = r.heartbeatTimeout * 2
|
|
r.prs[2].Wait = r.heartbeatTimeout * 2
|
|
@@ -207,7 +207,7 @@ func TestProgressDecr(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestProgressWait(t *testing.T) {
|
|
func TestProgressWait(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage(), 0)
|
|
|
r.becomeCandidate()
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
r.becomeLeader()
|
|
|
r.Step(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Data: []byte("somedata")}}})
|
|
r.Step(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Data: []byte("somedata")}}})
|
|
@@ -399,9 +399,9 @@ func TestCommitWithoutNewTermEntry(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestDuelingCandidates(t *testing.T) {
|
|
func TestDuelingCandidates(t *testing.T) {
|
|
|
- a := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
|
|
- b := newRaft(2, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
|
|
- c := newRaft(3, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ a := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
|
|
+ b := newRaft(2, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
|
|
+ c := newRaft(3, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
|
|
|
|
|
nt := newNetwork(a, b, c)
|
|
nt := newNetwork(a, b, c)
|
|
|
nt.cut(1, 3)
|
|
nt.cut(1, 3)
|
|
@@ -669,7 +669,7 @@ func TestCommit(t *testing.T) {
|
|
|
storage.Append(tt.logs)
|
|
storage.Append(tt.logs)
|
|
|
storage.hardState = pb.HardState{Term: tt.smTerm}
|
|
storage.hardState = pb.HardState{Term: tt.smTerm}
|
|
|
|
|
|
|
|
- sm := newRaft(1, []uint64{1}, 5, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1}, 5, 1, storage, 0)
|
|
|
for j := 0; j < len(tt.matches); j++ {
|
|
for j := 0; j < len(tt.matches); j++ {
|
|
|
sm.setProgress(uint64(j)+1, tt.matches[j], tt.matches[j]+1)
|
|
sm.setProgress(uint64(j)+1, tt.matches[j], tt.matches[j]+1)
|
|
|
}
|
|
}
|
|
@@ -694,7 +694,7 @@ func TestIsElectionTimeout(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.elapsed = tt.elapse
|
|
sm.elapsed = tt.elapse
|
|
|
c := 0
|
|
c := 0
|
|
|
for j := 0; j < 10000; j++ {
|
|
for j := 0; j < 10000; j++ {
|
|
@@ -719,7 +719,7 @@ func TestStepIgnoreOldTermMsg(t *testing.T) {
|
|
|
fakeStep := func(r *raft, m pb.Message) {
|
|
fakeStep := func(r *raft, m pb.Message) {
|
|
|
called = true
|
|
called = true
|
|
|
}
|
|
}
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.step = fakeStep
|
|
sm.step = fakeStep
|
|
|
sm.Term = 2
|
|
sm.Term = 2
|
|
|
sm.Step(pb.Message{Type: pb.MsgApp, Term: sm.Term - 1})
|
|
sm.Step(pb.Message{Type: pb.MsgApp, Term: sm.Term - 1})
|
|
@@ -761,7 +761,7 @@ func TestHandleMsgApp(t *testing.T) {
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
storage := NewMemoryStorage()
|
|
storage := NewMemoryStorage()
|
|
|
storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}})
|
|
storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}})
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1}, 10, 1, storage, 0)
|
|
|
sm.becomeFollower(2, None)
|
|
sm.becomeFollower(2, None)
|
|
|
|
|
|
|
|
sm.handleAppendEntries(tt.m)
|
|
sm.handleAppendEntries(tt.m)
|
|
@@ -795,7 +795,7 @@ func TestHandleHeartbeat(t *testing.T) {
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
storage := NewMemoryStorage()
|
|
storage := NewMemoryStorage()
|
|
|
storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}, {Index: 3, Term: 3}})
|
|
storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}, {Index: 3, Term: 3}})
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 5, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2}, 5, 1, storage, 0)
|
|
|
sm.becomeFollower(2, 2)
|
|
sm.becomeFollower(2, 2)
|
|
|
sm.raftLog.commitTo(commit)
|
|
sm.raftLog.commitTo(commit)
|
|
|
sm.handleHeartbeat(tt.m)
|
|
sm.handleHeartbeat(tt.m)
|
|
@@ -816,7 +816,7 @@ func TestHandleHeartbeat(t *testing.T) {
|
|
|
func TestHandleHeartbeatResp(t *testing.T) {
|
|
func TestHandleHeartbeatResp(t *testing.T) {
|
|
|
storage := NewMemoryStorage()
|
|
storage := NewMemoryStorage()
|
|
|
storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}, {Index: 3, Term: 3}})
|
|
storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}, {Index: 3, Term: 3}})
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 5, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2}, 5, 1, storage, 0)
|
|
|
sm.becomeCandidate()
|
|
sm.becomeCandidate()
|
|
|
sm.becomeLeader()
|
|
sm.becomeLeader()
|
|
|
sm.raftLog.commitTo(sm.raftLog.lastIndex())
|
|
sm.raftLog.commitTo(sm.raftLog.lastIndex())
|
|
@@ -904,7 +904,7 @@ func TestRecvMsgVote(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.state = tt.state
|
|
sm.state = tt.state
|
|
|
switch tt.state {
|
|
switch tt.state {
|
|
|
case StateFollower:
|
|
case StateFollower:
|
|
@@ -964,7 +964,7 @@ func TestStateTransition(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
}()
|
|
}()
|
|
|
|
|
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.state = tt.from
|
|
sm.state = tt.from
|
|
|
|
|
|
|
|
switch tt.to {
|
|
switch tt.to {
|
|
@@ -1003,7 +1003,7 @@ func TestAllServerStepdown(t *testing.T) {
|
|
|
tterm := uint64(3)
|
|
tterm := uint64(3)
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
switch tt.state {
|
|
switch tt.state {
|
|
|
case StateFollower:
|
|
case StateFollower:
|
|
|
sm.becomeFollower(1, None)
|
|
sm.becomeFollower(1, None)
|
|
@@ -1062,7 +1062,7 @@ func TestLeaderAppResp(t *testing.T) {
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
// sm term is 1 after it becomes the leader.
|
|
// sm term is 1 after it becomes the leader.
|
|
|
// thus the last log term must be 1 to be committed.
|
|
// thus the last log term must be 1 to be committed.
|
|
|
- sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.raftLog = &raftLog{
|
|
sm.raftLog = &raftLog{
|
|
|
storage: &MemoryStorage{ents: []pb.Entry{{}, {Index: 1, Term: 0}, {Index: 2, Term: 1}}},
|
|
storage: &MemoryStorage{ents: []pb.Entry{{}, {Index: 1, Term: 0}, {Index: 2, Term: 1}}},
|
|
|
unstable: unstable{offset: 3},
|
|
unstable: unstable{offset: 3},
|
|
@@ -1110,7 +1110,7 @@ func TestBcastBeat(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
storage := NewMemoryStorage()
|
|
storage := NewMemoryStorage()
|
|
|
storage.ApplySnapshot(s)
|
|
storage.ApplySnapshot(s)
|
|
|
- sm := newRaft(1, nil, 10, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, nil, 10, 1, storage, 0)
|
|
|
sm.Term = 1
|
|
sm.Term = 1
|
|
|
|
|
|
|
|
sm.becomeCandidate()
|
|
sm.becomeCandidate()
|
|
@@ -1169,7 +1169,7 @@ func TestRecvMsgBeat(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.raftLog = &raftLog{storage: &MemoryStorage{ents: []pb.Entry{{}, {Index: 1, Term: 0}, {Index: 2, Term: 1}}}}
|
|
sm.raftLog = &raftLog{storage: &MemoryStorage{ents: []pb.Entry{{}, {Index: 1, Term: 0}, {Index: 2, Term: 1}}}}
|
|
|
sm.Term = 1
|
|
sm.Term = 1
|
|
|
sm.state = tt.state
|
|
sm.state = tt.state
|
|
@@ -1212,7 +1212,7 @@ func TestLeaderIncreaseNext(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.raftLog.append(previousEnts...)
|
|
sm.raftLog.append(previousEnts...)
|
|
|
sm.becomeCandidate()
|
|
sm.becomeCandidate()
|
|
|
sm.becomeLeader()
|
|
sm.becomeLeader()
|
|
@@ -1236,7 +1236,7 @@ func TestRestore(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
storage := NewMemoryStorage()
|
|
storage := NewMemoryStorage()
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 10, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2}, 10, 1, storage, 0)
|
|
|
if ok := sm.restore(s); !ok {
|
|
if ok := sm.restore(s); !ok {
|
|
|
t.Fatal("restore fail, want succeed")
|
|
t.Fatal("restore fail, want succeed")
|
|
|
}
|
|
}
|
|
@@ -1261,7 +1261,7 @@ func TestRestoreIgnoreSnapshot(t *testing.T) {
|
|
|
previousEnts := []pb.Entry{{Term: 1, Index: 1}, {Term: 1, Index: 2}, {Term: 1, Index: 3}}
|
|
previousEnts := []pb.Entry{{Term: 1, Index: 1}, {Term: 1, Index: 2}, {Term: 1, Index: 3}}
|
|
|
commit := uint64(1)
|
|
commit := uint64(1)
|
|
|
storage := NewMemoryStorage()
|
|
storage := NewMemoryStorage()
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 10, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1, 2}, 10, 1, storage, 0)
|
|
|
sm.raftLog.append(previousEnts...)
|
|
sm.raftLog.append(previousEnts...)
|
|
|
sm.raftLog.commitTo(commit)
|
|
sm.raftLog.commitTo(commit)
|
|
|
|
|
|
|
@@ -1302,7 +1302,7 @@ func TestProvideSnap(t *testing.T) {
|
|
|
},
|
|
},
|
|
|
}
|
|
}
|
|
|
storage := NewMemoryStorage()
|
|
storage := NewMemoryStorage()
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{1}, 10, 1, storage, 0)
|
|
|
sm.restore(s)
|
|
sm.restore(s)
|
|
|
|
|
|
|
|
sm.becomeCandidate()
|
|
sm.becomeCandidate()
|
|
@@ -1333,7 +1333,7 @@ func TestRestoreFromSnapMsg(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
m := pb.Message{Type: pb.MsgSnap, From: 1, Term: 2, Snapshot: s}
|
|
m := pb.Message{Type: pb.MsgSnap, From: 1, Term: 2, Snapshot: s}
|
|
|
|
|
|
|
|
- sm := newRaft(2, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ sm := newRaft(2, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
sm.Step(m)
|
|
sm.Step(m)
|
|
|
|
|
|
|
|
// TODO(bdarnell): what should this test?
|
|
// TODO(bdarnell): what should this test?
|
|
@@ -1367,7 +1367,7 @@ func TestSlowNodeRestore(t *testing.T) {
|
|
|
// it appends the entry to log and sets pendingConf to be true.
|
|
// it appends the entry to log and sets pendingConf to be true.
|
|
|
func TestStepConfig(t *testing.T) {
|
|
func TestStepConfig(t *testing.T) {
|
|
|
// a raft that cannot make progress
|
|
// a raft that cannot make progress
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
r.becomeCandidate()
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
r.becomeLeader()
|
|
|
index := r.raftLog.lastIndex()
|
|
index := r.raftLog.lastIndex()
|
|
@@ -1385,7 +1385,7 @@ func TestStepConfig(t *testing.T) {
|
|
|
// the proposal to noop and keep its original state.
|
|
// the proposal to noop and keep its original state.
|
|
|
func TestStepIgnoreConfig(t *testing.T) {
|
|
func TestStepIgnoreConfig(t *testing.T) {
|
|
|
// a raft that cannot make progress
|
|
// a raft that cannot make progress
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
r.becomeCandidate()
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
r.becomeLeader()
|
|
|
r.Step(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Type: pb.EntryConfChange}}})
|
|
r.Step(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Type: pb.EntryConfChange}}})
|
|
@@ -1412,7 +1412,7 @@ func TestRecoverPendingConfig(t *testing.T) {
|
|
|
{pb.EntryConfChange, true},
|
|
{pb.EntryConfChange, true},
|
|
|
}
|
|
}
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
r.appendEntry(pb.Entry{Type: tt.entType})
|
|
r.appendEntry(pb.Entry{Type: tt.entType})
|
|
|
r.becomeCandidate()
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
r.becomeLeader()
|
|
@@ -1431,7 +1431,7 @@ func TestRecoverDoublePendingConfig(t *testing.T) {
|
|
|
t.Errorf("expect panic, but nothing happens")
|
|
t.Errorf("expect panic, but nothing happens")
|
|
|
}
|
|
}
|
|
|
}()
|
|
}()
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
r.appendEntry(pb.Entry{Type: pb.EntryConfChange})
|
|
r.appendEntry(pb.Entry{Type: pb.EntryConfChange})
|
|
|
r.appendEntry(pb.Entry{Type: pb.EntryConfChange})
|
|
r.appendEntry(pb.Entry{Type: pb.EntryConfChange})
|
|
|
r.becomeCandidate()
|
|
r.becomeCandidate()
|
|
@@ -1441,7 +1441,7 @@ func TestRecoverDoublePendingConfig(t *testing.T) {
|
|
|
|
|
|
|
|
// TestAddNode tests that addNode could update pendingConf and nodes correctly.
|
|
// TestAddNode tests that addNode could update pendingConf and nodes correctly.
|
|
|
func TestAddNode(t *testing.T) {
|
|
func TestAddNode(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
r.pendingConf = true
|
|
r.pendingConf = true
|
|
|
r.addNode(2)
|
|
r.addNode(2)
|
|
|
if r.pendingConf != false {
|
|
if r.pendingConf != false {
|
|
@@ -1457,7 +1457,7 @@ func TestAddNode(t *testing.T) {
|
|
|
// TestRemoveNode tests that removeNode could update pendingConf, nodes and
|
|
// TestRemoveNode tests that removeNode could update pendingConf, nodes and
|
|
|
// and removed list correctly.
|
|
// and removed list correctly.
|
|
|
func TestRemoveNode(t *testing.T) {
|
|
func TestRemoveNode(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
r.pendingConf = true
|
|
r.pendingConf = true
|
|
|
r.removeNode(2)
|
|
r.removeNode(2)
|
|
|
if r.pendingConf != false {
|
|
if r.pendingConf != false {
|
|
@@ -1481,7 +1481,7 @@ func TestPromotable(t *testing.T) {
|
|
|
{[]uint64{2, 3}, false},
|
|
{[]uint64{2, 3}, false},
|
|
|
}
|
|
}
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- r := newRaft(id, tt.peers, 5, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(id, tt.peers, 5, 1, NewMemoryStorage(), 0)
|
|
|
if g := r.promotable(); g != tt.wp {
|
|
if g := r.promotable(); g != tt.wp {
|
|
|
t.Errorf("#%d: promotable = %v, want %v", i, g, tt.wp)
|
|
t.Errorf("#%d: promotable = %v, want %v", i, g, tt.wp)
|
|
|
}
|
|
}
|
|
@@ -1503,7 +1503,7 @@ func TestRaftNodes(t *testing.T) {
|
|
|
},
|
|
},
|
|
|
}
|
|
}
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- r := newRaft(1, tt.ids, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
|
+ r := newRaft(1, tt.ids, 10, 1, NewMemoryStorage(), 0)
|
|
|
if !reflect.DeepEqual(r.nodes(), tt.wids) {
|
|
if !reflect.DeepEqual(r.nodes(), tt.wids) {
|
|
|
t.Errorf("#%d: nodes = %+v, want %+v", i, r.nodes(), tt.wids)
|
|
t.Errorf("#%d: nodes = %+v, want %+v", i, r.nodes(), tt.wids)
|
|
|
}
|
|
}
|
|
@@ -1515,7 +1515,7 @@ func ents(terms ...uint64) *raft {
|
|
|
for i, term := range terms {
|
|
for i, term := range terms {
|
|
|
storage.Append([]pb.Entry{{Index: uint64(i + 1), Term: term}})
|
|
storage.Append([]pb.Entry{{Index: uint64(i + 1), Term: term}})
|
|
|
}
|
|
}
|
|
|
- sm := newRaft(1, []uint64{}, 5, 1, storage)
|
|
|
|
|
|
|
+ sm := newRaft(1, []uint64{}, 5, 1, storage, 0)
|
|
|
sm.reset(0)
|
|
sm.reset(0)
|
|
|
return sm
|
|
return sm
|
|
|
}
|
|
}
|
|
@@ -1543,7 +1543,7 @@ func newNetwork(peers ...Interface) *network {
|
|
|
switch v := p.(type) {
|
|
switch v := p.(type) {
|
|
|
case nil:
|
|
case nil:
|
|
|
nstorage[id] = NewMemoryStorage()
|
|
nstorage[id] = NewMemoryStorage()
|
|
|
- sm := newRaft(id, peerAddrs, 10, 1, nstorage[id])
|
|
|
|
|
|
|
+ sm := newRaft(id, peerAddrs, 10, 1, nstorage[id], 0)
|
|
|
npeers[id] = sm
|
|
npeers[id] = sm
|
|
|
case *raft:
|
|
case *raft:
|
|
|
v.id = id
|
|
v.id = id
|