pub struct CollectionManager<T>where
T: Timestamp + Lattice + Codec64 + TimestampManipulation,{
collections: Arc<Mutex<BTreeMap<GlobalId, (Sender<(Vec<(Row, Diff)>, Sender<Result<(), StorageError>>)>, AbortOnDropHandle<()>, Sender<()>)>>>,
write_handle: PersistMonotonicWriteWorker<T>,
now: NowFn,
}Fields§
§collections: Arc<Mutex<BTreeMap<GlobalId, (Sender<(Vec<(Row, Diff)>, Sender<Result<(), StorageError>>)>, AbortOnDropHandle<()>, Sender<()>)>>>§write_handle: PersistMonotonicWriteWorker<T>§now: NowFnImplementations§
source§impl<T> CollectionManager<T>where
T: Timestamp + Lattice + Codec64 + From<EpochMillis> + TimestampManipulation,
impl<T> CollectionManager<T>where T: Timestamp + Lattice + Codec64 + From<EpochMillis> + TimestampManipulation,
The CollectionManager provides two complementary functions:
- Providing an API to append values to a registered set of collections.
For this usecase:
- The
CollectionManagerexpects to be the only writer. - Appending to a closed collection panics
- The
- Automatically advancing the timestamp of managed collections every
second. For this usecase:
- The
CollectionManagerhandles contention by permitting and ignoring errors. - Closed collections will not panic if they continue receiving these requests.
- The
pub(super) fn new( write_handle: PersistMonotonicWriteWorker<T>, now: NowFn ) -> CollectionManager<T>
sourcepub(super) fn register_collection(&self, id: GlobalId)
pub(super) fn register_collection(&self, id: GlobalId)
Registers the collection as one that CollectionManager will:
- Automatically advance the upper of every second
- Accept appends for. However, note that when appending, the
CollectionManagerexpects to be the only writer.
sourcepub(super) async fn unregsiter_collection(&self, id: GlobalId) -> bool
pub(super) async fn unregsiter_collection(&self, id: GlobalId) -> bool
Unregisters the collection as one that CollectionManager will maintain.
Also waits until the CollectionManager has completed all outstanding work to ensure that
it has stopped referencing the provided id.
sourcepub(super) async fn append_to_collection(
&self,
id: GlobalId,
updates: Vec<(Row, Diff)>
)
pub(super) async fn append_to_collection( &self, id: GlobalId, updates: Vec<(Row, Diff)> )
Appends updates to the collection correlated with id, does not work for the append to
complete.
Panics
- If
iddoes not belong to managed collections. - If there is contention to write to the collection identified by
id. - If the collection closed.
sourcepub(super) fn monotonic_appender(
&self,
id: GlobalId
) -> Result<MonotonicAppender, StorageError>
pub(super) fn monotonic_appender( &self, id: GlobalId ) -> Result<MonotonicAppender, StorageError>
Returns a MonotonicAppender that can be used to monotonically append updates to the
collection correlated with id.
Trait Implementations§
source§impl<T> Clone for CollectionManager<T>where
T: Timestamp + Lattice + Codec64 + TimestampManipulation + Clone,
impl<T> Clone for CollectionManager<T>where T: Timestamp + Lattice + Codec64 + TimestampManipulation + Clone,
source§fn clone(&self) -> CollectionManager<T>
fn clone(&self) -> CollectionManager<T>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<T> !RefUnwindSafe for CollectionManager<T>
impl<T> Send for CollectionManager<T>
impl<T> Sync for CollectionManager<T>
impl<T> Unpin for CollectionManager<T>
impl<T> !UnwindSafe for CollectionManager<T>
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::Requestsource§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.