pub struct StagedFile<'a> { /* private fields */ }
Expand description

StagedFile is a wrapper around a |&DirectoryProxy| and a |FileProxy| for a staged file within that directory. The primary purpose of StagedFile is to implement the atomic write workflow summarized as open -> write -> sync -> close -> rename. This workflow is simplified to simply write -> commit. One caveat to the use of StagedFile is that in the event of power loss or a crash, there may be orphaned temporary files in the directory. This means that clients should clean up their directories of temporary files prior to operating in that directory. As such, it is important to choose a |filename_prefix| that is guaranteed not to collide with |target_filename|s given when calling StagedFile::commit. It would have been preferable to use the tempfile crate here, but it lacks the ability to open things without making use of paths and namespaces, and as such, StagedFile should only be used in cases where we must supply our own |DirectoryProxy|.

Implementations§

source§

impl<'a> StagedFile<'a>

source

pub async fn new( dir_proxy: &'a DirectoryProxy, tempfile_prefix: &str ) -> Result<StagedFile<'a>, StagedFileError>

Creates a new instance of StagedFile bound to the lifetime of |dir_proxy| that respects |filename_prefix|. |filename_prefix| must have a length > 0.

source

pub async fn write(&mut self, data: &[u8]) -> Result<(), StagedFileError>

Writes data to the backing staged file proxy. This file is not guaranteed to be persisted until commit is called, at which point it will be renamed to |target_filename|.

source

pub async fn commit(self, target_filename: &str) -> Result<(), StagedFileError>

Commits the data in the staged file to |target_filename| via the traditional sync -> close -> rename atomic write workflow. Calling commit does not guarantee that |target_filename| will be available, but it does guarantee atomicity of the file if it does exist.

source

pub async fn cleanup_stale_files( dir_proxy: &DirectoryProxy, tempfile_prefix: &str ) -> Result<(), Vec<StagedFileError>>

Helper function to unlink files in a directory given a function that takes a filename and returns whether or not to unlink it.

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for StagedFile<'a>

§

impl<'a> Send for StagedFile<'a>

§

impl<'a> Sync for StagedFile<'a>

§

impl<'a> Unpin for StagedFile<'a>

§

impl<'a> !UnwindSafe for StagedFile<'a>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Encode<Ambiguous1> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _offset: usize, _depth: Depth ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
§

impl<T> Encode<Ambiguous2> for T

§

unsafe fn encode( self, _encoder: &mut Encoder<'_>, _offset: usize, _depth: Depth ) -> Result<(), Error>

Encodes the object into the encoder’s buffers. Any handles stored in the object are swapped for Handle::INVALID. Read more
source§

impl<T> From<T> for T

const: unstable · 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 Twhere U: From<T>,

const: unstable · 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

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