From 7bc1274a037da523c5fd4767498a6a5011d55d30 Mon Sep 17 00:00:00 2001 From: Konstantin Knizhnik Date: Mon, 24 Jan 2022 12:19:18 +0300 Subject: [PATCH] Fix comparison with disk_consistent_lsn in newer_image_layer_exists (#1167) --- pageserver/src/layered_repository/layer_map.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pageserver/src/layered_repository/layer_map.rs b/pageserver/src/layered_repository/layer_map.rs index dce2163388..a91fde5236 100644 --- a/pageserver/src/layered_repository/layer_map.rs +++ b/pageserver/src/layered_repository/layer_map.rs @@ -321,9 +321,14 @@ impl SegEntry { // We only check on-disk layers, because // in-memory layers are not durable + // The end-LSN is exclusive, while disk_consistent_lsn is + // inclusive. For example, if disk_consistent_lsn is 100, it is + // OK for a delta layer to have end LSN 101, but if the end LSN + // is 102, then it might not have been fully flushed to disk + // before crash. self.historic .iter_newer(lsn) - .any(|layer| !layer.is_incremental() && layer.get_end_lsn() <= disk_consistent_lsn) + .any(|layer| !layer.is_incremental() && layer.get_end_lsn() <= disk_consistent_lsn + 1) } // Set new open layer for a SegEntry.