You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by iv...@apache.org on 2017/10/18 23:43:37 UTC

[bookkeeper] branch master updated: Fix concurrent v2 reads on the same ledger/entry

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

ivank 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 99bcf09  Fix concurrent v2 reads on the same ledger/entry
99bcf09 is described below

commit 99bcf09f6d5bbcef2f4c5228cd70e023c2348b03
Author: Matteo Merli <mm...@yahoo-inc.com>
AuthorDate: Thu Oct 19 01:43:31 2017 +0200

    Fix concurrent v2 reads on the same ledger/entry
    
    Original fix from by merlimat in the yahoo-4.3 branch
    
    Author: Matteo Merli <mm...@yahoo-inc.com>
    
    Reviewers: Enrico Olivelli <eo...@gmail.com>, Sijie Guo <si...@apache.org>
    
    This closes #645 from ivankelly/con-read-v2-fix
---
 .../org/apache/bookkeeper/proto/PerChannelBookieClient.java | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

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 dcc58f2..59510f5 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
@@ -726,9 +726,16 @@ public class PerChannelBookieClient extends ChannelInboundHandlerAdapter {
                     .build();
         }
 
-        completionObjects.put(completionKey,
-                              new ReadCompletion(completionKey, cb,
-                                                 ctx, ledgerId, entryId));
+        CompletionValue existingValue = completionObjects.putIfAbsent(
+                completionKey, new ReadCompletion(completionKey, cb,
+                                                  ctx, ledgerId, entryId));
+        if (existingValue != null) {
+            // There's a pending read request on same ledger/entry. This is not supported in V2 protocol
+            LOG.warn("Failing concurrent request to read at ledger: {} entry: {}", ledgerId, entryId);
+            cb.readEntryComplete(BKException.Code.UnexpectedConditionException, ledgerId, entryId, null, ctx);
+            return;
+        }
+
         writeAndFlush(channel, completionKey, request);
     }
 

-- 
To stop receiving notification emails like this one, please contact
['"commits@bookkeeper.apache.org" <co...@bookkeeper.apache.org>'].