This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new 650952ba67 ARTEMIS-3755 mitigate NPE related to fail-back
650952ba67 is described below
commit 650952ba6737c828948bb5fb979396a8ce33118f
Author: Justin Bertram <[email protected]>
AuthorDate: Fri Apr 1 13:15:21 2022 -0500
ARTEMIS-3755 mitigate NPE related to fail-back
---
.../artemis/core/server/ActiveMQServerLogger.java | 5 +++++
.../server/impl/SharedStoreBackupActivation.java | 24 ++++++++++++++++++----
2 files changed, 25 insertions(+), 4 deletions(-)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
index b359592647..8267144e7e 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
@@ -1773,6 +1773,11 @@ public interface ActiveMQServerLogger extends
BasicLogger {
@Message(id = 222307, value = "The queues element is deprecated and
replaced by the addresses element")
void queuesElementDeprecated();
+ @LogMessage(level = Logger.Level.WARN)
+ @Message(id = 222308, value = "Unable to listen for incoming fail-back
request because {0} is null. Ensure the broker has the proper
cluster-connection configuration.",
+ format = Message.Format.MESSAGE_FORMAT)
+ void failBackCheckerFailure(String component);
+
@LogMessage(level = Logger.Level.ERROR)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedStoreBackupActivation.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedStoreBackupActivation.java
index 0b21445102..023a7387fc 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedStoreBackupActivation.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/SharedStoreBackupActivation.java
@@ -35,6 +35,8 @@ import org.apache.activemq.artemis.core.server.NodeManager;
import org.apache.activemq.artemis.core.server.NodeManager.LockListener;
import
org.apache.activemq.artemis.core.server.NodeManager.NodeManagerException;
import org.apache.activemq.artemis.core.server.QueueFactory;
+import org.apache.activemq.artemis.core.server.cluster.ClusterConnection;
+import org.apache.activemq.artemis.core.server.cluster.ClusterManager;
import org.apache.activemq.artemis.core.server.cluster.ha.ScaleDownPolicy;
import
org.apache.activemq.artemis.core.server.cluster.ha.SharedStoreSlavePolicy;
import org.apache.activemq.artemis.core.server.group.GroupingHandler;
@@ -253,15 +255,29 @@ public final class SharedStoreBackupActivation extends
Activation {
BackupTopologyListener backupListener;
FailbackChecker() {
- TransportConfiguration connector =
activeMQServer.getClusterManager().getDefaultConnection(null).getConnector();
- backupListener = new
BackupTopologyListener(activeMQServer.getNodeID().toString(), connector);
-
activeMQServer.getClusterManager().getDefaultConnection(null).addClusterTopologyListener(backupListener);
+ ClusterManager clusterManager = activeMQServer.getClusterManager();
+ if (clusterManager != null) {
+ ClusterConnection clusterConnection =
clusterManager.getDefaultConnection(null);
+ if (clusterConnection != null) {
+ TransportConfiguration connector =
clusterConnection.getConnector();
+ if (connector != null) {
+ backupListener = new
BackupTopologyListener(activeMQServer.getNodeID().toString(), connector);
+ clusterConnection.addClusterTopologyListener(backupListener);
+ } else {
+
ActiveMQServerLogger.LOGGER.failBackCheckerFailure("connector");
+ }
+ } else {
+ ActiveMQServerLogger.LOGGER.failBackCheckerFailure("cluster
connection");
+ }
+ } else {
+ ActiveMQServerLogger.LOGGER.failBackCheckerFailure("cluster
manager");
+ }
}
@Override
public void run() {
try {
- if (!restarting.get() &&
activeMQServer.getNodeManager().isAwaitingFailback() &&
backupListener.waitForBackup()) {
+ if (!restarting.get() &&
activeMQServer.getNodeManager().isAwaitingFailback() && backupListener != null
&& backupListener.waitForBackup()) {
if (!restarting.compareAndSet(false, true)) {
return;
}