pub struct ChunkStorage { /* private fields */ }Expand description
Chunk storage manager.
Implementations§
Source§impl ChunkStorage
impl ChunkStorage
Sourcepub async fn new(
base_path: PathBuf,
max_bytes: u64,
) -> Result<Self, StorageError>
pub async fn new( base_path: PathBuf, max_bytes: u64, ) -> Result<Self, StorageError>
Create a new chunk storage.
Sourcepub fn used_bytes(&self) -> u64
pub fn used_bytes(&self) -> u64
Get current storage usage.
Sourcepub fn available_bytes(&self) -> u64
pub fn available_bytes(&self) -> u64
Get available storage.
Sourcepub fn get_pinned_info(&self, cid: &str) -> Option<&PinnedContentInfo>
pub fn get_pinned_info(&self, cid: &str) -> Option<&PinnedContentInfo>
Get pinned content info.
Sourcepub fn list_pinned(&self) -> Vec<&str>
pub fn list_pinned(&self) -> Vec<&str>
List all pinned content CIDs.
Sourcepub async fn pin_content(
&mut self,
cid: &str,
chunks: &[Vec<u8>],
key: &EncryptionKey,
nonce: &EncryptionNonce,
) -> Result<PinnedContentInfo, StorageError>
pub async fn pin_content( &mut self, cid: &str, chunks: &[Vec<u8>], key: &EncryptionKey, nonce: &EncryptionNonce, ) -> Result<PinnedContentInfo, StorageError>
Pin new content (store all chunks).
Sourcepub async fn get_chunk(
&self,
cid: &str,
chunk_index: u64,
) -> Result<Vec<u8>, StorageError>
pub async fn get_chunk( &self, cid: &str, chunk_index: u64, ) -> Result<Vec<u8>, StorageError>
Retrieve and decrypt a chunk.
Sourcepub async fn get_chunk_verified(
&self,
cid: &str,
chunk_index: u64,
) -> Result<(Vec<u8>, [u8; 32]), StorageError>
pub async fn get_chunk_verified( &self, cid: &str, chunk_index: u64, ) -> Result<(Vec<u8>, [u8; 32]), StorageError>
Get chunk with verification (returns hash too).
Sourcepub async fn get_chunks_batch(
&self,
cid: &str,
chunk_indices: &[u64],
) -> Result<Vec<Vec<u8>>, StorageError>
pub async fn get_chunks_batch( &self, cid: &str, chunk_indices: &[u64], ) -> Result<Vec<Vec<u8>>, StorageError>
Batch retrieve multiple chunks concurrently for improved performance.
Sourcepub async fn get_chunks_batch_verified(
&self,
cid: &str,
chunk_indices: &[u64],
) -> Result<Vec<(Vec<u8>, [u8; 32])>, StorageError>
pub async fn get_chunks_batch_verified( &self, cid: &str, chunk_indices: &[u64], ) -> Result<Vec<(Vec<u8>, [u8; 32])>, StorageError>
Batch retrieve and verify multiple chunks concurrently.
Sourcepub async fn unpin_content(&mut self, cid: &str) -> Result<(), StorageError>
pub async fn unpin_content(&mut self, cid: &str) -> Result<(), StorageError>
Unpin content (remove all chunks).
Sourcepub fn stats(&self) -> StorageStats
pub fn stats(&self) -> StorageStats
Get storage statistics.
Sourcepub async fn health_check(&self) -> Result<StorageHealthReport, StorageError>
pub async fn health_check(&self) -> Result<StorageHealthReport, StorageError>
Perform storage health check to verify integrity.
Sourcepub async fn repair(&mut self, cid: &str) -> Result<RepairResult, StorageError>
pub async fn repair(&mut self, cid: &str) -> Result<RepairResult, StorageError>
Repair corrupted or missing chunks (requires re-download from network).
Sourcepub fn update_health_metrics(&mut self)
pub fn update_health_metrics(&mut self)
Update storage health metrics.
This should be called periodically to track storage health and detect issues early.
Sourcepub fn health(&self) -> &StorageHealth
pub fn health(&self) -> &StorageHealth
Get current storage health.
Sourcepub fn record_io_error(&mut self)
pub fn record_io_error(&mut self)
Record an I/O error.
Sourcepub fn record_slow_operation(&mut self, latency_ms: u64)
pub fn record_slow_operation(&mut self, latency_ms: u64)
Record a slow operation.
Sourcepub fn reset_health_counters(&mut self)
pub fn reset_health_counters(&mut self)
Reset health metrics (typically called after a health check period).
Sourcepub fn is_health_concerning(&self) -> bool
pub fn is_health_concerning(&self) -> bool
Check if storage health is concerning.
Source§impl ChunkStorage
impl ChunkStorage
Sourcepub fn get_chunk_dir(&self, cid: &str) -> PathBuf
pub fn get_chunk_dir(&self, cid: &str) -> PathBuf
Get chunk directory path (exposed for transactions).
Sourcepub async fn write_chunks_for_transaction(
&mut self,
cid: &str,
chunks: &[Vec<u8>],
key: &EncryptionKey,
nonce: &EncryptionNonce,
) -> Result<Vec<(u64, PathBuf, PathBuf, u64)>, StorageError>
pub async fn write_chunks_for_transaction( &mut self, cid: &str, chunks: &[Vec<u8>], key: &EncryptionKey, nonce: &EncryptionNonce, ) -> Result<Vec<(u64, PathBuf, PathBuf, u64)>, StorageError>
Write chunks for a transaction.
Returns list of (chunk_index, chunk_path, meta_path, size_bytes) for each written chunk.
Sourcepub fn decrease_used_bytes(&mut self, bytes: u64)
pub fn decrease_used_bytes(&mut self, bytes: u64)
Decrease used bytes (for transaction rollback).
Auto Trait Implementations§
impl Freeze for ChunkStorage
impl RefUnwindSafe for ChunkStorage
impl Send for ChunkStorage
impl Sync for ChunkStorage
impl Unpin for ChunkStorage
impl UnwindSafe for ChunkStorage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.