Struct mz_durable_cache::DurableCache

source ·
pub struct DurableCache<C: DurableCacheCodec> {
    pub(crate) since_handle: SinceHandle<C::KeyCodec, C::ValCodec, u64, i64, i64>,
    pub(crate) write: WriteHandle<C::KeyCodec, C::ValCodec, u64, i64>,
    pub(crate) subscribe: Subscribe<C::KeyCodec, C::ValCodec, u64, i64>,
    pub(crate) local: BTreeMap<C::Key, LocalVal<C>>,
    pub(crate) local_progress: u64,
}

Fields§

§since_handle: SinceHandle<C::KeyCodec, C::ValCodec, u64, i64, i64>§write: WriteHandle<C::KeyCodec, C::ValCodec, u64, i64>§subscribe: Subscribe<C::KeyCodec, C::ValCodec, u64, i64>§local: BTreeMap<C::Key, LocalVal<C>>§local_progress: u64

Implementations§

source§

impl<C: DurableCacheCodec> DurableCache<C>

source

pub async fn new( persist: &PersistClient, shard_id: ShardId, purpose: &str, ) -> Self

Opens a DurableCache using shard shard_id.

source

pub(crate) async fn sync_to(&mut self, progress: Option<u64>) -> u64

source

pub fn get_local(&self, key: &C::Key) -> Option<&C::Val>

Get and return the value associated with key if it exists, without syncing with the durable store.

source

pub async fn get( &mut self, key: &C::Key, val_fn: impl FnOnce() -> C::Val, ) -> &C::Val

Get and return the value associated with key, syncing with the durable store if necessary. If key does not exist, then a value is computed via val_fn and durably stored in the cache.

source

pub fn entries_local(&self) -> impl Iterator<Item = (&C::Key, &C::Val)>

Return all entries stored in the cache, without syncing with the durable store.

source

pub async fn set(&mut self, key: &C::Key, value: Option<&C::Val>)

Durably set key to value. A value of None deletes the entry from the cache.

Failures will update the cache and retry until the cache is written successfully.

source

pub async fn set_many(&mut self, entries: &[(&C::Key, Option<&C::Val>)])

Durably set multiple key-value pairs in entries. Values of None deletes the corresponding entries from the cache.

Failures will update the cache and retry until the cache is written successfully.

source

pub async fn try_set( &mut self, key: &C::Key, value: Option<&C::Val>, ) -> Result<(), Error>

Tries to durably set key to value. A value of None deletes the entry from the cache.

On both successes and failures, the cache will update its contents with the most recent updates from the durable store.

source

pub async fn try_set_many( &mut self, entries: &[(&C::Key, Option<&C::Val>)], ) -> Result<(), Error>

Tries to durably set multiple key-value pairs in entries. Values of None deletes the corresponding entries from the cache.

On both successes and failures, the cache will update its contents with the most recent updates from the durable store.

source

pub(crate) async fn compare_and_append<I>( &mut self, updates: I, write_ts: u64, ) -> Result<u64, UpperMismatch<u64>>
where I: IntoIterator<Item = ((C::KeyCodec, C::ValCodec), i64)>,

Applies updates to the cache at write_ts. See WriteHandle::compare_and_append for more details.

This method will also downgrade the critical since of the underlying persist shard on success.

source

pub async fn dangerous_compact_shard( &self, fuel: impl Fn() -> usize, wait: impl Fn() -> Duration, )

Forcibly compacts the shard backing this cache. See mz_persist_client::cli::admin::dangerous_force_compaction_and_break_pushdown.

Trait Implementations§

source§

impl<C: Debug + DurableCacheCodec> Debug for DurableCache<C>
where C::KeyCodec: Debug, C::ValCodec: Debug, C::Key: Debug,

source§

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

Formats the value using the given formatter. Read more

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, U> CastInto<U> for T
where U: CastFrom<T>,

source§

fn cast_into(self) -> U

Performs the cast.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

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<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<'a, S, T> Semigroup<&'a S> for T
where T: Semigroup<S>,

source§

fn plus_equals(&mut self, rhs: &&'a S)

The method of std::ops::AddAssign, for types that do not implement AddAssign.
source§

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

§

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>,

§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

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