From c11c19d5681a3c78464a3a40f6cbb453d98a5525 Mon Sep 17 00:00:00 2001 From: Bojan Serafimov Date: Mon, 12 Dec 2022 20:25:24 -0500 Subject: [PATCH] Check for exact match --- pageserver/src/tenant/bst_layer_map.rs | 4 ---- pageserver/src/tenant/layer_map.rs | 12 ++++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pageserver/src/tenant/bst_layer_map.rs b/pageserver/src/tenant/bst_layer_map.rs index fb245c2eae..0ed62c4ec0 100644 --- a/pageserver/src/tenant/bst_layer_map.rs +++ b/pageserver/src/tenant/bst_layer_map.rs @@ -55,8 +55,6 @@ impl PersistentLayerMap { } pub fn insert(self: &mut Self, key: Range, lsn: Range, value: Value) { - // TODO check for off-by-one errors - // It's only a persistent map, not a retroactive one if let Some(last_entry) = self.historic.iter().rev().next() { let last_lsn = last_entry.0; @@ -112,8 +110,6 @@ impl PersistentLayerMap { } pub fn query(self: &Self, key: i128, lsn: u64) -> Option { - // TODO check for off-by-one errors - let version = self.historic.range(0..=lsn).rev().next()?.1; version .range(0..=key) diff --git a/pageserver/src/tenant/layer_map.rs b/pageserver/src/tenant/layer_map.rs index b3ba7c502b..7fd65d2215 100644 --- a/pageserver/src/tenant/layer_map.rs +++ b/pageserver/src/tenant/layer_map.rs @@ -272,6 +272,18 @@ impl LayerMap { // might be better. let latest_layer = self.index.query(key.to_i128(), end_lsn.0 - 1); let latest_image = self.images.query(key.to_i128(), end_lsn.0 - 1); + + // Check for exact match + if let Some(image) = &latest_image { + let img_lsn = image.get_lsn_range().start; + if Lsn(img_lsn.0 + 1) == end_lsn { + return Ok(Some(SearchResult { + layer: Arc::clone(&image), + lsn_floor: img_lsn, + })); + } + } + return Ok(latest_layer.map(|layer| { // Compute lsn_floor let mut lsn_floor = layer.get_lsn_range().start;