Skip to main content

BlockFragmentStore

Struct BlockFragmentStore 

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

Production-grade store for fragmented blocks.

Handles concurrent fragment arrival, checksum verification, automatic assembly on completion, LRU-style eviction of the oldest pending sets when the cap is exceeded, and a bounded assembled-block cache.

Implementations§

Source§

impl BlockFragmentStore

Source

pub fn new(max_pending: usize, max_assembled: usize) -> Self

Create a new store with the given capacity limits.

  • max_pending – maximum number of in-progress fragment sets.
  • max_assembled – maximum number of assembled blocks kept in cache.
Source

pub fn store_fragment( &mut self, fragment: BfsFragment, now: u64, ) -> Result<FragmentSetState, FragmentError>

Store a fragment.

If the fragment completes its set, assembly is attempted automatically and the pending set is removed. If max_pending would be exceeded when creating a new set, the oldest pending set (by created_at) is dropped.

Returns the current FragmentSetState after the operation.

Source

pub fn get_state(&self, block_cid: &str) -> Option<FragmentSetState>

Return the current state of a fragment set.

Returns None if neither a pending set nor an assembled block exists for the given CID.

Source

pub fn missing_indices(&self, block_cid: &str) -> Vec<u32>

Return the indices of fragments that have not yet been received, in ascending order. Returns an empty vec if the block is assembled or unknown.

Source

pub fn assemble( &mut self, block_cid: &str, now: u64, ) -> Result<AssembledBlock, FragmentError>

Assemble a block from its fragments.

All fragments must be present and pass checksum verification. On success, the assembled block is stored in the cache and the pending set is removed.

Source

pub fn get_assembled(&self, block_cid: &str) -> Option<&[u8]>

Return a reference to the data of an assembled block, or None if not present in the cache.

Source

pub fn get_assembled_block(&self, block_cid: &str) -> Option<&AssembledBlock>

Return a reference to the full AssembledBlock struct, if cached.

Source

pub fn verify_fragment(fragment: &BfsFragment) -> bool

Return true if the fragment’s checksum matches the recomputed value.

Source

pub fn verify_set(set: &FragmentSet) -> Vec<u32>

Return the indices of fragments in a set whose checksums do not match.

Source

pub fn evict_stale_pending(&mut self, max_age_ms: u64, now: u64) -> usize

Remove all pending (incomplete) sets whose created_at is older than max_age_ms milliseconds before now. Returns the number of sets removed.

Source

pub fn evict_assembled(&mut self, cid: &str) -> bool

Remove an assembled block from the cache by CID. Returns true if the block was present and removed.

Source

pub fn pending_count(&self) -> usize

Number of pending (incomplete) fragment sets.

Source

pub fn assembled_count(&self) -> usize

Number of assembled blocks in the cache.

Source

pub fn stats(&self) -> FragmentStats

Aggregate statistics about the store.

Source

pub fn pending_cids(&self) -> Vec<&str>

Return all pending fragment set CIDs.

Source

pub fn assembled_cids(&self) -> Vec<&str>

Return all assembled block CIDs.

Source

pub fn clear_pending(&mut self) -> usize

Clear all pending sets without assembling them. Returns the number of sets dropped.

Source

pub fn clear_assembled(&mut self) -> usize

Clear all assembled blocks from the cache. Returns the number of blocks dropped.

Source

pub fn pending_capacity_remaining(&self) -> usize

Return how many more pending sets can be accepted before the cap is hit.

Trait Implementations§

Source§

impl Debug for BlockFragmentStore

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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> 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> 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 = 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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