avoid additional serialize call

This commit is contained in:
Thang Pham
2022-06-29 15:23:27 -04:00
parent 63b3195a31
commit 42249823aa
2 changed files with 21 additions and 2 deletions

View File

@@ -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()
}

View File

@@ -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)?;
}
}