From 95dd5c71bf37a37cd52ac933909a5e503f4f2249 Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Tue, 21 Mar 2023 19:24:25 +0200 Subject: [PATCH] Prohibit insertion fo dulicated layers in layer map --- .../tenant/layer_map/historic_layer_coverage.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pageserver/src/tenant/layer_map/historic_layer_coverage.rs b/pageserver/src/tenant/layer_map/historic_layer_coverage.rs index 8487609a5f..f4d758e784 100644 --- a/pageserver/src/tenant/layer_map/historic_layer_coverage.rs +++ b/pageserver/src/tenant/layer_map/historic_layer_coverage.rs @@ -418,6 +418,12 @@ impl BufferedHistoricLayerCoverage { } pub fn insert(&mut self, layer_key: LayerKey, value: Value) { + // layer duplicates are not allowed + assert!(!self.layers.contains_key(&layer_key)); + self.buffer.insert(layer_key, Some(value)); + } + + pub fn replace_existed(&mut self, layer_key: LayerKey, value: Value) { self.buffer.insert(layer_key, Some(value)); } @@ -472,7 +478,7 @@ impl BufferedHistoricLayerCoverage { } None => Replacement::NotFound, Some(_existing) => { - self.insert(layer_key.to_owned(), new); + self.replace_existed(layer_key.to_owned(), new); Replacement::Replaced { in_buffered } } } @@ -490,12 +496,10 @@ impl BufferedHistoricLayerCoverage { self.buffer.retain(|layer_key, layer| { match layer { Some(l) => { - // There should not be duplicate layers - assert!(self.layers.insert(layer_key.clone(), l.clone()).is_none()); + self.layers.insert(layer_key.clone(), l.clone()); } None => { - // layer is present in the tree - assert!(self.layers.remove(layer_key).is_some()); + self.layers.remove(layer_key); } }; false