pub struct FileSink<'a> { /* private fields */ }Expand description
File-backed PackSink over a FileStore: obj payloads stream
through a fixed-size buffer straight into a unique temp sibling of the
final object path, then an atomic rename commits on hash match — O(1)
memory per record regardless of object size.
This mirrors file_store.rs’s private temp_sibling/persist discipline
(temp file in the SAME directory so the rename is an atomic,
same-filesystem move; a partially-written object is never visible at its
content-address; a failed record removes its temp file).
Implementations§
Trait Implementations§
Source§impl Drop for FileSink<'_>
impl Drop for FileSink<'_>
Source§impl PackSink for FileSink<'_>
impl PackSink for FileSink<'_>
Source§fn has_object(&mut self, checksum: &str) -> Result<bool, StoreError>
fn has_object(&mut self, checksum: &str) -> Result<bool, StoreError>
Returns
true when the sink already holds checksum (the record’s
bytes will then be verified-and-discarded rather than re-written).Source§fn stage_object(
&mut self,
checksum: &str,
_len: u64,
payload: &mut dyn Read,
) -> Result<(), StoreError>
fn stage_object( &mut self, checksum: &str, _len: u64, payload: &mut dyn Read, ) -> Result<(), StoreError>
Stages the payload for
checksum by reading payload to EOF (the
reader has already limited it to exactly len bytes). Must not make
the object observable at its final address yet. On error the sink must
clean up after itself or tolerate the follow-up
abort_object call.Source§fn commit_object(&mut self, checksum: &str) -> Result<(), StoreError>
fn commit_object(&mut self, checksum: &str) -> Result<(), StoreError>
Commits the staged payload at its (reader-verified) content-address.
Source§fn abort_object(&mut self, _checksum: &str)
fn abort_object(&mut self, _checksum: &str)
Discards any staged payload for
checksum, leaving no trace (best
effort; must tolerate nothing being staged).Source§fn put_manifest(
&mut self,
id: &str,
manifest: &Manifest,
) -> Result<(), StoreError>
fn put_manifest( &mut self, id: &str, manifest: &Manifest, ) -> Result<(), StoreError>
Commits the manifest under
id. Called only after the end trailer of
a fully verified stream (manifest-last survives truncation).Auto Trait Implementations§
impl<'a> Freeze for FileSink<'a>
impl<'a> RefUnwindSafe for FileSink<'a>
impl<'a> Send for FileSink<'a>
impl<'a> Sync for FileSink<'a>
impl<'a> Unpin for FileSink<'a>
impl<'a> UnsafeUnpin for FileSink<'a>
impl<'a> UnwindSafe for FileSink<'a>
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
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 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>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::RequestCreates a shared type from an unshared type.