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
}