cuprate_database::config

Enum SyncMode

Source
pub enum SyncMode {
    FastThenSafe,
    Safe,
    Async,
    Threshold(usize),
    Fast,
}
Expand description

Disk synchronization mode.

This controls how/when the database syncs its data to disk.

Regardless of the variant chosen, dropping Env will always cause it to fully sync to disk.

§Sync vs Async

All invariants except SyncMode::Async & SyncMode::Fast are synchronous, as in the database will wait until the OS has finished syncing all the data to disk before continuing.

SyncMode::Async & SyncMode::Fast are asynchronous, meaning the database will NOT wait until the data is fully synced to disk before continuing. Note that this doesn’t mean the database itself won’t be synchronized between readers/writers, but rather that the data on disk may not be immediately synchronized after a write.

Something like:

db.put("key", value);
db.get("key");

will be fine, most likely pulling from memory instead of disk.

§SOMEDAY

Dynamic sync’s are not yet supported.

Only:

are supported, all other variants will panic on crate::Env::open.

Variants§

§

FastThenSafe

Use SyncMode::Fast until fully synced, then use SyncMode::Safe.

§

Safe

Fully sync to disk per transaction.

Every database transaction commit will fully sync all data to disk, synchronously, so the database (writer) halts until synced.

This is expected to be very slow.

This maps to:

§

Async

Asynchrously sync to disk per transaction.

This is the same as SyncMode::Safe, but the syncs will be asynchronous, i.e. each transaction commit will sync to disk, but only eventually, not necessarily immediately.

This maps to:

§

Threshold(usize)

Fully sync to disk after we cross this transaction threshold.

After committing usize amount of database transactions, it will be sync to disk.

0 behaves the same as SyncMode::Safe, and a ridiculously large number like usize::MAX is practically the same as SyncMode::Fast.

§

Fast

Only flush at database shutdown.

This is the fastest, yet unsafest option.

It will cause the database to never actively sync, letting the OS decide when to flush data to disk1.

This maps to:

monerod reference.

§Corruption

In the case of a system crash, the database may become corrupted when using this option.


  1. Semantically, this variant would actually map to redb::Durability::None, however due to #149, this is not possible. As such, when using the redb backend, transaction writes “should be persistent some time after WriteTransaction::commit returns.” Thus, SyncMode::Async will map to the same redb::Durability::Eventual as SyncMode::Fast

Trait Implementations§

Source§

impl Clone for SyncMode

Source§

fn clone(&self) -> SyncMode

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for SyncMode

Source§

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

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

impl Default for SyncMode

Source§

fn default() -> SyncMode

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

impl<'de> Deserialize<'de> for SyncMode

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Hash for SyncMode

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for SyncMode

Source§

fn cmp(&self, other: &SyncMode) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for SyncMode

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for SyncMode

Source§

fn partial_cmp(&self, other: &SyncMode) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for SyncMode

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Copy for SyncMode

Source§

impl Eq for SyncMode

Source§

impl StructuralPartialEq for SyncMode

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, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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 = Infallible

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

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

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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Layout§

Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.

Size: 16 bytes

Size for each variant:

  • FastThenSafe: 0 bytes
  • Safe: 0 bytes
  • Async: 0 bytes
  • Threshold: 8 bytes
  • Fast: 0 bytes