mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
contrib/raftexample: Save snapshot and WAL before hard state
Update raftexample to save the snapshot file and WAL snapshot entry before hardstate to ensure the snapshot exists during recovery. Otherwise if there is a failure after storing the hard state there may be reference to a non-existent snapshot. This PR introduces the fix from #10219 to the raftexample.
This commit is contained in:
parent
dd08e15d7c
commit
3152dc8174
@ -449,9 +449,13 @@ func (rc *raftNode) serveChannels() {
|
||||
|
||||
// store raft entries to wal, then publish over commit channel
|
||||
case rd := <-rc.node.Ready():
|
||||
rc.wal.Save(rd.HardState, rd.Entries)
|
||||
// Must save the snapshot file and WAL snapshot entry before saving any other entries
|
||||
// or hardstate to ensure that recovery after a snapshot restore is possible.
|
||||
if !raft.IsEmptySnap(rd.Snapshot) {
|
||||
rc.saveSnap(rd.Snapshot)
|
||||
}
|
||||
rc.wal.Save(rd.HardState, rd.Entries)
|
||||
if !raft.IsEmptySnap(rd.Snapshot) {
|
||||
rc.raftStorage.ApplySnapshot(rd.Snapshot)
|
||||
rc.publishSnapshot(rd.Snapshot)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user