mirror of
https://github.com/neondatabase/neon.git
synced 2026-06-04 14:00:38 +00:00
@@ -261,7 +261,8 @@ impl LayerMap {
|
||||
let version = self.historic.get().unwrap().get_version(end_lsn.0 - 1)?;
|
||||
let latest_delta = version.delta_coverage.query(key.to_i128());
|
||||
let latest_image = if exclude_image {
|
||||
None
|
||||
let version = self.historic.get().unwrap().get_version(end_lsn.0 - 2)?;
|
||||
version.image_coverage.query(key.to_i128())
|
||||
} else {
|
||||
version.image_coverage.query(key.to_i128())
|
||||
};
|
||||
|
||||
@@ -2449,7 +2449,7 @@ impl Timeline {
|
||||
self.metrics.materialized_page_cache_hit_counter.inc_by(1);
|
||||
return Ok(());
|
||||
}
|
||||
if prev_lsn <= cont_lsn {
|
||||
if cont_lsn > prev_lsn || (cont_lsn == prev_lsn && !exclude_image_this_round) {
|
||||
// Didn't make any progress in last iteration. Error out to avoid
|
||||
// getting stuck in the loop.
|
||||
return Err(layer_traversal_error(format!(
|
||||
@@ -2633,6 +2633,10 @@ impl Timeline {
|
||||
if !layer.layer_desc().is_delta
|
||||
&& matches!(result, ValueReconstructResult::Continue)
|
||||
{
|
||||
assert!(
|
||||
!exclude_image_this_round
|
||||
|| (exclude_image_this_round && lsn_floor != cont_lsn)
|
||||
);
|
||||
last_round_image = true;
|
||||
}
|
||||
cont_lsn = lsn_floor;
|
||||
@@ -2644,7 +2648,7 @@ impl Timeline {
|
||||
let layer = Arc::clone(&layer);
|
||||
move || layer.traversal_id()
|
||||
}),
|
||||
exclude_image_this_round,
|
||||
last_round_image,
|
||||
));
|
||||
continue 'outer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user