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

mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 01fc858  Fixed buffer release in v2 BookieProtocol
01fc858 is described below

commit 01fc8580204d726b62ecb4aac99eeda4f3662acb
Author: Matteo Merli <[email protected]>
AuthorDate: Fri Mar 16 09:39:51 2018 -0700

    Fixed buffer release in v2 BookieProtocol
    
    There was a buffers leak when using V2 bookie protocol. This was introduced 
with the refactoring and the merges from yahoo branch.
    
    Note: this was only happening when selecting  v2 protocol in client 
configuration.
    
    The current code was missing a release in both the add and read entries 
path. I've been running it for some time and the ref-counting seems correct 
after the fix.
    
    Author: Matteo Merli <[email protected]>
    
    Reviewers: Sijie Guo <[email protected]>
    
    This closes #1266 from merlimat/fix-refcounting
---
 .../src/main/java/org/apache/bookkeeper/proto/BookieProtocol.java   | 6 ++----
 .../java/org/apache/bookkeeper/proto/PerChannelBookieClient.java    | 1 +
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtocol.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtocol.java
index 86c93e1..9982cca 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtocol.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieProtocol.java
@@ -24,6 +24,7 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.util.Recycler;
 import io.netty.util.Recycler.Handle;
+import io.netty.util.ReferenceCountUtil;
 
 import org.apache.bookkeeper.proto.BookkeeperProtocol.AuthMessage;
 import org.apache.bookkeeper.util.ByteBufList;
@@ -275,10 +276,6 @@ public interface BookieProtocol {
             return (flags & FLAG_RECOVERY_ADD) == FLAG_RECOVERY_ADD;
         }
 
-        void release() {
-            data.release();
-        }
-
         private final Handle<AddRequest> recyclerHandle;
         private AddRequest(Handle<AddRequest> recyclerHandle) {
             this.recyclerHandle = recyclerHandle;
@@ -295,6 +292,7 @@ public interface BookieProtocol {
             ledgerId = -1;
             entryId = -1;
             masterKey = null;
+            ReferenceCountUtil.safeRelease(data);
             data = null;
             recyclerHandle.recycle(this);
         }
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
index cc97fe1..91f0a69 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
@@ -1138,6 +1138,7 @@ public class PerChannelBookieClient extends 
ChannelInboundHandlerAdapter {
         @Override
         public void safeRun() {
             completionValue.handleV2Response(ledgerId, entryId, status, 
response);
+            response.release();
             response.recycle();
             recycle();
         }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to