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: NowFn
Implementations§
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
CollectionManager
expects 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
CollectionManager
handles 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
CollectionManager
expects 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
id
does 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::Request
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
.