From 88da48a26100c4ff24e791aeb6a7caf41528be54 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Thu, 7 Feb 2013 19:26:20 +0000 Subject: 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 --- qpid/cpp/src/qpid/broker/QueueSettings.cpp | 1 + qpid/cpp/src/qpid/broker/QueueSettings.h | 1 + qpid/cpp/src/qpid/broker/SessionAdapter.cpp | 1 + qpid/cpp/src/qpid/ha/BrokerReplicator.cpp | 6 ++++-- qpid/cpp/src/qpid/ha/ReplicationTest.cpp | 2 +- 5 files changed, 8 insertions(+), 3 deletions(-) (limited to 'qpid/cpp/src') 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_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 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); } -- cgit v1.2.1