pub trait SnapshotStore:
Send
+ Sync
+ Debug {
// Required methods
fn upload<'a>(
&'a self,
key: SnapshotKey,
bytes: Bytes,
) -> SnapshotStoreFuture<'a, SnapshotLocation>;
fn download<'a>(
&'a self,
location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, Vec<u8>>;
fn delete<'a>(
&'a self,
location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, ()>;
// Provided methods
fn upload_iter<'a>(
&'a self,
key: SnapshotKey,
chunks: SnapshotBytesIterator,
) -> SnapshotStoreFuture<'a, SnapshotLocation> { ... }
fn prune_retired<'a>(
&'a self,
_raft_group_id: u32,
_current: &'a SnapshotLocation,
_retain_latest: usize,
) -> SnapshotStoreFuture<'a, ()> { ... }
fn publish_reference<'a>(
&'a self,
_raft_group_id: u32,
_location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, ()> { ... }
fn health_check(&self) -> SnapshotStoreFuture<'_, ()> { ... }
fn verify_uploaded<'a>(
&'a self,
_location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, ()> { ... }
}Required Methods§
Sourcefn upload<'a>(
&'a self,
key: SnapshotKey,
bytes: Bytes,
) -> SnapshotStoreFuture<'a, SnapshotLocation>
fn upload<'a>( &'a self, key: SnapshotKey, bytes: Bytes, ) -> SnapshotStoreFuture<'a, SnapshotLocation>
Persist a snapshot blob and return its location. Stores own naming and
MAY ignore parts of key (Inline does).
Sourcefn download<'a>(
&'a self,
location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, Vec<u8>>
fn download<'a>( &'a self, location: &'a SnapshotLocation, ) -> SnapshotStoreFuture<'a, Vec<u8>>
Retrieve a snapshot blob given its location.
Sourcefn delete<'a>(
&'a self,
location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, ()>
fn delete<'a>( &'a self, location: &'a SnapshotLocation, ) -> SnapshotStoreFuture<'a, ()>
Best-effort delete; missing is not an error.
Provided Methods§
Sourcefn upload_iter<'a>(
&'a self,
key: SnapshotKey,
chunks: SnapshotBytesIterator,
) -> SnapshotStoreFuture<'a, SnapshotLocation>
fn upload_iter<'a>( &'a self, key: SnapshotKey, chunks: SnapshotBytesIterator, ) -> SnapshotStoreFuture<'a, SnapshotLocation>
Persist snapshot bytes from an incremental producer.
Sourcefn prune_retired<'a>(
&'a self,
_raft_group_id: u32,
_current: &'a SnapshotLocation,
_retain_latest: usize,
) -> SnapshotStoreFuture<'a, ()>
fn prune_retired<'a>( &'a self, _raft_group_id: u32, _current: &'a SnapshotLocation, _retain_latest: usize, ) -> SnapshotStoreFuture<'a, ()>
Best-effort prune of retired snapshots for one Raft group. Backends may only delete objects that cannot still be referenced by an OpenRaft snapshot pointer. Inline snapshots have no external lifecycle, so the default is a no-op.
Sourcefn publish_reference<'a>(
&'a self,
_raft_group_id: u32,
_location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, ()>
fn publish_reference<'a>( &'a self, _raft_group_id: u32, _location: &'a SnapshotLocation, ) -> SnapshotStoreFuture<'a, ()>
Publish this node’s current durable pointer. External stores use these references to prove that an object is unreachable before deleting it; callers persist local metadata first and rely on the GC grace period while publishing the corresponding external reference.
Sourcefn health_check(&self) -> SnapshotStoreFuture<'_, ()>
fn health_check(&self) -> SnapshotStoreFuture<'_, ()>
Lightweight liveness probe for the backend, used by the snapshot driver
to detect local S3 loss WITHOUT triggering a build_snapshot (whose
failure openraft treats as fatal). The default is “always healthy”:
in-memory and local-filesystem backends cannot be remotely unavailable.
The S3 backend overrides this with a cheap stat.
Sourcefn verify_uploaded<'a>(
&'a self,
_location: &'a SnapshotLocation,
) -> SnapshotStoreFuture<'a, ()>
fn verify_uploaded<'a>( &'a self, _location: &'a SnapshotLocation, ) -> SnapshotStoreFuture<'a, ()>
Verify that a freshly-uploaded snapshot is actually retrievable from
the backend. Called immediately after upload returns Ok, before the
new pointer is published. Catches silent partial-success modes
(multipart upload Init/Part Ok but Complete failed, opendal retry
returning Ok on cached state, etc.) that would otherwise leave
current_snapshot pointing at a 404. Default no-op for backends that
can’t lie about persistence (Inline keeps bytes in the pointer; Local
uses a single fs syscall whose Ok means present). The S3 backend
overrides this with a stat round-trip.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".