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 | e621511c02b50ef28d5b36bc5b978b17a59b3f30 (patch) | |
| tree | 18d1eb570b4c60b4be2597af9a5b94ce06276e39 /qpid/cpp/src | |
| parent | 3d0a790dad39e5ff832908315846bcaae05edb23 (diff) | |
| download | qpid-python-e621511c02b50ef28d5b36bc5b978b17a59b3f30.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@1239728 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/broker/Queue.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp index 329fd1cb8c..dd23760922 100644 --- a/qpid/cpp/src/qpid/broker/Queue.cpp +++ b/qpid/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); |
