Author: robbie Date: Tue Jul 31 22:03:12 2012 New Revision: 1367797 URL: http://svn.apache.org/viewvc?rev=1367797&view=rev Log: QPID-4167: Fix a cycle in the JSON output of the AlternateExchange attribute which would lead to massive/broken output that would cripple the webui. Add REST test to validate the fix. Add checkbox to create a DLQ for the new queue, and display the alternateExchange attribute.
Work by myself and Keith Wall. Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1367797&r1=1367796&r2=1367797&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original) +++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Tue Jul 31 22:03:12 2012 @@ -292,7 +292,11 @@ public class RestServlet extends Abstrac for(String name : confObject.getAttributeNames()) { Object value = confObject.getAttribute(name); - if(value != null) + if(value instanceof ConfiguredObject) + { + object.put(name, ((ConfiguredObject) value).getName()); + } + else if(value != null) { object.put(name, value); } Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html?rev=1367797&r1=1367796&r2=1367797&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html (original) +++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html Tue Jul 31 22:03:12 2012 @@ -162,8 +162,15 @@ regexp="[0-9]+" invalidMessage= "Invalid value"/></td> </tr> - - + <tr> + <td valign="top"><strong>Create DLQ? </strong></td> + <td><input type="checkbox" name="dlqEnabled" id="formAddQueue.dlqEnabled" value="dlqEnabled" dojoType="dijit.form.CheckBox" /></td> + </tr> + </table> + <table cellpadding="0" cellspacing="2"> + <tr> + <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> </div> <br/> Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js?rev=1367797&r1=1367796&r2=1367797&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js (original) +++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js Tue Jul 31 22:03:12 2012 @@ -270,8 +270,7 @@ define(["dojo/_base/xhr", "durable", "lifetimePolicy", "type", - "keyName", - "keyValue", + "typeQualifier", "alertRepeatGap", "alertRepeatGapUnits", "alertThresholdMessageAge", @@ -281,6 +280,7 @@ define(["dojo/_base/xhr", "alertThresholdQueueDepthBytes", "alertThresholdQueueDepthBytesUnits", "alertThresholdQueueDepthMessages", + "alternateExchange", "queueDepthMessages", "queueDepthBytes", "queueDepthBytesUnits", @@ -335,7 +335,7 @@ define(["dojo/_base/xhr", this.state.innerHTML = this.queueData[ "state" ]; this.durable.innerHTML = this.queueData[ "durable" ]; this.lifetimePolicy.innerHTML = this.queueData[ "lifetimePolicy" ]; - this.type.innerHTML = this.queueData[ "type" ]; + this.alternateExchange.innerHTML = this.queueData[ "alternateExchange" ] ? this.queueData[ "alternateExchange" ]: "" ; this.queueDepthMessages.innerHTML = this.queueData["queueDepthMessages"]; bytesDepth = formatter.formatBytes( this.queueData["queueDepthBytes"] ); @@ -346,15 +346,14 @@ define(["dojo/_base/xhr", bytesDepth = formatter.formatBytes( this.queueData["unacknowledgedBytes"] ); this.unacknowledgedBytes.innerHTML = "(" + bytesDepth.value; this.unacknowledgedBytesUnits.innerHTML = bytesDepth.units + ")"; + this.type.innerHTML = this.queueData[ "type" ]; if (this.queueData.type == "standard") { - this.keyName.style.display = "none"; - this.keyValue.style.display = "none"; + this.typeQualifier.style.display = "none"; } else { - this.keyName.innerHTML = queueTypeKeyNames[this.queueData.type] + ":"; - this.keyValue.innerHTML = this.queueData[queueTypeKeys[this.queueData.type]]; + this.typeQualifier.innerHTML = "(" + queueTypeKeyNames[this.queueData.type] + ": " + this.queueData[queueTypeKeys[this.queueData.type]] + ")"; } }; Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js?rev=1367797&r1=1367796&r2=1367797&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js (original) +++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js Tue Jul 31 22:03:12 2012 @@ -81,7 +81,14 @@ define(["dojo/_base/xhr", if (formValues.durable[0] && formValues.durable[0] == "durable") { newQueue.durable = true; } - } else if (!typeSpecificFields.hasOwnProperty(propName) || + } + else if(propName === "dlqEnabled") + { + if (formValues.dlqEnabled[0] && formValues.dlqEnabled[0] == "dlqEnabled") { + newQueue["x-qpid-dlq-enabled"] = true; + } + } + else if (!typeSpecificFields.hasOwnProperty(propName) || formValues.type === typeSpecificFields[ propName ]) { if(formValues[ propName ] !== "") { if (fieldConverters.hasOwnProperty(propName)) Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html?rev=1367797&r1=1367796&r2=1367797&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html (original) +++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html Tue Jul 31 22:03:12 2012 @@ -47,9 +47,9 @@ <span class="bytesOutRate" style="position:absolute; right: 3.3em"></span> <span class="bytesOutRateUnits" style="position:absolute; right: 0em; width: 3em"></span> <br/> - <span style="">Type:</span><span style="position:absolute; left:6em" class="type"></span> - <span style="position:absolute; left:26em" class="keyName"></span> - <span style="position:absolute; right:1em" class="keyValue"></span> + <span style="">AlternateExchange:</span><span class="alternateExchange" style="position:absolute; left:10em"></span> + <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/> <br/> <div data-dojo-type="dijit.TitlePane" data-dojo-props="title: 'Bindings'"> Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java?rev=1367797&r1=1367796&r2=1367797&view=diff ============================================================================== --- qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java (original) +++ qpid/trunk/qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java Tue Jul 31 22:03:12 2012 @@ -346,6 +346,46 @@ public class VirtualHostRestTest extends assertEquals("Unexpected priorities key attribute", 10, priorityQueue.get(Queue.PRIORITIES)); } + @SuppressWarnings("unchecked") + public void testCreateQueueWithDLQEnabled() throws Exception + { + String queueName = getTestQueueName(); + + Map<String, Object> attributes = new HashMap<String, Object>(); + attributes.put(AMQQueueFactory.X_QPID_DLQ_ENABLED, true); + + //verify the starting state + Map<String, Object> hostDetails = getJsonAsSingletonList("/rest/virtualhost/test"); + List<Map<String, Object>> queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE); + List<Map<String, Object>> exchanges = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_EXCHANGES_ATTRIBUTE); + + assertNull("queue should not have already been present", find(Queue.NAME, queueName , queues)); + assertNull("queue should not have already been present", find(Queue.NAME, queueName + "_DLQ" , queues)); + assertNull("exchange should not have already been present", find(Exchange.NAME, queueName + "_DLE" , exchanges)); + + //create the queue + createQueue(queueName, "standard", attributes); + + //verify the new queue, as well as the DLQueue and DLExchange have been created + hostDetails = getJsonAsSingletonList("/rest/virtualhost/test"); + queues = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_QUEUES_ATTRIBUTE); + exchanges = (List<Map<String, Object>>) hostDetails.get(VirtualHostRestTest.VIRTUALHOST_EXCHANGES_ATTRIBUTE); + + Map<String, Object> queue = find(Queue.NAME, queueName , queues); + Map<String, Object> dlqQueue = find(Queue.NAME, queueName + "_DLQ" , queues); + Map<String, Object> dlExchange = find(Exchange.NAME, queueName + "_DLE" , exchanges); + assertNotNull("queue should not have been present", queue); + assertNotNull("queue should not have been present", dlqQueue); + assertNotNull("exchange should not have been present", dlExchange); + + //verify that the alternate exchange is set as expected on the new queue + Map<String, Object> queueAttributes = new HashMap<String, Object>(); + queueAttributes.put(Queue.ALTERNATE_EXCHANGE, queueName + "_DLE"); + + Asserts.assertQueue(queueName, "standard", queue, queueAttributes); + Asserts.assertQueue(queueName, "standard", queue, null); + } + private void createExchange(String exchangeName, String exchangeType) throws IOException { HttpURLConnection connection = openManagementConection("/rest/exchange/test/" + exchangeName, "PUT"); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org