summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2012-08-01 13:11:29 +0000
committerRobert Gemmell <robbie@apache.org>2012-08-01 13:11:29 +0000
commitb2a6d9a4b5c1298d2a62092f6bc654f41d93e2d7 (patch)
tree33580dcd02af94fed513dea2385a1d0e0689b1da
parent3f4122a2aa833a91f05f91e1101a5a13c6b59e92 (diff)
downloadqpid-python-b2a6d9a4b5c1298d2a62092f6bc654f41d93e2d7.tar.gz
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 checkbox to create a DLQ for the new queue, and display the alternateExchange attribute.
Work by myself and Keith Wall. git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.18@1367978 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java6
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html11
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js13
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js9
-rw-r--r--qpid/java/broker-plugins/management-http/src/main/java/resources/showQueue.html6
-rw-r--r--qpid/java/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/VirtualHostRestTest.java40
6 files changed, 71 insertions, 14 deletions
diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
index 5c7421fdaa..593377beed 100644
--- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
+++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
@@ -292,7 +292,11 @@ public class RestServlet extends AbstractServlet
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);
}
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 4912d8eb5d..d396f28877 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
@@ -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/>
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 b812ca2a0b..8b332dbf92 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
@@ -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]] + ")";
}
};
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 3fabc409be..53f82aff48 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
@@ -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))
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 9d156f817b..929e1d1f23 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
@@ -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'">
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 32edc3e305..17f1aaaf7b 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
@@ -346,6 +346,46 @@ public class VirtualHostRestTest extends QpidRestTestCase
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");