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>'].