From 3f4122a2aa833a91f05f91e1101a5a13c6b59e92 Mon Sep 17 00:00:00 2001 From: Robert Gemmell Date: Wed, 1 Aug 2012 13:01:06 +0000 Subject: QPID-4167: Fix setting of queue attributes via web management console and rest interfaces. Also import Subscription into the bundle to resolve CDNFExcept ion when viewing a queue with Consumers. Work by Oleksandr Rudyy, Keith Wall and myself. merged from trunk r1367796 git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.18@1367973 13f79535-47bb-0310-9956-ffa450edef68 --- .../broker-plugins/management-http/MANIFEST.MF | 1 + .../src/main/java/resources/addQueue.html | 27 ++++++------ .../java/resources/js/qpid/management/addQueue.js | 19 +++++++- .../src/main/java/resources/showQueue.html | 30 ++++++------- .../src/main/java/resources/showVirtualHost.html | 27 ++++++------ .../management/plugin/servlet/rest/Asserts.java | 35 ++++++++++----- .../plugin/servlet/rest/VirtualHostRestTest.java | 50 ++++++++++++++++++++++ .../qpid/server/model/adapter/QueueAdapter.java | 4 +- .../server/plugins/OsgiSystemPackages.properties | 1 + 9 files changed, 139 insertions(+), 55 deletions(-) diff --git a/qpid/java/broker-plugins/management-http/MANIFEST.MF b/qpid/java/broker-plugins/management-http/MANIFEST.MF index a03844494b..cca10d3f89 100644 --- a/qpid/java/broker-plugins/management-http/MANIFEST.MF +++ b/qpid/java/broker-plugins/management-http/MANIFEST.MF @@ -30,6 +30,7 @@ Import-Package: org.apache.qpid, org.apache.qpid.server.plugins, org.apache.qpid.server.protocol, org.apache.qpid.server.queue, + org.apache.qpid.server.subscription, org.apache.qpid.server.registry, org.apache.qpid.server.security, org.apache.qpid.server.security.access, 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 a83c388bb4..4912d8eb5d 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 @@ -94,7 +94,7 @@ @@ -103,7 +103,7 @@ @@ -111,27 +111,28 @@
+ - - + - + - - + - + - - +
Maximum Message Age: Queue Depth:
Maximum Message Size: Message Age:
Maximum Number in Queue: Message Size:
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 1843552f46..3fabc409be 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 @@ -58,6 +58,16 @@ define(["dojo/_base/xhr", sorted: "sortkey" }; + var fieldConverters = { + queueFlowControlSizeBytes: parseInt, + queueFlowResumeSizeBytes: parseInt, + alertThresholdMessageSize: parseInt, + alertThresholdQueueDepthMessages: parseInt, + maximumDeliveryAttempts: parseInt, + alertThresholdMessageAge: parseInt, + alertRepeatGap: parseInt + } + var convertToQueue = function convertToQueue(formValues) { var newQueue = {}; @@ -74,7 +84,14 @@ define(["dojo/_base/xhr", } else if (!typeSpecificFields.hasOwnProperty(propName) || formValues.type === typeSpecificFields[ propName ]) { if(formValues[ propName ] !== "") { - newQueue[ propName ] = formValues[propName]; + if (fieldConverters.hasOwnProperty(propName)) + { + newQueue[ propName ] = fieldConverters[propName](formValues[propName]); + } + else + { + newQueue[ propName ] = 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 f4960055b0..9d156f817b 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 @@ -69,33 +69,31 @@

- Max. Queue Size: + Queue Depth: - msgs + style="position:absolute; left:4em; width:8em; text-align:right"> + msgs + Queue Depth: - + style="position:absolute; left:22em; width:8em; text-align:right"> +
- Max. Message Age: + Message Age: - + style="position:absolute; left:4em; width:8em; text-align:right"> + - Size: + Message Size: - + style="position:absolute; left:25em; width:5em; text-align:right"> +

Alert frequency: - - - - + style="position:absolute; left:4em; width:8em; text-align:right"> +
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html b/qpid/java/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html index f4d998458f..73c912e0d4 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/showVirtualHost.html @@ -57,30 +57,31 @@

- Max. Queue Size: + Queue Depth: - msgs + style="position:absolute; left:4em; width:8em; text-align:right"> + msgs + Queue Depth: - + style="position:absolute; left:22em; width:8em; text-align:right"> +
- Max. Message Age: + Message Age: - + style="position:absolute; left:4em; width:8em; text-align:right"> + - Size: + Message Size: - + style="position:absolute; left:25em; width:5em; text-align:right"> +

Alert frequency: - + style="position:absolute; left:4em; width:8em; text-align:right"> +
diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/Asserts.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/Asserts.java index db5306b08d..2595007574 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/Asserts.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/Asserts.java @@ -78,6 +78,11 @@ public class Asserts } public static void assertQueue(String queueName, String queueType, Map queueData) + { + assertQueue(queueName, queueType, queueData, null); + } + + public static void assertQueue(String queueName, String queueType, Map queueData, Map expectedAttributes) { assertNotNull("Queue " + queueName + " is not found!", queueData); Asserts.assertAttributesPresent(queueData, Queue.AVAILABLE_ATTRIBUTES, Queue.CREATED, Queue.UPDATED, @@ -91,18 +96,28 @@ public class Asserts assertEquals("Unexpected value of queue attribute " + Queue.LIFETIME_POLICY, LifetimePolicy.PERMANENT.name(), queueData.get(Queue.LIFETIME_POLICY)); assertEquals("Unexpected value of queue attribute " + Queue.TYPE, queueType, queueData.get(Queue.TYPE)); - assertEquals("Unexpected value of queue attribute " + Queue.EXCLUSIVE, Boolean.FALSE, queueData.get(Queue.EXCLUSIVE)); - assertEquals("Unexpected value of queue attribute " + Queue.MAXIMUM_DELIVERY_ATTEMPTS, 0, - queueData.get(Queue.MAXIMUM_DELIVERY_ATTEMPTS)); - assertEquals("Unexpected value of queue attribute " + Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 0, - queueData.get(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES)); - assertEquals("Unexpected value of queue attribute " + Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 0, - queueData.get(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES)); - assertEquals("Unexpected value of queue attribute " + Queue.QUEUE_FLOW_STOPPED, Boolean.FALSE, - queueData.get(Queue.QUEUE_FLOW_STOPPED)); + if (expectedAttributes == null) + { + assertEquals("Unexpected value of queue attribute " + Queue.EXCLUSIVE, Boolean.FALSE, queueData.get(Queue.EXCLUSIVE)); + assertEquals("Unexpected value of queue attribute " + Queue.MAXIMUM_DELIVERY_ATTEMPTS, 0, + queueData.get(Queue.MAXIMUM_DELIVERY_ATTEMPTS)); + assertEquals("Unexpected value of queue attribute " + Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 0, + queueData.get(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES)); + assertEquals("Unexpected value of queue attribute " + Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 0, + queueData.get(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES)); + assertEquals("Unexpected value of queue attribute " + Queue.QUEUE_FLOW_STOPPED, Boolean.FALSE, + queueData.get(Queue.QUEUE_FLOW_STOPPED)); + } + else + { + for (Map.Entry attribute : expectedAttributes.entrySet()) + { + assertEquals("Unexpected value of " + queueName + " queue attribute " + attribute.getKey(), + attribute.getValue(), queueData.get(attribute.getKey())); + } + } assertNotNull("Unexpected value of queue attribute statistics", queueData.get(Asserts.STATISTICS_ATTRIBUTE)); - @SuppressWarnings("unchecked") Map statistics = (Map) queueData.get(Asserts.STATISTICS_ATTRIBUTE); Asserts.assertAttributesPresent(statistics, Queue.AVAILABLE_STATISTICS, Queue.DISCARDS_TTL_BYTES, diff --git a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java index eaf2e60478..32edc3e305 100644 --- a/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java +++ b/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java @@ -296,6 +296,56 @@ public class VirtualHostRestTest extends QpidRestTestCase assertEquals("Exchange should be deleted", 0, queues.size()); } + public void testPutCreateQueueWithAttributes() throws Exception + { + String queueName = getTestQueueName(); + + Map attributes = new HashMap(); + attributes.put(Queue.ALERT_REPEAT_GAP, 1000); + attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_AGE, 3600000); + attributes.put(Queue.ALERT_THRESHOLD_MESSAGE_SIZE, 1000000000); + attributes.put(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, 800); + attributes.put(Queue.MAXIMUM_DELIVERY_ATTEMPTS, 15); + attributes.put(Queue.QUEUE_FLOW_CONTROL_SIZE_BYTES, 2000000000); + attributes.put(Queue.QUEUE_FLOW_RESUME_SIZE_BYTES, 1500000000); + + createQueue(queueName + "-standard", "standard", attributes); + + Map sortedQueueAttributes = new HashMap(); + sortedQueueAttributes.putAll(attributes); + sortedQueueAttributes.put(Queue.SORT_KEY, "sortme"); + createQueue(queueName + "-sorted", "sorted", sortedQueueAttributes); + + Map priorityQueueAttributes = new HashMap(); + priorityQueueAttributes.putAll(attributes); + priorityQueueAttributes.put(Queue.PRIORITIES, 10); + createQueue(queueName + "-priority", "priority", priorityQueueAttributes); + + Map lvqQueueAttributes = new HashMap(); + lvqQueueAttributes.putAll(attributes); + lvqQueueAttributes.put(Queue.LVQ_KEY, "LVQ"); + createQueue(queueName + "-lvq", "lvq", lvqQueueAttributes); + + Map hostDetails = getJsonAsSingletonList("/rest/virtualhost/test"); + + @SuppressWarnings("unchecked") + List> queues = (List>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE); + Map standardQueue = find(Queue.NAME, queueName + "-standard" , queues); + Map sortedQueue = find(Queue.NAME, queueName + "-sorted" , queues); + Map priorityQueue = find(Queue.NAME, queueName + "-priority" , queues); + Map lvqQueue = find(Queue.NAME, queueName + "-lvq" , queues); + + attributes.put(Queue.DURABLE, Boolean.TRUE); + Asserts.assertQueue(queueName + "-standard", "standard", standardQueue, attributes); + Asserts.assertQueue(queueName + "-sorted", "sorted", sortedQueue, attributes); + Asserts.assertQueue(queueName + "-priority", "priority", priorityQueue, attributes); + Asserts.assertQueue(queueName + "-lvq", "lvq", lvqQueue, attributes); + + assertEquals("Unexpected sorted key attribute", "sortme", sortedQueue.get(Queue.SORT_KEY)); + assertEquals("Unexpected lvq key attribute", "LVQ", lvqQueue.get(Queue.LVQ_KEY)); + assertEquals("Unexpected priorities key attribute", 10, priorityQueue.get(Queue.PRIORITIES)); + } + private void createExchange(String exchangeName, String exchangeType) throws IOException { HttpURLConnection connection = openManagementConection("/rest/exchange/test/" + exchangeName, "PUT"); 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 5a5f7435a2..78f6d38d93 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 @@ -51,8 +51,8 @@ final class QueueAdapter extends AbstractAdapter implements Queue, AMQQueue.Subs static { QueueAdapter.ATTRIBUTE_MAPPINGS.put(Queue.ALERT_REPEAT_GAP, "x-qpid-minimum-alert-repeat-gap"); - QueueAdapter.ATTRIBUTE_MAPPINGS.put(Queue.ALERT_THRESHOLD_MESSAGE_AGE, "x-qpid-maximum-message-size"); - QueueAdapter.ATTRIBUTE_MAPPINGS.put(Queue.ALERT_THRESHOLD_MESSAGE_SIZE, "x-qpid-maximum-message-age"); + QueueAdapter.ATTRIBUTE_MAPPINGS.put(Queue.ALERT_THRESHOLD_MESSAGE_AGE, "x-qpid-maximum-message-age"); + QueueAdapter.ATTRIBUTE_MAPPINGS.put(Queue.ALERT_THRESHOLD_MESSAGE_SIZE, "x-qpid-maximum-message-size"); QueueAdapter.ATTRIBUTE_MAPPINGS.put(Queue.ALERT_THRESHOLD_QUEUE_DEPTH_MESSAGES, "x-qpid-maximum-message-count"); QueueAdapter.ATTRIBUTE_MAPPINGS.put(Queue.MAXIMUM_DELIVERY_ATTEMPTS, "x-qpid-maximum-delivery-count"); diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/OsgiSystemPackages.properties b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/OsgiSystemPackages.properties index 4767e1ea6b..6479546355 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/OsgiSystemPackages.properties +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/plugins/OsgiSystemPackages.properties @@ -117,6 +117,7 @@ org.apache.qpid.server.persistent=0.0.0 org.apache.qpid.server.plugins=0.0.0 org.apache.qpid.server.protocol=0.0.0 org.apache.qpid.server.queue=0.0.0 +org.apache.qpid.server.subscription=0.0.0 org.apache.qpid.server.registry=0.0.0 org.apache.qpid.server.security=0.0.0 org.apache.qpid.server.security.access=0.0.0 -- cgit v1.2.1