Skip to main content

IndexedChunkMap

Struct IndexedChunkMap 

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

An implementation of ChunkMap to support chunk state tracking by using a bitmap file.

The IndexedChunkMap is an implementation of ChunkMap which uses a bitmap file and atomic bitmap operations to track readiness state. It creates or opens a file with the name $blob_id.chunk_map to record whether a chunk has been cached by the blob cache, and atomic bitmap operations are used to manipulate the state bit. The bitmap file will be persisted to disk.

This approach can be used to share chunk ready state between multiple nydusd instances. For example: the bitmap file layout is [0b00000000, 0b00000000], when blobcache calls set_ready(3), the layout should be changed to [0b00010000, 0b00000000].

Implementations§

Source§

impl IndexedChunkMap

Source

pub fn new(blob_path: &str, chunk_count: u32, persist: bool) -> Result<Self>

Create a new instance of IndexedChunkMap.

Trait Implementations§

Source§

impl ChunkIndexGetter for IndexedChunkMap

Source§

type Index = u32

Type of index needed by ChunkMap.
Source§

fn get_index(chunk: &dyn BlobChunkInfo) -> Self::Index

Get the chunk’s id/key for state tracking.
Source§

impl ChunkMap for IndexedChunkMap

Source§

fn is_ready(&self, chunk: &dyn BlobChunkInfo) -> Result<bool>

Check whether the chunk is ready for use.
Source§

fn set_ready_and_clear_pending(&self, chunk: &dyn BlobChunkInfo) -> Result<()>

Set the chunk to ready for use and clear the pending state.
Source§

fn is_persist(&self) -> bool

Check whether the implementation supports state persistence.
Source§

fn as_range_map(&self) -> Option<&dyn RangeMap<I = u32>>

Convert the objet to an RangeMap object.
Source§

fn is_pending(&self, _chunk: &dyn BlobChunkInfo) -> Result<bool>

Check whether the chunk is pending for downloading.
Source§

fn is_ready_or_pending(&self, chunk: &dyn BlobChunkInfo) -> Result<bool>

Check whether a chunk is ready for use or pending for downloading.
Source§

fn check_ready_and_mark_pending( &self, _chunk: &dyn BlobChunkInfo, ) -> StorageResult<bool>

Check whether the chunk is ready for use, and mark it as pending if not ready yet. Read more
Source§

fn clear_pending(&self, _chunk: &dyn BlobChunkInfo)

Clear the pending state of the chunk.
Source§

impl RangeMap for IndexedChunkMap

Source§

type I = u32

Source§

fn is_range_all_ready(&self) -> bool

Check whether all chunks or data managed by the RangeMap object are ready.
Source§

fn is_range_ready(&self, start_index: u32, count: u32) -> Result<bool>

Check whether all chunks or data in the range are ready for use.
Source§

fn check_range_ready_and_mark_pending( &self, start_index: u32, count: u32, ) -> Result<Option<Vec<u32>>>

Check whether all chunks or data in the range [start, start + count) are ready. Read more
Source§

fn set_range_ready_and_clear_pending( &self, start_index: u32, count: u32, ) -> Result<()>

Mark all chunks or data in the range as ready for use.
Source§

fn clear_range_pending(&self, _start: Self::I, _count: Self::I)

Clear the pending state for all chunks or data in the range.
Source§

fn wait_for_range_ready(&self, _start: Self::I, _count: Self::I) -> Result<bool>

Wait for all chunks or data in the range to be ready until timeout.

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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<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