reth_storage_api/prune_checkpoint.rs
1use alloc::vec::Vec;
2use reth_prune_types::{PruneCheckpoint, PruneSegment};
3use reth_storage_errors::provider::ProviderResult;
4
5/// The trait for fetching prune checkpoint related data.
6#[auto_impl::auto_impl(&, Arc)]
7pub trait PruneCheckpointReader: Send {
8 /// Fetch the prune checkpoint for the given segment.
9 fn get_prune_checkpoint(
10 &self,
11 segment: PruneSegment,
12 ) -> ProviderResult<Option<PruneCheckpoint>>;
13
14 /// Fetch all the prune checkpoints.
15 fn get_prune_checkpoints(&self) -> ProviderResult<Vec<(PruneSegment, PruneCheckpoint)>>;
16
17 /// Fetch checkpoints for reporting data availability, accounting for data still retained in
18 /// other storage backends. This does not modify the stored checkpoints.
19 ///
20 /// The default returns the stored checkpoints. Implementations may lower their block and
21 /// transaction numbers when continuous coverage can be verified, preserving the prune mode.
22 /// Use [`Self::get_prune_checkpoints`] for pruning progress instead.
23 fn get_prune_checkpoints_for_availability(
24 &self,
25 ) -> ProviderResult<Vec<(PruneSegment, PruneCheckpoint)>> {
26 self.get_prune_checkpoints()
27 }
28}
29
30/// The trait for updating prune checkpoint related data.
31#[auto_impl::auto_impl(&, Arc)]
32pub trait PruneCheckpointWriter {
33 /// Save prune checkpoint.
34 fn save_prune_checkpoint(
35 &self,
36 segment: PruneSegment,
37 checkpoint: PruneCheckpoint,
38 ) -> ProviderResult<()>;
39}