Skip to main content

CountingStore

Struct CountingStore 

Source
pub struct CountingStore<S> { /* private fields */ }
Expand description

A DurableStore that forwards every method to S and counts the work.

Counter increments take no lock and allocate nothing. An installed observer receives the increment and explicit flush call; every await is the inner store’s.

Implementations§

Source§

impl<S: DurableStore> CountingStore<S>

Source

pub fn new(inner: S) -> Self

Wraps inner, with every counter at zero.

Source

pub fn handle(&self) -> StoreCountsHandle

A handle that reads this store’s counters, to be kept beside the store once it is held only as Arc<dyn DurableStore>.

Source

pub fn snapshot(&self) -> StoreCounts

Every counter as it stands now.

Each counter is read once, without a lock, so a snapshot taken while other calls are in flight may count a call whose rows it does not yet count. Between two steps of one journey nothing is in flight.

Trait Implementations§

Source§

impl<S: Debug> Debug for CountingStore<S>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<S: DurableStore> DurableStore for CountingStore<S>

Source§

fn apply_routed_entries<'life0, 'life1, 'async_trait>( &'life0 self, route_key: &'life1 str, entries: Vec<RoutedBatchEntry>, ) -> Pin<Box<dyn Future<Output = Result<(), DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Counted as a routed batch: one call, and every entry (a put or a delete) an item of it once it committed.

Source§

fn reclaim_spine(&self) -> Option<Arc<EventStore>>

The haematite store behind this one, when it is the spine opened from disk: the owner releases its held reclaim, watches its passes and reads its status through it (DUR-021). A store that is not the spine answers None.
Source§

fn max_request_bytes(&self) -> Option<usize>

The largest request this store admits, in bytes, or None when it names no bound (DUR-024 R2). A caller assembling a batch keeps each request under it; the bound is read here, from the open store, and is never assumed or learnt from a refusal.
Source§

fn apply_routed_batch<'life0, 'life1, 'async_trait>( &'life0 self, route_key: &'life1 str, items: Vec<RoutedBatchItem>, ) -> Pin<Box<dyn Future<Output = Result<(), DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Commits all conditional replacements on one route, or publishes none. Read more
Source§

fn get_routed<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, route_key: &'life1 str, key: &'life2 [u8], ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Reads one key from the route used by the atomic writer.
Source§

fn append<'life0, 'life1, 'async_trait>( &'life0 self, stream_key: &'life1 str, payload: Vec<u8>, expected_seq: u64, ) -> Pin<Box<dyn Future<Output = Result<u64, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Appends payload to stream_key if expected_seq matches the stream head.
Source§

fn read_from<'life0, 'life1, 'async_trait>( &'life0 self, stream_key: &'life1 str, offset: u64, limit: usize, ) -> Pin<Box<dyn Future<Output = Result<Vec<StoredEntry>, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Reads entries from stream_key beginning at offset, up to limit entries.
Source§

fn append_all<'life0, 'life1, 'async_trait>( &'life0 self, stream_key: &'life1 str, payloads: Vec<Vec<u8>>, expected_seq: u64, ) -> Pin<Box<dyn Future<Output = Result<u64, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Atomically appends all payloads in order, starting at the expected head, and returns the stream’s next sequence. Read more
Source§

fn read_at<'life0, 'life1, 'async_trait>( &'life0 self, stream_key: &'life1 str, sequence: u64, ) -> Pin<Box<dyn Future<Output = Result<Option<StoredEntry>, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Reads exactly the event at sequence without traversing its suffix.
Source§

fn cas<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 str, old_value: u64, new_value: u64, ) -> Pin<Box<dyn Future<Output = Result<(), DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Atomically replaces a stored numeric value if it equals old_value. Read more
Source§

fn read_stream_next_seq<'life0, 'life1, 'async_trait>( &'life0 self, stream_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<u64>, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Reads the exclusive append head without reading stream rows. Read more
Source§

fn read_value<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<u64>, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Reads a numeric value previously updated through compare-and-swap.
Source§

fn scan_page<'life0, 'life1, 'async_trait>( &'life0 self, prefix: &'life1 str, cursor: Option<ScanCursor>, limit: usize, ) -> Pin<Box<dyn Future<Output = Result<ScanPage, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Reads one page of at most limit entries from the streams whose keys begin with prefix, in byte order of stream key and then sequence. Read more
Source§

fn flush<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<(), DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Flushes buffered writes so completed durable operations are persisted. Read more
Source§

fn truncate_before<'life0, 'life1, 'async_trait>( &'life0 self, stream_key: &'life1 str, before_seq: u64, ) -> Pin<Box<dyn Future<Output = Result<u64, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Deletes every entry of stream_key with sequence below before_seq, in one commit, and returns how many were deleted. Later entries are untouched, the stream’s head is kept (an append continues where it would have, and no sequence is reused), and a second identical call deletes nothing and returns 0. Read more
Source§

fn scan_routed<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, route_key: &'life1 str, from: &'life2 [u8], to: &'life3 [u8], ) -> Pin<Box<dyn Future<Output = Result<Vec<(Vec<u8>, Vec<u8>)>, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Reads the routed keys of one window on a route, with their values. Read more
Source§

fn remove_routed_range<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, route_key: &'life1 str, from: &'life2 [u8], to: &'life3 [u8], ) -> Pin<Box<dyn Future<Output = Result<u64, DurabilityError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Deletes the routed keys of one window on a route in one commit. Read more
Source§

fn store_counts(&self) -> Option<StoreCountsHandle>

A reader of the counters of the work done through this store, when the store counts it. Read more

Auto Trait Implementations§

§

impl<S> !RefUnwindSafe for CountingStore<S>

§

impl<S> !UnwindSafe for CountingStore<S>

§

impl<S> Freeze for CountingStore<S>
where S: Freeze,

§

impl<S> Send for CountingStore<S>
where S: Send,

§

impl<S> Sync for CountingStore<S>
where S: Sync,

§

impl<S> Unpin for CountingStore<S>
where S: Unpin,

§

impl<S> UnsafeUnpin for CountingStore<S>
where S: UnsafeUnpin,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

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<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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