pub struct InstrumentedObjectStore<S> { /* private fields */ }Expand description
Records one bounded-cardinality sample around each operation on an inner store.
Results and storage semantics pass through unchanged; streamed listings emit their sample when the stream is completed or dropped.
Implementations§
Source§impl<S> InstrumentedObjectStore<S>
impl<S> InstrumentedObjectStore<S>
Sourcepub fn new(inner: S, recorder: Arc<dyn ObjectStoreMetricsRecorder>) -> Self
pub fn new(inner: S, recorder: Arc<dyn ObjectStoreMetricsRecorder>) -> Self
Wraps a store with the supplied synchronous recorder and no provider label.
Sourcepub fn store_kind(self, store_kind: impl Into<String>) -> Self
pub fn store_kind(self, store_kind: impl Into<String>) -> Self
Attaches a low-cardinality provider label copied into subsequent samples.
Sourcepub fn into_inner(self) -> S
pub fn into_inner(self) -> S
Removes instrumentation and returns ownership of the wrapped store.
Trait Implementations§
Source§impl<S: Debug> Debug for InstrumentedObjectStore<S>
impl<S: Debug> Debug for InstrumentedObjectStore<S>
Source§impl<S> ObjectStore for InstrumentedObjectStore<S>where
S: ObjectStore,
impl<S> ObjectStore for InstrumentedObjectStore<S>where
S: ObjectStore,
Source§fn put_streamed<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: ByteStream,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_streamed<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
body: ByteStream,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<u64>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Streamed writes get their own operation rather than being folded
into put: their request bytes are only known once the stream ends,
and a deployment reading these samples needs to see which write path
its content is taking.
Source§fn head<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectMetadata>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn head<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectMetadata>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads metadata for one key, returning
None when the object is absent. Read moreSource§fn head_stored_checksum<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObjectChecksum>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn head_stored_checksum<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<StoredObjectChecksum>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads size and the stored full-object checksum for one key, returning
None when the object is absent. Read moreSource§fn create_multipart_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_multipart_upload<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Opens a provider multipart upload targeting
key, whose eventual
checksum covers the whole assembled object. Read moreSource§fn complete_multipart_upload<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
parts: &'life3 [MultipartPart],
full_object_checksum: &'life4 StorageChecksum,
) -> Pin<Box<dyn Future<Output = Result<MultipartCompletion>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
fn complete_multipart_upload<'life0, 'life1, 'life2, 'life3, 'life4, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
parts: &'life3 [MultipartPart],
full_object_checksum: &'life4 StorageChecksum,
) -> Pin<Box<dyn Future<Output = Result<MultipartCompletion>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
'life4: 'async_trait,
Source§fn abort_multipart_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn abort_multipart_upload<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
provider_upload_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Abandons a provider multipart upload and the parts it accumulated. Read more
Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<Option<Bytes>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
range: Option<ByteRange>,
) -> Pin<Box<dyn Future<Output = Result<Option<Bytes>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads a full object or one half-open byte range, returning
None when absent. Read moreSource§fn get_with_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectBody>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get_with_metadata<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<ObjectBody>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads complete bytes and identity metadata from one self-consistent observation. Read more
Source§fn put<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
mode: PutMode,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Writes bytes under the requested overwrite or provider-enforced precondition. Read more
Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Deletes a key idempotently and makes its absence immediately authoritative. Read more
Source§fn list_prefix_stream(&self, prefix: &str) -> BoxStream<'static, Result<String>>
fn list_prefix_stream(&self, prefix: &str) -> BoxStream<'static, Result<String>>
Streams keys under
prefix in ascending lexicographic order. Read moreSource§fn list_prefix<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_prefix<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Collects and sorts every key under
prefix. Read moreSource§fn put_overwrite<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_overwrite<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Writes bytes unconditionally, replacing any existing object at
key. Read moreSource§fn put_if_absent<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_if_absent<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Creates
key only when no object is present. Read moreSource§fn put_immutable_verified<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<(), ImmutableWriteError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn put_immutable_verified<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<(), ImmutableWriteError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Writes
bytes under an immutable key and accepts success only when
the key contains exactly those bytes. Read moreSource§fn compare_and_swap<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
expected_etag: &'life2 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn compare_and_swap<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 str,
expected_etag: &'life2 str,
bytes: Bytes,
) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Auto Trait Implementations§
impl<S> !RefUnwindSafe for InstrumentedObjectStore<S>
impl<S> !UnwindSafe for InstrumentedObjectStore<S>
impl<S> Freeze for InstrumentedObjectStore<S>where
S: Freeze,
impl<S> Send for InstrumentedObjectStore<S>where
S: Send,
impl<S> Sync for InstrumentedObjectStore<S>where
S: Sync,
impl<S> Unpin for InstrumentedObjectStore<S>where
S: Unpin,
impl<S> UnsafeUnpin for InstrumentedObjectStore<S>where
S: UnsafeUnpin,
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
Mutably borrows from an owned value. Read more
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>
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 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>
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