ARTEMIS-1887 Setting default-max-consumers in address-setting not working

When setting "default-max-consumers" in addressing setting in broker.xml
It has no effect on the "max-consumers" property on matching address queues.

Tests added as part of a previous commit

This closes #2107


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/fd3baf1e
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/fd3baf1e
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/fd3baf1e

Branch: refs/heads/master
Commit: fd3baf1ea29b55f9713bc302c313d02d76c30fab
Parents: 390a07e
Author: saurabhrai <[email protected]>
Authored: Thu May 24 17:49:24 2018 +0530
Committer: Clebert Suconic <[email protected]>
Committed: Thu May 24 14:36:23 2018 -0400

----------------------------------------------------------------------
 .../artemis/core/config/CoreQueueConfiguration.java   | 14 ++++++++++++++
 .../core/deployers/impl/FileConfigurationParser.java  |  4 +++-
 .../artemis/core/server/impl/ActiveMQServerImpl.java  |  7 +++++--
 3 files changed, 22 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fd3baf1e/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreQueueConfiguration.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreQueueConfiguration.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreQueueConfiguration.java
index 236fac6..f301b90 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreQueueConfiguration.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/CoreQueueConfiguration.java
@@ -45,6 +45,8 @@ public class CoreQueueConfiguration implements Serializable {
 
    private RoutingType routingType = 
ActiveMQDefaultConfiguration.getDefaultRoutingType();
 
+   private boolean maxConsumerConfigured = false;
+
    public CoreQueueConfiguration() {
    }
 
@@ -76,6 +78,15 @@ public class CoreQueueConfiguration implements Serializable {
       return lastValue;
    }
 
+   public boolean isMaxConsumerConfigured() {
+      return maxConsumerConfigured;
+   }
+
+   public CoreQueueConfiguration setMaxConsumerConfigured(boolean 
maxConsumerConfigured) {
+      this.maxConsumerConfigured = maxConsumerConfigured;
+      return this;
+   }
+
    /**
     * @param address the address to set
     */
@@ -171,6 +182,7 @@ public class CoreQueueConfiguration implements Serializable 
{
       result = prime * result + ((purgeOnNoConsumers == null) ? 0 : 
purgeOnNoConsumers.hashCode());
       result = prime * result + ((exclusive == null) ? 0 : 
exclusive.hashCode());
       result = prime * result + ((lastValue == null) ? 0 : 
lastValue.hashCode());
+      result = prime * result + (maxConsumerConfigured ? 1331 : 1337);
       return result;
    }
 
@@ -190,6 +202,8 @@ public class CoreQueueConfiguration implements Serializable 
{
          return false;
       if (durable != other.durable)
          return false;
+      if (maxConsumerConfigured != other.maxConsumerConfigured)
+         return false;
       if (filterString == null) {
          if (other.filterString != null)
             return false;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fd3baf1e/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
index 0444ba8..17f3b67 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
@@ -1093,6 +1093,7 @@ public final class FileConfigurationParser extends 
XMLConfigurationUtil {
       String address = null;
       String filterString = null;
       boolean durable = true;
+      boolean maxConumserConfigured = false;
       int maxConsumers = 
ActiveMQDefaultConfiguration.getDefaultMaxQueueConsumers();
       boolean purgeOnNoConsumers = 
ActiveMQDefaultConfiguration.getDefaultPurgeOnNoConsumers();
       String user = null;
@@ -1105,6 +1106,7 @@ public final class FileConfigurationParser extends 
XMLConfigurationUtil {
          if (item.getNodeName().equals("max-consumers")) {
             maxConsumers = Integer.parseInt(item.getNodeValue());
             Validators.MAX_QUEUE_CONSUMERS.validate(name, maxConsumers);
+            maxConumserConfigured = true;
          } else if (item.getNodeName().equals("purge-on-no-consumers")) {
             purgeOnNoConsumers = Boolean.parseBoolean(item.getNodeValue());
          } else if (item.getNodeName().equals("exclusive")) {
@@ -1130,7 +1132,7 @@ public final class FileConfigurationParser extends 
XMLConfigurationUtil {
       }
 
       return new 
CoreQueueConfiguration().setAddress(address).setName(name).setFilterString(filterString).setDurable(durable).setMaxConsumers(maxConsumers).setPurgeOnNoConsumers(purgeOnNoConsumers).setUser(user)
-                                         
.setExclusive(exclusive).setLastValue(lastValue);
+                                         
.setExclusive(exclusive).setLastValue(lastValue).setMaxConsumerConfigured(maxConumserConfigured);
    }
 
    protected CoreAddressConfiguration parseAddressConfiguration(final Node 
node) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fd3baf1e/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index cb58a1a..ebe0401 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -2541,15 +2541,18 @@ public class ActiveMQServerImpl implements 
ActiveMQServer {
          ActiveMQServerLogger.LOGGER.deployQueue(config.getName(), 
config.getAddress());
          AddressSettings as = 
addressSettingsRepository.getMatch(config.getAddress());
          // determine if there is an address::queue match; update it if so
+         int maxConsumerAddressSetting = as.getDefaultMaxConsumers();
+         int maxConsumerQueueConfig = config.getMaxConsumers();
+         int maxConsumer = (config.isMaxConsumerConfigured()) ? 
maxConsumerQueueConfig : maxConsumerAddressSetting;
          if (locateQueue(queueName) != null && 
locateQueue(queueName).getAddress().toString().equals(config.getAddress())) {
-            updateQueue(config.getName(), config.getRoutingType(), 
config.getMaxConsumers(), config.getPurgeOnNoConsumers(),
+            updateQueue(config.getName(), config.getRoutingType(), 
maxConsumer, config.getPurgeOnNoConsumers(),
                         config.isExclusive() == null ? 
as.isDefaultExclusiveQueue() : config.isExclusive());
          } else {
             // if the address::queue doesn't exist then create it
             try {
                createQueue(SimpleString.toSimpleString(config.getAddress()), 
config.getRoutingType(),
                            queueName, 
SimpleString.toSimpleString(config.getFilterString()), 
SimpleString.toSimpleString(config.getUser()),
-                           
config.isDurable(),false,false,false,false,config.getMaxConsumers(),config.getPurgeOnNoConsumers(),
+                           
config.isDurable(),false,false,false,false,maxConsumer,config.getPurgeOnNoConsumers(),
                            config.isExclusive() == null ? 
as.isDefaultExclusiveQueue() : config.isExclusive(),
                            config.isLastValue() == null ? 
as.isDefaultLastValueQueue() : config.isLastValue(), true);
             } catch (ActiveMQQueueExistsException e) {

Reply via email to