From e37fecdfd9a01858f5e5d0d4e20d53b8ceb50801 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 28 Feb 2011 13:57:13 +0000 Subject: QPID-3087: Fixes to store interaction changes * don't create queue on recovery * ensure laternate exchange is set before creating store record for queue git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1075331 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/broker/Queue.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'cpp/src/qpid/broker/Queue.cpp') diff --git a/cpp/src/qpid/broker/Queue.cpp b/cpp/src/qpid/broker/Queue.cpp index d18b0fcda3..09b8256b54 100644 --- a/cpp/src/qpid/broker/Queue.cpp +++ b/cpp/src/qpid/broker/Queue.cpp @@ -725,7 +725,7 @@ void Queue::create(const FieldTable& _settings) if (store) { store->create(*this, _settings); } - configure(_settings); + configureImpl(_settings); } @@ -750,9 +750,14 @@ int getIntegerSetting(const qpid::framing::FieldTable& settings, const std::stri } } -void Queue::configure(const FieldTable& _settings, bool recovering) +void Queue::configure(const FieldTable& _settings) { + settings = _settings; + configureImpl(settings); +} +void Queue::configureImpl(const FieldTable& _settings) +{ eventMode = _settings.getAsInt(qpidQueueEventGeneration); if (eventMode && broker) { broker->getQueueEvents().observe(*this, eventMode == ENQUEUE_ONLY); @@ -819,9 +824,6 @@ void Queue::configure(const FieldTable& _settings, bool recovering) mgmtObject->set_arguments(ManagementAgent::toMap(_settings)); } - if ( isDurable() && ! getPersistenceId() && ! recovering ) - store->create(*this, _settings); - QueueFlowLimit::observe(*this, _settings); } @@ -919,9 +921,10 @@ Queue::shared_ptr Queue::decode ( QueueRegistry& queues, Buffer& buffer, bool re { string name; buffer.getShortString(name); - std::pair result = queues.declare(name, true); - buffer.get(result.first->settings); - result.first->configure(result.first->settings, recovering ); + FieldTable settings; + buffer.get(settings); + boost::shared_ptr alternate; + std::pair result = queues.declare(name, true, false, 0, alternate, settings, recovering); if (result.first->policy.get() && buffer.available() >= result.first->policy->encodedSize()) { buffer.get ( *(result.first->policy) ); } -- cgit v1.2.1