pub struct S3Store { /* private fields */ }Expand description
A content-addressable store backed by an S3 (or S3-compatible) bucket.
Construct one with S3Store::connect (resolves the standard AWS
credential chain) or S3Store::from_client (an already-built SDK client,
e.g. for tests against an emulator).
Implementations§
Source§impl S3Store
impl S3Store
Sourcepub fn connect(
store_url: &str,
endpoint_url: Option<&str>,
) -> Result<Self, StoreError>
pub fn connect( store_url: &str, endpoint_url: Option<&str>, ) -> Result<Self, StoreError>
Connects to the s3://bucket/prefix store, resolving credentials and
region via the standard AWS chain (aws_config::load_defaults).
The HTTP client is pinned to the ring rustls provider (see the module
docs). An optional endpoint_url selects an S3-compatible backend
(path-style addressing is enabled when an endpoint is given, as
emulators rarely support virtual-host addressing).
§Errors
StoreError::Backend if the tokio runtime cannot be created or the
AWS configuration cannot be loaded.
Sourcepub fn connect_with(
store_url: &str,
endpoint_url: Option<&str>,
config: TransferConfig,
) -> Result<Self, StoreError>
pub fn connect_with( store_url: &str, endpoint_url: Option<&str>, config: TransferConfig, ) -> Result<Self, StoreError>
Like connect, but carries a TransferConfig for
concurrency / bandwidth control. The existing connect
delegates here with TransferConfig::default.
§Errors
StoreError::Backend if the tokio runtime cannot be created or the
AWS configuration cannot be loaded.
Sourcepub fn from_client(
client: Client,
location: S3Location,
) -> Result<Self, StoreError>
pub fn from_client( client: Client, location: S3Location, ) -> Result<Self, StoreError>
Builds a store from an already-configured SDK Client and a parsed
location, owning a fresh tokio runtime for the sync bridge. Intended for
tests (e.g. wiring a client at an emulator endpoint).
§Errors
StoreError::Backend if the tokio runtime cannot be created.
Sourcepub fn with_meter(self, meter: Option<Arc<Meter>>) -> Self
pub fn with_meter(self, meter: Option<Arc<Meter>>) -> Self
Sourcepub fn location(&self) -> &S3Location
pub fn location(&self) -> &S3Location
The parsed bucket/prefix this store targets.
Sourcepub fn transfer_config(&self) -> &TransferConfig
pub fn transfer_config(&self) -> &TransferConfig
The TransferConfig (concurrency / bandwidth) this store was built
with. Consumed by the transfer loops in later gates.
Trait Implementations§
Source§impl Store for S3Store
impl Store for S3Store
Source§fn get_manifest(&self, id: &str) -> Result<Manifest, StoreError>
fn get_manifest(&self, id: &str) -> Result<Manifest, StoreError>
id’s sharded path,
verifying that its bytes hash back to id before returning it. Read moreSource§fn fetch_files(
&self,
manifest: &Manifest,
dest: &Path,
) -> Result<(), StoreError>
fn fetch_files( &self, manifest: &Manifest, dest: &Path, ) -> Result<(), StoreError>
manifest under dest, pulling each
referenced object from the store and reconstructing the directory tree
(files, directories, permissions) rooted at dest. Read moreSource§impl StreamStore for S3Store
impl StreamStore for S3Store
Source§fn has_object(&self, checksum: &str) -> Result<bool, StoreError>
fn has_object(&self, checksum: &str) -> Result<bool, StoreError>
true if an object with this content-address already exists in
the store. Read moreSource§fn get_object(&self, checksum: &str) -> Result<Vec<u8>, StoreError>
fn get_object(&self, checksum: &str) -> Result<Vec<u8>, StoreError>
checksum, verifying its bytes
hash (BLAKE3) back to checksum before returning them. Read moreSource§fn put_object(&self, checksum: &str, bytes: Vec<u8>) -> Result<(), StoreError>
fn put_object(&self, checksum: &str, bytes: Vec<u8>) -> Result<(), StoreError>
bytes hash
(BLAKE3) to checksum before storing anything. Read moreSource§fn put_manifest(&self, id: &str, manifest: &Manifest) -> Result<(), StoreError>
fn put_manifest(&self, id: &str, manifest: &Manifest) -> Result<(), StoreError>
id, verifying the manifest’s bytes hash
back to id before storing it. Read moreSource§fn objects_needed(
&self,
checksums: &[String],
) -> Result<Vec<String>, StoreError>
fn objects_needed( &self, checksums: &[String], ) -> Result<Vec<String>, StoreError>
checksums NOT present in the store, PRESERVING
INPUT ORDER. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for S3Store
impl !UnwindSafe for S3Store
impl Freeze for S3Store
impl Send for S3Store
impl Sync for S3Store
impl Unpin for S3Store
impl UnsafeUnpin for S3Store
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request