Skip to main content

ObjectStoreBackend

Struct ObjectStoreBackend 

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

Object storage backend with optional local caching.

Delegates storage operations to a cloud object store (S3, GCS, Azure) via the object_store crate. When a DiskCache is configured, reads are served from the local cache when available.

§Segment Path Mapping

SegmentPath { namespace: "default", shard_id: 3, name: "seg_001.csx" } maps to the object key ns_default/shard_3/seg_001.csx relative to the configured prefix.

Implementations§

Source§

impl ObjectStoreBackend

Source

pub async fn new(config: ObjectStoreConfig) -> Result<Self>

Create a new object store backend from configuration.

§Errors

Returns InvalidConfig if the URL scheme is not supported.

Source

pub fn from_store(store: Arc<dyn ObjectStore>, cache: Option<DiskCache>) -> Self

Create a backend from an existing ObjectStore instance.

Useful for testing with in-memory stores. Create a backend from an existing ObjectStore instance.

Uses the default multipart threshold (8 MiB).

Source

pub fn from_store_with_threshold( store: Arc<dyn ObjectStore>, cache: Option<DiskCache>, multipart_threshold_bytes: usize, ) -> Self

Create a backend from an existing ObjectStore with a custom multipart threshold.

Source

pub async fn segment_size(&self, path: &SegmentPath) -> Result<Option<usize>>

Return the size of a remote segment via a HEAD request.

This avoids re-downloading the entire segment just to verify its size after upload. Returns None if the object does not exist.

§Errors

Returns an error if the HEAD request fails (other than NotFound).

Source

pub async fn object_size(&self, key: &str) -> Result<Option<usize>>

Return the size of an arbitrary object via a HEAD request.

None means the object is not there. Used to verify an upload landed intact before the caller deletes the source.

§Errors

Returns an error if the HEAD request fails for any reason other than NotFound.

Source

pub async fn put(&self, key: &str, data: Bytes) -> Result<()>

Put an object into the store.

§Errors

Returns ObjStoreError::Store on object store failures.

Source

pub async fn get(&self, key: &str) -> Result<Bytes>

Get an object from the store.

§Errors

Returns ObjStoreError::NotFound if the object does not exist, or ObjStoreError::Store on other failures.

Source

pub async fn delete(&self, key: &str) -> Result<()>

Delete an object from the store.

§Errors

Returns ObjStoreError::Store on object store failures.

Source

pub async fn list(&self, prefix: &str) -> Result<Vec<String>>

List objects under a prefix.

§Errors

Returns ObjStoreError::Store on object store failures.

Trait Implementations§

Source§

impl Debug for ObjectStoreBackend

Source§

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

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

impl StorageBackend for ObjectStoreBackend

Source§

async fn put_segment(&self, path: &SegmentPath, data: &[u8]) -> Result<()>

Write a complete segment file to storage. Read more
Source§

async fn get_segment(&self, path: &SegmentPath) -> Result<Vec<u8>>

Read a complete segment file from storage.
Source§

async fn get_range( &self, path: &SegmentPath, offset: u64, length: usize, ) -> Result<Vec<u8>>

Read a byte range from a segment file. Read more
Source§

async fn delete_segment(&self, path: &SegmentPath) -> Result<()>

Delete a segment file from storage.
Source§

async fn list_segments( &self, namespace: &NamespaceId, shard_id: &ShardId, ) -> Result<Vec<SegmentPath>>

List all segment files in a namespace/shard.
Source§

async fn exists(&self, path: &SegmentPath) -> Result<bool>

Check whether a segment file exists.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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