Beispiel #1
0
func snapshot(fsm raft.FSM, fss raft.SnapshotStore, numLogs uint64) error {
	snapshot, err := fsm.Snapshot()
	if err != nil {
		return fmt.Errorf("Unexpected error in fsm.Snapshot(): %v", err)
	}

	robustsnap, ok := snapshot.(*robustSnapshot)
	if !ok {
		return fmt.Errorf("fsm.Snapshot() return value is not a robustSnapshot")
	}
	if robustsnap.lastIndex != numLogs {
		return fmt.Errorf("snapshot does not retain the last message, got: %d, want: %d", robustsnap.lastIndex, numLogs)
	}

	sink, err := fss.Create(numLogs, 1, []byte{})
	if err != nil {
		return fmt.Errorf("fss.Create: %v", err)
	}

	if err := snapshot.Persist(sink); err != nil {
		return fmt.Errorf("Unexpected error in snapshot.Persist(): %v", err)
	}
	sink.Close()
	return nil
}