Merge branch 'stable-3.6' into stable-3.7
* stable-3.6:
Log publishing of stream events in message_log file
Change-Id: Iea04107d8bfab4627650ec1bd30ba817461df582
diff --git a/src/main/java/com/googlesource/gerrit/plugins/pubsub/Log4jPubsubMessageLogger.java b/src/main/java/com/googlesource/gerrit/plugins/pubsub/Log4jPubsubMessageLogger.java
new file mode 100644
index 0000000..ac3f984
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/pubsub/Log4jPubsubMessageLogger.java
@@ -0,0 +1,38 @@
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.pubsub;
+
+import com.google.gerrit.extensions.systemstatus.ServerInformation;
+import com.google.gerrit.server.util.PluginLogFile;
+import com.google.gerrit.server.util.SystemLog;
+import com.google.inject.Inject;
+import org.apache.log4j.PatternLayout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Log4jPubsubMessageLogger extends PluginLogFile {
+ private static final String LOG_NAME = "message_log";
+ private final Logger msgLog;
+
+ @Inject
+ public Log4jPubsubMessageLogger(SystemLog systemLog, ServerInformation serverInfo) {
+ super(systemLog, serverInfo, LOG_NAME, new PatternLayout("[%d{ISO8601}] [%t] %-5p : %m%n"));
+ this.msgLog = LoggerFactory.getLogger(LOG_NAME);
+ }
+
+ public void log(String topic, String event) {
+ msgLog.info("PUBLISH {} {}", topic, event);
+ }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java b/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java
index 2a030c9..29d4342 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisher.java
@@ -46,6 +46,7 @@
private final String topic;
private final Publisher publisher;
private final PubSubConfiguration pubSubProperties;
+ private final Log4jPubsubMessageLogger msgLog;
@Inject
public PubSubPublisher(
@@ -53,13 +54,15 @@
PublisherProvider publisherProvider,
@EventGson Gson gson,
PubSubPublisherMetrics publisherMetrics,
- @Assisted String topic)
+ @Assisted String topic,
+ Log4jPubsubMessageLogger msgLog)
throws IOException {
this.gson = gson;
this.publisherMetrics = publisherMetrics;
this.topic = topic;
this.publisher = publisherProvider.get(topic);
this.pubSubProperties = pubSubProperties;
+ this.msgLog = msgLog;
}
public ListenableFuture<Boolean> publish(Event event) {
@@ -92,6 +95,7 @@
messageId, topic, pubsubMessage.getData().toStringUtf8());
publisherMetrics.incrementSucceedToPublishMessage();
+ msgLog.log(topic, pubsubMessage.getData().toStringUtf8());
}
},
MoreExecutors.directExecutor());
diff --git a/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java b/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java
index d88f9d4..2c85652 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/pubsub/PubSubPublisherTest.java
@@ -39,6 +39,7 @@
@Mock PublisherProvider publisherProviderMock;
@Mock Publisher publisherMock;
@Mock PubSubPublisherMetrics pubSubPublisherMetricsMock;
+ @Mock Log4jPubsubMessageLogger msgLog;
private static final String TOPIC = "foo";
private static final Event eventMessage = new ProjectCreatedEvent();
@@ -52,7 +53,8 @@
publisherProviderMock,
OutputFormat.JSON_COMPACT.newGson(),
pubSubPublisherMetricsMock,
- TOPIC);
+ TOPIC,
+ msgLog);
}
@Test
@@ -73,4 +75,18 @@
verify(pubSubPublisherMetricsMock, only()).incrementSucceedToPublishMessage();
}
+
+ @Test
+ public void shouldUpdateMessageLogFileWhenAsyncPublishSucceeds() {
+ when(publisherMock.publish(any())).thenReturn(ApiFutures.immediateFuture("some-message-id"));
+
+ objectUnderTest.publish(eventMessage);
+
+ verify(msgLog)
+ .log(
+ TOPIC,
+ String.format(
+ "{\"type\":\"%s\",\"event_created_on\":%d}",
+ eventMessage.type, eventMessage.eventCreatedOn));
+ }
}