diff options
author | Ted Ross <tross@apache.org> | 2012-02-02 17:14:51 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2012-02-02 17:14:51 +0000 |
commit | 675ecbf53fb51ebe9f124568a800e1c33642e4a1 (patch) | |
tree | 01eddec70eb51d6ef97b382e328be0c22a1ac467 /cpp/src | |
parent | e010c8adf575dd98b1ca0f579b9c7740124c75b6 (diff) | |
download | qpid-python-675ecbf53fb51ebe9f124568a800e1c33642e4a1.tar.gz |
QPID-3481 - After queue deletion, route re-queued messages to the alternate exchange.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1239728 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/broker/Queue.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index 329fd1cb8c..dd23760922 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -213,15 +213,26 @@ void Queue::requeue(const QueuedMessage& msg){ { Mutex::ScopedLock locker(messageLock); if (!isEnqueued(msg)) return; - messages->reinsert(msg); - listeners.populate(copy); - - // for persistLastNode - don't force a message twice to disk, but force it if no force before - if(inLastNodeFailure && persistLastNode && !msg.payload->isStoredOnQueue(shared_from_this())) { - msg.payload->forcePersistent(); - if (msg.payload->isForcedPersistent() ){ - boost::intrusive_ptr<Message> payload = msg.payload; - enqueue(0, payload); + if (deleted) { + // + // If the queue has been deleted, requeued messages must be sent to the alternate exchange + // if one is configured. + // + if (alternateExchange.get()) { + DeliverableMessage dmsg(msg.payload); + alternateExchange->routeWithAlternate(dmsg); + } + } else { + messages->reinsert(msg); + listeners.populate(copy); + + // for persistLastNode - don't force a message twice to disk, but force it if no force before + if(inLastNodeFailure && persistLastNode && !msg.payload->isStoredOnQueue(shared_from_this())) { + msg.payload->forcePersistent(); + if (msg.payload->isForcedPersistent() ){ + boost::intrusive_ptr<Message> payload = msg.payload; + enqueue(0, payload); + } } } observeRequeue(msg, locker); |