Struct mz_persist_client::internal::watch::StateWatchNotifier
source · pub struct StateWatchNotifier {
metrics: Arc<Metrics>,
tx: Sender<SeqNo>,
}
Fields§
§metrics: Arc<Metrics>
§tx: Sender<SeqNo>
Implementations§
source§impl StateWatchNotifier
impl StateWatchNotifier
pub(crate) fn new(metrics: Arc<Metrics>) -> Self
sourcepub(crate) fn notify(&self, seqno: SeqNo)
pub(crate) fn notify(&self, seqno: SeqNo)
Wake up any watchers of this state.
This must be called while under the same lock that modified the state to avoid any potential for out of order SeqNos in the broadcast channel.
This restriction can be lifted (i.e. we could notify after releasing the
write lock), but we’d have to reason about out of order SeqNos in the
broadcast channel. In particular, if we see RecvError::Lagged
then
it’s possible we lost X+1 and got X, so if X isn’t sufficient to return,
we’d need to grab the read lock and verify the real SeqNo.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for StateWatchNotifier
impl !RefUnwindSafe for StateWatchNotifier
impl Send for StateWatchNotifier
impl Sync for StateWatchNotifier
impl Unpin for StateWatchNotifier
impl !UnwindSafe for StateWatchNotifier
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
.