From 231e21ecc5b65ec18f3c4f761bcb8f3ac782bf9f Mon Sep 17 00:00:00 2001 From: John Spray Date: Thu, 18 Jul 2024 09:48:40 +0000 Subject: [PATCH] use image compression for image values in delta layers --- .../src/tenant/storage_layer/delta_layer.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/pageserver/src/tenant/storage_layer/delta_layer.rs b/pageserver/src/tenant/storage_layer/delta_layer.rs index 43941b6e17..6026db3c1d 100644 --- a/pageserver/src/tenant/storage_layer/delta_layer.rs +++ b/pageserver/src/tenant/storage_layer/delta_layer.rs @@ -457,8 +457,15 @@ impl DeltaLayerWriterInner { ctx: &RequestContext, ) -> (Vec, anyhow::Result<()>) { assert!(self.lsn_range.start <= lsn); - // We don't want to use compression in delta layer creation - let compression = ImageCompressionAlgorithm::Disabled; + + let compression = if val.len() >= 8192 { + // For full page images, respect configured image compression algorithm. + self.conf.image_compression + } else { + // For small writes, do not use compression. Compression ratios on tiny buffers do not justify CPU cost. + ImageCompressionAlgorithm::Disabled + }; + let (val, res) = self .blob_writer .write_blob_maybe_compressed(val, ctx, compression) @@ -479,6 +486,10 @@ impl DeltaLayerWriterInner { self.blob_writer.size() + self.tree.borrow_writer().size() } + fn size_values(&self) -> u64 { + self.blob_writer.size() + } + /// /// Finish writing the delta layer. /// @@ -668,6 +679,10 @@ impl DeltaLayerWriter { self.inner.as_ref().unwrap().size() } + pub fn size_values(&self) -> u64 { + self.inner.as_ref().unwrap().size_values() + } + /// /// Finish writing the delta layer. ///