summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Queue.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2011-02-28 13:57:13 +0000
committerGordon Sim <gsim@apache.org>2011-02-28 13:57:13 +0000
commite37fecdfd9a01858f5e5d0d4e20d53b8ceb50801 (patch)
tree59d5e5146d1c2ba7381925605773405ab8a74534 /cpp/src/qpid/broker/Queue.cpp
parent3a7a8d0fea6995aeee3d0e3a982b240ae7ef79a2 (diff)
downloadqpid-python-e37fecdfd9a01858f5e5d0d4e20d53b8ceb50801.tar.gz
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
Diffstat (limited to 'cpp/src/qpid/broker/Queue.cpp')
-rw-r--r--cpp/src/qpid/broker/Queue.cpp19
1 files changed, 11 insertions, 8 deletions
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<Queue::shared_ptr, bool> 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<Exchange> alternate;
+ std::pair<Queue::shared_ptr, bool> 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) );
}