You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by eo...@apache.org on 2022/06/08 10:04:49 UTC

[bookkeeper] branch branch-4.14 updated: Fix the PendingAddOp is not recycled when LedgerHandler closed (#3321)

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

eolivelli pushed a commit to branch branch-4.14
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/branch-4.14 by this push:
     new f2f1ab5ae3 Fix the PendingAddOp is not recycled when LedgerHandler closed (#3321)
f2f1ab5ae3 is described below

commit f2f1ab5ae306eca5d60e2777b99647b7fcb67ab0
Author: Yong Zhang <zh...@gmail.com>
AuthorDate: Wed Jun 8 18:02:32 2022 +0800

    Fix the PendingAddOp is not recycled when LedgerHandler closed (#3321)
    
    ---
    
    **Motivation**
    
    When adding an entry into a bookie, the entry data lifecycle
    is handled by the bookie client. The data buffer will be
    released after receiving a corresponding response from the
    bookie server. So the user doesn't care about the entry
    buffer releasing.
    But when the ledgerHandler is closed, the PendingAddOp is not
    recycled which leads to the data buffer never being released.
    We should release that after the callback executed.
    
    (cherry picked from commit 3d01e6e13cf5410e913859c5c92c002e986df518)
---
 .../src/main/java/org/apache/bookkeeper/client/LedgerHandle.java        | 2 ++
 .../src/main/java/org/apache/bookkeeper/client/PendingAddOp.java        | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java
index 661499e96c..d91e16567b 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java
@@ -1323,6 +1323,7 @@ public class LedgerHandle implements WriteHandle {
                         LOG.warn("Attempt to add to closed ledger: {}", ledgerId);
                         op.cb.addCompleteWithLatency(BKException.Code.LedgerClosedException,
                                 LedgerHandle.this, INVALID_ENTRY_ID, 0, op.ctx);
+                        op.recyclePendAddOpObject();
                     }
 
                     @Override
@@ -1334,6 +1335,7 @@ public class LedgerHandle implements WriteHandle {
                 op.cb.addCompleteWithLatency(BookKeeper.getReturnRc(clientCtx.getBookieClient(),
                                                                     BKException.Code.InterruptedException),
                         LedgerHandle.this, INVALID_ENTRY_ID, 0, op.ctx);
+                op.recyclePendAddOpObject();
             }
             return;
         }
diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java
index 729d9fe077..223ce182f7 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java
@@ -499,7 +499,7 @@ class PendingAddOp extends SafeRunnable implements WriteCallback {
         }
     }
 
-    private void recyclePendAddOpObject() {
+    public void recyclePendAddOpObject() {
         entryId = LedgerHandle.INVALID_ENTRY_ID;
         currentLedgerLength = -1;
         if (payload != null) {