|
@@ -356,8 +356,8 @@ func TestLearnerPromotion(t *testing.T) {
|
|
|
|
|
|
|
|
nt.send(pb.Message{From: 1, To: 1, Type: pb.MsgBeat})
|
|
nt.send(pb.Message{From: 1, To: 1, Type: pb.MsgBeat})
|
|
|
|
|
|
|
|
- n1.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode})
|
|
|
|
|
- n2.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode})
|
|
|
|
|
|
|
+ n1.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode}.AsV2())
|
|
|
|
|
+ n2.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode}.AsV2())
|
|
|
if n2.isLearner {
|
|
if n2.isLearner {
|
|
|
t.Error("peer 2 is learner, want not")
|
|
t.Error("peer 2 is learner, want not")
|
|
|
}
|
|
}
|
|
@@ -1143,7 +1143,7 @@ func TestCommit(t *testing.T) {
|
|
|
for j := 0; j < len(tt.matches); j++ {
|
|
for j := 0; j < len(tt.matches); j++ {
|
|
|
id := uint64(j) + 1
|
|
id := uint64(j) + 1
|
|
|
if id > 1 {
|
|
if id > 1 {
|
|
|
- sm.applyConfChange(pb.ConfChange{Type: pb.ConfChangeAddNode, NodeID: id})
|
|
|
|
|
|
|
+ sm.applyConfChange(pb.ConfChange{Type: pb.ConfChangeAddNode, NodeID: id}.AsV2())
|
|
|
}
|
|
}
|
|
|
pr := sm.prs.Progress[id]
|
|
pr := sm.prs.Progress[id]
|
|
|
pr.Match, pr.Next = tt.matches[j], tt.matches[j]+1
|
|
pr.Match, pr.Next = tt.matches[j], tt.matches[j]+1
|
|
@@ -1931,7 +1931,7 @@ func TestNonPromotableVoterWithCheckQuorum(t *testing.T) {
|
|
|
nt := newNetwork(a, b)
|
|
nt := newNetwork(a, b)
|
|
|
setRandomizedElectionTimeout(b, b.electionTimeout+1)
|
|
setRandomizedElectionTimeout(b, b.electionTimeout+1)
|
|
|
// Need to remove 2 again to make it a non-promotable node since newNetwork overwritten some internal states
|
|
// Need to remove 2 again to make it a non-promotable node since newNetwork overwritten some internal states
|
|
|
- b.applyConfChange(pb.ConfChange{Type: pb.ConfChangeRemoveNode, NodeID: 2})
|
|
|
|
|
|
|
+ b.applyConfChange(pb.ConfChange{Type: pb.ConfChangeRemoveNode, NodeID: 2}.AsV2())
|
|
|
|
|
|
|
|
if b.promotable() {
|
|
if b.promotable() {
|
|
|
t.Fatalf("promotable = %v, want false", b.promotable())
|
|
t.Fatalf("promotable = %v, want false", b.promotable())
|
|
@@ -3086,7 +3086,7 @@ func TestNewLeaderPendingConfig(t *testing.T) {
|
|
|
// TestAddNode tests that addNode could update nodes correctly.
|
|
// TestAddNode tests that addNode could update nodes correctly.
|
|
|
func TestAddNode(t *testing.T) {
|
|
func TestAddNode(t *testing.T) {
|
|
|
r := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
r := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode}.AsV2())
|
|
|
nodes := r.prs.VoterNodes()
|
|
nodes := r.prs.VoterNodes()
|
|
|
wnodes := []uint64{1, 2}
|
|
wnodes := []uint64{1, 2}
|
|
|
if !reflect.DeepEqual(nodes, wnodes) {
|
|
if !reflect.DeepEqual(nodes, wnodes) {
|
|
@@ -3098,7 +3098,7 @@ func TestAddNode(t *testing.T) {
|
|
|
func TestAddLearner(t *testing.T) {
|
|
func TestAddLearner(t *testing.T) {
|
|
|
r := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
r := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
// Add new learner peer.
|
|
// Add new learner peer.
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddLearnerNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddLearnerNode}.AsV2())
|
|
|
if r.isLearner {
|
|
if r.isLearner {
|
|
|
t.Fatal("expected 1 to be voter")
|
|
t.Fatal("expected 1 to be voter")
|
|
|
}
|
|
}
|
|
@@ -3112,13 +3112,13 @@ func TestAddLearner(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Promote peer to voter.
|
|
// Promote peer to voter.
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode}.AsV2())
|
|
|
if r.prs.Progress[2].IsLearner {
|
|
if r.prs.Progress[2].IsLearner {
|
|
|
t.Fatal("expected 2 to be voter")
|
|
t.Fatal("expected 2 to be voter")
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Demote r.
|
|
// Demote r.
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeAddLearnerNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeAddLearnerNode}.AsV2())
|
|
|
if !r.prs.Progress[1].IsLearner {
|
|
if !r.prs.Progress[1].IsLearner {
|
|
|
t.Fatal("expected 1 to be learner")
|
|
t.Fatal("expected 1 to be learner")
|
|
|
}
|
|
}
|
|
@@ -3127,7 +3127,7 @@ func TestAddLearner(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Promote r again.
|
|
// Promote r again.
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeAddNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeAddNode}.AsV2())
|
|
|
if r.prs.Progress[1].IsLearner {
|
|
if r.prs.Progress[1].IsLearner {
|
|
|
t.Fatal("expected 1 to be voter")
|
|
t.Fatal("expected 1 to be voter")
|
|
|
}
|
|
}
|
|
@@ -3149,7 +3149,7 @@ func TestAddNodeCheckQuorum(t *testing.T) {
|
|
|
r.tick()
|
|
r.tick()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddNode}.AsV2())
|
|
|
|
|
|
|
|
// This tick will reach electionTimeout, which triggers a quorum check.
|
|
// This tick will reach electionTimeout, which triggers a quorum check.
|
|
|
r.tick()
|
|
r.tick()
|
|
@@ -3174,7 +3174,7 @@ func TestAddNodeCheckQuorum(t *testing.T) {
|
|
|
// and removed list correctly.
|
|
// and removed list correctly.
|
|
|
func TestRemoveNode(t *testing.T) {
|
|
func TestRemoveNode(t *testing.T) {
|
|
|
r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
r := newTestRaft(1, []uint64{1, 2}, 10, 1, NewMemoryStorage())
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeRemoveNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeRemoveNode}.AsV2())
|
|
|
w := []uint64{1}
|
|
w := []uint64{1}
|
|
|
if g := r.prs.VoterNodes(); !reflect.DeepEqual(g, w) {
|
|
if g := r.prs.VoterNodes(); !reflect.DeepEqual(g, w) {
|
|
|
t.Errorf("nodes = %v, want %v", g, w)
|
|
t.Errorf("nodes = %v, want %v", g, w)
|
|
@@ -3186,20 +3186,20 @@ func TestRemoveNode(t *testing.T) {
|
|
|
t.Error("did not panic")
|
|
t.Error("did not panic")
|
|
|
}
|
|
}
|
|
|
}()
|
|
}()
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeRemoveNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeRemoveNode}.AsV2())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// TestRemoveLearner tests that removeNode could update nodes and
|
|
// TestRemoveLearner tests that removeNode could update nodes and
|
|
|
// and removed list correctly.
|
|
// and removed list correctly.
|
|
|
func TestRemoveLearner(t *testing.T) {
|
|
func TestRemoveLearner(t *testing.T) {
|
|
|
r := newTestLearnerRaft(1, []uint64{1}, []uint64{2}, 10, 1, NewMemoryStorage())
|
|
r := newTestLearnerRaft(1, []uint64{1}, []uint64{2}, 10, 1, NewMemoryStorage())
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeRemoveNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeRemoveNode}.AsV2())
|
|
|
w := []uint64{1}
|
|
w := []uint64{1}
|
|
|
if g := r.prs.VoterNodes(); !reflect.DeepEqual(g, w) {
|
|
if g := r.prs.VoterNodes(); !reflect.DeepEqual(g, w) {
|
|
|
t.Errorf("nodes = %v, want %v", g, w)
|
|
t.Errorf("nodes = %v, want %v", g, w)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- w = []uint64{}
|
|
|
|
|
|
|
+ w = nil
|
|
|
if g := r.prs.LearnerNodes(); !reflect.DeepEqual(g, w) {
|
|
if g := r.prs.LearnerNodes(); !reflect.DeepEqual(g, w) {
|
|
|
t.Errorf("nodes = %v, want %v", g, w)
|
|
t.Errorf("nodes = %v, want %v", g, w)
|
|
|
}
|
|
}
|
|
@@ -3210,7 +3210,7 @@ func TestRemoveLearner(t *testing.T) {
|
|
|
t.Error("did not panic")
|
|
t.Error("did not panic")
|
|
|
}
|
|
}
|
|
|
}()
|
|
}()
|
|
|
- r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeRemoveNode})
|
|
|
|
|
|
|
+ r.applyConfChange(pb.ConfChange{NodeID: 1, Type: pb.ConfChangeRemoveNode}.AsV2())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestPromotable(t *testing.T) {
|
|
func TestPromotable(t *testing.T) {
|
|
@@ -3342,7 +3342,7 @@ func TestCommitAfterRemoveNode(t *testing.T) {
|
|
|
|
|
|
|
|
// Apply the config change. This reduces quorum requirements so the
|
|
// Apply the config change. This reduces quorum requirements so the
|
|
|
// pending command can now commit.
|
|
// pending command can now commit.
|
|
|
- r.applyConfChange(cc)
|
|
|
|
|
|
|
+ r.applyConfChange(cc.AsV2())
|
|
|
ents = nextEnts(r, s)
|
|
ents = nextEnts(r, s)
|
|
|
if len(ents) != 1 || ents[0].Type != pb.EntryNormal ||
|
|
if len(ents) != 1 || ents[0].Type != pb.EntryNormal ||
|
|
|
string(ents[0].Data) != "hello" {
|
|
string(ents[0].Data) != "hello" {
|
|
@@ -3591,7 +3591,7 @@ func TestLeaderTransferRemoveNode(t *testing.T) {
|
|
|
t.Fatalf("wait transferring, leadTransferee = %v, want %v", lead.leadTransferee, 3)
|
|
t.Fatalf("wait transferring, leadTransferee = %v, want %v", lead.leadTransferee, 3)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- lead.applyConfChange(pb.ConfChange{NodeID: 3, Type: pb.ConfChangeRemoveNode})
|
|
|
|
|
|
|
+ lead.applyConfChange(pb.ConfChange{NodeID: 3, Type: pb.ConfChangeRemoveNode}.AsV2())
|
|
|
|
|
|
|
|
checkLeaderTransferState(t, lead, StateLeader, 1)
|
|
checkLeaderTransferState(t, lead, StateLeader, 1)
|
|
|
}
|
|
}
|
|
@@ -3917,9 +3917,9 @@ func TestPreVoteWithCheckQuorum(t *testing.T) {
|
|
|
// a MsgHup or MsgTimeoutNow.
|
|
// a MsgHup or MsgTimeoutNow.
|
|
|
func TestLearnerCampaign(t *testing.T) {
|
|
func TestLearnerCampaign(t *testing.T) {
|
|
|
n1 := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
n1 := newTestRaft(1, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
- n1.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddLearnerNode})
|
|
|
|
|
|
|
+ n1.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddLearnerNode}.AsV2())
|
|
|
n2 := newTestRaft(2, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
n2 := newTestRaft(2, []uint64{1}, 10, 1, NewMemoryStorage())
|
|
|
- n2.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddLearnerNode})
|
|
|
|
|
|
|
+ n2.applyConfChange(pb.ConfChange{NodeID: 2, Type: pb.ConfChangeAddLearnerNode}.AsV2())
|
|
|
nt := newNetwork(n1, n2)
|
|
nt := newNetwork(n1, n2)
|
|
|
nt.send(pb.Message{From: 2, To: 2, Type: pb.MsgHup})
|
|
nt.send(pb.Message{From: 2, To: 2, Type: pb.MsgHup})
|
|
|
|
|
|