Beispiel #1
0
func restore(fsm raft.FSM, fss raft.SnapshotStore, numLogs uint64) error {
	snapshots, err := fss.List()
	if err != nil {
		return fmt.Errorf("fss.List(): %v", err)
	}
	// snapshots[0] is the most recent snapshot
	snapshotId := snapshots[0].ID
	_, readcloser, err := fss.Open(snapshotId)
	if err != nil {
		return fmt.Errorf("fss.Open(%s): %v", snapshotId, err)
	}

	if err := fsm.Restore(readcloser); err != nil {
		return fmt.Errorf("fsm.Restore(): %v", err)
	}

	first, _ := fsm.(*FSM).ircstore.FirstIndex()
	last, _ := fsm.(*FSM).ircstore.LastIndex()

	if last-first >= numLogs {
		return fmt.Errorf("Compaction did not decrease log size. got: %d, want: < %d", last-first, numLogs)
	}
	return nil
}