Fix compressed blob writer

This commit is contained in:
Konstantin Knizhnik
2024-03-14 08:33:37 +02:00
parent 2a69861896
commit 18fefff026
2 changed files with 12 additions and 8 deletions
+1 -1
View File
@@ -47,7 +47,7 @@ pub const COMPRESSED_STORAGE_FORMAT_VERSION: u16 = 4;
/// Page image compression algorithm
pub const NO_COMPRESSION: u8 = 0;
pub const LZ4_COMPRESSION: u8 = 0;
pub const LZ4_COMPRESSION: u8 = 1;
pub const DEFAULT_PG_VERSION: u32 = 15;
+11 -7
View File
@@ -240,7 +240,7 @@ impl<const BUFFERED: bool> BlobWriter<BUFFERED> {
pub async fn write_compressed_blob(
&mut self,
srcbuf: Bytes,
compress: bool,
new_format: bool,
) -> Result<u64, Error> {
let offset = self.offset;
@@ -251,7 +251,9 @@ impl<const BUFFERED: bool> BlobWriter<BUFFERED> {
let mut is_compressed = false;
if len < 128 {
// Short blob. Write a 1-byte length header
io_buf.put_u8(NO_COMPRESSION);
if new_format {
io_buf.put_u8(NO_COMPRESSION);
}
io_buf.put_u8(len as u8);
} else {
// Write a 4-byte length header
@@ -261,7 +263,7 @@ impl<const BUFFERED: bool> BlobWriter<BUFFERED> {
format!("blob too large ({} bytes)", len),
));
}
if compress && len == BLCKSZ as usize {
if new_format && len == BLCKSZ as usize {
let compressed = lz4_flex::block::compress(&srcbuf);
if compressed.len() < len {
io_buf.put_u8(LZ4_COMPRESSION);
@@ -271,12 +273,14 @@ impl<const BUFFERED: bool> BlobWriter<BUFFERED> {
io_buf.extend_from_slice(&compressed[..]);
is_compressed = true;
}
if is_compressed {
}
if !is_compressed {
if new_format {
io_buf.put_u8(NO_COMPRESSION);
let mut len_buf = (len as u32).to_be_bytes();
len_buf[0] |= 0x80;
io_buf.extend_from_slice(&len_buf[..]);
}
let mut len_buf = (len as u32).to_be_bytes();
len_buf[0] |= 0x80;
io_buf.extend_from_slice(&len_buf[..]);
}
}
let (io_buf, hdr_res) = self.write_all(io_buf).await;