Skip to main content

SnapshotStore

Trait SnapshotStore 

Source
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§

Source

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).

Source

fn download<'a>( &'a self, location: &'a SnapshotLocation, ) -> SnapshotStoreFuture<'a, Vec<u8>>

Retrieve a snapshot blob given its location.

Source

fn delete<'a>( &'a self, location: &'a SnapshotLocation, ) -> SnapshotStoreFuture<'a, ()>

Best-effort delete; missing is not an error.

Provided Methods§

Source

fn upload_iter<'a>( &'a self, key: SnapshotKey, chunks: SnapshotBytesIterator, ) -> SnapshotStoreFuture<'a, SnapshotLocation>

Persist snapshot bytes from an incremental producer.

Source

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.

Source

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.

Source

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.

Source

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".

Implementors§