StevenLuMT commented on code in PR #3041:
URL: https://github.com/apache/bookkeeper/pull/3041#discussion_r933697367
##########
bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java:
##########
@@ -2002,6 +2002,20 @@ void unsetSuccessAndSendWriteRequest(List<BookieId>
ensemble, final Set<Integer>
pendingAddOp.unsetSuccessAndSendWriteRequest(ensemble,
bookieIndex);
}
}
+ // Some entries could fulfill ack requirement before and after
ensemble changed.
+ // We need to invoke #sendAddSuccessCallbacks() for such entries
because
+ // they may have already completed, but they are just waiting for the
ensemble
+ // change to complete.
+ // E.g.
+ // ensemble (A, B, C, D), entry k is written to (A, B, D). An ensemble
change
+ // happens to replace C with E. Entry k does not complete until C is
+ // replaced with E successfully. When the ensemble change completes,
it tries
+ // to unset entry k. C however is not in k's write set, so no entry is
written
+ // again, and no one triggers #sendAddSuccessCallbacks. Consequently,
k never
+ // completes.
+ //
+ // We call sendAddSuccessCallback after unsetting all pending adds to
cover this case.
+ sendAddSuccessCallbacks();
Review Comment:
ok,nice
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]