44 lines
1.4 KiB
Markdown
44 lines
1.4 KiB
Markdown
# Pruning Manager
|
|
|
|
The `pruning` package defines the `PruningManager` struct which is responsible for
|
|
pruning the state commitment (SC) based on the current height of the chain. The `PruningOption` struct defines the configuration for pruning and is passed to the `PruningManager` during initialization.
|
|
|
|
## Prune Options
|
|
|
|
The `PruningOption` struct includes the following fields:
|
|
|
|
* `KeepRecent` (uint64): The number of recent heights to keep in the state.
|
|
* `Interval` (uint64): The interval of how often to prune the state. 0 means no pruning.
|
|
|
|
## Pausable Pruner
|
|
|
|
The `PausablePruner` interface defines the `PausePruning` method, which is used to pause
|
|
the pruning process. The `PruningManager` will check if the pruner is a `PausablePruner`
|
|
and call the `PausePruning` method before and after `Commit` to pause and resume pruning.
|
|
This is useful for when the pruning process is asynchronous and needs to be paused during
|
|
a commit to prevent parallel writes.
|
|
|
|
## Pruning Flow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
autonumber
|
|
|
|
participant A as RootStore
|
|
participant B as PruningManager
|
|
participant C as CommitmentStore
|
|
|
|
loop Commit
|
|
A->>B: SignalCommit(true, height)
|
|
alt SC is PausablePruner
|
|
B->>C: PausePruning(true)
|
|
end
|
|
A->>C: Commit Changeset
|
|
A->>B: SignalCommit(false, height)
|
|
alt SC is PausablePruner
|
|
B->>C: PausePruning(false)
|
|
end
|
|
B->>C: Prune(height)
|
|
end
|
|
```
|