diff --git a/core/mvcc/README.md b/core/mvcc/README.md index a15efee67..eff22ea86 100644 --- a/core/mvcc/README.md +++ b/core/mvcc/README.md @@ -10,6 +10,12 @@ Run tests: cargo test ``` +Test coverage report: + +```console +cargo tarpaulin -o html +``` + Run benchmarks: ```console diff --git a/core/mvcc/database/src/clock.rs b/core/mvcc/database/src/clock.rs new file mode 100644 index 000000000..e6ef0dfc4 --- /dev/null +++ b/core/mvcc/database/src/clock.rs @@ -0,0 +1,26 @@ +use std::sync::atomic::{AtomicU64, Ordering}; + +/// Logical clock. +pub trait LogicalClock { + fn get_timestamp(&self) -> u64; +} + +/// A node-local clock backed by an atomic counter. +#[derive(Debug, Default)] +pub struct LocalClock { + ts_sequence: AtomicU64, +} + +impl LocalClock { + pub fn new() -> Self { + Self { + ts_sequence: AtomicU64::new(0), + } + } +} + +impl LogicalClock for LocalClock { + fn get_timestamp(&self) -> u64 { + self.ts_sequence.fetch_add(1, Ordering::SeqCst) + } +}