diff options
author | Robert Gemmell <robbie@apache.org> | 2013-05-15 13:57:10 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2013-05-15 13:57:10 +0000 |
commit | c43f5d0600851d94511bd537674479511033c68a (patch) | |
tree | 4810d15584a91c334fd7a7fce3280ecbe870225e | |
parent | 8f3c8870bdfde16d130150bce14444bfb72eb7c7 (diff) | |
download | qpid-python-c43f5d0600851d94511bd537674479511033c68a.tar.gz |
QPID-4847: add support for message group attributes when creating/inspecting queues via the rest interface and web management ui
merged from trunk r1482838
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.22@1482842 13f79535-47bb-0310-9956-ffa450edef68
10 files changed, 74 insertions, 21 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html index 76123296b1..9a24e23407 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html @@ -182,6 +182,22 @@ <td valign="top">NOTE: Configuring maximum delivery retries on a queue which has no DLQ / AlternateExchange will result in messages being discarded after the limit is reached.</td> </tr> </table> + <table cellpadding="0" cellspacing="2"> + + <!-- qpid.group_header_key --> + <tr> + <td valign="top"><strong>Message Group Key: </strong></td> + <td><input type="text" required="false" name="messageGroupKey" id="formAddQueue.messageGroupKey" + dojoType="dijit.form.ValidationTextBox" + trim="true"/></td> + </tr> + + <!-- qpid.qpid.shared_msg_group --> + <tr> + <td valign="top"><strong>Shared Message Groups? </strong></td> + <td><input type="checkbox" name="messageGroupSharedGroups" id="formAddQueue.messageGroupSharedGroups" value="messageGroupSharedGroups" dojoType="dijit.form.CheckBox" /></td> + </tr> + </table> </div> </div> <div class="dijitDialogPaneActionBar"> diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js index cb6846878f..a47b24d1ab 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js @@ -282,6 +282,9 @@ define(["dojo/_base/xhr", "alertThresholdQueueDepthBytesUnits", "alertThresholdQueueDepthMessages", "alternateExchange", + "messageGroups", + "messageGroupKey", + "messageGroupSharedGroups", "queueDepthMessages", "queueDepthBytes", "queueDepthBytesUnits", @@ -357,6 +360,16 @@ define(["dojo/_base/xhr", this.typeQualifier.innerHTML = entities.encode("(" + queueTypeKeyNames[this.queueData.type] + ": " + this.queueData[queueTypeKeys[this.queueData.type]] + ")"); } + if(this.queueData["messageGroupKey"]) + { + this.messageGroupKey.innerHTML = entities.encode(String(this.queueData["messageGroupKey"])); + this.messageGroupSharedGroups.innerHTML = entities.encode(String(this.queueData["messageGroupSharedGroups"])); + this.messageGroups.style.display = "block"; + } + else + { + this.messageGroups.style.display = "none"; + } }; QueueUpdater.prototype.update = function() diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js index b1357f8c98..e8b8dd1721 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js @@ -89,6 +89,12 @@ define(["dojo/_base/xhr", newQueue["x-qpid-dlq-enabled"] = true; } } + else if(propName === "messageGroupSharedGroups") + { + if (formValues.messageGroupSharedGroups[0] && formValues.messageGroupSharedGroups[0] == "messageGroupSharedGroups") { + newQueue["messageGroupSharedGroups"] = true; + } + } else if (!typeSpecificFields.hasOwnProperty(propName) || formValues.type === typeSpecificFields[ propName ]) { if(formValues[ propName ] !== "") { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html index 929e1d1f23..c31cae6f8a 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html @@ -51,6 +51,10 @@ <span style="position:absolute; left:26em">Type:</span><span style="position:absolute; left:29em" class="type"></span> <span style="position:absolute; right:1em" class="typeQualifier"></span> <br/> + <div class="messageGroups"> + <span style="" class="messageGroupKeyLabel">Message Group Key:</span><span class="messageGroupKey" style="position:absolute; left:11em"></span> + <span style="position:absolute; left:26em" class="messageGroupSharedGroupsLabel">Shared Message Groups:</span><span style="position:absolute; left:39em" class="messageGroupSharedGroups"></span> + </div> <br/> <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Bindings'"> <div class="bindings"></div> diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java index e168e6ea98..0b31f5b81a 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/BrokerProperties.java @@ -50,6 +50,8 @@ public class BrokerProperties public static final String PROPERTY_MANAGEMENT_RIGHTS_INFER_ALL_ACCESS = "qpid.broker_jmx_method_rights_infer_all_access"; public static final String PROPERTY_USE_CUSTOM_RMI_SOCKET_FACTORY = "qpid.broker_jmx_use_custom_rmi_socket_factory"; + public static final String PROPERTY_DEFAULT_SHARED_MESSAGE_GROUP = "qpid.broker_default-shared-message-group"; + public static final String PROPERTY_QPID_HOME = "QPID_HOME"; public static final String PROPERTY_QPID_WORK = "QPID_WORK"; diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java index bf703e6fbe..6fe0607ab2 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Queue.java @@ -88,7 +88,6 @@ public interface Queue extends ConfiguredObject public static final String ALTERNATE_EXCHANGE = "alternateExchange"; public static final String EXCLUSIVE = "exclusive"; public static final String MESSAGE_GROUP_KEY = "messageGroupKey"; - public static final String MESSAGE_GROUP_DEFAULT_GROUP = "messageGroupDefaultGroup"; public static final String MESSAGE_GROUP_SHARED_GROUPS = "messageGroupSharedGroups"; public static final String LVQ_KEY = "lvqKey"; public static final String MAXIMUM_DELIVERY_ATTEMPTS = "maximumDeliveryAttempts"; @@ -122,7 +121,6 @@ public interface Queue extends ConfiguredObject LVQ_KEY, SORT_KEY, MESSAGE_GROUP_KEY, - MESSAGE_GROUP_DEFAULT_GROUP, MESSAGE_GROUP_SHARED_GROUPS, MAXIMUM_DELIVERY_ATTEMPTS, QUEUE_FLOW_CONTROL_SIZE_BYTES, diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java index 0916c4e730..afcce482b6 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/QueueAdapter.java @@ -308,10 +308,6 @@ final class QueueAdapter extends AbstractAdapter implements Queue, AMQQueue.Subs { // TODO } - else if(MESSAGE_GROUP_DEFAULT_GROUP.equals(name)) - { - // TODO - } else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name)) { // TODO @@ -416,15 +412,13 @@ final class QueueAdapter extends AbstractAdapter implements Queue, AMQQueue.Subs } else if(MESSAGE_GROUP_KEY.equals(name)) { - // TODO - } - else if(MESSAGE_GROUP_DEFAULT_GROUP.equals(name)) - { - // TODO + return _queue.getArguments().get(SimpleAMQQueue.QPID_GROUP_HEADER_KEY); } else if(MESSAGE_GROUP_SHARED_GROUPS.equals(name)) { - // TODO + //We only return the boolean value if message groups are actually in use + return getAttribute(MESSAGE_GROUP_KEY) == null ? null : + SimpleAMQQueue.SHARED_MSG_GROUP_ARG_VALUE.equals(_queue.getArguments().get(SimpleAMQQueue.QPID_SHARED_MSG_GROUP)); } else if(LVQ_KEY.equals(name)) { diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java index df171d61f6..71ec3c4008 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java @@ -70,6 +70,7 @@ import org.apache.qpid.server.queue.AMQQueue; import org.apache.qpid.server.queue.AMQQueueFactory; import org.apache.qpid.server.queue.QueueEntry; import org.apache.qpid.server.queue.QueueRegistry; +import org.apache.qpid.server.queue.SimpleAMQQueue; import org.apache.qpid.server.security.SecurityManager; import org.apache.qpid.server.security.access.Operation; import org.apache.qpid.server.security.auth.AuthenticatedPrincipal; @@ -338,6 +339,23 @@ public final class VirtualHostAdapter extends AbstractAdapter implements Virtual throw new IllegalArgumentException("Sort key is not specified for sorted queue"); } } + + if (attributes.containsKey(Queue.MESSAGE_GROUP_KEY)) + { + String key = MapValueConverter.getStringAttribute(Queue.MESSAGE_GROUP_KEY, attributes); + attributes.remove(Queue.MESSAGE_GROUP_KEY); + attributes.put(SimpleAMQQueue.QPID_GROUP_HEADER_KEY, key); + } + + if (attributes.containsKey(Queue.MESSAGE_GROUP_SHARED_GROUPS)) + { + if(MapValueConverter.getBooleanAttribute(Queue.MESSAGE_GROUP_SHARED_GROUPS, attributes)) + { + attributes.remove(Queue.MESSAGE_GROUP_SHARED_GROUPS); + attributes.put(SimpleAMQQueue.QPID_SHARED_MSG_GROUP, SimpleAMQQueue.SHARED_MSG_GROUP_ARG_VALUE); + } + } + String name = MapValueConverter.getStringAttribute(Queue.NAME, attributes, null); State state = MapValueConverter.getEnumAttribute(State.class, Queue.STATE, attributes, State.ACTIVE); boolean durable = MapValueConverter.getBooleanAttribute(Queue.DURABLE, attributes, false); diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java index b16af05883..79cc2c0c1d 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java @@ -41,8 +41,8 @@ import org.apache.qpid.AMQSecurityException; import org.apache.qpid.framing.AMQShortString; import org.apache.qpid.pool.ReferenceCountingExecutorService; import org.apache.qpid.server.binding.Binding; +import org.apache.qpid.server.configuration.BrokerProperties; import org.apache.qpid.server.configuration.QueueConfiguration; -import org.apache.qpid.server.configuration.plugins.AbstractConfiguration; import org.apache.qpid.server.exchange.Exchange; import org.apache.qpid.server.logging.LogActor; import org.apache.qpid.server.logging.LogSubject; @@ -65,12 +65,15 @@ import org.apache.qpid.server.virtualhost.VirtualHost; public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener, MessageGroupManager.SubscriptionResetHelper { + private static final Logger _logger = Logger.getLogger(SimpleAMQQueue.class); - private static final String QPID_GROUP_HEADER_KEY = "qpid.group_header_key"; - private static final String QPID_SHARED_MSG_GROUP = "qpid.shared_msg_group"; - private static final String QPID_DEFAULT_MESSAGE_GROUP = "qpid.default-message-group"; + public static final String QPID_GROUP_HEADER_KEY = "qpid.group_header_key"; + public static final String QPID_SHARED_MSG_GROUP = "qpid.shared_msg_group"; + public static final String SHARED_MSG_GROUP_ARG_VALUE = "1"; + private static final String QPID_DEFAULT_MESSAGE_GROUP_ARG = "qpid.default-message-group"; private static final String QPID_NO_GROUP = "qpid.no-group"; + private static final String DEFAULT_SHARED_MESSAGE_GROUP = System.getProperty(BrokerProperties.PROPERTY_DEFAULT_SHARED_MESSAGE_GROUP, QPID_NO_GROUP); // TODO - should make this configurable at the vhost / broker level private static final int DEFAULT_MAX_GROUPS = 255; @@ -254,12 +257,12 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener, Mes if(arguments != null && arguments.containsKey(QPID_GROUP_HEADER_KEY)) { - if(arguments.containsKey(QPID_SHARED_MSG_GROUP) && String.valueOf(arguments.get(QPID_SHARED_MSG_GROUP)).equals("1")) + if(arguments.containsKey(QPID_SHARED_MSG_GROUP) && String.valueOf(arguments.get(QPID_SHARED_MSG_GROUP)).equals(SHARED_MSG_GROUP_ARG_VALUE)) { - Object defaultGroup = arguments.get(QPID_DEFAULT_MESSAGE_GROUP); + Object defaultGroup = arguments.get(QPID_DEFAULT_MESSAGE_GROUP_ARG); _messageGroupManager = new DefinedGroupMessageGroupManager(String.valueOf(arguments.get(QPID_GROUP_HEADER_KEY)), - defaultGroup == null ? QPID_NO_GROUP : defaultGroup.toString(), + defaultGroup == null ? DEFAULT_SHARED_MESSAGE_GROUP : defaultGroup.toString(), this); } else diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java index 6f795cc61d..deaac2dd2a 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java @@ -88,8 +88,7 @@ public class Asserts assertNotNull("Queue " + queueName + " is not found!", queueData); Asserts.assertAttributesPresent(queueData, Queue.AVAILABLE_ATTRIBUTES, Queue.CREATED, Queue.UPDATED, Queue.DESCRIPTION, Queue.TIME_TO_LIVE, Queue.ALTERNATE_EXCHANGE, Queue.OWNER, Queue.NO_LOCAL, Queue.LVQ_KEY, - Queue.SORT_KEY, Queue.MESSAGE_GROUP_KEY, Queue.MESSAGE_GROUP_DEFAULT_GROUP, - Queue.MESSAGE_GROUP_SHARED_GROUPS, Queue.PRIORITIES); + Queue.SORT_KEY, Queue.MESSAGE_GROUP_KEY, Queue.MESSAGE_GROUP_SHARED_GROUPS, Queue.PRIORITIES); assertEquals("Unexpected value of queue attribute " + Queue.NAME, queueName, queueData.get(Queue.NAME)); assertNotNull("Unexpected value of queue attribute " + Queue.ID, queueData.get(Queue.ID)); |