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 e56b5ff53f ARTEMIS-3840 Core bridges with concurrency > 1 will get 
removed on config reload
e56b5ff53f is described below

commit e56b5ff53f8d0680a8d58f16e5d2a9c2e1a3d893
Author: AntonRoskvist <[email protected]>
AuthorDate: Wed May 18 21:12:33 2022 +0200

    ARTEMIS-3840 Core bridges with concurrency > 1 will get removed on config 
reload
---
 .../activemq/artemis/core/config/BridgeConfiguration.java    | 12 ++++++++++++
 .../activemq/artemis/core/server/cluster/ClusterManager.java |  3 ++-
 .../artemis/core/server/impl/ActiveMQServerImpl.java         |  8 ++++++--
 .../src/test/resources/reload-bridge-updated.xml             |  1 +
 tests/integration-tests/src/test/resources/reload-bridge.xml |  1 +
 5 files changed, 22 insertions(+), 3 deletions(-)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/BridgeConfiguration.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/BridgeConfiguration.java
index ea05aea161..dd964eadc1 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/BridgeConfiguration.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/BridgeConfiguration.java
@@ -116,11 +116,14 @@ public final class BridgeConfiguration implements 
Serializable {
 
    private int concurrency = 
ActiveMQDefaultConfiguration.getDefaultBridgeConcurrency();
 
+   private String parentName = null;
+
    public BridgeConfiguration() {
    }
 
    public BridgeConfiguration(BridgeConfiguration other) {
       name = other.name;
+      parentName = other.parentName;
       queueName = other.queueName;
       forwardingAddress = other.forwardingAddress;
       filterString = other.filterString;
@@ -268,6 +271,15 @@ public final class BridgeConfiguration implements 
Serializable {
       return this;
    }
 
+   public String getParentName() {
+      return parentName;
+   }
+
+   public BridgeConfiguration setParentName(final String parentName) {
+      this.parentName = parentName;
+      return this;
+   }
+
    public String getQueueName() {
       return queueName;
    }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
index fcaaf2f83f..e475ddae60 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/ClusterManager.java
@@ -478,8 +478,9 @@ public class ClusterManager implements ActiveMQComponent {
       clusterLocators.add(serverLocator);
 
       for (int i = 0; i < config.getConcurrency(); i++) {
+         String parentName = config.getName();
          String name = config.getConcurrency() > 1 ? (config.getName() + "-" + 
i) : config.getName();
-         Bridge bridge = new BridgeImpl(serverLocator, new 
BridgeConfiguration(config).setName(name), nodeManager.getUUID(), queue, 
executorFactory.getExecutor(), scheduledExecutor, server);
+         Bridge bridge = new BridgeImpl(serverLocator, new 
BridgeConfiguration(config).setName(name).setParentName(parentName), 
nodeManager.getUUID(), queue, executorFactory.getExecutor(), scheduledExecutor, 
server);
          bridges.put(name, bridge);
          managementService.registerBridge(bridge);
          bridge.start();
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index 5459df8b0e..59c5b049e3 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -4420,7 +4420,8 @@ public class ActiveMQServerImpl implements ActiveMQServer 
{
 
          ActiveMQServerLogger.LOGGER.reloadingConfiguration("bridges");
          for (BridgeConfiguration newBridgeConfig : 
configuration.getBridgeConfigurations()) {
-            Bridge existingBridge = 
clusterManager.getBridges().get(newBridgeConfig.getName());
+            newBridgeConfig.setParentName(newBridgeConfig.getName());
+            Bridge existingBridge = 
clusterManager.getBridges().get(newBridgeConfig.getParentName());
             if (existingBridge != null && 
!existingBridge.getConfiguration().equals(newBridgeConfig)) {
                // this is an existing bridge but the config changed so stop 
the current bridge and deploy the new one
                destroyBridge(existingBridge.getName().toString());
@@ -4431,7 +4432,10 @@ public class ActiveMQServerImpl implements 
ActiveMQServer {
             }
          }
          for (final Bridge runningBridge: 
clusterManager.getBridges().values()) {
-            if 
(!configuration.getBridgeConfigurations().contains(runningBridge.getConfiguration()))
 {
+            List<BridgeConfiguration> newConfig = 
configuration.getBridgeConfigurations();
+            BridgeConfiguration running = new 
BridgeConfiguration(runningBridge.getConfiguration());
+            running.set("name", running.getParentName());
+            if (!configuration.getBridgeConfigurations().contains(running)) {
                // this bridge is running but it isn't in the new config which 
means it was removed so destroy it
                destroyBridge(runningBridge.getName().toString());
             }
diff --git 
a/tests/integration-tests/src/test/resources/reload-bridge-updated.xml 
b/tests/integration-tests/src/test/resources/reload-bridge-updated.xml
index c1b3035e17..ffa263878d 100644
--- a/tests/integration-tests/src/test/resources/reload-bridge-updated.xml
+++ b/tests/integration-tests/src/test/resources/reload-bridge-updated.xml
@@ -39,6 +39,7 @@ under the License.
          <bridge name="a">
             <queue-name>a-from</queue-name>
             <forwarding-address>a-new</forwarding-address>
+            <concurrency>2</concurrency>
             <static-connectors>
                <connector-ref>connector</connector-ref>
             </static-connectors>
diff --git a/tests/integration-tests/src/test/resources/reload-bridge.xml 
b/tests/integration-tests/src/test/resources/reload-bridge.xml
index 96e069f4de..91c3ad8726 100644
--- a/tests/integration-tests/src/test/resources/reload-bridge.xml
+++ b/tests/integration-tests/src/test/resources/reload-bridge.xml
@@ -46,6 +46,7 @@ under the License.
          <bridge name="b">
             <queue-name>b-from</queue-name>
             <forwarding-address>b-to</forwarding-address>
+            <concurrency>5</concurrency>
             <static-connectors>
                <connector-ref>connector</connector-ref>
             </static-connectors>

Reply via email to