From 9cdd9a2801d4e08b56a89aeb55d4f823f142e17d Mon Sep 17 00:00:00 2001 From: Alex Chi Z Date: Tue, 11 Jul 2023 13:59:26 -0400 Subject: [PATCH] fix Signed-off-by: Alex Chi Z --- pageserver/src/tenant/layer_map.rs | 4 ++-- pageserver/src/tenant/timeline.rs | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pageserver/src/tenant/layer_map.rs b/pageserver/src/tenant/layer_map.rs index e28272eb2c..8b9a2262ad 100644 --- a/pageserver/src/tenant/layer_map.rs +++ b/pageserver/src/tenant/layer_map.rs @@ -269,7 +269,7 @@ impl LayerMap { match (latest_delta, latest_image) { (None, None) => None, (None, Some(image)) => { - let lsn_floor = image.get_lsn_range().start; + let lsn_floor = image.get_lsn_range().end; Some(SearchResult { layer: image, lsn_floor, @@ -289,7 +289,7 @@ impl LayerMap { if image_is_newer || image_exact_match { Some(SearchResult { layer: image, - lsn_floor: img_lsn, + lsn_floor: img_lsn + 1, }) } else { let lsn_floor = diff --git a/pageserver/src/tenant/timeline.rs b/pageserver/src/tenant/timeline.rs index a70cec2759..7a907c09d0 100644 --- a/pageserver/src/tenant/timeline.rs +++ b/pageserver/src/tenant/timeline.rs @@ -2570,6 +2570,7 @@ impl Timeline { let open_layer = Arc::clone(open_layer); move || open_layer.traversal_id() }), + false, )); continue 'outer; } @@ -2598,6 +2599,7 @@ impl Timeline { let frozen_layer = Arc::clone(frozen_layer); move || frozen_layer.traversal_id() }), + false, )); continue 'outer; } @@ -2632,9 +2634,7 @@ impl Timeline { && matches!(result, ValueReconstructResult::Continue) { last_round_image = true; - continue 'outer; - }; - + } cont_lsn = lsn_floor; *read_count += 1; traversal_path.push(( @@ -2644,6 +2644,7 @@ impl Timeline { let layer = Arc::clone(&layer); move || layer.traversal_id() }), + exclude_image_this_round, )); continue 'outer; } @@ -5419,6 +5420,7 @@ type TraversalPathItem = ( ValueReconstructResult, Lsn, Box TraversalId>, + bool, ); /// Helper function for get_reconstruct_data() to add the path of layers traversed @@ -5428,12 +5430,13 @@ fn layer_traversal_error(msg: String, path: Vec) -> PageRecon // is the most high-level information, which also gets propagated to the client. let mut msg_iter = path .into_iter() - .map(|(r, c, l)| { + .map(|(r, c, l, exclude_image)| { format!( - "layer traversal: result {:?}, cont_lsn {}, layer: {}", + "layer traversal: result {:?}, cont_lsn {}, layer: {}, exclude_image: {}", r, c, l(), + exclude_image, ) }) .chain(std::iter::once(msg));