Remove strict events-broker plugin dependency
This fixes a problem where you would get a NoClassFoundError
when loading the plugin if the events-broker plugin had not
been installed.
A previous commit 7b67529 introduced an accidental
requirement on the events-broker plugin even if not using
the rabbitMQBroker API.
Change-Id: I031572b4a36cefc0a1b003d35eb75882844b3424
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/BrokerApiManager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/BrokerApiManager.java
new file mode 100644
index 0000000..83a61f9
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/BrokerApiManager.java
@@ -0,0 +1,43 @@
+// Copyright (C) 2024 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.rabbitmq;
+
+import com.google.gerrit.extensions.events.LifecycleListener;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiPublisher;
+import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiSubscribers;
+
+@Singleton
+public class BrokerApiManager implements LifecycleListener {
+
+ private final BrokerApiPublisher publisher;
+ private final BrokerApiSubscribers subscribers;
+
+ @Inject
+ public BrokerApiManager(BrokerApiPublisher publisher, BrokerApiSubscribers subscribers) {
+ this.publisher = publisher;
+ this.subscribers = subscribers;
+ }
+
+ @Override
+ public void start() {}
+
+ @Override
+ public void stop() {
+ subscribers.stop();
+ publisher.stop();
+ }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
index 953fe08..f76bba7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
@@ -23,8 +23,6 @@
import com.googlesource.gerrit.plugins.rabbitmq.config.section.General;
import com.googlesource.gerrit.plugins.rabbitmq.config.section.Gerrit;
import com.googlesource.gerrit.plugins.rabbitmq.message.BaseProperties;
-import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiPublisher;
-import com.googlesource.gerrit.plugins.rabbitmq.message.BrokerApiSubscribers;
import com.googlesource.gerrit.plugins.rabbitmq.message.GerritEventPublisherFactory;
import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherPropertiesProvider;
@@ -44,7 +42,6 @@
private final EventWorker userEventWorker;
private final GerritEventPublisherFactory publisherFactory;
private final List<Publisher> publisherList = new ArrayList<>();
- private final BrokerApiSubscribers subscribers;
private final Properties baseProperties;
private final PublisherPropertiesProvider publisherPropertiesProvider;
@@ -54,18 +51,14 @@
final DefaultEventWorker defaultEventWorker,
final EventWorkerFactory eventWorkerFactory,
final GerritEventPublisherFactory publisherFactory,
- final BrokerApiPublisher publisher,
- final BrokerApiSubscribers subscribers,
final @BaseProperties Properties baseProperties,
final PublisherPropertiesProvider publisherPropertiesProvider) {
this.pluginName = pluginName;
this.defaultEventWorker = defaultEventWorker;
this.userEventWorker = eventWorkerFactory.create();
this.publisherFactory = publisherFactory;
- this.subscribers = subscribers;
this.baseProperties = baseProperties;
this.publisherPropertiesProvider = publisherPropertiesProvider;
- publisherList.add(publisher);
}
@Override
@@ -88,7 +81,6 @@
@Override
public void stop() {
- subscribers.stop();
for (Publisher publisher : publisherList) {
publisher.stop();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
index 47b9b63..b9125ee 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -14,6 +14,9 @@
package com.googlesource.gerrit.plugins.rabbitmq;
+import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.extensions.annotations.PluginData;
+import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.server.events.EventListener;
@@ -47,13 +50,26 @@
import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorker;
import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorkerFactory;
import com.googlesource.gerrit.plugins.rabbitmq.worker.UserEventWorker;
+import java.io.File;
+import java.io.IOException;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.util.FS;
class Module extends AbstractModule {
+ private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
private final RabbitMqBrokerApiModule rabbitMqBrokerApiModule;
+ private final boolean brokerApiEnabled;
@Inject
- public Module(RabbitMqBrokerApiModule rabbitMqBrokerApiModule) {
+ public Module(
+ RabbitMqBrokerApiModule rabbitMqBrokerApiModule,
+ @PluginName final String pluginName,
+ @PluginData final File pluginData) {
this.rabbitMqBrokerApiModule = rabbitMqBrokerApiModule;
+ this.brokerApiEnabled =
+ getBaseConfig(pluginName, pluginData).getBoolean("General", "enableBrokerApi", false);
}
@Override
@@ -96,6 +112,23 @@
.annotatedWith(BaseProperties.class)
.toProvider(BasePropertiesProvider.class);
- install(rabbitMqBrokerApiModule);
+ if (brokerApiEnabled) {
+ install(rabbitMqBrokerApiModule);
+ } else {
+ logger.atInfo().log(
+ "The RabbitMqBrokerApi is disabled, set enableBrokerApi to true if you want to enable it");
+ }
+ }
+
+ private static FileBasedConfig getBaseConfig(String pluginName, File pluginData) {
+ File baseConfigFile =
+ pluginData.toPath().resolve(pluginName + BasePropertiesProvider.FILE_EXT).toFile();
+ FileBasedConfig config = new FileBasedConfig(baseConfigFile, FS.DETECTED);
+ try {
+ config.load();
+ } catch (IOException | ConfigInvalidException e) {
+ logger.atInfo().withCause(e).log("Unable to load %s", baseConfigFile.getAbsolutePath());
+ }
+ return config;
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java
index ee97d02..f022b6c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/RabbitMqBrokerApiModule.java
@@ -15,7 +15,9 @@
package com.googlesource.gerrit.plugins.rabbitmq;
import com.gerritforge.gerrit.eventbroker.BrokerApi;
+import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.extensions.registration.DynamicItem;
+import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -31,6 +33,7 @@
@Override
protected void configure() {
+ DynamicSet.bind(binder(), LifecycleListener.class).to(BrokerApiManager.class);
bind(Properties.class)
.annotatedWith(BrokerApiProperties.class)
.toProvider(BrokerApiPropertiesProvider.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java
index 4dc1ed8..7070292 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BasePropertiesProvider.java
@@ -27,7 +27,6 @@
@Singleton
public class BasePropertiesProvider implements Provider<Properties> {
-
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
public static final String FILE_EXT = ".config";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java
index 3cdb9ac..2f2b444 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiPublisher.java
@@ -22,34 +22,24 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
-import com.googlesource.gerrit.plugins.rabbitmq.config.section.General;
import com.googlesource.gerrit.plugins.rabbitmq.session.type.AMQPPublisherSession;
@Singleton
public class BrokerApiPublisher extends MessagePublisher {
-
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
- private final boolean enabled;
-
@Inject
public BrokerApiPublisher(
AMQPPublisherSession.Factory sessionFactory,
@EventGson Gson gson,
@BrokerApiProperties Properties properties) {
super(properties, sessionFactory, gson);
- this.enabled = properties.getSection(General.class).enableBrokerApi;
}
@Override
public void start() {
- if (enabled) {
- logger.atFine().log("BrokerApiPublisher is starting");
- super.start();
- } else {
- logger.atWarning().log(
- "The RabbitMqBrokerApi is disabled, set enableBrokerApi to true to enable");
- }
+ logger.atFine().log("BrokerApiPublisher is starting");
+ super.start();
}
@Override
@@ -60,10 +50,7 @@
@Override
public ListenableFuture<Boolean> publish(String topic, Event event) {
- if (enabled) {
- logger.atFine().log("Message sent to topic %s with data: %s", topic, event);
- return super.publish(topic, event);
- }
- return null;
+ logger.atFine().log("Message sent to topic %s with data: %s", topic, event);
+ return super.publish(topic, event);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java
index bffff6d..f9bb9ce 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/BrokerApiSubscribers.java
@@ -24,7 +24,6 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.rabbitmq.config.Properties;
-import com.googlesource.gerrit.plugins.rabbitmq.config.section.General;
import com.googlesource.gerrit.plugins.rabbitmq.session.SubscriberSession;
import com.googlesource.gerrit.plugins.rabbitmq.session.type.AMQPSubscriberSession;
import java.util.HashMap;
@@ -32,13 +31,11 @@
@Singleton
public class BrokerApiSubscribers {
-
private static final FluentLogger logger = FluentLogger.forEnclosingClass();
private final SubscriberSession session;
private final Properties properties;
private final Gson gson;
- private final boolean enabled;
private final Map<TopicSubscriber, String> consumerTags = new HashMap<>();
@Inject
@@ -49,7 +46,6 @@
this.properties = properties;
this.session = sessionFactory.create(properties);
this.gson = gson;
- this.enabled = properties.getSection(General.class).enableBrokerApi;
}
public void stop() {
@@ -63,29 +59,24 @@
public boolean addSubscriber(TopicSubscriber topicSubscriber) {
String topic = topicSubscriber.topic();
- if (enabled) {
- logger.atFine().log("RabbitMqBrokerApi used to set consumer to topic %s", topic);
- String consumerTag =
- session.addSubscriber(
- topic,
- messageBody -> {
- logger.atFiner().log(
- "The RabbitMqBrokerApi consumed event from topic %s with data: %s",
- topic, messageBody);
- Event event = gson.fromJson(messageBody, Event.class);
- if (event.type != null) {
- topicSubscriber.consumer().accept(event);
- } else {
- logger.atFine().log("Event does not have a type, ignoring Event");
- }
- });
- if (consumerTag != null) {
- consumerTags.put(topicSubscriber, consumerTag);
- return true;
- }
- } else {
- logger.atWarning().log(
- "The RabbitMqBrokerApi is disabled, set enableBrokerApi to true to enable");
+ logger.atFine().log("RabbitMqBrokerApi used to set consumer to topic %s", topic);
+ String consumerTag =
+ session.addSubscriber(
+ topic,
+ messageBody -> {
+ logger.atFiner().log(
+ "The RabbitMqBrokerApi consumed event from topic %s with data: %s",
+ topic, messageBody);
+ Event event = gson.fromJson(messageBody, Event.class);
+ if (event.type != null) {
+ topicSubscriber.consumer().accept(event);
+ } else {
+ logger.atFine().log("Event does not have a type, ignoring Event");
+ }
+ });
+ if (consumerTag != null) {
+ consumerTags.put(topicSubscriber, consumerTag);
+ return true;
}
return false;
}