Skip to main content

SyncClock

Struct SyncClock 

Source
pub struct SyncClock {
    pub hlc: Hlc,
    pub knowledge: BTreeMap<u64, EstimateInterval>,
}
Expand description

A light-cone-aware CRDT clock: a Hybrid Logical Clock (causal order) plus per-node knowledge intervals (light-cone-bounded estimates of each peer’s current time). Its merge is a join over a lattice — max on the HLC, interval intersection per node — so replicas separated by bounded (even interplanetary) delay converge conflict-free, regardless of message order. This realises “spacelike separation = CRDT concurrency”: events with no shared light cone need no total order, only this commutative/associative/idempotent merge.

Fields§

§hlc: Hlc§knowledge: BTreeMap<u64, EstimateInterval>

Implementations§

Source§

impl SyncClock

Source

pub fn new() -> Self

Source

pub fn tick(&self, now_nanos: i64) -> SyncClock

Stamp a local event (advance the HLC); knowledge is carried unchanged.

Source

pub fn observe(&self, node: u64, interval: EstimateInterval) -> SyncClock

Record (and tighten) what this clock knows about node node’s current time. A fresh node is inserted; a known node’s interval is intersected, so observation can only narrow knowledge.

Source

pub fn merge(&self, other: &SyncClock) -> SyncClock

The CRDT join with another replica — max HLC (the lattice join on the derived total order), per-node interval intersection on shared keys, union of distinct keys. Commutative, associative, and idempotent, so gossip converges regardless of message order.

Trait Implementations§

Source§

impl Clone for SyncClock

Source§

fn clone(&self) -> SyncClock

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 SyncClock

Source§

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

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

impl Default for SyncClock

Source§

fn default() -> Self

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

impl PartialEq for SyncClock

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 Eq for SyncClock

Source§

impl StructuralPartialEq for SyncClock

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