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>