diff options
author | Alex Auvolat <alex@adnab.me> | 2023-11-09 15:31:59 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2023-11-09 15:31:59 +0100 |
commit | 03ebf18830dff1983f09abe6ecb8d8d26daeb446 (patch) | |
tree | 64cda96cf24e4922fb78785fd7dcce02c0b80c04 /src/rpc/layout/schema.rs | |
parent | 94caf9c0c1342ce1d2ba3ac7af39fb133721ee83 (diff) | |
download | garage-03ebf18830dff1983f09abe6ecb8d8d26daeb446.tar.gz garage-03ebf18830dff1983f09abe6ecb8d8d26daeb446.zip |
layout: begin managing the update tracker values
Diffstat (limited to 'src/rpc/layout/schema.rs')
-rw-r--r-- | src/rpc/layout/schema.rs | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/rpc/layout/schema.rs b/src/rpc/layout/schema.rs index abae5bd8..9f5d6f62 100644 --- a/src/rpc/layout/schema.rs +++ b/src/rpc/layout/schema.rs @@ -3,6 +3,7 @@ use std::fmt; use bytesize::ByteSize; use garage_util::crdt::{AutoCrdt, Crdt}; +use garage_util::data::Uuid; mod v08 { use crate::layout::CompactNodeType; @@ -276,8 +277,7 @@ mod v010 { let update_tracker = UpdateTracker( version .nongateway_nodes() - .iter() - .map(|x| (*x, version.version)) + .map(|x| (x, version.version)) .collect::<HashMap<Uuid, u64>>(), ); let staging = LayoutStaging { @@ -375,8 +375,15 @@ impl UpdateTracker { changed } - pub(crate) fn min(&self) -> u64 { - self.0.iter().map(|(_, v)| *v).min().unwrap_or(0) + pub(crate) fn set_max(&mut self, peer: Uuid, value: u64) { + match self.0.get_mut(&peer) { + Some(e) => { + *e = std::cmp::max(*e, value); + } + None => { + self.0.insert(peer, value); + } + } } } |