mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #6384 from hhkbp2/add-test-case-for-leader-transfer-from-follower
raft: add test case for leader transfer from follower
This commit is contained in:
commit
e9f841627c
@ -2196,7 +2196,7 @@ func TestCommitAfterRemoveNode(t *testing.T) {
|
||||
}
|
||||
|
||||
// TestLeaderTransferToUpToDateNode verifies transferring should succeed
|
||||
// if the transferee has the most up-to-date log entires when transfer starts.
|
||||
// if the transferee has the most up-to-date log entries when transfer starts.
|
||||
func TestLeaderTransferToUpToDateNode(t *testing.T) {
|
||||
nt := newNetwork(nil, nil, nil)
|
||||
nt.send(pb.Message{From: 1, To: 1, Type: pb.MsgHup})
|
||||
@ -2220,6 +2220,34 @@ func TestLeaderTransferToUpToDateNode(t *testing.T) {
|
||||
checkLeaderTransferState(t, lead, StateLeader, 1)
|
||||
}
|
||||
|
||||
// TestLeaderTransferToUpToDateNodeFromFollower verifies transferring should succeed
|
||||
// if the transferee has the most up-to-date log entries when transfer starts.
|
||||
// Not like TestLeaderTransferToUpToDateNode, where the leader transfer message
|
||||
// is sent to the leader, in this test case every leader transfer message is sent
|
||||
// to the follower.
|
||||
func TestLeaderTransferToUpToDateNodeFromFollower(t *testing.T) {
|
||||
nt := newNetwork(nil, nil, nil)
|
||||
nt.send(pb.Message{From: 1, To: 1, Type: pb.MsgHup})
|
||||
|
||||
lead := nt.peers[1].(*raft)
|
||||
|
||||
if lead.lead != 1 {
|
||||
t.Fatalf("after election leader is %x, want 1", lead.lead)
|
||||
}
|
||||
|
||||
// Transfer leadership to 2.
|
||||
nt.send(pb.Message{From: 2, To: 2, Type: pb.MsgTransferLeader})
|
||||
|
||||
checkLeaderTransferState(t, lead, StateFollower, 2)
|
||||
|
||||
// After some log replication, transfer leadership back to 1.
|
||||
nt.send(pb.Message{From: 1, To: 1, Type: pb.MsgProp, Entries: []pb.Entry{{}}})
|
||||
|
||||
nt.send(pb.Message{From: 1, To: 1, Type: pb.MsgTransferLeader})
|
||||
|
||||
checkLeaderTransferState(t, lead, StateLeader, 1)
|
||||
}
|
||||
|
||||
// TestLeaderTransferWithCheckQuorum ensures transferring leader still works
|
||||
// even the current leader is still under its leader lease
|
||||
func TestLeaderTransferWithCheckQuorum(t *testing.T) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user