From 847665d9d6235e7098f535edcd1b5c6bb47326fb Mon Sep 17 00:00:00 2001 From: Andrew Purtell Date: Wed, 22 Jun 2022 20:11:42 -0700 Subject: [PATCH] HBASE-27151 TestMultiRespectsLimits.testBlockMultiLimits repeatable failure Revert "HBASE-26856 BufferedDataBlockEncoder.OnheapDecodedCell value can get corrupted" This reverts commit b2f71f2049c73c53ed7fe1400e8ff25612667b62. --- .../io/encoding/BufferedDataBlockEncoder.java | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java index 6e5a3bda3af..b155d9b854e 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/io/encoding/BufferedDataBlockEncoder.java @@ -232,10 +232,9 @@ abstract class BufferedDataBlockEncoder extends AbstractDataBlockEncoder { int tOffset = 0; if (this.includeTags) { if (this.tagCompressionContext == null) { + tagsArray = valAndTagsBuffer.array(); tOffset = valAndTagsBuffer.arrayOffset() + vOffset + this.valueLength + tagsLenSerializationSize; - tagsArray = Bytes.copy(valAndTagsBuffer.array(), tOffset, this.tagsLength); - tOffset = 0; } else { tagsArray = Bytes.copy(tagsBuffer, 0, this.tagsLength); tOffset = 0; @@ -244,9 +243,9 @@ abstract class BufferedDataBlockEncoder extends AbstractDataBlockEncoder { return new OnheapDecodedCell(Bytes.copy(keyBuffer, 0, this.keyLength), currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(), currentKey.getQualifierOffset(), currentKey.getQualifierLength(), currentKey.getTimestamp(), - currentKey.getTypeByte(), Bytes.copy(valAndTagsBuffer.array(), - valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength), - 0, this.valueLength, memstoreTS, tagsArray, tOffset, this.tagsLength); + currentKey.getTypeByte(), valAndTagsBuffer.array(), + valAndTagsBuffer.arrayOffset() + vOffset, this.valueLength, memstoreTS, tagsArray, tOffset, + this.tagsLength); } private Cell toOffheapCell(ByteBuffer valAndTagsBuffer, int vOffset, @@ -255,26 +254,13 @@ abstract class BufferedDataBlockEncoder extends AbstractDataBlockEncoder { int tOffset = 0; if (this.includeTags) { if (this.tagCompressionContext == null) { + tagsBuf = valAndTagsBuffer; tOffset = vOffset + this.valueLength + tagsLenSerializationSize; - byte[] output = new byte[this.tagsLength]; - ByteBufferUtils.copyFromBufferToArray(output, valAndTagsBuffer, tOffset, 0, - this.tagsLength); - tagsBuf = ByteBuffer.wrap(output); - tOffset = 0; } else { tagsBuf = ByteBuffer.wrap(Bytes.copy(tagsBuffer, 0, this.tagsLength)); tOffset = 0; } } - - if (this.valueLength > 0) { - byte[] output = new byte[this.valueLength]; - ByteBufferUtils.copyFromBufferToArray(output, valAndTagsBuffer, vOffset, 0, - this.valueLength); - valAndTagsBuffer = ByteBuffer.wrap(output); - vOffset = 0; - } - return new OffheapDecodedExtendedCell( ByteBuffer.wrap(Bytes.copy(keyBuffer, 0, this.keyLength)), currentKey.getRowLength(), currentKey.getFamilyOffset(), currentKey.getFamilyLength(), currentKey.getQualifierOffset(),