From 675ecbf53fb51ebe9f124568a800e1c33642e4a1 Mon Sep 17 00:00:00 2001 From: Ted Ross Date: Thu, 2 Feb 2012 17:14:51 +0000 Subject: 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 --- cpp/src/qpid/broker/Queue.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'cpp/src') 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 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 payload = msg.payload; + enqueue(0, payload); + } } } observeRequeue(msg, locker); -- cgit v1.2.1