[
https://issues.apache.org/jira/browse/ARTEMIS-4527?focusedWorklogId=901512&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-901512
]
ASF GitHub Bot logged work on ARTEMIS-4527:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 24/Jan/24 17:45
Start Date: 24/Jan/24 17:45
Worklog Time Spent: 10m
Work Description: clebertsuconic commented on code in PR #4705:
URL: https://github.com/apache/activemq-artemis/pull/4705#discussion_r1465332355
##########
tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cluster/distribution/ClusterNotificationsTest.java:
##########
@@ -0,0 +1,124 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.cluster.distribution;
+
+import javax.jms.Connection;
+import javax.jms.MessageListener;
+import javax.jms.Queue;
+import javax.jms.Session;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+
+import
org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
+import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
+import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
+import org.apache.activemq.artemis.jms.client.ActiveMQDestination;
+import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
+import org.junit.Test;
+import org.springframework.jms.connection.CachingConnectionFactory;
+import org.springframework.jms.listener.AbstractJmsListeningContainer;
+import org.springframework.jms.listener.DefaultMessageListenerContainer;
+import org.springframework.util.backoff.FixedBackOff;
+
+public class ClusterNotificationsTest extends ClusterTestBase {
+
+ protected boolean isNetty() {
+ return true;
+ }
+
+ @Test
+ public void testClusterNotificationsContinuity() throws Exception {
+ final MessageLoadBalancingType lbType =
MessageLoadBalancingType.OFF_WITH_REDISTRIBUTION;
+ final String namePrefix = "TEST.QUEUE.";
+ final int queueCount = 500;
+
+ AssertionLoggerHandler loggerHandler = new AssertionLoggerHandler();
+ runAfter(loggerHandler::close);
+
+ setupServer(0, isFileStorage(), isNetty());
+ setupServer(1, isFileStorage(), isNetty());
+ setupServer(2, isFileStorage(), isNetty());
+
+ setupClusterConnection("cluster0", "", lbType, 1, isNetty(), 0, 1, 2);
+ setupClusterConnection("cluster0", "", lbType, 1, isNetty(), 1, 2, 0);
+ setupClusterConnection("cluster0", "", lbType, 1, isNetty(), 2, 0, 1);
+
+ startServers(0, 1, 2);
+
+ AddressSettings as = new AddressSettings().setRedistributionDelay(0);
+ servers[0].getAddressSettingsRepository().addMatch(namePrefix + "#", as);
+ servers[1].getAddressSettingsRepository().addMatch(namePrefix + "#", as);
+ servers[2].getAddressSettingsRepository().addMatch(namePrefix + "#", as);
+
+ waitForTopology(servers[2], 3);
+
+ ExecutorService executorService = Executors.newCachedThreadPool();
+ CountDownLatch latch = new CountDownLatch(queueCount * 2);
+
+ try (ActiveMQConnectionFactory factory = new
ActiveMQConnectionFactory("tcp://localhost:61616")) {
+
+ List<DefaultMessageListenerContainer> containers = new ArrayList<>();
+ runAfter(() ->
containers.parallelStream().forEach(AbstractJmsListeningContainer::shutdown));
+ runAfter(() -> executorService.shutdown());
+
+ for (int i = 0; i < queueCount; i++) {
+ Queue queue = ActiveMQDestination.createQueue(namePrefix + i +
"-");
+
+ executorService.submit(() -> {
+ try (Connection connection = factory.createConnection();
+ Session session =
connection.createSession(Session.SESSION_TRANSACTED)) {
+
+
session.createProducer(queue).send(session.createTextMessage("Message"));
+ session.commit();
+ latch.countDown();
+ } catch (Exception e) { }
+ });
+
+ DefaultMessageListenerContainer container = new
DefaultMessageListenerContainer();
+ container.setCacheLevelName("CACHE_NONE");
+ container.setSessionTransacted(true);
+ container.setSessionAcknowledgeModeName("SESSION_TRANSACTED");
+ container.setConcurrentConsumers(20);
+ container.setConnectionFactory(new
CachingConnectionFactory(factory));
+ container.setDestinationName(queue.getQueueName());
+ container.setBackOff(new FixedBackOff(1000, 2));
+ container.setReceiveTimeout(100);
+ container.setMessageListener((MessageListener) msg -> {
+ latch.countDown();
+ });
+
+ container.initialize();
Review Comment:
This test is failing on my laptop. not being able to create native threads...
Issue Time Tracking
-------------------
Worklog Id: (was: 901512)
Time Spent: 2h (was: 1h 50m)
> Redistributor race when consumerCount reaches 0 in cluster
> ----------------------------------------------------------
>
> Key: ARTEMIS-4527
> URL: https://issues.apache.org/jira/browse/ARTEMIS-4527
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Reporter: Anton Roskvist
> Priority: Major
> Time Spent: 2h
> Remaining Estimate: 0h
>
> This is a very rare bug caused by cluster notifications arriving in the wrong
> order in some very specific circumstances
--
This message was sent by Atlassian Jira
(v8.20.10#820010)