Skip to main content

FlushMode

Enum FlushMode 

Source
pub enum FlushMode {
    Default,
    Data,
    MinMetadata,
    NoSync,
}
Expand description

How much a flush is asked to push, and whether it syncs the device at all (M12.4, D-25 in DESIGN-NOTES.md).

This is BuildIoRingFlushFile’s FILE_FLUSH_MODE parameter, which the crate previously hardcoded to FILE_FLUSH_DEFAULT. Exposing it is the other half of D-25: the kernel offers a durability parameter here and a wrapper that hides it narrows the platform to what its own examples needed.

FlushMode::Default is what a caller closing an epoch wants, and is what the crate did before this existed.

§NoSync is not a durability operation

Three of these four modes issue the device sync; FlushMode::NoSync does not. That is worth stating rather than inferring, and the inference runs the other way too: the existence of a distinct “no sync” mode is the evidence that the other three do sync. Nothing in the Win32 documentation says so directly.

Variants§

§

Default

FILE_FLUSH_DEFAULT: flush the file’s data and metadata, and sync the device.

The default, and the mode a durability barrier wants. Pair it with FlushCoverage::CoversPrecedingOperations or it covers nothing.

§

Data

FILE_FLUSH_DATA: flush the file’s data, and sync the device.

Metadata that is not required to read the data back may be left unflushed. The analogue of fdatasync, and the usual choice for a log whose records are self-describing.

§

MinMetadata

FILE_FLUSH_MIN_METADATA: flush the data plus the minimum metadata needed to retrieve it, and sync the device.

§

NoSync

FILE_FLUSH_NO_SYNC: flush to the device without issuing the sync.

This is the one mode that makes nothing durable. It pushes data out of the system cache and stops there, so anything still held in a volatile device cache is lost on power failure exactly as if no flush had been issued at all. A completion from this mode is not a commit point and must never be reported to a caller as one.

It is useful for shaping when cache pressure is paid – moving data deviceward early so a later real flush is short – which is the same role WriteCaching::WriteThrough plays on the write side, and it carries the same warning: a latency knob, not a durability primitive.

Trait Implementations§

Source§

impl Clone for FlushMode

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 Copy for FlushMode

Source§

impl Debug for FlushMode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for FlushMode

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for FlushMode

Source§

impl PartialEq for FlushMode

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for FlushMode

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