From 204d65ad050ba14bb44fce93fba537c0cb87eed1 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Thu, 13 Apr 2023 10:09:23 +0300 Subject: [PATCH] Move clock code to `clock.rs` --- core/mvcc/database/src/database.rs | 27 ++------------------ core/mvcc/database/src/lib.rs | 1 + core/mvcc/database/tests/concurrency_test.rs | 3 ++- 3 files changed, 5 insertions(+), 26 deletions(-) diff --git a/core/mvcc/database/src/database.rs b/core/mvcc/database/src/database.rs index 837df7ef1..14f11e252 100644 --- a/core/mvcc/database/src/database.rs +++ b/core/mvcc/database/src/database.rs @@ -1,3 +1,4 @@ +use crate::clock::LogicalClock; use crate::errors::DatabaseError; use std::cell::RefCell; use std::collections::{HashMap, HashSet}; @@ -86,31 +87,6 @@ pub struct Database { type TxID = u64; -/// 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) - } -} - #[derive(Debug)] pub struct DatabaseInner { rows: RefCell>>, @@ -441,6 +417,7 @@ fn is_end_visible(txs: &HashMap, tx: &Transaction, rv: &RowVe #[cfg(test)] mod tests { use super::*; + use crate::clock::LocalClock; #[test] fn test_insert_read() { diff --git a/core/mvcc/database/src/lib.rs b/core/mvcc/database/src/lib.rs index e5ad14df6..a3b2e105f 100644 --- a/core/mvcc/database/src/lib.rs +++ b/core/mvcc/database/src/lib.rs @@ -31,5 +31,6 @@ //! * Optimistic reads and writes //! * Garbage collection +pub mod clock; pub mod database; pub mod errors; diff --git a/core/mvcc/database/tests/concurrency_test.rs b/core/mvcc/database/tests/concurrency_test.rs index b18e9a9bd..bc1e4f90a 100644 --- a/core/mvcc/database/tests/concurrency_test.rs +++ b/core/mvcc/database/tests/concurrency_test.rs @@ -1,4 +1,5 @@ -use mvcc_rs::database::{Database, LocalClock, Row}; +use mvcc_rs::clock::LocalClock; +use mvcc_rs::database::{Database, Row}; use shuttle::sync::atomic::AtomicU64; use shuttle::sync::Arc; use shuttle::thread;