From 7eae024eade9e4d523544026c9312b687dbfae94 Mon Sep 17 00:00:00 2001 From: Fullstop000 Date: Tue, 7 Apr 2020 11:27:46 +0800 Subject: [PATCH] raft: only redirect msg produced by own node (#11466) Signed-off-by: Fullstop000 --- raft/node_test.go | 3 ++- raft/raft.go | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/raft/node_test.go b/raft/node_test.go index 0a2c1cafc..6095b1c55 100644 --- a/raft/node_test.go +++ b/raft/node_test.go @@ -293,10 +293,11 @@ func TestNodeReadIndexToOldLeader(t *testing.T) { if len(r1.msgs) != 2 { t.Fatalf("len(r1.msgs) expected 1, got %d", len(r1.msgs)) } - readIndxMsg3 := raftpb.Message{From: 1, To: 3, Type: raftpb.MsgReadIndex, Entries: testEntries} + readIndxMsg3 := raftpb.Message{From: 2, To: 3, Type: raftpb.MsgReadIndex, Entries: testEntries} if !reflect.DeepEqual(r1.msgs[0], readIndxMsg3) { t.Fatalf("r1.msgs[0] expected %+v, got %+v", readIndxMsg3, r1.msgs[0]) } + readIndxMsg3 = raftpb.Message{From: 3, To: 3, Type: raftpb.MsgReadIndex, Entries: testEntries} if !reflect.DeepEqual(r1.msgs[1], readIndxMsg3) { t.Fatalf("r1.msgs[1] expected %+v, got %+v", readIndxMsg3, r1.msgs[1]) } diff --git a/raft/raft.go b/raft/raft.go index 185178c0a..e1fd749a8 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -399,7 +399,9 @@ func (r *raft) hardState() pb.HardState { // send persists state to stable storage and then sends to its mailbox. func (r *raft) send(m pb.Message) { - m.From = r.id + if m.From == None { + m.From = r.id + } if m.Type == pb.MsgVote || m.Type == pb.MsgVoteResp || m.Type == pb.MsgPreVote || m.Type == pb.MsgPreVoteResp { if m.Term == 0 { // All {pre-,}campaign messages need to have the term set when