You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jb...@apache.org on 2021/06/24 20:36:35 UTC
[activemq-artemis] branch main updated: ARTEMIS-3366 deleteAddress
can remove SnF queue
This is an automated email from the ASF dual-hosted git repository.
jbertram 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 45ae64a ARTEMIS-3366 deleteAddress can remove SnF queue
new 0275630 This closes #3636
45ae64a is described below
commit 45ae64a01c803d35e8dbce41c543d5dce984416a
Author: Justin Bertram <jb...@apache.org>
AuthorDate: Thu Jun 24 13:10:48 2021 -0500
ARTEMIS-3366 deleteAddress can remove SnF queue
---
.../core/postoffice/impl/PostOfficeImpl.java | 7 ++-
.../distribution/SimpleSymmetricClusterTest.java | 57 ++++++++++++++++++++++
2 files changed, 62 insertions(+), 2 deletions(-)
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
index 95e2b7e..acb897c 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
@@ -79,6 +79,7 @@ import org.apache.activemq.artemis.core.server.Queue;
import org.apache.activemq.artemis.core.server.QueueFactory;
import org.apache.activemq.artemis.core.server.RouteContextList;
import org.apache.activemq.artemis.core.server.RoutingContext;
+import org.apache.activemq.artemis.core.server.cluster.RemoteQueueBinding;
import org.apache.activemq.artemis.core.server.group.GroupingHandler;
import org.apache.activemq.artemis.core.server.impl.AckReason;
import org.apache.activemq.artemis.core.server.impl.AddressInfo;
@@ -815,8 +816,10 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
final Collection<Binding> bindingsForAddress = getDirectBindings(address);
if (force) {
for (Binding binding : bindingsForAddress) {
- if (binding instanceof QueueBinding) {
- ((QueueBinding)binding).getQueue().deleteQueue(true);
+ if (binding instanceof LocalQueueBinding) {
+ ((LocalQueueBinding)binding).getQueue().deleteQueue(true);
+ } else if (binding instanceof RemoteQueueBinding) {
+ removeBinding(binding.getUniqueName(), null, true);
}
}
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/SimpleSymmetricClusterTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/SimpleSymmetricClusterTest.java
index fcadf9e..c9f2c6f 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/SimpleSymmetricClusterTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/SimpleSymmetricClusterTest.java
@@ -16,6 +16,11 @@
*/
package org.apache.activemq.artemis.tests.integration.cluster.distribution;
+import java.util.Collection;
+
+import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.core.postoffice.Binding;
+import org.apache.activemq.artemis.core.server.cluster.RemoteQueueBinding;
import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
import org.jboss.logging.Logger;
import org.junit.Ignore;
@@ -121,6 +126,58 @@ public class SimpleSymmetricClusterTest extends ClusterTestBase {
}
@Test
+ public void testDeleteAddress() throws Exception {
+ final String ADDRESS = "queues.testaddress";
+
+ setupServer(0, true, isNetty());
+ setupServer(1, true, isNetty());
+
+ setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, isNetty(), 0, 1);
+ setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, isNetty(), 1, 0);
+
+ startServers(0, 1);
+
+ waitForTopology(servers[0], 2);
+ waitForTopology(servers[1], 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+
+ createQueue(0, ADDRESS, "queue0", null, false);
+ createQueue(1, ADDRESS, "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+ addConsumer(1, 1, "queue0", null);
+
+ waitForBindings(0, ADDRESS, 1, 1, true);
+ waitForBindings(1, ADDRESS, 1, 1, true);
+
+ waitForBindings(0, ADDRESS, 1, 1, false);
+ waitForBindings(1, ADDRESS, 1, 1, false);
+
+ // there should be both a local and a remote binding
+ Collection<Binding> bindings = servers[0].getPostOffice().getDirectBindings(SimpleString.toSimpleString(ADDRESS));
+ assertEquals(2, bindings.size());
+
+ // the remote binding should point to the SnF queue
+ SimpleString snf = null;
+ for (Binding binding : bindings) {
+ if (binding instanceof RemoteQueueBinding) {
+ snf = ((RemoteQueueBinding)binding).getQueue().getName();
+ }
+ }
+ assertNotNull(snf);
+ assertNotNull(servers[0].locateQueue(snf));
+
+ servers[0].getActiveMQServerControl().deleteAddress(ADDRESS, true);
+
+ // no bindings should remain but the SnF queue should still be there
+ bindings = servers[0].getPostOffice().getDirectBindings(SimpleString.toSimpleString(ADDRESS));
+ assertEquals(0, bindings.size());
+ assertNotNull(servers[0].locateQueue(snf));
+ }
+
+ @Test
public void testSimple_TwoNodes() throws Exception {
setupServer(0, false, isNetty());
setupServer(1, false, isNetty());