You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cs...@apache.org on 2019/10/28 10:55:51 UTC

[activemq-artemis] branch master updated: ARTEMIS-2531: Fix filter in FederatedQueue to prevent infinite consumer creation in a circular or bidrectional setup

This is an automated email from the ASF dual-hosted git repository.

cshannon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new ad0581b  ARTEMIS-2531: Fix filter in FederatedQueue to prevent infinite consumer creation in a circular or bidrectional setup
     new 47a5406  Merge branch 'ARTEMIS-2531'
ad0581b is described below

commit ad0581bf76043322934290d489f3f4489ac2536b
Author: Christopher L. Shannon (cshannon) <ch...@gmail.com>
AuthorDate: Fri Oct 25 13:55:59 2019 -0400

    ARTEMIS-2531: Fix filter in FederatedQueue to prevent infinite consumer
    creation in a circular or bidrectional setup
---
 .../activemq/artemis/core/server/federation/queue/FederatedQueue.java | 2 +-
 .../artemis/tests/integration/federation/FederatedQueueTest.java      | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/queue/FederatedQueue.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/queue/FederatedQueue.java
index 3ca0d61..fcecf9c 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/queue/FederatedQueue.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/federation/queue/FederatedQueue.java
@@ -63,7 +63,7 @@ public class FederatedQueue extends FederatedAbstract implements ActiveMQServerC
       Objects.requireNonNull(config.getName());
       this.config = config;
       this.priorityAdjustment = federationUpstream.getPriorityAdjustment() + (config.getPriorityAdjustment() == null ? -1 : config.getPriorityAdjustment());
-      String metaDataFilterString = config.isIncludeFederated() ? null : FederatedQueueConsumer.FEDERATION_NAME +  " IS NOT NULL";
+      String metaDataFilterString = config.isIncludeFederated() ? null : "hyphenated_props:" + FederatedQueueConsumer.FEDERATION_NAME +  " IS NOT NULL";
       metaDataFilter = FilterImpl.createFilter(metaDataFilterString);
       if (config.getIncludes().isEmpty()) {
          includes = Collections.emptySet();
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederatedQueueTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederatedQueueTest.java
index 44033d0..514778c 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederatedQueueTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/federation/FederatedQueueTest.java
@@ -177,6 +177,10 @@ public class FederatedQueueTest extends FederatedTestBase {
          producer1.send(session1.createTextMessage("hello"));
          assertNotNull(consumer0.receive(1000));
 
+         //Wait to see if extra consumers are created - this tests to make sure there is no loop and tests the FederatedQueue metaDataFilterString
+         //is working properly - should only be 1 consumer on each (1 for the local consumer on broker0 and 1 for the federated consumer on broker1)
+         assertFalse(Wait.waitFor(() -> getServer(0).locateQueue(SimpleString.toSimpleString(queueName)).getConsumerCount() > 1, 500, 100));
+         assertFalse(Wait.waitFor(() -> getServer(1).locateQueue(SimpleString.toSimpleString(queueName)).getConsumerCount() > 1, 500, 100));
 
          //Test consumer move from broker 0, to broker 1
          consumer0.close();