From de7692b2b2d76ed049adfdda6a19970c664c4354 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sat, 9 Apr 2016 23:30:00 -0700 Subject: [PATCH] etcdserver: do not send out out of date appResp --- etcdserver/server.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/etcdserver/server.go b/etcdserver/server.go index 0f6afcd25..9abdb1441 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -938,11 +938,20 @@ func (s *EtcdServer) publish(timeout time.Duration) { // TODO: move this function into raft.go func (s *EtcdServer) send(ms []raftpb.Message) { - for i := range ms { + sentAppResp := false + for i := len(ms) - 1; i >= 0; i-- { if s.cluster.IsIDRemoved(types.ID(ms[i].To)) { ms[i].To = 0 } + if ms[i].Type == raftpb.MsgAppResp { + if sentAppResp { + ms[i].To = 0 + } else { + sentAppResp = true + } + } + if ms[i].Type == raftpb.MsgSnap { // There are two separate data store: the store for v2, and the KV for v3. // The msgSnap only contains the most recent snapshot of store without KV.