diff --git a/etcdserver/server.go b/etcdserver/server.go index fa176d65d..a16fe1fef 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -951,11 +951,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.