From 42249823aa4283f6a03b8d58bd5bbcb9edce5404 Mon Sep 17 00:00:00 2001 From: Thang Pham Date: Wed, 29 Jun 2022 15:23:27 -0400 Subject: [PATCH] avoid additional serialize call --- .../src/layered_repository/delta_layer.rs | 19 +++++++++++++++++++ .../src/layered_repository/inmemory_layer.rs | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/pageserver/src/layered_repository/delta_layer.rs b/pageserver/src/layered_repository/delta_layer.rs index ed342c0cca..0bb4b8a9ef 100644 --- a/pageserver/src/layered_repository/delta_layer.rs +++ b/pageserver/src/layered_repository/delta_layer.rs @@ -672,6 +672,25 @@ impl DeltaLayerWriter { Ok(()) } + pub fn put_value_bytes( + &mut self, + key: Key, + lsn: Lsn, + val: &[u8], + will_init: bool, + ) -> Result<()> { + assert!(self.lsn_range.start <= lsn); + + let off = self.blob_writer.write_blob(val)?; + + let blob_ref = BlobRef::new(off, will_init); + + let delta_key = DeltaKey::from_key_lsn(&key, lsn); + self.tree.append(&delta_key.0, blob_ref.0)?; + + Ok(()) + } + pub fn size(&self) -> u64 { self.blob_writer.size() + self.tree.borrow_writer().size() } diff --git a/pageserver/src/layered_repository/inmemory_layer.rs b/pageserver/src/layered_repository/inmemory_layer.rs index 4d3c1013bd..7bf3261ddc 100644 --- a/pageserver/src/layered_repository/inmemory_layer.rs +++ b/pageserver/src/layered_repository/inmemory_layer.rs @@ -352,8 +352,8 @@ impl InMemoryLayer { // Write all page versions for (lsn, pos) in vec_map.as_slice() { cursor.read_blob_into_buf(*pos, &mut buf)?; - let val = Value::des(&buf)?; - delta_layer_writer.put_value(key, *lsn, val)?; + let will_init = Value::des(&buf)?.will_init(); + delta_layer_writer.put_value_bytes(key, *lsn, &buf, will_init)?; } }