InsertAcquired

Struct InsertAcquired 

Source
pub struct InsertAcquired {
    pub disk_block_ids: Vec<u32>,
    pub blocks: Vec<u32>,
    pub released_blocks: Vec<u32>,
}
Expand description

What an insert newly took ownership of, so the caller can take the matching references.

Ownership rule: the cache holds exactly ONE reference on the physical block stored in each radix node, taken when that node is CREATED and returned when the node is evicted (return_evicted_block). The reference therefore has to follow the block the NODE holds — not the block the inserting sequence had at that position. Those two diverge whenever a node already exists for a token chunk: insert keeps the node’s original block_idx, while the sequence has a different block there (it did not get that block from the cache — e.g. it never matched, or it was restored from a swap file). Referencing the sequence’s block instead left the node’s block with no reference at all, so evicting that node decremented a ref belonging to a LIVE sequence: the block went back on the free list while still in use and was handed out again, with the second owner’s teardown underflowing. Reporting the blocks here keeps node lifetime and reference lifetime identical by construction.

Fields§

§disk_block_ids: Vec<u32>

Disk-block IDs the cache newly references (caller inc_disk_refs each).

§blocks: Vec<u32>

Physical KV blocks stored in radix nodes CREATED by this insert; the caller inc_refs each exactly once.

§released_blocks: Vec<u32>

Physical KV blocks this insert stopped storing — a partial_suffix slot that was overwritten or dropped. The caller dec_refs each exactly once, releasing the reference taken when that slot was first filled.

Trait Implementations§

Source§

impl Clone for InsertAcquired

Source§

fn clone(&self) -> InsertAcquired

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for InsertAcquired

Source§

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

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

impl Default for InsertAcquired

Source§

fn default() -> InsertAcquired

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

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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, 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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