Skip to main content

S3SnapshotStore

Struct S3SnapshotStore 

Source
pub struct S3SnapshotStore { /* private fields */ }
Expand description

Bytes live in an opendal-managed S3 bucket under {prefix}/group-{gid}/.

Implementations§

Source§

impl S3SnapshotStore

Source

pub fn new(operator: Operator, prefix: impl Into<String>) -> Self

Source

pub fn with_references(self, references: SnapshotReferenceConfig) -> Self

Source

pub fn memory_for_tests( prefix: impl Into<String>, ) -> Result<Self, SnapshotStoreError>

In-memory opendal operator under prefix, for tests.

Source

pub fn try_new( config: &ColdConfig, prefix: impl Into<String>, ) -> Result<Self, SnapshotStoreError>

Build an S3 snapshot store from a [ColdConfig]. Snapshot blobs share the cold bucket/credentials and use prefix (defaults to snapshots) for separation.

Trait Implementations§

Source§

impl Debug for S3SnapshotStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl SnapshotStore for S3SnapshotStore

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 upload_iter<'a>( &'a self, key: SnapshotKey, chunks: SnapshotBytesIterator, ) -> SnapshotStoreFuture<'a, SnapshotLocation>

Persist snapshot bytes from an incremental producer.
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.
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 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.
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.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more