[ https://issues.apache.org/jira/browse/ARTEMIS-2124?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16676918#comment-16676918 ]
Justin Bertram commented on ARTEMIS-2124: ----------------------------------------- [~johan1], yes it should. I modified your test a bit to make it a bit more efficient and also to fit it with the way things are done in the Artemis test-suite. Everything works as expected (including the removal of the queue on broker B after the consumer disconnects). Here's my modified test: {code:java} /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.activemq.artemis.tests.integration.client; import javax.jms.JMSContext; import java.util.Arrays; import org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration; import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory; import org.apache.activemq.artemis.core.config.ClusterConnectionConfiguration; import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ActiveMQServers; import org.apache.activemq.artemis.core.server.cluster.ClusterConnection; import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType; import org.apache.activemq.artemis.core.settings.impl.AddressSettings; import org.apache.activemq.artemis.junit.Wait; import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; import org.apache.qpid.jms.JmsConnectionFactory; import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class Artemis2124_AutoDeleteTest extends ActiveMQTestBase { private ActiveMQServer brokerA; private final int brokerAPort = 5671; private ActiveMQServer brokerB; private final int brokerBPort = 5672; private final SimpleString queueName = new SimpleString("myQueue"); private ActiveMQServer createClusterMember(final int port) throws Exception { final ActiveMQServer broker = addServer(ActiveMQServers.newActiveMQServer(new ConfigurationImpl() .setPersistenceEnabled(false) .setSecurityEnabled(false) .addAcceptorConfiguration("test", "tcp://localhost:" + port) /* * queue config */ .addAddressesSetting(queueName.toString(), new AddressSettings() .setRedistributionDelay(0) .setDefaultMaxConsumers(-1) .setAutoCreateAddresses(true) .setAutoCreateQueues(true) .setAutoDeleteAddresses(true) .setAutoCreateQueues(true) .setDefaultPurgeOnNoConsumers(false) .setDefaultAddressRoutingType(RoutingType.ANYCAST) .setDefaultQueueRoutingType(RoutingType.ANYCAST)) /* * cluster config */ .addConnectorConfiguration("test", "tcp://localhost:" + port) .addBroadcastGroupConfiguration(new BroadcastGroupConfiguration() .setName("broadcast-group") .setBroadcastPeriod(2000) .setConnectorInfos(Arrays.asList("test")) .setEndpointFactory(new UDPBroadcastEndpointFactory() .setLocalBindAddress("127.0.0.1") .setLocalBindPort(port) .setGroupAddress("231.7.7.7") .setGroupPort(9876))) .addDiscoveryGroupConfiguration("discovery-group", new DiscoveryGroupConfiguration() .setName("discovery-group") .setDiscoveryInitialWaitTimeout(1000) .setRefreshTimeout(10000) .setBroadcastEndpointFactory(new UDPBroadcastEndpointFactory() .setLocalBindAddress("127.0.0.1") .setLocalBindPort(port) .setGroupAddress("231.7.7.7") .setGroupPort(9876))) .setClusterUser("cluster") .setClusterPassword("secret") .addClusterConfiguration(new ClusterConnectionConfiguration() .setName("cluster") .setDiscoveryGroupName("discovery-group") .setConnectorName("test") .setCallTimeout(15000) .setDuplicateDetection(true) .setMessageLoadBalancingType(MessageLoadBalancingType.ON_DEMAND) .setMaxHops(1)))); System.out.println("Starting broker with AMQP port " + port + "..."); broker.start(); return broker; } @Before public void setup() throws Exception { brokerA = createClusterMember(brokerAPort); brokerB = createClusterMember(brokerBPort); assertTrue(Wait.waitFor(() -> ((ClusterConnection)brokerA.getClusterManager().getClusterConnections().toArray()[0]).getNodes().size() == 1, 3000, 100)); assertTrue(Wait.waitFor(() -> ((ClusterConnection)brokerB.getClusterManager().getClusterConnections().toArray()[0]).getNodes().size() == 1, 3000, 100)); } private void sendAndReceive(final String senderURL, final String receiverURL) throws Exception { assertNull(brokerA.locateQueue(queueName)); assertNull(brokerB.locateQueue(queueName)); try (JMSContext sender = new JmsConnectionFactory(senderURL).createContext(); JMSContext receiver = new JmsConnectionFactory(receiverURL).createContext()) { System.out.println("Sending message to " + senderURL + "..."); sender.createProducer().send(sender.createQueue(queueName.toString()), sender.createBytesMessage()); receiver.start(); System.out.println("Waiting for message to be received from " + receiverURL + "..."); assertNotNull(receiver.createConsumer(receiver.createQueue(queueName.toString())).receive(1000)); } } @Test public void testAutoDelete_SingleServerMessaging() throws Exception { sendAndReceive("amqp://localhost:" + brokerAPort, "amqp://localhost:" + brokerAPort); assertTrue(Wait.waitFor(() -> brokerA.locateQueue(queueName) == null, 2000, 100)); } @Test public void testAutoDelete_ClusterMessaging() throws Exception { sendAndReceive("amqp://localhost:" + brokerAPort, "amqp://localhost:" + brokerBPort); assertTrue(Wait.waitFor(() -> brokerB.locateQueue(queueName) == null, 2000, 100)); } } {code} > Addresses/Queues are not auto-deleted in clusters > ------------------------------------------------- > > Key: ARTEMIS-2124 > URL: https://issues.apache.org/jira/browse/ARTEMIS-2124 > Project: ActiveMQ Artemis > Issue Type: Bug > Components: Broker > Affects Versions: 2.6.3 > Reporter: Johan Stenberg > Priority: Major > Attachments: Artemis2124_AutoDeleteTest.java > > > All addresses and queues in one of our production cluster environment are > configured as auto create/delete addresses and queues, however non of the > addresses and queues are never seem to get auto-deleted. > I am attaching a test case that I believe reproduces the issue. -- This message was sent by Atlassian JIRA (v7.6.3#76005)