diff --git a/raft/multinode.go b/raft/multinode.go index e384cd546..27773a2ae 100644 --- a/raft/multinode.go +++ b/raft/multinode.go @@ -144,12 +144,15 @@ func (g *groupState) commitReady(rd Ready) { g.prevHardSt = rd.HardState } if g.prevHardSt.Commit != 0 { - // In most cases, prevHardSt and rd.HardState will be the same because - // when there are new entries to apply we just sent a HardState with - // an updated Commit value. However, on initial startup the two are different - // because we don't send a HardState until something changes, but we do send - // any un-applied but committed entries. Therefore we mark all committed - // entries as applied whether they were included in rd.HardState or not. + // In most cases, prevHardSt and rd.HardState will be the same + // because when there are new entries to apply we just sent a + // HardState with an updated Commit value. However, on initial + // startup the two are different because we don't send a HardState + // until something changes, but we do send any un-applied but + // committed entries (and previously-committed entries may be + // incorporated into the snapshot, even if rd.CommittedEntries is + // empty). Therefore we mark all committed entries as applied + // whether they were included in rd.HardState or not. g.raft.raftLog.appliedTo(g.prevHardSt.Commit) } if len(rd.Entries) > 0 {