Skip to main content

SnapshotStore

Trait SnapshotStore 

Source
pub trait SnapshotStore:
    Send
    + Sync
    + Debug {
    // Required methods
    fn upload<'a>(
        &'a self,
        key: SnapshotKey,
        bytes: Vec<u8>,
    ) -> 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 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: Vec<u8>, ) -> 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 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§