Skip to main content

ReadOnlyPoolStore

Struct ReadOnlyPoolStore 

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

Strictly read-only view of an existing PoolStore catalog and its members.

Unlike super::PoolStore::open, this constructor never creates a path, opens a write transaction, repairs pending records, records temperature samples, or starts a worker. It is intended for live-data verification. LMDB can still update reader bookkeeping in lock.mdb; data.mdb remains read-only. On Windows, catalog growth requires reopening the reader after a MapResized error because its mapping covers the file size at open.

Implementations§

Source§

impl ReadOnlyPoolStore

Source

pub fn open<P: AsRef<Path>>(path: P) -> Result<Self, StoreError>

Source

pub fn open_controlled<P: AsRef<Path>>( path: P, config: PoolStoreConfig, ) -> Result<Self, StoreError>

Open an exact, read-only Pool authority captured by a controller.

A controlled open requires a pinned catalog LMDB identity, the exact manifest SHA-256, one exact runtime binding for every manifest member, and disabled temperature tracking. Member readers use only those runtime paths and pinned LMDB identities.

Source

pub fn manifest_snapshot( &self, ) -> Result<ReadOnlyPoolManifestSnapshot, StoreError>

Return the exact manifest snapshot captured by this reader.

This first proves that the live manifest still matches the opened bytes, so callers cannot accidentally pin a stale topology.

Source

pub fn blob_catalog_locations( &self, hashes: &[Hash], ) -> Result<Vec<PoolCatalogLocation>, StoreError>

Return exact catalog state for many hashes in one read transaction.

Pending and Moving are deliberately preserved so crash recovery cannot mistake physical bytes for committed catalog residency.

Source

pub fn validate_committed_catalog( &self, ) -> Result<ReadOnlyPoolCatalogAudit, StoreError>

Prove that the entire catalog contains only committed locations.

Terminal verification must not silently read through an interrupted pending write or member move, even when one of its copies happens to contain valid bytes.

Source

pub fn require_durable_external_blob_writes(&self) -> Result<(), StoreError>

Require every member that stores external blobs to fsync those files before committing its catalog location. LMDB environment sync alone cannot make an external file durable when this manifest flag is false.

Source

pub fn get_sync(&self, hash: &Hash) -> Result<Option<Vec<u8>>, StoreError>

Source

pub fn blob_size_sync(&self, hash: &Hash) -> Result<Option<u64>, StoreError>

Source

pub fn get_range_sync( &self, hash: &Hash, start: u64, end_inclusive: u64, ) -> Result<Option<Vec<u8>>, StoreError>

Trait Implementations§

Source§

impl Clone for ReadOnlyPoolStore

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Store for ReadOnlyPoolStore

Source§

fn put<'life0, 'async_trait>( &'life0 self, _hash: Hash, _data: Vec<u8>, ) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Store data by its hash Returns true if newly stored, false if already existed
Source§

fn get<'life0, 'life1, 'async_trait>( &'life0 self, hash: &'life1 Hash, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>, StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Retrieve data by hash Returns data or None if not found
Source§

fn get_range<'life0, 'life1, 'async_trait>( &'life0 self, hash: &'life1 Hash, start: u64, end_inclusive: u64, ) -> Pin<Box<dyn Future<Output = Result<Option<Vec<u8>>, StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Retrieve a byte range from a blob by hash. Read more
Source§

fn blob_size<'life0, 'life1, 'async_trait>( &'life0 self, hash: &'life1 Hash, ) -> Pin<Box<dyn Future<Output = Result<Option<u64>, StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Return the stored blob size in bytes. Read more
Source§

fn has<'life0, 'life1, 'async_trait>( &'life0 self, hash: &'life1 Hash, ) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Check if hash exists
Source§

fn delete<'life0, 'life1, 'async_trait>( &'life0 self, _hash: &'life1 Hash, ) -> Pin<Box<dyn Future<Output = Result<bool, StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Delete by hash Returns true if deleted, false if didn’t exist
Source§

fn stats<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = StoreStats> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get storage statistics
Source§

fn pin<'life0, 'life1, 'async_trait>( &'life0 self, _hash: &'life1 Hash, ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Pin a hash (increment ref count). Pinned items are not evicted.
Source§

fn unpin<'life0, 'life1, 'async_trait>( &'life0 self, _hash: &'life1 Hash, ) -> Pin<Box<dyn Future<Output = Result<(), StoreError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Unpin a hash (decrement ref count). Item can be evicted when count reaches 0.
Source§

fn put_many<'life0, 'async_trait>( &'life0 self, items: Vec<([u8; 32], Vec<u8>)>, ) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Store multiple blobs. Returns the number of newly stored items.
Source§

fn put_many_optimistic<'life0, 'async_trait>( &'life0 self, items: Vec<([u8; 32], Vec<u8>)>, ) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Store a locally generated content-addressed batch without requiring an implementation to reread bytes for hashes it already tracks. Read more
Source§

fn flush_pending<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Flush writes retained by an overlay store. Read more
Source§

fn flush_pending_if_needed<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Flush at an intermediate memory boundary. Buffered stores may retain a bounded amount between boundaries; callers must still explicitly flush all pending writes before returning a committed root.
Source§

fn delete_many<'life0, 'async_trait>( &'life0 self, hashes: Vec<[u8; 32]>, ) -> Pin<Box<dyn Future<Output = Result<usize, StoreError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Delete multiple hashes and return the number that existed. Read more
Source§

fn set_max_bytes(&self, _max: u64)

Set maximum storage size in bytes. 0 = unlimited.
Source§

fn max_bytes(&self) -> Option<u64>

Get maximum storage size. None = unlimited.
Source§

fn evict_if_needed<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<u64, StoreError>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Evict unpinned items if over storage limit. Returns number of bytes freed.
Source§

fn pin_count(&self, _hash: &[u8; 32]) -> u32

Get pin count for a hash. 0 = not pinned.
Source§

fn is_pinned(&self, hash: &[u8; 32]) -> bool

Check if hash is pinned (pin count > 0)

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<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> 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.

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> 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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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