delta with correct range

Signed-off-by: Alex Chi Z <chi@neon.tech>
This commit is contained in:
Alex Chi Z
2023-06-29 09:11:15 -04:00
parent d279b4421e
commit d4e262f646
2 changed files with 18 additions and 6 deletions

View File

@@ -11,6 +11,7 @@ use crate::tenant::blob_io::{BlobCursor, BlobWriter};
use crate::tenant::block_io::BlockReader;
use crate::tenant::ephemeral_file::EphemeralFile;
use crate::tenant::storage_layer::{ValueReconstructResult, ValueReconstructState};
use crate::tenant::timeline::ENABLE_TIERED_COMPACTION;
use crate::walrecord;
use anyhow::{ensure, Result};
use pageserver_api::models::InMemoryLayerInfo;
@@ -341,11 +342,18 @@ impl InMemoryLayer {
// rare though, so we just accept the potential latency hit for now.
let inner = self.inner.read().unwrap();
let mut keys: Vec<(&Key, &VecMap<Lsn, u64>)> = inner.index.iter().collect();
keys.sort_by_key(|k| k.0);
let mut delta_layer_writer = DeltaLayerWriter::new(
self.conf,
self.timeline_id,
self.tenant_id,
Key::MIN,
if ENABLE_TIERED_COMPACTION {
keys.first().unwrap().0.clone()
} else {
Key::MIN
},
self.start_lsn..inner.end_lsn.unwrap(),
)?;
@@ -353,9 +361,6 @@ impl InMemoryLayer {
let mut cursor = inner.file.block_cursor();
let mut keys: Vec<(&Key, &VecMap<Lsn, u64>)> = inner.index.iter().collect();
keys.sort_by_key(|k| k.0);
for (key, vec_map) in keys.iter() {
let key = **key;
// Write all page versions
@@ -366,7 +371,11 @@ impl InMemoryLayer {
}
}
let delta_layer = delta_layer_writer.finish(Key::MAX)?;
let delta_layer = delta_layer_writer.finish(if ENABLE_TIERED_COMPACTION {
keys.last().unwrap().0.next()
} else {
Key::MAX
})?;
Ok(delta_layer)
}
}

View File

@@ -3232,6 +3232,9 @@ impl Timeline {
force: bool,
ctx: &RequestContext,
) -> Result<HashMap<LayerFileName, LayerFileMetadata>, PageReconstructError> {
if ENABLE_TIERED_COMPACTION {
return Ok(HashMap::new());
}
let timer = self.metrics.create_images_time_histo.start_timer();
let mut image_layers: Vec<ImageLayer> = Vec::new();
@@ -4074,7 +4077,7 @@ impl Timeline {
let mut construct_image_for_key = false;
let image_lsn = Lsn(lsn_range.end.0 - 1);
const PAGE_MATERIALIZE_THRESHOLD: usize = 64;
const PAGE_MATERIALIZE_THRESHOLD: usize = 40;
for x in all_values_iter {
let (key, lsn, value) = x?;