pub struct CacheClientStore { /* private fields */ }Implementations§
Source§impl CacheClientStore
impl CacheClientStore
pub fn new( cache_base_url: String, api_key: Option<String>, direct: Arc<dyn ObjectStore>, ) -> CacheClientStore
Sourcepub fn with_config(
cache_base_url: String,
api_key: Option<String>,
direct: Arc<dyn ObjectStore>,
config: CacheClientConfig,
) -> CacheClientStore
pub fn with_config( cache_base_url: String, api_key: Option<String>, direct: Arc<dyn ObjectStore>, config: CacheClientConfig, ) -> CacheClientStore
Like new, but with an explicit CacheClientConfig instead of
reading the environment – what tests use to install short timeouts
and a controllable cooldown.
Sourcepub async fn prefetch(
&self,
items: Vec<PrefetchItem>,
) -> Result<PrefetchResponse, Error>
pub async fn prefetch( &self, items: Vec<PrefetchItem>, ) -> Result<PrefetchResponse, Error>
POST a batch of keys to warm at the cache server’s prefetch priority.
Best-effort: there is no demand read to fall back to, so callers should
treat an Err as “the warm didn’t happen” and move on rather than
retrying inline.
Gated on admit_bypass_only(), not admit(): prefetch never closes
the circuit and must not be able to consume the single per-cooldown
probe slot a demand read would otherwise receive – see “Prefetch
does not close the circuit”.
Sourcepub async fn send_ranges(
&self,
location: &Path,
ranges: &[Range<u64>],
) -> Result<Vec<Bytes>, RangesSendError>
pub async fn send_ranges( &self, location: &Path, ranges: &[Range<u64>], ) -> Result<Vec<Bytes>, RangesSendError>
Issue POST /ranges and reassemble the framed response body, keeping
four failure kinds distinct instead of folding them into one:
header-phase failure (Send, reusing send’s own abandon_timeout
wrap and reporting), a non-2xx Status, and each RangesReadError
body-failure kind (Transport/Stalled/Truncated). Only a Send
failure or a body Transport/Stalled counts as a breaker failure; a
non-2xx Status or a Truncated body means a full HTTP response
arrived cheaply, so both report record_responsive per “Abandon vs.
unresponsive”. Success – the framed body fully resolving – is the
single success report for the whole get_ranges operation, made here
because read_framed_ranges exposes nothing to the caller until it
fully resolves.
Trait Implementations§
Source§impl Debug for CacheClientStore
impl Debug for CacheClientStore
Source§impl Display for CacheClientStore
impl Display for CacheClientStore
Source§impl ObjectPrefetch for CacheClientStore
impl ObjectPrefetch for CacheClientStore
fn prefetch<'life0, 'async_trait>(
&'life0 self,
items: Vec<PrefetchItem>,
) -> Pin<Box<dyn Future<Output = Result<PrefetchResponse, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
CacheClientStore: 'async_trait,
Source§impl ObjectStore for CacheClientStore
impl ObjectStore for CacheClientStore
Source§fn put_opts<'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
payload: PutPayload,
opts: PutOptions,
) -> Pin<Box<dyn Future<Output = Result<PutResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
fn put_opts<'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
payload: PutPayload,
opts: PutOptions,
) -> Pin<Box<dyn Future<Output = Result<PutResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
Source§fn put_multipart_opts<'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
opts: PutMultipartOptions,
) -> Pin<Box<dyn Future<Output = Result<Box<dyn MultipartUpload>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
fn put_multipart_opts<'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
opts: PutMultipartOptions,
) -> Pin<Box<dyn Future<Output = Result<Box<dyn MultipartUpload>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
Source§fn get_opts<'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
options: GetOptions,
) -> Pin<Box<dyn Future<Output = Result<GetResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
fn get_opts<'life0, 'life1, 'async_trait>(
&'life0 self,
location: &'life1 Path,
options: GetOptions,
) -> Pin<Box<dyn Future<Output = Result<GetResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
Source§fn get_ranges<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
location: &'life1 Path,
ranges: &'life2 [Range<u64>],
) -> Pin<Box<dyn Future<Output = Result<Vec<Bytes>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
CacheClientStore: 'async_trait,
fn get_ranges<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
location: &'life1 Path,
ranges: &'life2 [Range<u64>],
) -> Pin<Box<dyn Future<Output = Result<Vec<Bytes>, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
CacheClientStore: 'async_trait,
Source§fn delete_stream(
&self,
locations: Pin<Box<dyn Stream<Item = Result<Path, Error>> + Send>>,
) -> Pin<Box<dyn Stream<Item = Result<Path, Error>> + Send>>
fn delete_stream( &self, locations: Pin<Box<dyn Stream<Item = Result<Path, Error>> + Send>>, ) -> Pin<Box<dyn Stream<Item = Result<Path, Error>> + Send>>
Source§fn list(
&self,
prefix: Option<&Path>,
) -> Pin<Box<dyn Stream<Item = Result<ObjectMeta, Error>> + Send>>
fn list( &self, prefix: Option<&Path>, ) -> Pin<Box<dyn Stream<Item = Result<ObjectMeta, Error>> + Send>>
Source§fn list_with_delimiter<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: Option<&'life1 Path>,
) -> Pin<Box<dyn Future<Output = Result<ListResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
fn list_with_delimiter<'life0, 'life1, 'async_trait>(
&'life0 self,
prefix: Option<&'life1 Path>,
) -> Pin<Box<dyn Future<Output = Result<ListResult, Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
CacheClientStore: 'async_trait,
Source§fn copy_opts<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
from: &'life1 Path,
to: &'life2 Path,
options: CopyOptions,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
CacheClientStore: 'async_trait,
fn copy_opts<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
from: &'life1 Path,
to: &'life2 Path,
options: CopyOptions,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
CacheClientStore: 'async_trait,
§fn list_with_offset(
&self,
prefix: Option<&Path>,
offset: &Path,
) -> Pin<Box<dyn Stream<Item = Result<ObjectMeta, Error>> + Send>>
fn list_with_offset( &self, prefix: Option<&Path>, offset: &Path, ) -> Pin<Box<dyn Stream<Item = Result<ObjectMeta, Error>> + Send>>
offset Read more§fn rename_opts<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
from: &'life1 Path,
to: &'life2 Path,
options: RenameOptions,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
fn rename_opts<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
from: &'life1 Path,
to: &'life2 Path,
options: RenameOptions,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Self: 'async_trait,
Auto Trait Implementations§
impl Freeze for CacheClientStore
impl !RefUnwindSafe for CacheClientStore
impl Send for CacheClientStore
impl Sync for CacheClientStore
impl Unpin for CacheClientStore
impl UnsafeUnpin for CacheClientStore
impl !UnwindSafe for CacheClientStore
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<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].