Skip to main content

AckTicket

Struct AckTicket 

Source
pub struct AckTicket { /* private fields */ }
Expand description

Durability handle associated with a write operation

§Epoch

Every ticket is assigned a monotonically increasing epoch to monitor durability

§Durability Guarantee

The ticket can be queried via is_durable, waited on via wait, or forced via force

Once an epoch is confirmed durable, all writes assigned to earlier epochs are also guaranteed to be durable

Callers that only require fire-and-forget semantics may simply discard the returned ticket

Implementations§

Source§

impl AckTicket

Source

pub const fn new(epoch: TEpoch, completion: Arc<Completion>) -> Self

Construct a new AckTicket for a write operation

§Example
use frozen_core::ack::{AckTicket, Completion};
use std::sync::Arc;

let completion = Arc::new(Completion::default());
let ticket = AckTicket::new(1, completion);

assert_eq!(ticket.epoch(), 1);
Source

pub const fn epoch(&self) -> TEpoch

Read assigned durability epoch for the AckTicket

§Example
use frozen_core::ack::{AckTicket, Completion};
use std::sync::Arc;

let completion = Arc::new(Completion::default());
let ticket = AckTicket::new(0x4C, completion);

assert_eq!(ticket.epoch(), 0x4C);
Source

pub fn is_durable(&self) -> bool

Check if the AckTicket is already durable w/o blocking

§Example
use frozen_core::ack::{AckTicket, Completion};
use std::sync::Arc;

let completion = Arc::new(Completion::default());
let ticket = AckTicket::new(10, completion.clone());

assert!(!ticket.is_durable());
completion.mark_epoch_as_durable(10);
assert!(ticket.is_durable());
Source

pub fn wait(&self) -> FrozenResult<TEpoch>

Blocks the current thread until the AckTicket becomes durable

§Error Propagation

If a durability error is reported before the epoch becomes durable, the corresponding FrozenError is returned instead

§Example
use frozen_core::ack::{AckTicket, Completion};
use std::{sync::Arc, thread, time};

let completion = Arc::new(Completion::default());
let epoch = completion.increment_current_epoch();
let ticket = AckTicket::new(epoch, completion.clone());

thread::spawn({
    let completion = completion.clone();
    move || {
        thread::sleep(time::Duration::from_millis(10));
        completion.mark_epoch_as_durable(epoch);
        completion.notify_all_listeners();
    }
});

assert_eq!(ticket.wait().unwrap(), epoch);
Source

pub fn force(&self) -> FrozenResult<TEpoch>

Forces synchronization for this ticket and blocks until it becomes durable

If a background sync thread is running, signals the worker to sync immediately; otherwise executes the sync synchronously under the lock

§Example
use frozen_core::ack::{AckTicket, Completion};
use std::sync::Arc;

let completion = Arc::new(Completion::default());
completion.mark_epoch_as_durable(5);
let ticket = AckTicket::new(5, completion);

assert_eq!(ticket.force().unwrap(), 5);
Source

pub fn completion(&self) -> &Arc<Completion> ⓘ

Reference to the underlying shared Completion

Trait Implementations§

Source§

impl Clone for AckTicket

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 Debug for AckTicket

Source§

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

Formats the value using the given formatter. Read more

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.