Struct mz_persist_client::cache::StateCache
source · pub struct StateCache {
cfg: Arc<PersistConfig>,
pub(crate) metrics: Arc<Metrics>,
states: Arc<Mutex<BTreeMap<ShardId, Arc<OnceCell<Weak<dyn DynState>>>>>>,
pubsub_sender: Arc<dyn PubSubSender>,
}
Expand description
A cache of TypedState
, shared between all machines for that shard.
This is shared between all machines that come out of the same PersistClientCache, but in production there is one of those per process, so in practice, we have one copy of state per shard per process.
The mutex contention between commands is not an issue, because if two command for the same shard are executing concurrently, only one can win anyway, the other will retry. With the mutex, we even get to avoid the retry if the racing commands are on the same process.
Fields§
§cfg: Arc<PersistConfig>
§metrics: Arc<Metrics>
§states: Arc<Mutex<BTreeMap<ShardId, Arc<OnceCell<Weak<dyn DynState>>>>>>
§pubsub_sender: Arc<dyn PubSubSender>
Implementations§
source§impl StateCache
impl StateCache
sourcepub fn new(
cfg: &PersistConfig,
metrics: Arc<Metrics>,
pubsub_sender: Arc<dyn PubSubSender>,
) -> Self
pub fn new( cfg: &PersistConfig, metrics: Arc<Metrics>, pubsub_sender: Arc<dyn PubSubSender>, ) -> Self
Returns a new StateCache.
pub(crate) async fn get<K, V, T, D, F, InitFn>( &self, shard_id: ShardId, init_fn: InitFn, diagnostics: &Diagnostics, ) -> Result<Arc<LockingTypedState<K, V, T, D>>, Box<CodecMismatch>>
pub(crate) fn get_state_weak( &self, shard_id: &ShardId, ) -> Option<Weak<dyn DynState>>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for StateCache
impl !RefUnwindSafe for StateCache
impl Send for StateCache
impl Sync for StateCache
impl Unpin for StateCache
impl !UnwindSafe for StateCache
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> 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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T
in a tonic::Request
Creates a shared type from an unshared type.
source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
See
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
See
RustType::into_proto
.source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
The method of
std::ops::AddAssign
, for types that do not implement AddAssign
.