risingwave_common::cache

Struct LruCacheShard

source
pub struct LruCacheShard<K: LruKey, T: LruValue> {
    lru: Box<LruHandle<K, T>>,
    low_priority_head: *mut LruHandle<K, T>,
    high_priority_pool_capacity: usize,
    high_priority_pool_usage: usize,
    table: LruHandleTable<K, T>,
    object_pool: Vec<Box<LruHandle<K, T>>>,
    write_request: HashMap<K, Vec<Sender<CacheableEntry<K, T>>>>,
    lru_usage: Arc<AtomicUsize>,
    usage: Arc<AtomicUsize>,
    capacity: usize,
}

Fields§

§lru: Box<LruHandle<K, T>>

The dummy header node of a ring linked list. The linked list is a LRU list, holding the cache handles that are not used externally. lru.prev point to the head of linked list while lru.next point to the tail of linked-list. Every time when the usage of cache reaches capacity we will remove lru.next at first.

§low_priority_head: *mut LruHandle<K, T>§high_priority_pool_capacity: usize§high_priority_pool_usage: usize§table: LruHandleTable<K, T>§object_pool: Vec<Box<LruHandle<K, T>>>§write_request: HashMap<K, Vec<Sender<CacheableEntry<K, T>>>>§lru_usage: Arc<AtomicUsize>§usage: Arc<AtomicUsize>§capacity: usize

Implementations§

source§

impl<K: LruKey, T: LruValue> LruCacheShard<K, T>

source

fn new_with_priority_pool( capacity: usize, high_priority_ratio_percent: usize, ) -> Self

source

unsafe fn lru_remove(&mut self, e: *mut LruHandle<K, T>)

source

unsafe fn lru_insert(&mut self, e: *mut LruHandle<K, T>)

source

unsafe fn maintain_pool_size(&mut self)

source

unsafe fn evict_from_lru( &mut self, charge: usize, last_reference_list: &mut Vec<(K, T)>, )

source

unsafe fn clear_handle(&mut self, h: *mut LruHandle<K, T>) -> (K, T)

Clear a currently used handle and recycle it if possible

source

unsafe fn try_recycle_handle_object(&mut self, h: *mut LruHandle<K, T>)

Try to recycle a handle object if the object pool is not full.

The handle should already cleared its kv.

source

unsafe fn insert( &mut self, key: K, hash: u64, charge: usize, value: T, priority: CachePriority, last_reference_list: &mut Vec<(K, T)>, ) -> *mut LruHandle<K, T>

insert a new key value in the cache. The handle for the new key value is returned.

source

unsafe fn release(&mut self, h: *mut LruHandle<K, T>) -> Option<(K, T)>

Release the usage on a handle.

Return: Some(value) if the handle is released, and None if the value is still in use.

source

unsafe fn lookup(&mut self, hash: u64, key: &K) -> *mut LruHandle<K, T>

source

unsafe fn erase(&mut self, hash: u64, key: &K) -> Option<(K, T)>

Erase a key from the cache.

source

unsafe fn try_remove_cache_handle( &mut self, h: *mut LruHandle<K, T>, ) -> Option<(K, T)>

Try removing the handle from the cache if the handle is not used externally any more.

This method can only be called on the handle that just removed from the hash table.

source

unsafe fn clear(&mut self)

source

fn for_all<F>(&self, f: &mut F)
where F: FnMut(&K, &T),

Trait Implementations§

source§

impl<K: LruKey, T: LruValue> Drop for LruCacheShard<K, T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<K: LruKey, T: LruValue> Send for LruCacheShard<K, T>

Auto Trait Implementations§

§

impl<K, T> Freeze for LruCacheShard<K, T>

§

impl<K, T> !RefUnwindSafe for LruCacheShard<K, T>

§

impl<K, T> !Sync for LruCacheShard<K, T>

§

impl<K, T> Unpin for LruCacheShard<K, T>
where K: Unpin,

§

impl<K, T> !UnwindSafe for LruCacheShard<K, T>

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.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> IntoResult<T> for T

§

type Err = Infallible

§

fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>

source§

impl<M> MetricVecRelabelExt for M

source§

fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

source§

fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>

source§

fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>

Equivalent to RelabeledMetricVec::with_metric_level_relabel_n with metric_level set to MetricLevel::Debug and relabel_num set to 1.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
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