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 2020/06/24 17:55:00 UTC

[activemq-artemis] branch master updated: ARTEMIS-2819 exact match address setting removal ineffective

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

jbertram 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 efb1bd3  ARTEMIS-2819 exact match address setting removal ineffective
     new f8bd4a8  This closes #3199
efb1bd3 is described below

commit efb1bd3f9f422e8b6302b6e9a06eb231ef78d79a
Author: Keith Wall <kw...@apache.org>
AuthorDate: Tue Jun 23 18:06:06 2020 +0100

    ARTEMIS-2819 exact match address setting removal ineffective
---
 .../impl/HierarchicalObjectRepository.java         |   1 +
 .../management/ActiveMQServerControlTest.java      | 199 +++++++++++++++++++++
 2 files changed, 200 insertions(+)

diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java
index 06c26b8..0cf9708 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java
@@ -304,6 +304,7 @@ public class HierarchicalObjectRepository<T> implements HierarchicalRepository<T
                clearCache();
                wildcardMatches.remove(modMatch);
             } else {
+               cache.remove(modMatch);
                exactMatches.remove(modMatch);
             }
             onChange();
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index 0431c7d..c181e07 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -1310,6 +1310,205 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
    }
 
    @Test
+   public void testRemoveAddressSettingsEffective() throws Exception {
+      ActiveMQServerControl serverControl = createManagementControl();
+      String addr = "test";
+      String root = "#";
+
+      String DLA = "someDLA";
+      String expiryAddress = "someExpiry";
+      long expiryDelay = RandomUtil.randomPositiveLong();
+      long minExpiryDelay = 10000;
+      long maxExpiryDelay = 20000;
+      boolean lastValueQueue = true;
+      int deliveryAttempts = 1;
+      long maxSizeBytes = 20;
+      int pageSizeBytes = 10;
+      int pageMaxCacheSize = 7;
+      long redeliveryDelay = 4;
+      double redeliveryMultiplier = 1;
+      long maxRedeliveryDelay = 1000;
+      long redistributionDelay = 5;
+      boolean sendToDLAOnNoRoute = true;
+      String addressFullMessagePolicy = "PAGE";
+      long slowConsumerThreshold = 5;
+      long slowConsumerCheckPeriod = 10;
+      String slowConsumerPolicy = SlowConsumerPolicy.getType(RandomUtil.randomPositiveInt() % 2).toString();
+      boolean autoCreateJmsQueues = RandomUtil.randomBoolean();
+      boolean autoDeleteJmsQueues = RandomUtil.randomBoolean();
+      boolean autoCreateJmsTopics = RandomUtil.randomBoolean();
+      boolean autoDeleteJmsTopics = RandomUtil.randomBoolean();
+      boolean autoCreateQueues = RandomUtil.randomBoolean();
+      boolean autoDeleteQueues = RandomUtil.randomBoolean();
+      boolean autoCreateAddresses = RandomUtil.randomBoolean();
+      boolean autoDeleteAddresses = RandomUtil.randomBoolean();
+      String configDeleteQueues = DeletionPolicy.getType(RandomUtil.randomPositiveInt() % 2).toString();
+      String configDeleteAddresses = DeletionPolicy.getType(RandomUtil.randomPositiveInt() % 2).toString();
+      long maxSizeBytesRejectThreshold = RandomUtil.randomPositiveLong();
+      String defaultLastValueKey = RandomUtil.randomString();
+      boolean defaultNonDestructive = RandomUtil.randomBoolean();
+      boolean defaultExclusiveQueue = RandomUtil.randomBoolean();
+      boolean defaultGroupRebalance = RandomUtil.randomBoolean();
+      int defaultGroupBuckets = RandomUtil.randomPositiveInt();
+      String defaultGroupFirstKey = RandomUtil.randomString();
+      int defaultMaxConsumers = RandomUtil.randomPositiveInt();
+      boolean defaultPurgeOnNoConsumers = RandomUtil.randomBoolean();
+      int defaultConsumersBeforeDispatch = RandomUtil.randomPositiveInt();
+      long defaultDelayBeforeDispatch = RandomUtil.randomPositiveLong();
+      String defaultQueueRoutingType = RoutingType.getType((byte) (RandomUtil.randomPositiveInt() % 2)).toString();
+      String defaultAddressRoutingType = RoutingType.getType((byte) (RandomUtil.randomPositiveInt() % 2)).toString();
+      int defaultConsumerWindowSize = RandomUtil.randomPositiveInt();
+      long defaultRingSize = RandomUtil.randomPositiveLong();
+      boolean autoDeleteCreatedQueues = RandomUtil.randomBoolean();
+      long autoDeleteQueuesDelay = RandomUtil.randomPositiveLong();
+      long autoDeleteQueuesMessageCount = RandomUtil.randomPositiveLong();
+      long autoDeleteAddressesDelay = RandomUtil.randomPositiveLong();
+      double redeliveryCollisionAvoidanceFactor = RandomUtil.randomDouble();
+      long retroactiveMessageCount = RandomUtil.randomPositiveLong();
+      boolean autoCreateDeadLetterResources = RandomUtil.randomBoolean();
+      String deadLetterQueuePrefix = RandomUtil.randomString();
+      String deadLetterQueueSuffix = RandomUtil.randomString();
+      boolean autoCreateExpiryResources = RandomUtil.randomBoolean();
+      String expiryQueuePrefix = RandomUtil.randomString();
+      String expiryQueueSuffix = RandomUtil.randomString();
+      boolean enableMetrics = RandomUtil.randomBoolean();
+
+      serverControl.addAddressSettings(root,
+              DLA,
+              expiryAddress,
+              expiryDelay,
+              lastValueQueue,
+              deliveryAttempts,
+              maxSizeBytes,
+              pageSizeBytes,
+              pageMaxCacheSize,
+              redeliveryDelay,
+              redeliveryMultiplier,
+              maxRedeliveryDelay,
+              redistributionDelay,
+              sendToDLAOnNoRoute,
+              addressFullMessagePolicy,
+              slowConsumerThreshold,
+              slowConsumerCheckPeriod,
+              slowConsumerPolicy,
+              autoCreateJmsQueues,
+              autoDeleteJmsQueues,
+              autoCreateJmsTopics,
+              autoDeleteJmsTopics,
+              autoCreateQueues,
+              autoDeleteQueues,
+              autoCreateAddresses,
+              autoDeleteAddresses,
+              configDeleteQueues,
+              configDeleteAddresses,
+              maxSizeBytesRejectThreshold,
+              defaultLastValueKey,
+              defaultNonDestructive,
+              defaultExclusiveQueue,
+              defaultGroupRebalance,
+              defaultGroupBuckets,
+              defaultGroupFirstKey,
+              defaultMaxConsumers,
+              defaultPurgeOnNoConsumers,
+              defaultConsumersBeforeDispatch,
+              defaultDelayBeforeDispatch,
+              defaultQueueRoutingType,
+              defaultAddressRoutingType,
+              defaultConsumerWindowSize,
+              defaultRingSize,
+              autoDeleteCreatedQueues,
+              autoDeleteQueuesDelay,
+              autoDeleteQueuesMessageCount,
+              autoDeleteAddressesDelay,
+              redeliveryCollisionAvoidanceFactor,
+              retroactiveMessageCount,
+              autoCreateDeadLetterResources,
+              deadLetterQueuePrefix,
+              deadLetterQueueSuffix,
+              autoCreateExpiryResources,
+              expiryQueuePrefix,
+              expiryQueueSuffix,
+              minExpiryDelay,
+              maxExpiryDelay,
+              enableMetrics);
+
+      AddressSettingsInfo rootInfo = AddressSettingsInfo.from(serverControl.getAddressSettingsAsJSON(root));
+
+      // Give settings for addr different values to the root
+      final long addrMinExpiryDelay = rootInfo.getMinExpiryDelay() + 1;
+      final long addrMaxExpiryDelay = rootInfo.getMaxExpiryDelay() - 1;
+      serverControl.addAddressSettings(addr,
+              DLA,
+              expiryAddress,
+              expiryDelay,
+              lastValueQueue,
+              deliveryAttempts,
+              maxSizeBytes,
+              pageSizeBytes,
+              pageMaxCacheSize,
+              redeliveryDelay,
+              redeliveryMultiplier,
+              maxRedeliveryDelay,
+              redistributionDelay,
+              sendToDLAOnNoRoute,
+              addressFullMessagePolicy,
+              slowConsumerThreshold,
+              slowConsumerCheckPeriod,
+              slowConsumerPolicy,
+              autoCreateJmsQueues,
+              autoDeleteJmsQueues,
+              autoCreateJmsTopics,
+              autoDeleteJmsTopics,
+              autoCreateQueues,
+              autoDeleteQueues,
+              autoCreateAddresses,
+              autoDeleteAddresses,
+              configDeleteQueues,
+              configDeleteAddresses,
+              maxSizeBytesRejectThreshold,
+              defaultLastValueKey,
+              defaultNonDestructive,
+              defaultExclusiveQueue,
+              defaultGroupRebalance,
+              defaultGroupBuckets,
+              defaultGroupFirstKey,
+              defaultMaxConsumers,
+              defaultPurgeOnNoConsumers,
+              defaultConsumersBeforeDispatch,
+              defaultDelayBeforeDispatch,
+              defaultQueueRoutingType,
+              defaultAddressRoutingType,
+              defaultConsumerWindowSize,
+              defaultRingSize,
+              autoDeleteCreatedQueues,
+              autoDeleteQueuesDelay,
+              autoDeleteQueuesMessageCount,
+              autoDeleteAddressesDelay,
+              redeliveryCollisionAvoidanceFactor,
+              retroactiveMessageCount,
+              autoCreateDeadLetterResources,
+              deadLetterQueuePrefix,
+              deadLetterQueueSuffix,
+              autoCreateExpiryResources,
+              expiryQueuePrefix,
+              expiryQueueSuffix,
+              addrMinExpiryDelay,
+              addrMaxExpiryDelay,
+              enableMetrics);
+      AddressSettingsInfo addrInfo = AddressSettingsInfo.from(serverControl.getAddressSettingsAsJSON(addr));
+
+      assertEquals("settings for addr should carry update", addrMinExpiryDelay, addrInfo.getMinExpiryDelay());
+      assertEquals("settings for addr should carry update", addrMaxExpiryDelay, addrInfo.getMaxExpiryDelay());
+
+      serverControl.removeAddressSettings(addr);
+
+      AddressSettingsInfo rereadAddrInfo = AddressSettingsInfo.from(serverControl.getAddressSettingsAsJSON(addr));
+
+      assertEquals("settings for addr should have reverted to original value after removal", rootInfo.getMinExpiryDelay(), rereadAddrInfo.getMinExpiryDelay());
+      assertEquals("settings for addr should have reverted to original value after removal", rootInfo.getMaxExpiryDelay(), rereadAddrInfo.getMaxExpiryDelay());
+   }
+
+   @Test
    public void testNullRouteNameOnDivert() throws Exception {
       String address = RandomUtil.randomString();
       String name = RandomUtil.randomString();