Fix broken replication_log, include task-id in every log
Utilize Flogger's logging tag feature. A small disadvantage is that
the trace context is a part of the log message i.e. we cannot really
control the layout. What was earlier:
[2020-05-04 ...] [c0b3774c] Missing repository could not be created when replicating <repo-url>
becomes now:
[2020-05-04 ...] Missing repository could not be created when replicating <repo-url> [CONTEXT PLUGIN="replication" pushOneId="c0b3774c" ]
Bug: Issue 12678
Change-Id: I0d18f89312e31a93403a5cee57b027eb597faf53
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
index 199acce..ff6306f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/PushOne.java
@@ -35,6 +35,7 @@
import com.google.gerrit.server.git.ProjectRunnable;
import com.google.gerrit.server.git.WorkQueue.CanceledWhileRunning;
import com.google.gerrit.server.ioutil.HexFormat;
+import com.google.gerrit.server.logging.TraceContext;
import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.permissions.PermissionBackend.RefFilterOptions;
import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -74,7 +75,6 @@
import org.eclipse.jgit.transport.RemoteRefUpdate;
import org.eclipse.jgit.transport.Transport;
import org.eclipse.jgit.transport.URIish;
-import org.slf4j.MDC;
/**
* A push to remote operation started by {@link GitReferenceUpdatedListener}.
@@ -85,7 +85,7 @@
class PushOne implements ProjectRunnable, CanceledWhileRunning {
private final ReplicationStateListener stateLog;
static final String ALL_REFS = "..all..";
- static final String ID_MDC_KEY = "pushOneId";
+ static final String ID_KEY = "pushOneId";
interface Factory {
PushOne create(Project.NameKey d, URIish u);
@@ -310,11 +310,16 @@
}
private void runPushOperation() {
+ try (TraceContext ctx = TraceContext.open().addTag(ID_KEY, HexFormat.fromInt(id))) {
+ doRunPushOperation();
+ }
+ }
+
+ private void doRunPushOperation() {
// Lock the queue, and remove ourselves, so we can't be modified once
// we start replication (instead a new instance, with the same URI, is
// created and scheduled for a future point in time.)
//
- MDC.put(ID_MDC_KEY, HexFormat.fromInt(id));
RunwayStatus status = pool.requestRunway(this);
if (!status.isAllowed()) {
if (status.isCanceled()) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationLogFile.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationLogFile.java
index fed09f9..60a9523 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationLogFile.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationLogFile.java
@@ -28,6 +28,6 @@
systemLog,
serverInfo,
ReplicationQueue.REPLICATION_LOG_NAME,
- new PatternLayout("[%d] [%X{" + PushOne.ID_MDC_KEY + "}] %m%n"));
+ new PatternLayout("[%d] %m%n"));
}
}