merlimat commented on code in PR #4609:
URL: https://github.com/apache/bookkeeper/pull/4609#discussion_r2116274593
##########
bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/AddCompletion.java:
##########
@@ -0,0 +1,130 @@
+package org.apache.bookkeeper.proto;
Review Comment:
All the files are missing the license header
##########
bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/AddCompletion.java:
##########
@@ -0,0 +1,130 @@
+package org.apache.bookkeeper.proto;
+
+import io.netty.util.Recycler;
+import org.apache.bookkeeper.client.BKException;
+import org.apache.bookkeeper.net.BookieId;
+import org.slf4j.MDC;
+
+class AddCompletion extends CompletionValue implements
BookkeeperInternalCallbacks.WriteCallback {
+
+ static AddCompletion acquireAddCompletion(final CompletionKey key,
+ final
BookkeeperInternalCallbacks.WriteCallback originalCallback,
+ final Object originalCtx,
+ final long ledgerId, final long
entryId,
+ PerChannelBookieClient
perChannelBookieClient) {
+ AddCompletion completion = addCompletionRecycler.get();
+ completion.reset(key, originalCallback, originalCtx, ledgerId,
entryId, perChannelBookieClient);
+ return completion;
+ }
+
+ final Recycler.Handle<AddCompletion> handle;
+
+ CompletionKey key = null;
+ BookkeeperInternalCallbacks.WriteCallback originalCallback = null;
+
+ AddCompletion(Recycler.Handle<AddCompletion> handle) {
+ super("Add", null, -1, -1, null);
+ this.handle = handle;
+ }
+
+ void reset(final CompletionKey key,
+ final BookkeeperInternalCallbacks.WriteCallback
originalCallback,
+ final Object originalCtx,
+ final long ledgerId, final long entryId,
+ PerChannelBookieClient perChannelBookieClient) {
+ this.key = key;
+ this.originalCallback = originalCallback;
+ this.ctx = originalCtx;
+ this.ledgerId = ledgerId;
+ this.entryId = entryId;
+ this.startTime =
org.apache.bookkeeper.common.util.MathUtils.nowInNano();
+
+ this.opLogger = perChannelBookieClient.addEntryOpLogger;
+ this.timeoutOpLogger = perChannelBookieClient.addTimeoutOpLogger;
+ this.perChannelBookieClient = perChannelBookieClient;
+ this.mdcContextMap =
perChannelBookieClient.preserveMdcForTaskExecution ? MDC.getCopyOfContextMap()
: null;
+ }
+
+ @Override
+ public void release() {
+ this.ctx = null;
+ this.opLogger = null;
+ this.timeoutOpLogger = null;
+ this.perChannelBookieClient = null;
+ this.mdcContextMap = null;
+ handle.recycle(this);
+ }
+
+ @Override
+ public void writeComplete(int rc, long ledgerId, long entryId,
+ BookieId addr,
+ Object ctx) {
+ logOpResult(rc);
+ originalCallback.writeComplete(rc, ledgerId, entryId, addr, ctx);
+ key.release();
+ this.release();
+ }
+
+ @Override
+ boolean maybeTimeout() {
+ if
(org.apache.bookkeeper.common.util.MathUtils.elapsedNanos(startTime) >=
+ perChannelBookieClient.addEntryTimeoutNanos) {
+ timeout();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public void errorOut() {
+ errorOut(BKException.Code.BookieHandleNotAvailableException);
+ }
+
+ @Override
+ public void errorOut(final int rc) {
+ errorOutAndRunCallback(
+ () -> writeComplete(rc, ledgerId, entryId,
perChannelBookieClient.bookieId, ctx));
+ }
+
+ @Override
+ public void setOutstanding() {
+ perChannelBookieClient.addEntryOutstanding.inc();
+ }
+
+ @Override
+ public void handleV2Response(
+ long ledgerId, long entryId, BookkeeperProtocol.StatusCode status,
+ BookieProtocol.Response response) {
+ perChannelBookieClient.addEntryOutstanding.dec();
+ handleResponse(ledgerId, entryId, status);
+ }
+
+ @Override
+ public void handleV3Response(
+ BookkeeperProtocol.Response response) {
+ perChannelBookieClient.addEntryOutstanding.dec();
+ BookkeeperProtocol.AddResponse addResponse = response.getAddResponse();
+ BookkeeperProtocol.StatusCode status = response.getStatus() ==
BookkeeperProtocol.StatusCode.EOK
+ ? addResponse.getStatus() : response.getStatus();
+ handleResponse(addResponse.getLedgerId(), addResponse.getEntryId(),
+ status);
+ }
+
+ private void handleResponse(long ledgerId, long entryId,
+ BookkeeperProtocol.StatusCode status) {
+ if (LOG.isDebugEnabled()) {
+ logResponse(status, "ledger", ledgerId, "entry", entryId);
+ }
+
+ int rc = convertStatus(status, BKException.Code.WriteException);
+ writeComplete(rc, ledgerId, entryId, perChannelBookieClient.bookieId,
ctx);
+ }
+
+ private static final Recycler<AddCompletion> addCompletionRecycler = new
Recycler<AddCompletion>() {
Review Comment:
`ADD_COMPLETION_RECYCLER`
##########
bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/EntryCompletionKey.java:
##########
@@ -0,0 +1,61 @@
+package org.apache.bookkeeper.proto;
+
+import io.netty.util.Recycler;
+
+class EntryCompletionKey extends CompletionKey {
+ private final Recycler.Handle<EntryCompletionKey> recyclerHandle;
+ long ledgerId;
+ long entryId;
+
+ static EntryCompletionKey acquireV2Key(long ledgerId, long entryId,
+ BookkeeperProtocol.OperationType
operationType) {
+ EntryCompletionKey key = v2KeyRecycler.get();
+ key.reset(ledgerId, entryId, operationType);
+ return key;
+ }
+
+ private EntryCompletionKey(Recycler.Handle<EntryCompletionKey> handle) {
+ super(null);
+ this.recyclerHandle = handle;
+ }
+
+ void reset(long ledgerId, long entryId, BookkeeperProtocol.OperationType
operationType) {
+ this.ledgerId = ledgerId;
+ this.entryId = entryId;
+ this.operationType = operationType;
+ }
+
+ @Override
+ public boolean equals(Object object) {
+ if (!(object instanceof EntryCompletionKey)) {
+ return false;
+ }
+ EntryCompletionKey that = (EntryCompletionKey) object;
+ return this.entryId == that.entryId
+ && this.ledgerId == that.ledgerId
+ && this.operationType == that.operationType;
+ }
+
+ @Override
+ public int hashCode() {
+ return Long.hashCode(ledgerId) * 31 + Long.hashCode(entryId);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%d:%d %s", ledgerId, entryId, operationType);
+ }
+
+ public void release() {
+ recyclerHandle.recycle(this);
+ }
+
+ private static final Recycler<EntryCompletionKey> v2KeyRecycler =
Review Comment:
Rename like `V2_KEY_RECYCLER` to follow convention for static variables.
##########
bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/AddCompletion.java:
##########
@@ -0,0 +1,130 @@
+package org.apache.bookkeeper.proto;
+
+import io.netty.util.Recycler;
+import org.apache.bookkeeper.client.BKException;
+import org.apache.bookkeeper.net.BookieId;
+import org.slf4j.MDC;
+
+class AddCompletion extends CompletionValue implements
BookkeeperInternalCallbacks.WriteCallback {
Review Comment:
Actually, after reviewing a bit, it kind of makes sense to split the classes
in this PR, since it forces all classes to be static.
--
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]