|
|
@@ -262,7 +262,7 @@ func TestProgressResume(t *testing.T) {
|
|
|
|
|
|
// TestProgressResumeByHeartbeat ensures raft.heartbeat reset progress.paused by heartbeat.
|
|
|
func TestProgressResumeByHeartbeat(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage())
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
r.prs[2].Paused = true
|
|
|
@@ -274,7 +274,7 @@ func TestProgressResumeByHeartbeat(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestProgressPaused(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 5, 1, NewMemoryStorage())
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
r.Step(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Data: []byte("somedata")}}})
|
|
|
@@ -466,9 +466,9 @@ func TestCommitWithoutNewTermEntry(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestDuelingCandidates(t *testing.T) {
|
|
|
- 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)
|
|
|
+ a := newTestRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
+ b := newTestRaft(2, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
+ c := newTestRaft(3, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
|
|
|
nt := newNetwork(a, b, c)
|
|
|
nt.cut(1, 3)
|
|
|
@@ -736,7 +736,7 @@ func TestCommit(t *testing.T) {
|
|
|
storage.Append(tt.logs)
|
|
|
storage.hardState = pb.HardState{Term: tt.smTerm}
|
|
|
|
|
|
- sm := newRaft(1, []uint64{1}, 5, 1, storage, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1}, 5, 1, storage)
|
|
|
for j := 0; j < len(tt.matches); j++ {
|
|
|
sm.setProgress(uint64(j)+1, tt.matches[j], tt.matches[j]+1)
|
|
|
}
|
|
|
@@ -761,7 +761,7 @@ func TestIsElectionTimeout(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
sm.elapsed = tt.elapse
|
|
|
c := 0
|
|
|
for j := 0; j < 10000; j++ {
|
|
|
@@ -786,7 +786,7 @@ func TestStepIgnoreOldTermMsg(t *testing.T) {
|
|
|
fakeStep := func(r *raft, m pb.Message) {
|
|
|
called = true
|
|
|
}
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
sm.step = fakeStep
|
|
|
sm.Term = 2
|
|
|
sm.Step(pb.Message{Type: pb.MsgApp, Term: sm.Term - 1})
|
|
|
@@ -828,7 +828,7 @@ func TestHandleMsgApp(t *testing.T) {
|
|
|
for i, tt := range tests {
|
|
|
storage := NewMemoryStorage()
|
|
|
storage.Append([]pb.Entry{{Index: 1, Term: 1}, {Index: 2, Term: 2}})
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, storage, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1}, 10, 1, storage)
|
|
|
sm.becomeFollower(2, None)
|
|
|
|
|
|
sm.handleAppendEntries(tt.m)
|
|
|
@@ -862,7 +862,7 @@ func TestHandleHeartbeat(t *testing.T) {
|
|
|
for i, tt := range tests {
|
|
|
storage := NewMemoryStorage()
|
|
|
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, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2}, 5, 1, storage)
|
|
|
sm.becomeFollower(2, 2)
|
|
|
sm.raftLog.commitTo(commit)
|
|
|
sm.handleHeartbeat(tt.m)
|
|
|
@@ -883,7 +883,7 @@ func TestHandleHeartbeat(t *testing.T) {
|
|
|
func TestHandleHeartbeatResp(t *testing.T) {
|
|
|
storage := NewMemoryStorage()
|
|
|
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, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2}, 5, 1, storage)
|
|
|
sm.becomeCandidate()
|
|
|
sm.becomeLeader()
|
|
|
sm.raftLog.commitTo(sm.raftLog.lastIndex())
|
|
|
@@ -942,7 +942,7 @@ func TestHandleHeartbeatResp(t *testing.T) {
|
|
|
// TestMsgAppRespWaitReset verifies the waitReset behavior of a leader
|
|
|
// MsgAppResp.
|
|
|
func TestMsgAppRespWaitReset(t *testing.T) {
|
|
|
- sm := newRaft(1, []uint64{1, 2, 3}, 5, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2, 3}, 5, 1, NewMemoryStorage())
|
|
|
sm.becomeCandidate()
|
|
|
sm.becomeLeader()
|
|
|
|
|
|
@@ -1036,7 +1036,7 @@ func TestRecvMsgVote(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
sm.state = tt.state
|
|
|
switch tt.state {
|
|
|
case StateFollower:
|
|
|
@@ -1096,7 +1096,7 @@ func TestStateTransition(t *testing.T) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
sm.state = tt.from
|
|
|
|
|
|
switch tt.to {
|
|
|
@@ -1135,7 +1135,7 @@ func TestAllServerStepdown(t *testing.T) {
|
|
|
tterm := uint64(3)
|
|
|
|
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
switch tt.state {
|
|
|
case StateFollower:
|
|
|
sm.becomeFollower(1, None)
|
|
|
@@ -1194,7 +1194,7 @@ func TestLeaderAppResp(t *testing.T) {
|
|
|
for i, tt := range tests {
|
|
|
// sm term is 1 after it becomes the leader.
|
|
|
// thus the last log term must be 1 to be committed.
|
|
|
- sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
sm.raftLog = &raftLog{
|
|
|
storage: &MemoryStorage{ents: []pb.Entry{{}, {Index: 1, Term: 0}, {Index: 2, Term: 1}}},
|
|
|
unstable: unstable{offset: 3},
|
|
|
@@ -1242,7 +1242,7 @@ func TestBcastBeat(t *testing.T) {
|
|
|
}
|
|
|
storage := NewMemoryStorage()
|
|
|
storage.ApplySnapshot(s)
|
|
|
- sm := newRaft(1, nil, 10, 1, storage, 0)
|
|
|
+ sm := newTestRaft(1, nil, 10, 1, storage)
|
|
|
sm.Term = 1
|
|
|
|
|
|
sm.becomeCandidate()
|
|
|
@@ -1301,7 +1301,7 @@ func TestRecvMsgBeat(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2, 3}, 10, 1, NewMemoryStorage())
|
|
|
sm.raftLog = &raftLog{storage: &MemoryStorage{ents: []pb.Entry{{}, {Index: 1, Term: 0}, {Index: 2, Term: 1}}}}
|
|
|
sm.Term = 1
|
|
|
sm.state = tt.state
|
|
|
@@ -1344,7 +1344,7 @@ func TestLeaderIncreaseNext(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
for i, tt := range tests {
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
sm.raftLog.append(previousEnts...)
|
|
|
sm.becomeCandidate()
|
|
|
sm.becomeLeader()
|
|
|
@@ -1360,7 +1360,7 @@ func TestLeaderIncreaseNext(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestSendAppendForProgressProbe(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
r.readMessages()
|
|
|
@@ -1406,7 +1406,7 @@ func TestSendAppendForProgressProbe(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestSendAppendForProgressReplicate(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
r.readMessages()
|
|
|
@@ -1423,7 +1423,7 @@ func TestSendAppendForProgressReplicate(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
func TestSendAppendForProgressSnapshot(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
r.readMessages()
|
|
|
@@ -1443,7 +1443,7 @@ func TestRecvMsgUnreachable(t *testing.T) {
|
|
|
previousEnts := []pb.Entry{{Term: 1, Index: 1}, {Term: 1, Index: 2}, {Term: 1, Index: 3}}
|
|
|
s := NewMemoryStorage()
|
|
|
s.Append(previousEnts)
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, s, 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, s)
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
r.readMessages()
|
|
|
@@ -1472,7 +1472,7 @@ func TestRestore(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
storage := NewMemoryStorage()
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 10, 1, storage, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2}, 10, 1, storage)
|
|
|
if ok := sm.restore(s); !ok {
|
|
|
t.Fatal("restore fail, want succeed")
|
|
|
}
|
|
|
@@ -1497,7 +1497,7 @@ func TestRestoreIgnoreSnapshot(t *testing.T) {
|
|
|
previousEnts := []pb.Entry{{Term: 1, Index: 1}, {Term: 1, Index: 2}, {Term: 1, Index: 3}}
|
|
|
commit := uint64(1)
|
|
|
storage := NewMemoryStorage()
|
|
|
- sm := newRaft(1, []uint64{1, 2}, 10, 1, storage, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1, 2}, 10, 1, storage)
|
|
|
sm.raftLog.append(previousEnts...)
|
|
|
sm.raftLog.commitTo(commit)
|
|
|
|
|
|
@@ -1538,7 +1538,7 @@ func TestProvideSnap(t *testing.T) {
|
|
|
},
|
|
|
}
|
|
|
storage := NewMemoryStorage()
|
|
|
- sm := newRaft(1, []uint64{1}, 10, 1, storage, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{1}, 10, 1, storage)
|
|
|
sm.restore(s)
|
|
|
|
|
|
sm.becomeCandidate()
|
|
|
@@ -1569,7 +1569,7 @@ func TestRestoreFromSnapMsg(t *testing.T) {
|
|
|
}
|
|
|
m := pb.Message{Type: pb.MsgSnap, From: 1, Term: 2, Snapshot: s}
|
|
|
|
|
|
- sm := newRaft(2, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ sm := newTestRaft(2, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
sm.Step(m)
|
|
|
|
|
|
// TODO(bdarnell): what should this test?
|
|
|
@@ -1604,7 +1604,7 @@ func TestSlowNodeRestore(t *testing.T) {
|
|
|
// it appends the entry to log and sets pendingConf to be true.
|
|
|
func TestStepConfig(t *testing.T) {
|
|
|
// a raft that cannot make progress
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
index := r.raftLog.lastIndex()
|
|
|
@@ -1622,7 +1622,7 @@ func TestStepConfig(t *testing.T) {
|
|
|
// the proposal to noop and keep its original state.
|
|
|
func TestStepIgnoreConfig(t *testing.T) {
|
|
|
// a raft that cannot make progress
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
r.Step(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{Type: pb.EntryConfChange}}})
|
|
|
@@ -1649,7 +1649,7 @@ func TestRecoverPendingConfig(t *testing.T) {
|
|
|
{pb.EntryConfChange, true},
|
|
|
}
|
|
|
for i, tt := range tests {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.appendEntry(pb.Entry{Type: tt.entType})
|
|
|
r.becomeCandidate()
|
|
|
r.becomeLeader()
|
|
|
@@ -1668,7 +1668,7 @@ func TestRecoverDoublePendingConfig(t *testing.T) {
|
|
|
t.Errorf("expect panic, but nothing happens")
|
|
|
}
|
|
|
}()
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.appendEntry(pb.Entry{Type: pb.EntryConfChange})
|
|
|
r.appendEntry(pb.Entry{Type: pb.EntryConfChange})
|
|
|
r.becomeCandidate()
|
|
|
@@ -1678,7 +1678,7 @@ func TestRecoverDoublePendingConfig(t *testing.T) {
|
|
|
|
|
|
// TestAddNode tests that addNode could update pendingConf and nodes correctly.
|
|
|
func TestAddNode(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
r.pendingConf = true
|
|
|
r.addNode(2)
|
|
|
if r.pendingConf != false {
|
|
|
@@ -1694,7 +1694,7 @@ func TestAddNode(t *testing.T) {
|
|
|
// TestRemoveNode tests that removeNode could update pendingConf, nodes and
|
|
|
// and removed list correctly.
|
|
|
func TestRemoveNode(t *testing.T) {
|
|
|
- r := newRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
r.pendingConf = true
|
|
|
r.removeNode(2)
|
|
|
if r.pendingConf != false {
|
|
|
@@ -1718,7 +1718,7 @@ func TestPromotable(t *testing.T) {
|
|
|
{[]uint64{2, 3}, false},
|
|
|
}
|
|
|
for i, tt := range tests {
|
|
|
- r := newRaft(id, tt.peers, 5, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(id, tt.peers, 5, 1, NewMemoryStorage())
|
|
|
if g := r.promotable(); g != tt.wp {
|
|
|
t.Errorf("#%d: promotable = %v, want %v", i, g, tt.wp)
|
|
|
}
|
|
|
@@ -1740,7 +1740,7 @@ func TestRaftNodes(t *testing.T) {
|
|
|
},
|
|
|
}
|
|
|
for i, tt := range tests {
|
|
|
- r := newRaft(1, tt.ids, 10, 1, NewMemoryStorage(), 0)
|
|
|
+ r := newTestRaft(1, tt.ids, 10, 1, NewMemoryStorage())
|
|
|
if !reflect.DeepEqual(r.nodes(), tt.wids) {
|
|
|
t.Errorf("#%d: nodes = %+v, want %+v", i, r.nodes(), tt.wids)
|
|
|
}
|
|
|
@@ -1752,7 +1752,7 @@ func ents(terms ...uint64) *raft {
|
|
|
for i, term := range terms {
|
|
|
storage.Append([]pb.Entry{{Index: uint64(i + 1), Term: term}})
|
|
|
}
|
|
|
- sm := newRaft(1, []uint64{}, 5, 1, storage, 0)
|
|
|
+ sm := newTestRaft(1, []uint64{}, 5, 1, storage)
|
|
|
sm.reset(0)
|
|
|
return sm
|
|
|
}
|
|
|
@@ -1780,7 +1780,7 @@ func newNetwork(peers ...Interface) *network {
|
|
|
switch v := p.(type) {
|
|
|
case nil:
|
|
|
nstorage[id] = NewMemoryStorage()
|
|
|
- sm := newRaft(id, peerAddrs, 10, 1, nstorage[id], 0)
|
|
|
+ sm := newTestRaft(id, peerAddrs, 10, 1, nstorage[id])
|
|
|
npeers[id] = sm
|
|
|
case *raft:
|
|
|
v.id = id
|
|
|
@@ -1880,3 +1880,17 @@ func idsBySize(size int) []uint64 {
|
|
|
}
|
|
|
return ids
|
|
|
}
|
|
|
+
|
|
|
+func newTestRaft(id uint64, peers []uint64, election, heartbeat int, storage Storage) *raft {
|
|
|
+ c := &Config{
|
|
|
+ ID: id,
|
|
|
+ Peers: peers,
|
|
|
+ ElectionTick: election,
|
|
|
+ HeartbeatTick: heartbeat,
|
|
|
+ Storage: storage,
|
|
|
+ MaxSizePerMsg: noLimit,
|
|
|
+ MaxInflightMsgs: 256,
|
|
|
+ }
|
|
|
+
|
|
|
+ return newRaft(c)
|
|
|
+}
|