Browse Source

Merge pull request #8088 from jbowens/snap-example

contrib/raftexample: save snapshot to WAL first
Gyu-Ho Lee 8 years ago
parent
commit
750dc7f157
1 changed files with 6 additions and 3 deletions
  1. 6 3
      contrib/raftexample/raft.go

+ 6 - 3
contrib/raftexample/raft.go

@@ -107,9 +107,9 @@ func newRaftNode(id int, peers []string, join bool, getSnapshot func() ([]byte,
 }
 }
 
 
 func (rc *raftNode) saveSnap(snap raftpb.Snapshot) error {
 func (rc *raftNode) saveSnap(snap raftpb.Snapshot) error {
-	if err := rc.snapshotter.SaveSnap(snap); err != nil {
-		return err
-	}
+	// must save the snapshot index to the WAL before saving the
+	// snapshot to maintain the invariant that we only Open the
+	// wal at previously-saved snapshot indexes.
 	walSnap := walpb.Snapshot{
 	walSnap := walpb.Snapshot{
 		Index: snap.Metadata.Index,
 		Index: snap.Metadata.Index,
 		Term:  snap.Metadata.Term,
 		Term:  snap.Metadata.Term,
@@ -117,6 +117,9 @@ func (rc *raftNode) saveSnap(snap raftpb.Snapshot) error {
 	if err := rc.wal.SaveSnapshot(walSnap); err != nil {
 	if err := rc.wal.SaveSnapshot(walSnap); err != nil {
 		return err
 		return err
 	}
 	}
+	if err := rc.snapshotter.SaveSnap(snap); err != nil {
+		return err
+	}
 	return rc.wal.ReleaseLockTo(snap.Metadata.Index)
 	return rc.wal.ReleaseLockTo(snap.Metadata.Index)
 }
 }