diff options
author | Alex Auvolat <alex@adnab.me> | 2023-01-05 13:11:48 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2023-01-05 13:11:48 +0100 |
commit | 49b5d18554c67b84777d97f24423207c2375ae5e (patch) | |
tree | 70403f9899d8d47897e766fed6171f06ed047b35 /src/model/k2v/item_table.rs | |
parent | 02e8eb167efa1f08d69fe7f8e6192cde726c45aa (diff) | |
download | garage-49b5d18554c67b84777d97f24423207c2375ae5e.tar.gz garage-49b5d18554c67b84777d97f24423207c2375ae5e.zip |
K2V history and preparation for range watch
Diffstat (limited to 'src/model/k2v/item_table.rs')
-rw-r--r-- | src/model/k2v/item_table.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/model/k2v/item_table.rs b/src/model/k2v/item_table.rs index ce3e4129..90a2f4d0 100644 --- a/src/model/k2v/item_table.rs +++ b/src/model/k2v/item_table.rs @@ -18,7 +18,7 @@ pub const CONFLICTS: &str = "conflicts"; pub const VALUES: &str = "values"; pub const BYTES: &str = "bytes"; -mod v08 { +pub(super) mod v08 { use crate::k2v::causality::K2VNodeId; use garage_util::data::Uuid; use serde::{Deserialize, Serialize}; @@ -73,7 +73,8 @@ impl K2VItem { this_node: Uuid, context: &Option<CausalContext>, new_value: DvvsValue, - ) { + node_counter: u64, + ) -> u64 { if let Some(context) = context { for (node, t_discard) in context.vector_clock.iter() { if let Some(e) = self.items.get_mut(node) { @@ -98,7 +99,9 @@ impl K2VItem { values: vec![], }); let t_prev = e.max_time(); - e.values.push((t_prev + 1, new_value)); + let t_new = std::cmp::max(node_counter + 1, t_prev + 1); + e.values.push((t_new, new_value)); + t_new } /// Extract the causality context of a K2V Item @@ -237,7 +240,7 @@ impl TableSchema for K2VItemTable { // 2. Notify if let Some(new_ent) = new { - self.subscriptions.notify(new_ent); + self.subscriptions.notify_item(new_ent); } Ok(()) |