From e6a0e7ec614511ff0f122825a1dd83c614c59ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arpad=20M=C3=BCller?= Date: Fri, 7 Jun 2024 17:35:41 +0200 Subject: [PATCH] Add zstd with low compression quality --- libs/pageserver_api/src/models.rs | 1 + pageserver/src/tenant/blob_io.rs | 10 ++++++++-- pageserver/src/tenant/storage_layer/image_layer.rs | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libs/pageserver_api/src/models.rs b/libs/pageserver_api/src/models.rs index 608459c4c3..be412e6659 100644 --- a/libs/pageserver_api/src/models.rs +++ b/libs/pageserver_api/src/models.rs @@ -469,6 +469,7 @@ pub enum CompactionAlgorithm { )] #[strum(serialize_all = "kebab-case")] pub enum ImageCompressionAlgorithm { + ZstdLow, Zstd, ZstdHigh, LZ4, diff --git a/pageserver/src/tenant/blob_io.rs b/pageserver/src/tenant/blob_io.rs index 99ddcf6f7c..f3b33a6c1c 100644 --- a/pageserver/src/tenant/blob_io.rs +++ b/pageserver/src/tenant/blob_io.rs @@ -266,10 +266,16 @@ impl BlobWriter { const UNCOMPRESSED: u8 = 0x80; const ZSTD: u8 = UNCOMPRESSED | 0x10; const LZ4: u8 = UNCOMPRESSED | 0x20; + use ImageCompressionAlgorithm::*; let (high_bit_mask, len_written, srcbuf) = match algorithm { - Some(ImageCompressionAlgorithm::Zstd | ImageCompressionAlgorithm::ZstdHigh) => { + Some(ZstdLow | Zstd | ZstdHigh) => { let mut encoder = - if matches!(algorithm, Some(ImageCompressionAlgorithm::ZstdHigh)) { + if matches!(algorithm, Some(ZstdLow)) { + async_compression::tokio::write::ZstdEncoder::with_quality( + Vec::new(), + Level::Precise(1), + ) + } else if matches!(algorithm, Some(ZstdHigh)) { async_compression::tokio::write::ZstdEncoder::with_quality( Vec::new(), Level::Precise(6), diff --git a/pageserver/src/tenant/storage_layer/image_layer.rs b/pageserver/src/tenant/storage_layer/image_layer.rs index b337a14160..6c5a4f2b7e 100644 --- a/pageserver/src/tenant/storage_layer/image_layer.rs +++ b/pageserver/src/tenant/storage_layer/image_layer.rs @@ -381,6 +381,7 @@ impl ImageLayer { } let image_compressions = [ None, + Some(ImageCompressionAlgorithm::ZstdLow), Some(ImageCompressionAlgorithm::Zstd), Some(ImageCompressionAlgorithm::ZstdHigh), Some(ImageCompressionAlgorithm::LZ4),