diff options
| author | Ted Ross <tross@apache.org> | 2013-01-21 18:02:51 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2013-01-21 18:02:51 +0000 |
| commit | cdb684fd1e8996772be47579e414cfe6a7643eb7 (patch) | |
| tree | e5f94fdeaec284f197de1a151ce4767ade3688cc | |
| parent | ab043489741e08dccbac3753603987151b1daa81 (diff) | |
| download | qpid-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.cpp | 20 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/broker/Broker.h | 4 | ||||
| -rw-r--r-- | qpid/tests/src/py/qpid_tests/broker_0_10/management.py | 24 |
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. |
