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

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


The following commit(s) were added to refs/heads/branch-4.8 by this push:
     new b5065b9  Avoid releasing sent buffer to early in BookieClient mock
b5065b9 is described below

commit b5065b9479404948b231ab55d5df561211579cb1
Author: Ivan Kelly <iv...@apache.org>
AuthorDate: Wed Sep 5 14:54:32 2018 +0200

    Avoid releasing sent buffer to early in BookieClient mock
    
    Cherry pick tp branch-4.8 commit 
https://github.com/apache/bookkeeper/commit/6b9cbf2052b27f331553f2738483ae21bf12b49c
 from Ivan Kelly
    
    If the buffer was sent to more than one bookie with the mock, it would
    be released after being sent to the first one. Each write should
    retain a refCount themselves, and then release when done.
    
    Author: Ivan Kelly <ivankapache.org>
    
    Relates to #1598, closes #1643
    
    Author: Ivan Kelly <iv...@apache.org>
    
    Reviewers: Sijie Guo <si...@apache.org>
    
    This closes #1651 from eolivelli/fix/cherry-pick-mock-client-tests-errors
---
 .../java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java     | 4 ++++
 1 file changed, 4 insertions(+)

diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java
index 6e1557a..20a8bb8 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/MockBookKeeperTestCase.java
@@ -511,6 +511,7 @@ public abstract class MockBookKeeperTestCase {
             boolean isRecoveryAdd =
                 ((short) options & BookieProtocol.FLAG_RECOVERY_ADD) == 
BookieProtocol.FLAG_RECOVERY_ADD;
 
+            toSend.retain();
             executor.executeOrdered(ledgerId, () -> {
                 byte[] entry;
                 try {
@@ -518,6 +519,7 @@ public abstract class MockBookKeeperTestCase {
                 } catch (BKDigestMatchException e) {
                     callback.writeComplete(Code.DigestMatchException,
                             ledgerId, entryId, bookieSocketAddress, ctx);
+                    toSend.release();
                     return;
                 }
                 boolean fenced = fencedLedgers.contains(ledgerId);
@@ -528,6 +530,7 @@ public abstract class MockBookKeeperTestCase {
                     if (failedBookies.contains(bookieSocketAddress)) {
                         callback.writeComplete(NoBookieAvailableException,
                                 ledgerId, entryId, bookieSocketAddress, ctx);
+                        toSend.release();
                         return;
                     }
                     if (getMockLedgerContentsInBookie(ledgerId, 
bookieSocketAddress).isEmpty()) {
@@ -538,6 +541,7 @@ public abstract class MockBookKeeperTestCase {
                     callback.writeComplete(BKException.Code.OK,
                             ledgerId, entryId, bookieSocketAddress, ctx);
                 }
+                toSend.release();
             });
 
             return null;

Reply via email to