dlg99 commented on code in PR #22799:
URL: https://github.com/apache/pulsar/pull/22799#discussion_r1779286249


##########
managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java:
##########
@@ -453,8 +456,13 @@ public ManagedLedgerInfo parseManagedLedgerInfo(byte[] 
data) throws InvalidProto
             try {
                 MLDataFormats.ManagedLedgerInfoMetadata metadata =
                         
MLDataFormats.ManagedLedgerInfoMetadata.parseFrom(metadataBytes);
-                return 
ManagedLedgerInfo.parseFrom(getCompressionCodec(metadata.getCompressionType())
-                        .decode(byteBuf, 
metadata.getUncompressedSize()).nioBuffer());
+                ByteBuf decode = 
getCompressionCodec(metadata.getCompressionType())
+                        .decode(byteBuf, metadata.getUncompressedSize());
+                try {
+                    return ManagedLedgerInfo.parseFrom(decode.nioBuffer());
+                } finally {
+                    decode.release();

Review Comment:
   Maybe I am missing something, but as I understand:
   
   * parseFrom() needs a nio buffer.
   * .nioBuffer() will return nio buffer with shared data if ByteBuff is backed 
by heap array/nio buffer, otherwise it will duplicate the buffer into a nio 
buffer.
   * ManagedLedgerInfo does not have .release() method or equivalent
   * ManagedLedgerInfo does not have .copyFrom() method
   
   decode not being released was a bug that can go unnoticed in some cases, or 
result in e.g. slow direct memory leak in others.
   
   I guess you were thinking about google's protobuf with perf 
optimized/manually constructed CodedInputStream/ByteString.



##########
managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/MetaStoreImpl.java:
##########
@@ -475,8 +483,13 @@ public ManagedCursorInfo parseManagedCursorInfo(byte[] 
data) throws InvalidProto
             try {
                 MLDataFormats.ManagedCursorInfoMetadata metadata =
                         
MLDataFormats.ManagedCursorInfoMetadata.parseFrom(metadataBytes);
-                return 
ManagedCursorInfo.parseFrom(getCompressionCodec(metadata.getCompressionType())
-                        .decode(byteBuf, 
metadata.getUncompressedSize()).nioBuffer());
+                ByteBuf decode = 
getCompressionCodec(metadata.getCompressionType())
+                        .decode(byteBuf, metadata.getUncompressedSize());
+                try {
+                    return ManagedCursorInfo.parseFrom(decode.nioBuffer());
+                } finally {
+                    decode.release();

Review Comment:
   see above



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to