This is an automated email from the ASF dual-hosted git repository.

chenhang pushed a commit to branch branch-2.8
in repository https://gitbox.apache.org/repos/asf/pulsar.git

commit b817fcd32738a1c4b6e7257dcc02e8b8eede6f7e
Author: Hang Chen <[email protected]>
AuthorDate: Thu Aug 26 17:50:30 2021 +0800

    revert PR 11594 to avoid copy data to direct buffer afer aircompressor 
upgrade to 0.20 (#11792)
    
    ### Motivation
    Due to aircompressor 0.19 can't work with heap buffer on JDK1.8, so #11594 
use copy data to direct buffer to avoid NoSuchMethodError exception. Now 
aircompressor released 0.20 and #11790 has upgrade the aircompressor version to 
0.20 to fix this issue, we can revert #11594 to avoid copy data to direct 
buffer to improve performance.
    
    ### Modification
    1. revert Fix java.lang.NoSuchMethodError: 
java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer when enabling topic 
metadata compression #11594, but keep the tests.
    
    (cherry picked from commit cc1b983561ec5fcd86ce78afd1493a20e904fe52)
---
 .../bookkeeper/mledger/impl/MetaStoreImpl.java     | 22 +++-------------------
 1 file changed, 3 insertions(+), 19 deletions(-)

diff --git 
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java
 
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java
index b21b41e..dd2ebfa 100644
--- 
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java
+++ 
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java
@@ -310,7 +310,6 @@ public class MetaStoreImpl implements MetaStore {
             return managedLedgerInfo.toByteArray();
         }
         ByteBuf metadataByteBuf = null;
-        ByteBuf uncompressedByteBuf = null;
         ByteBuf encodeByteBuf = null;
         try {
             MLDataFormats.ManagedLedgerInfoMetadata mlInfoMetadata = 
MLDataFormats.ManagedLedgerInfoMetadata
@@ -323,13 +322,9 @@ public class MetaStoreImpl implements MetaStore {
             metadataByteBuf.writeShort(MAGIC_MANAGED_LEDGER_INFO_METADATA);
             metadataByteBuf.writeInt(mlInfoMetadata.getSerializedSize());
             metadataByteBuf.writeBytes(mlInfoMetadata.toByteArray());
-            byte[] byteArray = managedLedgerInfo.toByteArray();
-            // The reason for copy the data to a direct buffer here is to 
ensure the metadata compression feature can
-            // work on JDK1.8, for more details to see: 
https://github.com/apache/pulsar/issues/11593
-            uncompressedByteBuf = Unpooled.directBuffer(byteArray.length);
-            uncompressedByteBuf.writeBytes(byteArray);
+
             encodeByteBuf = getCompressionCodec(compressionType)
-                    .encode(uncompressedByteBuf);
+                    
.encode(Unpooled.wrappedBuffer(managedLedgerInfo.toByteArray()));
             CompositeByteBuf compositeByteBuf = 
PulsarByteBufAllocator.DEFAULT.compositeBuffer();
             compositeByteBuf.addComponent(true, metadataByteBuf);
             compositeByteBuf.addComponent(true, encodeByteBuf);
@@ -340,9 +335,6 @@ public class MetaStoreImpl implements MetaStore {
             if (metadataByteBuf != null) {
                 metadataByteBuf.release();
             }
-            if (uncompressedByteBuf != null) {
-                uncompressedByteBuf.release();
-            }
             if (encodeByteBuf != null) {
                 encodeByteBuf.release();
             }
@@ -353,7 +345,6 @@ public class MetaStoreImpl implements MetaStore {
         ByteBuf byteBuf = Unpooled.wrappedBuffer(data);
         if (byteBuf.readableBytes() > 0 && byteBuf.readShort() == 
MAGIC_MANAGED_LEDGER_INFO_METADATA) {
             ByteBuf decodeByteBuf = null;
-            ByteBuf compressedByteBuf = null;
             try {
                 int metadataSize = byteBuf.readInt();
                 byte[] metadataBytes = new byte[metadataSize];
@@ -362,12 +353,8 @@ public class MetaStoreImpl implements MetaStore {
                         
MLDataFormats.ManagedLedgerInfoMetadata.parseFrom(metadataBytes);
 
                 long unpressedSize = metadata.getUncompressedSize();
-                // The reason for copy the data to a direct buffer here is to 
ensure the metadata compression feature
-                // can work on JDK1.8, for more details to see: 
https://github.com/apache/pulsar/issues/11593
-                compressedByteBuf = 
Unpooled.directBuffer(byteBuf.readableBytes());
-                compressedByteBuf.writeBytes(byteBuf);
                 decodeByteBuf = 
getCompressionCodec(metadata.getCompressionType())
-                        .decode(compressedByteBuf, (int) unpressedSize);
+                        .decode(byteBuf, (int) unpressedSize);
                 byte[] decodeBytes;
                 // couldn't decode data by ZLIB compression byteBuf array() 
directly
                 if (decodeByteBuf.hasArray() && 
!CompressionType.ZLIB.equals(metadata.getCompressionType())) {
@@ -385,9 +372,6 @@ public class MetaStoreImpl implements MetaStore {
                 if (decodeByteBuf != null) {
                     decodeByteBuf.release();
                 }
-                if (compressedByteBuf != null) {
-                    compressedByteBuf.release();
-                }
                 byteBuf.release();
             }
         } else {

Reply via email to