This is an automated email from the ASF dual-hosted git repository.
lhotari 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 de34d1434c BP-69: Inherit LedgerHandle logger context in ledger
operations (#4767)
de34d1434c is described below
commit de34d1434cd3259b498dfbef61f3d7a26ee93251
Author: Matteo Merli <[email protected]>
AuthorDate: Tue May 5 00:58:41 2026 -0700
BP-69: Inherit LedgerHandle logger context in ledger operations (#4767)
* BP-69: Inherit LedgerHandle logger context in ledger operations
Operations created in the context of a LedgerHandle (PendingAddOp,
PendingReadOp, BatchedReadOp, ReadOpBase, ForceLedgerOp,
TryReadLastConfirmedOp, ReadLastConfirmedAndEntryOp, LedgerRecoveryOp,
PendingReadLacOp, PendingWriteLacOp) now attach LedgerHandle.log's
context (ledgerId, etc.) to every emitted event via Event.ctx(lh.log).
Using per-event ctx() rather than building a child Logger per op keeps
the static @CustomLog field allocation-free at the call site, while
still ensuring every operation log carries its parent ledger context.
ReadLastConfirmedAndEntryOp and LedgerRecoveryOp previously built an
instance-scoped Logger to carry the ledger context; they now use the
static @CustomLog logger plus per-event ctx(lh.log), removing one
Logger allocation per operation.
Redundant .attr("ledgerId", ...) calls (already provided by
LedgerHandle.log's context) are removed.
* Bump slog to 0.9.9
slog 0.9.9 makes Event.ctx(null) a no-op instead of throwing NPE,
which lets the operation classes call .ctx(lh.log) directly even
when the parent logger is unset (e.g. tests using mock LedgerHandle
where the log field is null).
---
.../src/main/resources/LICENSE-all.bin.txt | 4 ++--
.../src/main/resources/LICENSE-bkctl.bin.txt | 4 ++--
.../src/main/resources/LICENSE-server.bin.txt | 4 ++--
.../apache/bookkeeper/client/BatchedReadOp.java | 4 +++-
.../apache/bookkeeper/client/ForceLedgerOp.java | 6 +++---
.../apache/bookkeeper/client/LedgerRecoveryOp.java | 13 ++++++------
.../org/apache/bookkeeper/client/PendingAddOp.java | 20 +++++++++----------
.../apache/bookkeeper/client/PendingReadLacOp.java | 6 +++---
.../apache/bookkeeper/client/PendingReadOp.java | 7 +++++--
.../bookkeeper/client/PendingWriteLacOp.java | 2 +-
.../client/ReadLastConfirmedAndEntryOp.java | 23 +++++++++++++---------
.../org/apache/bookkeeper/client/ReadOpBase.java | 5 +++--
.../bookkeeper/client/TryReadLastConfirmedOp.java | 6 +++---
pom.xml | 2 +-
14 files changed, 58 insertions(+), 48 deletions(-)
diff --git a/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt
b/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt
index 207660d466..5c2a9c124c 100644
--- a/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt
+++ b/bookkeeper-dist/src/main/resources/LICENSE-all.bin.txt
@@ -216,7 +216,7 @@ Apache Software License, Version 2.
- lib/commons-codec-commons-codec-1.18.0.jar [6]
- lib/commons-io-commons-io-2.19.0.jar [8]
- lib/commons-logging-commons-logging-1.3.5.jar [10]
-- lib/io.github.merlimat.slog-slog-0.9.8.jar [64]
+- lib/io.github.merlimat.slog-slog-0.9.9.jar [64]
- lib/io.netty-netty-buffer-4.2.12.Final.jar [11]
- lib/io.netty-netty-codec-base-4.2.12.Final.jar [11]
- lib/io.netty-netty-codec-compression-4.2.12.Final.jar [11]
@@ -422,7 +422,7 @@ Apache Software License, Version 2.
[61] Source available at
https://github.com/apache/commons-text/tree/rel/commons-text-1.13.1
[62] Source available at
https://github.com/apache/commons-beanutils/tree/rel/commons-beanutils-1.11.0
[63] Source available at
https://github.com/googleapis/sdk-platform-java/tree/v2.53.0/api-common-java
-[64] Source available at https://github.com/merlimat/slog/tree/v0.9.8
+[64] Source available at https://github.com/merlimat/slog/tree/v0.9.9
------------------------------------------------------------------------------------
lib/io.netty-netty-codec-base-4.2.12.Final.jar bundles some 3rd party
dependencies
diff --git a/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt
b/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt
index 808babc8d6..a80f8d7964 100644
--- a/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt
+++ b/bookkeeper-dist/src/main/resources/LICENSE-bkctl.bin.txt
@@ -216,7 +216,7 @@ Apache Software License, Version 2.
- lib/commons-codec-commons-codec-1.18.0.jar [6]
- lib/commons-io-commons-io-2.19.0.jar [8]
- lib/commons-logging-commons-logging-1.3.5.jar [10]
-- lib/io.github.merlimat.slog-slog-0.9.8.jar [59]
+- lib/io.github.merlimat.slog-slog-0.9.9.jar [59]
- lib/io.netty-netty-buffer-4.2.12.Final.jar [11]
- lib/io.netty-netty-codec-base-4.2.12.Final.jar [11]
- lib/io.netty-netty-common-4.2.12.Final.jar [11]
@@ -355,7 +355,7 @@ Apache Software License, Version 2.
[56] Source available at
https://github.com/apache/commons-text/tree/rel/commons-text-1.13.1
[57] Source available at
https://github.com/apache/commons-beanutils/tree/rel/commons-beanutils-1.11.0
[58] Source available at
https://github.com/googleapis/sdk-platform-java/tree/v2.53.0/api-common-java
-[59] Source available at https://github.com/merlimat/slog/tree/v0.9.8
+[59] Source available at https://github.com/merlimat/slog/tree/v0.9.9
------------------------------------------------------------------------------------
lib/io.netty-netty-codec-base-4.2.12.Final.jar bundles some 3rd party
dependencies
diff --git a/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt
b/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt
index b9f76c2ef3..f4f289f8c2 100644
--- a/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt
+++ b/bookkeeper-dist/src/main/resources/LICENSE-server.bin.txt
@@ -216,7 +216,7 @@ Apache Software License, Version 2.
- lib/commons-codec-commons-codec-1.18.0.jar [6]
- lib/commons-io-commons-io-2.19.0.jar [8]
- lib/commons-logging-commons-logging-1.3.5.jar [10]
-- lib/io.github.merlimat.slog-slog-0.9.8.jar [63]
+- lib/io.github.merlimat.slog-slog-0.9.9.jar [63]
- lib/io.netty-netty-buffer-4.2.12.Final.jar [11]
- lib/io.netty-netty-codec-base-4.2.12.Final.jar [11]
- lib/io.netty-netty-codec-compression-4.2.12.Final.jar [11]
@@ -417,7 +417,7 @@ Apache Software License, Version 2.
[60] Source available at
https://github.com/apache/commons-text/tree/rel/commons-text-1.13.1
[61] Source available at
https://github.com/apache/commons-beanutils/tree/rel/commons-beanutils-1.11.0
[62] Source available at
https://github.com/googleapis/sdk-platform-java/tree/v2.53.0/api-common-java
-[63] Source available at https://github.com/merlimat/slog/tree/v0.9.8
+[63] Source available at https://github.com/merlimat/slog/tree/v0.9.9
------------------------------------------------------------------------------------
lib/io.netty-netty-codec-base-4.2.12.Final.jar bundles some 3rd party
dependencies
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BatchedReadOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BatchedReadOp.java
index 774d57ed92..ebba79faea 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BatchedReadOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BatchedReadOp.java
@@ -79,7 +79,7 @@ public class BatchedReadOp extends ReadOpBase implements
BatchedReadEntryCallbac
long latencyNanos = MathUtils.elapsedNanos(requestTimeNanos);
if (code != BKException.Code.OK) {
log.error()
- .attr("ledgerId", lh.getId())
+ .ctx(lh.log)
.attr("startEntryId", startEntryId)
.attr("entryId", startEntryId + maxCount - 1)
.attr("sentToHosts", sentToHosts)
@@ -278,6 +278,7 @@ public class BatchedReadOp extends ReadOpBase implements
BatchedReadEntryCallbac
return to;
} catch (InterruptedException ie) {
log.error()
+ .ctx(lh.log)
.attr("readOp", this)
.exception(ie)
.log("Interrupted reading entry");
@@ -293,6 +294,7 @@ public class BatchedReadOp extends ReadOpBase implements
BatchedReadEntryCallbac
int replica = writeSet.indexOf(bookieIndex);
if (replica == NOT_FOUND) {
log.error()
+ .ctx(lh.log)
.attr("bookieAddr", host)
.attr("ensemble", ensemble)
.log("Received error from a host which is not in the
ensemble");
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ForceLedgerOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ForceLedgerOp.java
index 2597849d63..c0735e9758 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ForceLedgerOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ForceLedgerOp.java
@@ -71,7 +71,7 @@ class ForceLedgerOp implements Runnable, ForceLedgerCallback {
this.currentNonDurableLastAddConfirmed = lh.pendingAddsSequenceHead;
log.debug()
- .attr("ledgerId", lh.ledgerId)
+ .ctx(lh.log)
.attr("nonDurableLac", currentNonDurableLastAddConfirmed)
.log("force clientNonDurableLac");
@@ -111,7 +111,7 @@ class ForceLedgerOp implements Runnable,
ForceLedgerCallback {
// for every acknowledged entry before issuing the force() call
log.debug()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("nonDurableLac", currentNonDurableLastAddConfirmed)
.log("After force on ledger, updating LastAddConfirmed");
@@ -122,7 +122,7 @@ class ForceLedgerOp implements Runnable,
ForceLedgerCallback {
// at least one bookie failed, as we are waiting for all the
bookies
// we can fail immediately
log.error()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("bookieAddr", addr)
.log("ForceLedger did not succeed");
errored = true;
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerRecoveryOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerRecoveryOp.java
index 52c30aeec1..a019157038 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerRecoveryOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerRecoveryOp.java
@@ -18,9 +18,9 @@
package org.apache.bookkeeper.client;
import com.google.common.annotations.VisibleForTesting;
-import io.github.merlimat.slog.Logger;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicLong;
+import lombok.CustomLog;
import org.apache.bookkeeper.client.AsyncCallback.AddCallback;
import org.apache.bookkeeper.client.api.LedgerMetadata;
import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.ReadEntryListener;
@@ -32,10 +32,9 @@ import
org.apache.bookkeeper.proto.checksum.DigestManager.RecoveryData;
* starting from the last confirmed entry (from hints in the ledger entries),
* it reads forward until it is not able to find a particular entry.
*/
+@CustomLog
class LedgerRecoveryOp implements ReadEntryListener, AddCallback {
- private final Logger log;
-
final LedgerHandle lh;
final ClientContext clientCtx;
final CompletableFuture<LedgerHandle> promise;
@@ -69,7 +68,6 @@ class LedgerRecoveryOp implements ReadEntryListener,
AddCallback {
}
public LedgerRecoveryOp(LedgerHandle lh, ClientContext clientCtx) {
- this.log = Logger.get(LedgerRecoveryOp.class).with().attr("ledgerId",
lh.getId()).build();
readCount = new AtomicLong(0);
writeCount = new AtomicLong(0);
readDone = false;
@@ -196,6 +194,7 @@ class LedgerRecoveryOp implements ReadEntryListener,
AddCallback {
// check whether entry id is expected, so we won't overwritten
any entries by mistake
if (entry.getEntryId() != lh.lastAddPushed + 1) {
log.error()
+ .ctx(lh.log)
.attr("entryId", entry.getEntryId())
.attr("expectedEntryId", (lh.lastAddPushed + 1))
.log("Unexpected entryId during recovery add");
@@ -224,18 +223,18 @@ class LedgerRecoveryOp implements ReadEntryListener,
AddCallback {
// otherwise, some other error, we can't handle
if (BKException.Code.OK != rc && !promise.isDone()) {
log.error()
+ .ctx(lh.log)
.attr("getMessage", BKException.getMessage(rc))
.attr("startEntryId", startEntryToRead)
.attr("endEntryId", endEntryToRead)
- .attr("ledgerId", lh.getId())
.log("Failure while reading entries: ( - ), ledger: while
recovering ledger");
submitCallback(rc);
} else if (BKException.Code.OK == rc) {
// we are here is because we successfully read an entry but
readDone was already set to true.
// this would happen on recovery a ledger than has gaps in the
tail.
log.warn()
+ .ctx(lh.log)
.attr("entryId", entry.getEntryId())
- .attr("ledgerId", lh.getId())
.attr("readDone", readDone)
.log("Successfully read entry, but readDone is already
set");
}
@@ -246,9 +245,9 @@ class LedgerRecoveryOp implements ReadEntryListener,
AddCallback {
public void addComplete(int rc, LedgerHandle lh, long entryId, Object ctx)
{
if (rc != BKException.Code.OK) {
log.error()
+ .ctx(lh.log)
.attr("codeLogger", BKException.codeLogger(rc))
.attr("entryId", entryId + 1)
- .attr("ledgerId", lh.ledgerId)
.log("Failure while writing entry while recovering
ledger");
submitCallback(rc);
return;
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java
index 37eefdbad7..e2cd81ef2f 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingAddOp.java
@@ -223,7 +223,7 @@ class PendingAddOp implements WriteCallback {
log.debug()
- .attr("ledgerId", lh.ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("bookieIndex", bookieIndex)
.log("Unsetting success");
@@ -283,7 +283,7 @@ class PendingAddOp implements WriteCallback {
// ensemble has already changed, failure of this addr is immaterial
log.debug()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.log("Write did not succeed. But we have already fixed
it.");
@@ -343,7 +343,7 @@ class PendingAddOp implements WriteCallback {
return;
case BKException.Code.LedgerFencedException:
log.warn()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("bookieAddr", addr)
.log("Fencing exception on write");
@@ -351,7 +351,7 @@ class PendingAddOp implements WriteCallback {
return;
case BKException.Code.UnauthorizedAccessException:
log.warn()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("bookieAddr", addr)
.log("Unauthorized access exception on write");
@@ -363,7 +363,7 @@ class PendingAddOp implements WriteCallback {
|| rc ==
BKException.Code.WriteOnReadOnlyBookieException) {
Map<Integer, BookieId> failedBookies =
ackSet.getFailedBookies();
log.warn()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("failedBookies", failedBookies)
.log("Failed to write entry to bookies, handling
failures");
@@ -371,7 +371,7 @@ class PendingAddOp implements WriteCallback {
lh.handleBookieFailure(failedBookies);
} else {
log.debug()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("bookieIndex", bookieIndex)
.attr("bookieAddr", addr)
@@ -381,7 +381,7 @@ class PendingAddOp implements WriteCallback {
}
} else {
log.warn()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("bookieIndex", bookieIndex)
.attr("bookieAddr", addr)
@@ -399,7 +399,7 @@ class PendingAddOp implements WriteCallback {
lh.getLedgerMetadata().getWriteQuorumSize(),
lh.getLedgerMetadata().getAckQuorumSize()))) {
log.warn()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.log("Write success for entry ID delayed, not
acknowledged by bookies in enough fault domains");
// Increment to indicate write did not complete due to not
enough fault domains
@@ -432,7 +432,7 @@ class PendingAddOp implements WriteCallback {
synchronized void submitCallback(final int rc) {
log.debug()
- .attr("ledgerId", () -> lh.getId())
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("rc", rc)
.log("Submit callback");
@@ -442,7 +442,7 @@ class PendingAddOp implements WriteCallback {
if (rc != BKException.Code.OK) {
clientCtx.getClientStats().getAddOpLogger().registerFailedEvent(latencyNanos,
TimeUnit.NANOSECONDS);
log.error()
- .attr("ledgerId", lh.getId())
+ .ctx(lh.log)
.attr("entryId", entryId)
.log("Write of ledger entry to quorum failed");
} else {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadLacOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadLacOp.java
index 896d3478ce..1f7ec85013 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadLacOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadLacOp.java
@@ -121,7 +121,7 @@ class PendingReadLacOp implements ReadLacCallback {
// Too bad, this bookie did not give us a valid answer, we
// still might be able to recover. So, continue
log.error()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("bookieAddr", currentEnsemble.get(bookieIndex))
.log("Mac mismatch while reading LAC from bookie");
rc = BKException.Code.DigestMatchException;
@@ -149,7 +149,7 @@ class PendingReadLacOp implements ReadLacCallback {
completed = true;
log.debug()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("maxLac", maxLac)
.log("Read LAC complete with enough validResponse");
@@ -159,7 +159,7 @@ class PendingReadLacOp implements ReadLacCallback {
if (numResponsesPending == 0 && !completed) {
log.error()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("coverageSet", coverageSet)
.log("While readLac did not hear success responses from
all of ensemble");
cb.getLacComplete(lastSeenError, maxLac);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadOp.java
index 79cfa41bfa..cc37ca15a6 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingReadOp.java
@@ -118,7 +118,7 @@ class PendingReadOp extends ReadOpBase implements
ReadEntryCallback {
if (numPendingEntries < 0) {
log.error()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("startEntryId", startEntryId)
.attr("endEntryId", endEntryId)
.log("Read too many values");
@@ -153,7 +153,7 @@ class PendingReadOp extends ReadOpBase implements
ReadEntryCallback {
}
}
log.error()
- .attr("ledgerId", lh.getId())
+ .ctx(lh.log)
.attr("startEntryId", startEntryId)
.attr("endEntryId", endEntryId)
.attr("sentToHosts", sentToHosts)
@@ -257,6 +257,7 @@ class PendingReadOp extends ReadOpBase implements
ReadEntryCallback {
sendReadTo(writeSet.get(i), to, this);
} catch (InterruptedException ie) {
log.error()
+ .ctx(lh.log)
.exception(ie)
.attr("readOp", this)
.log("Interrupted reading entry");
@@ -375,6 +376,7 @@ class PendingReadOp extends ReadOpBase implements
ReadEntryCallback {
return to;
} catch (InterruptedException ie) {
log.error()
+ .ctx(lh.log)
.exception(ie)
.attr("readOp", this)
.log("Interrupted reading entry");
@@ -391,6 +393,7 @@ class PendingReadOp extends ReadOpBase implements
ReadEntryCallback {
int replica = writeSet.indexOf(bookieIndex);
if (replica == NOT_FOUND) {
log.error()
+ .ctx(lh.log)
.attr("bookieAddr", host)
.attr("ensemble", ensemble)
.log("Received error from a host which is not in the
ensemble");
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingWriteLacOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingWriteLacOp.java
index cc686e4861..373c6832ac 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingWriteLacOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/PendingWriteLacOp.java
@@ -110,7 +110,7 @@ class PendingWriteLacOp implements WriteLacCallback {
}
} else {
log.warn()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("bookieAddr", addr)
.log("WriteLac did not succeed");
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadLastConfirmedAndEntryOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadLastConfirmedAndEntryOp.java
index 2b7ebaaaf6..ed3b90c20c 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadLastConfirmedAndEntryOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadLastConfirmedAndEntryOp.java
@@ -21,7 +21,6 @@
package org.apache.bookkeeper.client;
import com.google.common.util.concurrent.ListenableFuture;
-import io.github.merlimat.slog.Logger;
import io.netty.buffer.ByteBuf;
import java.util.BitSet;
import java.util.List;
@@ -29,6 +28,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
+import lombok.CustomLog;
import org.apache.bookkeeper.client.api.LedgerMetadata;
import org.apache.bookkeeper.client.impl.LedgerEntryImpl;
import org.apache.bookkeeper.common.util.MathUtils;
@@ -41,6 +41,7 @@ import org.apache.bookkeeper.proto.checksum.DigestManager;
/**
* Long poll read operation.
*/
+@CustomLog
class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEntryCallback,
SpeculativeRequestExecutor {
@@ -64,7 +65,6 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
private long timeOutInMillis;
private final List<BookieId> currentEnsemble;
private ScheduledFuture<?> speculativeTask = null;
- protected final Logger log;
abstract class ReadLACAndEntryRequest implements AutoCloseable {
@@ -203,6 +203,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
log.debug()
+ .ctx(lh.log)
.attr("error", errMsg)
.attr("entryId", () -> entryImpl.getEntryId())
.attr("bookieAddr", host)
@@ -261,6 +262,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
sendReadTo(orderedEnsemble.get(i), to, this);
} catch (InterruptedException ie) {
log.error()
+ .ctx(lh.log)
.exception(ie)
.log("Interrupted reading entry");
Thread.currentThread().interrupt();
@@ -387,6 +389,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
return to;
} catch (InterruptedException ie) {
log.error()
+ .ctx(lh.log)
.attr("addEntryOp", this)
.exception(ie)
.log("Interrupted reading entry");
@@ -403,6 +406,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
int replica = getReplicaIndex(bookieIndex);
if (replica == NOT_FOUND) {
log.error()
+ .ctx(lh.log)
.attr("bookieAddr", host)
.attr("ensemble", ensemble)
.log("Received error from a host which is not in the
ensemble");
@@ -463,11 +467,6 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
- getLedgerMetadata().getAckQuorumSize();
heardFromHostsBitSet = new
BitSet(getLedgerMetadata().getEnsembleSize());
emptyResponsesFromHostsBitSet = new
BitSet(getLedgerMetadata().getEnsembleSize());
- this.log = Logger.get(ReadLastConfirmedAndEntryOp.class)
- .with()
- .attr("ledgerId", lh.getId())
- .attr("prevEntryId", prevEntryId)
- .build();
}
protected LedgerMetadata getLedgerMetadata() {
@@ -497,6 +496,8 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
&& (null !=
request.maybeSendSpeculativeRead(heardFromHostsBitSet))) {
log.debug()
+ .ctx(lh.log)
+ .attr("prevEntryId", prevEntryId)
.attr("request", request)
.attr("lastAddConfirmed", lastAddConfirmed)
.attr("heardFromHostsBitSet", heardFromHostsBitSet)
@@ -524,6 +525,8 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
void sendReadTo(int bookieIndex, BookieId to, ReadLACAndEntryRequest
entry) throws InterruptedException {
log.debug()
+ .ctx(lh.log)
+ .attr("prevEntryId", prevEntryId)
.attr("timeOutInMillis", timeOutInMillis)
.attr("bookieAddr", to)
.attr("parallelRead", parallelRead)
@@ -571,7 +574,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
@Override
public void readEntryComplete(int rc, long ledgerId, long entryId, ByteBuf
buffer, Object ctx) {
log.trace()
- .attr("class", getClass().getName())
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("rc", rc)
.log("received response");
@@ -581,6 +584,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
numResponsesPending--;
if (BKException.Code.OK == rc) {
log.trace()
+ .ctx(lh.log)
.attr("getLastAddConfirmed", () ->
rCtx.getLastAddConfirmed())
.attr("bookieAddr", bookie)
.log("Received lastAddConfirmed");
@@ -619,6 +623,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
completeRequest();
} else if (emptyResponsesFromHostsBitSet.cardinality() >=
numEmptyResponsesAllowed) {
log.debug()
+ .ctx(lh.log)
.attr("cardinality", () ->
emptyResponsesFromHostsBitSet.cardinality())
.attr("emptyResponsesFromHostsBitSet",
emptyResponsesFromHostsBitSet)
.log("Completed readLACAndEntry after received
empty responses");
@@ -626,7 +631,7 @@ class ReadLastConfirmedAndEntryOp implements
BookkeeperInternalCallbacks.ReadEnt
completeRequest();
} else {
log.debug()
- .attr("bookieAddr", () -> rCtx.getBookieAddress())
+ .ctx(lh.log)
.attr("bookieAddr", () -> rCtx.getBookieAddress())
.attr("lastAddConfirmed", lastAddConfirmed)
.log("Received empty response from bookie,
reattempting reading next bookie");
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOpBase.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOpBase.java
index eb16f473c7..00f32ecee5 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOpBase.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOpBase.java
@@ -196,7 +196,7 @@ public abstract class ReadOpBase implements Runnable {
++numBookiesMissingEntry;
log.debug()
- .attr("ledgerId", lh.ledgerId)
+ .ctx(lh.log)
.attr("entryId", eId)
.attr("bookieAddr", host)
.log("No such entry found on bookie");
@@ -204,8 +204,8 @@ public abstract class ReadOpBase implements Runnable {
} else {
log.info()
+ .ctx(lh.log)
.attr("error", errMsg)
- .attr("ledgerId", lh.ledgerId)
.attr("entryId", eId)
.attr("bookieAddr", host)
.log("Error while reading from bookie");
@@ -262,6 +262,7 @@ public abstract class ReadOpBase implements Runnable {
if (!isComplete() && null !=
maybeSendSpeculativeRead(heardFromHostsBitSet)) {
log.debug()
+ .ctx(lh.log)
.attr("readOp", this)
.attr("sentToHosts", sentToHosts)
.attr("heardFromHostsBitSet",
heardFromHostsBitSet)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TryReadLastConfirmedOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TryReadLastConfirmedOp.java
index 729f03d0aa..926ddb757b 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TryReadLastConfirmedOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TryReadLastConfirmedOp.java
@@ -67,7 +67,7 @@ class TryReadLastConfirmedOp implements ReadEntryCallback {
public void readEntryComplete(int rc, long ledgerId, long entryId, ByteBuf
buffer, Object ctx) {
log.trace()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("rc", rc)
.log("TryReadLastConfirmed received response");
@@ -80,10 +80,10 @@ class TryReadLastConfirmedOp implements ReadEntryCallback {
RecoveryData recoveryData =
lh.macManager.verifyDigestAndReturnLastConfirmed(buffer);
log.trace()
+ .ctx(lh.log)
.attr("lastAddConfirmed", () ->
recoveryData.getLastAddConfirmed())
.attr("length", () -> recoveryData.getLength())
.attr("bookieIndex", bookieIndex)
- .attr("ledgerId", ledgerId)
.log("Received lastAddConfirmed");
if (recoveryData.getLastAddConfirmed() >
maxRecoveredData.getLastAddConfirmed()) {
@@ -94,7 +94,7 @@ class TryReadLastConfirmedOp implements ReadEntryCallback {
hasValidResponse = true;
} catch (BKException.BKDigestMatchException e) {
log.error()
- .attr("ledgerId", ledgerId)
+ .ctx(lh.log)
.attr("entryId", entryId)
.attr("bookieAddr", currentEnsemble.get(bookieIndex))
.log("Mac mismatch while reading last entry from
bookie");
diff --git a/pom.xml b/pom.xml
index ca8f11086a..26a4c4004a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -191,7 +191,7 @@
<rocksdb.version>9.9.3</rocksdb.version>
<shrinkwrap.version>3.3.0</shrinkwrap.version>
<slf4j.version>2.0.12</slf4j.version>
- <slog.version>0.9.8</slog.version>
+ <slog.version>0.9.9</slog.version>
<snakeyaml.version>2.0</snakeyaml.version>
<spotbugs-annotations.version>4.6.0</spotbugs-annotations.version>
<spotless.version>2.43.0</spotless.version>