func()

in store/engine/raft/node.go [307:332]


func (n *Node) triggerSnapshotIfNeed() error {
	if n.appliedIndex-n.snapshotIndex <= n.snapshotThreshold.Load() {
		return nil
	}
	snapshotBytes, err := n.dataStore.GetDataStoreSnapshot()
	if err != nil {
		return err
	}
	snap, err := n.dataStore.raftStorage.CreateSnapshot(n.appliedIndex, &n.confState, snapshotBytes)
	if err != nil {
		return err
	}
	if err := n.dataStore.saveSnapshot(snap); err != nil {
		return err
	}

	compactIndex := uint64(1)
	if n.appliedIndex > n.compactThreshold.Load() {
		compactIndex = n.appliedIndex - n.compactThreshold.Load()
	}
	if err := n.dataStore.raftStorage.Compact(compactIndex); err != nil && !errors.Is(err, raft.ErrCompacted) {
		return err
	}
	n.snapshotIndex = n.appliedIndex
	return nil
}