summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2013-01-21 18:02:51 +0000
committerTed Ross <tross@apache.org>2013-01-21 18:02:51 +0000
commitcdb684fd1e8996772be47579e414cfe6a7643eb7 (patch)
treee5f94fdeaec284f197de1a151ce4767ade3688cc
parentab043489741e08dccbac3753603987151b1daa81 (diff)
downloadqpid-python-cdb684fd1e8996772be47579e414cfe6a7643eb7.tar.gz
QPID-4543 - The Move-Messages method no longer returns an error if no messages were moved.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1436517 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/broker/Broker.cpp20
-rw-r--r--qpid/cpp/src/qpid/broker/Broker.h4
-rw-r--r--qpid/tests/src/py/qpid_tests/broker_0_10/management.py24
3 files changed, 37 insertions, 11 deletions
diff --git a/qpid/cpp/src/qpid/broker/Broker.cpp b/qpid/cpp/src/qpid/broker/Broker.cpp
index a1169e073a..b28216f998 100644
--- a/qpid/cpp/src/qpid/broker/Broker.cpp
+++ b/qpid/cpp/src/qpid/broker/Broker.cpp
@@ -510,7 +510,7 @@ Manageable::status_t Broker::ManagementMethod (uint32_t methodId,
_qmf::ArgsBrokerQueueMoveMessages& moveArgs=
dynamic_cast<_qmf::ArgsBrokerQueueMoveMessages&>(args);
QPID_LOG (debug, "Broker::queueMoveMessages()");
- if (queueMoveMessages(moveArgs.i_srcQueue, moveArgs.i_destQueue, moveArgs.i_qty, moveArgs.i_filter))
+ if (queueMoveMessages(moveArgs.i_srcQueue, moveArgs.i_destQueue, moveArgs.i_qty, moveArgs.i_filter) >= 0)
status = Manageable::STATUS_OK;
else
return Manageable::STATUS_PARAMETER_INVALID;
@@ -1019,20 +1019,20 @@ void Broker::connect(
else throw NoSuchTransportException(QPID_MSG("Unsupported transport type: " << transport));
}
-uint32_t Broker::queueMoveMessages(
+int32_t Broker::queueMoveMessages(
const std::string& srcQueue,
const std::string& destQueue,
uint32_t qty,
const Variant::Map& filter)
{
- Queue::shared_ptr src_queue = queues.find(srcQueue);
- if (!src_queue)
- return 0;
- Queue::shared_ptr dest_queue = queues.find(destQueue);
- if (!dest_queue)
- return 0;
-
- return src_queue->move(dest_queue, qty, &filter);
+ Queue::shared_ptr src_queue = queues.find(srcQueue);
+ if (!src_queue)
+ return -1;
+ Queue::shared_ptr dest_queue = queues.find(destQueue);
+ if (!dest_queue)
+ return -1;
+
+ return (int32_t) src_queue->move(dest_queue, qty, &filter);
}
diff --git a/qpid/cpp/src/qpid/broker/Broker.h b/qpid/cpp/src/qpid/broker/Broker.h
index 842d206795..5c4c2a279f 100644
--- a/qpid/cpp/src/qpid/broker/Broker.h
+++ b/qpid/cpp/src/qpid/broker/Broker.h
@@ -240,8 +240,10 @@ class Broker : public sys::Runnable, public Plugin::Target,
/** Move messages from one queue to another.
A zero quantity means to move all messages
+ Return -1 if one of the queues does not exist, otherwise
+ the number of messages moved.
*/
- QPID_BROKER_EXTERN uint32_t queueMoveMessages(
+ QPID_BROKER_EXTERN int32_t queueMoveMessages(
const std::string& srcQueue,
const std::string& destQueue,
uint32_t qty,
diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/management.py b/qpid/tests/src/py/qpid_tests/broker_0_10/management.py
index 4ec3e0dd03..126b96853b 100644
--- a/qpid/tests/src/py/qpid_tests/broker_0_10/management.py
+++ b/qpid/tests/src/py/qpid_tests/broker_0_10/management.py
@@ -140,6 +140,30 @@ class ManagementTest (TestBase010):
return exchange
return None
+ def test_move_queued_messages_empty(self):
+ """
+ Test that moving messages from an empty queue does not cause an error.
+ """
+ self.startQmf()
+ session = self.session
+ "Set up source queue"
+ session.queue_declare(queue="src-queue-empty", exclusive=True, auto_delete=True)
+
+ "Set up destination queue"
+ session.queue_declare(queue="dest-queue-empty", exclusive=True, auto_delete=True)
+
+ queues = self.qmf.getObjects(_class="queue")
+
+ "Move all messages from src-queue-empty to dest-queue-empty"
+ result = self.qmf.getObjects(_class="broker")[0].queueMoveMessages("src-queue-empty", "dest-queue-empty", 0, {})
+ self.assertEqual (result.status, 0)
+
+ sq = self.qmf.getObjects(_class="queue", name="src-queue-empty")[0]
+ dq = self.qmf.getObjects(_class="queue", name="dest-queue-empty")[0]
+
+ self.assertEqual (sq.msgDepth,0)
+ self.assertEqual (dq.msgDepth,0)
+
def test_move_queued_messages(self):
"""
Test ability to move messages from the head of one queue to another.