Struct CacheLog

Source
pub struct CacheLog { /* private fields */ }
Expand description

CacheLog keeps track of the original and current values of each key accessed. By tracking original values, we can detect and eliminate write patterns where a key is changed temporarily and then reset to its original value

Implementations§

Source§

impl CacheLog

Source

pub fn with_capacity(capacity: usize) -> CacheLog

Source§

impl CacheLog

Source

pub fn take_writes(self) -> Vec<(CacheKey, Option<CacheValue>)>

Source

pub fn get_value(&self, key: &CacheKey) -> ValueExists

Returns a value corresponding to the key.

Source

pub fn add_read( &mut self, key: CacheKey, value: Option<CacheValue>, ) -> Result<(), ReadError>

The first read for a given key is inserted in the cache. For an existing cache entry checks if reads are consistent with previous reads/writes.

Source

pub fn add_write(&mut self, key: CacheKey, value: Option<CacheValue>)

Adds a write entry to the cache.

Source

pub fn merge_left(&mut self, rhs: CacheLog) -> Result<(), MergeError>

Merges two cache logs in a way that preserves the first read (from self) and the last write (from rhs) for the same key in both caches. The merge succeeds if the first read in the right cache for a key ‘k’ is consistent with the last read/write in the self cache.

Example:

Cache1: Cache2: k1 => v1 k1 => v1’ k2 => v2 k3 => v3

Merged Cache: k1 => v1.merge(v1’) <- preserves the first read and the last write for ‘k1’ k2 => v2 k3 => v3

Source

pub fn merge_writes_left(&mut self, rhs: CacheLog) -> Result<(), MergeError>

Source

pub fn merge_reads_left(&mut self, rhs: CacheLog) -> Result<(), MergeError>

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Trait Implementations§

Source§

impl Default for CacheLog

Source§

fn default() -> CacheLog

Returns the “default value” for a type. Read more
Source§

impl From<StorageInternalCache> for CacheLog

Source§

fn from(val: StorageInternalCache) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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