summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2013-02-07 19:26:20 +0000
committerAlan Conway <aconway@apache.org>2013-02-07 19:26:20 +0000
commit88da48a26100c4ff24e791aeb6a7caf41528be54 (patch)
treee50498a750c2d816c259e2899728b8217ad3d6e0 /qpid/cpp/src
parent88613594a4bfa64c5f244ce2d183d605449e2496 (diff)
downloadqpid-python-88da48a26100c4ff24e791aeb6a7caf41528be54.tar.gz
QPID-4555: HA Add QueueSettings::declaredExclusive for exclusive queues.
This is set when the queue is created, before calling ConfigurationObserver::queueCreate, and does not change thereafter. The existing Queue::owner not set until after ConfigurationObserver::queueCreate and does change as ownership can be released and acquired. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1443679 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/QueueSettings.cpp1
-rw-r--r--qpid/cpp/src/qpid/broker/QueueSettings.h1
-rw-r--r--qpid/cpp/src/qpid/broker/SessionAdapter.cpp1
-rw-r--r--qpid/cpp/src/qpid/ha/BrokerReplicator.cpp6
-rw-r--r--qpid/cpp/src/qpid/ha/ReplicationTest.cpp2
5 files changed, 8 insertions, 3 deletions
diff --git a/qpid/cpp/src/qpid/broker/QueueSettings.cpp b/qpid/cpp/src/qpid/broker/QueueSettings.cpp
index f56b4dfda4..445e91c854 100644
--- a/qpid/cpp/src/qpid/broker/QueueSettings.cpp
+++ b/qpid/cpp/src/qpid/broker/QueueSettings.cpp
@@ -77,6 +77,7 @@ const QueueSettings::Aliases QueueSettings::aliases;
QueueSettings::QueueSettings(bool d, bool a) :
durable(d),
autodelete(a),
+ declaredExclusive(false),
priorities(0),
defaultFairshare(0),
shareGroups(false),
diff --git a/qpid/cpp/src/qpid/broker/QueueSettings.h b/qpid/cpp/src/qpid/broker/QueueSettings.h
index f955530313..c43776c722 100644
--- a/qpid/cpp/src/qpid/broker/QueueSettings.h
+++ b/qpid/cpp/src/qpid/broker/QueueSettings.h
@@ -43,6 +43,7 @@ struct QueueSettings
bool durable;
bool autodelete;
+ bool declaredExclusive;
//basic queue types:
std::string lvqKey;
diff --git a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
index fd3cf9400f..e391432bff 100644
--- a/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
+++ b/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
@@ -294,6 +294,7 @@ void SessionAdapter::QueueHandlerImpl::declare(const string& name, const string&
} catch (const qpid::types::Exception& e) {
throw InvalidArgumentException(e.what());
}
+ settings.declaredExclusive = exclusive;
std::pair<Queue::shared_ptr, bool> queue_created =
getBroker().createQueue(name, settings,
diff --git a/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp b/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
index 410ebc3114..7c0fad9b60 100644
--- a/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
+++ b/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
@@ -600,9 +600,11 @@ void BrokerReplicator::doEventMembersUpdate(Variant::Map& values) {
void BrokerReplicator::doEventSubscribe(Variant::Map& values) {
// Ignore queue replicator subscriptions.
if (QueueReplicator::isReplicatorName(values[DEST].asString())) return;
- QPID_LOG(debug, logPrefix << "Subscribe event: " << values[QNAME]);
boost::shared_ptr<QueueReplicator> qr = findQueueReplicator(values[QNAME]);
- if (qr) qr->setSubscribed();
+ if (qr) {
+ qr->setSubscribed();
+ QPID_LOG(debug, logPrefix << "Subscribe event: " << values[QNAME]);
+ }
}
namespace {
diff --git a/qpid/cpp/src/qpid/ha/ReplicationTest.cpp b/qpid/cpp/src/qpid/ha/ReplicationTest.cpp
index 18e0681f0f..0156c631bb 100644
--- a/qpid/cpp/src/qpid/ha/ReplicationTest.cpp
+++ b/qpid/cpp/src/qpid/ha/ReplicationTest.cpp
@@ -65,7 +65,7 @@ ReplicateLevel ReplicationTest::getLevel(const broker::Exchange& ex) {
ReplicateLevel ReplicationTest::useLevel(const broker::Queue& q)
{
- bool ignore = q.isAutoDelete() && q.hasExclusiveOwner() &&
+ bool ignore = q.isAutoDelete() && q.getSettings().declaredExclusive &&
!q.getSettings().autoDeleteDelay;
return ignore ? ReplicationTest(NONE).getLevel(q) : getLevel(q);
}