This is an automated email from the ASF dual-hosted git repository.
ndimiduk pushed a commit to branch branch-2.5
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.5 by this push:
new caffc5fc2bf HBASE-29172 Fix bug in ZstdByteBuffDecompressor (#6767)
caffc5fc2bf is described below
commit caffc5fc2bfa66d751d5de7551ef86358c572291
Author: Charles Connell <[email protected]>
AuthorDate: Fri Mar 14 06:46:05 2025 -0500
HBASE-29172 Fix bug in ZstdByteBuffDecompressor (#6767)
Signed-off-by: Ray Mattingly <[email protected]>
Signed-off-by: Nick Dimiduk <[email protected]>
---
.../io/compress/zstd/ZstdByteBuffDecompressor.java | 2 ++
.../io/compress/zstd/TestZstdByteBuffDecompressor.java | 18 +++++++++++++-----
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git
a/hbase-compression/hbase-compression-zstd/src/main/java/org/apache/hadoop/hbase/io/compress/zstd/ZstdByteBuffDecompressor.java
b/hbase-compression/hbase-compression-zstd/src/main/java/org/apache/hadoop/hbase/io/compress/zstd/ZstdByteBuffDecompressor.java
index 399753b9283..ec5315aa4c0 100644
---
a/hbase-compression/hbase-compression-zstd/src/main/java/org/apache/hadoop/hbase/io/compress/zstd/ZstdByteBuffDecompressor.java
+++
b/hbase-compression/hbase-compression-zstd/src/main/java/org/apache/hadoop/hbase/io/compress/zstd/ZstdByteBuffDecompressor.java
@@ -98,6 +98,7 @@ public class ZstdByteBuffDecompressor implements
ByteBuffDecompressor, CanReinit
output.limit() - output.position(), input, input.position(), inputLen);
output.position(origOutputPos + n);
+ input.position(input.position() + inputLen);
return n;
}
@@ -109,6 +110,7 @@ public class ZstdByteBuffDecompressor implements
ByteBuffDecompressor, CanReinit
inputLen);
output.position(origOutputPos + n);
+ input.position(input.position() + inputLen);
return n;
}
diff --git
a/hbase-compression/hbase-compression-zstd/src/test/java/org/apache/hadoop/hbase/io/compress/zstd/TestZstdByteBuffDecompressor.java
b/hbase-compression/hbase-compression-zstd/src/test/java/org/apache/hadoop/hbase/io/compress/zstd/TestZstdByteBuffDecompressor.java
index 66d21081ba7..be52d17f133 100644
---
a/hbase-compression/hbase-compression-zstd/src/test/java/org/apache/hadoop/hbase/io/compress/zstd/TestZstdByteBuffDecompressor.java
+++
b/hbase-compression/hbase-compression-zstd/src/test/java/org/apache/hadoop/hbase/io/compress/zstd/TestZstdByteBuffDecompressor.java
@@ -40,10 +40,16 @@ public class TestZstdByteBuffDecompressor {
public static final HBaseClassTestRule CLASS_RULE =
HBaseClassTestRule.forClass(TestZstdByteBuffDecompressor.class);
- // "HBase is awesome" compressed with zstd, and then prepended with metadata
as a
- // BlockCompressorStream would
+ /*
+ * "HBase is fun to use and very fast" compressed with zstd, and then
prepended with metadata as a
+ * BlockCompressorStream would. The phrase is split in three parts and put
into the payload in
+ * this structure: (block 1: (chunk 1: HBase is), (chunk 2: fun to use)),
(block 2: (chunk 1: and
+ * very fast))
+ */
private static final byte[] COMPRESSED_PAYLOAD =
-
Bytes.fromHex("000000100000001928b52ffd2010810000484261736520697320617765736f6d65");
+ Bytes.fromHex("000000130000001228b52ffd200949000048426173652069732"
+ + "00000001428b52ffd200b59000066756e20746f207573652"
+ + "00000000d0000001628b52ffd200d690000616e6420766572792066617374");
@Test
public void testCapabilities() {
@@ -71,7 +77,8 @@ public class TestZstdByteBuffDecompressor {
ByteBuff output = new SingleByteBuff(ByteBuffer.allocate(64));
ByteBuff input = new SingleByteBuff(ByteBuffer.wrap(COMPRESSED_PAYLOAD));
int decompressedSize = decompressor.decompress(output, input,
COMPRESSED_PAYLOAD.length);
- assertEquals("HBase is awesome", Bytes.toString(output.toBytes(0,
decompressedSize)));
+ assertEquals("HBase is fun to use and very fast",
+ Bytes.toString(output.toBytes(0, decompressedSize)));
}
}
@@ -83,7 +90,8 @@ public class TestZstdByteBuffDecompressor {
input.put(COMPRESSED_PAYLOAD);
input.rewind();
int decompressedSize = decompressor.decompress(output, input,
COMPRESSED_PAYLOAD.length);
- assertEquals("HBase is awesome", Bytes.toString(output.toBytes(0,
decompressedSize)));
+ assertEquals("HBase is fun to use and very fast",
+ Bytes.toString(output.toBytes(0, decompressedSize)));
}
}