diff options
| author | Gordon Sim <gsim@apache.org> | 2013-11-12 13:42:36 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2013-11-12 13:42:36 +0000 |
| commit | 5f3ff3bcc03691d0646cd75d8408be284d8adee6 (patch) | |
| tree | d475768bd96b23ac17771b1b9d8617b2790d83e5 /cpp/src/qpid/ha | |
| parent | 3741945c58f6b835003bbdb978efa34ff6a681b5 (diff) | |
| download | qpid-python-5f3ff3bcc03691d0646cd75d8408be284d8adee6.tar.gz | |
QPID-5301: support autodeleted exchanges
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1541058 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/ha')
| -rw-r--r-- | cpp/src/qpid/ha/BrokerReplicator.cpp | 9 | ||||
| -rw-r--r-- | cpp/src/qpid/ha/BrokerReplicator.h | 2 | ||||
| -rw-r--r-- | cpp/src/qpid/ha/FailoverExchange.cpp | 5 | ||||
| -rw-r--r-- | cpp/src/qpid/ha/FailoverExchange.h | 1 | ||||
| -rw-r--r-- | cpp/src/qpid/ha/PrimaryTxObserver.cpp | 1 | ||||
| -rw-r--r-- | cpp/src/qpid/ha/QueueReplicator.cpp | 1 | ||||
| -rw-r--r-- | cpp/src/qpid/ha/QueueReplicator.h | 1 |
7 files changed, 18 insertions, 2 deletions
diff --git a/cpp/src/qpid/ha/BrokerReplicator.cpp b/cpp/src/qpid/ha/BrokerReplicator.cpp index eb1206437a..a59c874594 100644 --- a/cpp/src/qpid/ha/BrokerReplicator.cpp +++ b/cpp/src/qpid/ha/BrokerReplicator.cpp @@ -551,8 +551,10 @@ void BrokerReplicator::doEventExchangeDeclare(Variant::Map& values) { QPID_LOG(warning, logPrefix << "Declare event, replacing existing exchange: " << name); } + //Note: unlike qieth queues, autodeleted exchanges have no + //messages, so need no special handling for autodelete in ha CreateExchangeResult result = createExchange( - name, values[EXTYPE].asString(), values[DURABLE].asBool(), args, + name, values[EXTYPE].asString(), values[DURABLE].asBool(), values[AUTODEL].asBool(), args, values[ALTEX].asString()); assert(result.second); } @@ -700,7 +702,7 @@ void BrokerReplicator::doResponseExchange(Variant::Map& values) { deleteExchange(name); } CreateExchangeResult result = createExchange( - name, values[TYPE].asString(), values[DURABLE].asBool(), args, + name, values[TYPE].asString(), values[DURABLE].asBool(), values[AUTODELETE].asBool(), args, getAltExchange(values[ALTEXCHANGE])); } @@ -849,6 +851,7 @@ BrokerReplicator::CreateExchangeResult BrokerReplicator::createExchange( const std::string& name, const std::string& type, bool durable, + bool autodelete, const qpid::framing::FieldTable& args, const std::string& alternateExchange) { @@ -857,6 +860,7 @@ BrokerReplicator::CreateExchangeResult BrokerReplicator::createExchange( name, type, durable, + autodelete, string(), // Set alternate exchange below args, userId, @@ -872,6 +876,7 @@ BrokerReplicator::CreateExchangeResult BrokerReplicator::createExchange( bool BrokerReplicator::bind(boost::shared_ptr<Queue>, const string&, const framing::FieldTable*) { return false; } bool BrokerReplicator::unbind(boost::shared_ptr<Queue>, const string&, const framing::FieldTable*) { return false; } bool BrokerReplicator::isBound(boost::shared_ptr<Queue>, const string* const, const framing::FieldTable* const) { return false; } +bool BrokerReplicator::hasBindings() { return false; } string BrokerReplicator::getType() const { return QPID_CONFIGURATION_REPLICATOR; } diff --git a/cpp/src/qpid/ha/BrokerReplicator.h b/cpp/src/qpid/ha/BrokerReplicator.h index 395f0706d9..07b992df6a 100644 --- a/cpp/src/qpid/ha/BrokerReplicator.h +++ b/cpp/src/qpid/ha/BrokerReplicator.h @@ -84,6 +84,7 @@ class BrokerReplicator : public broker::Exchange, bool unbind(boost::shared_ptr<broker::Queue>, const std::string&, const framing::FieldTable*); void route(broker::Deliverable&); bool isBound(boost::shared_ptr<broker::Queue>, const std::string* const, const framing::FieldTable* const); + bool hasBindings(); void shutdown(); QueueReplicatorPtr findQueueReplicator(const std::string& qname); @@ -132,6 +133,7 @@ class BrokerReplicator : public broker::Exchange, const std::string& name, const std::string& type, bool durable, + bool autodelete, const qpid::framing::FieldTable& args, const std::string& alternateExchange); diff --git a/cpp/src/qpid/ha/FailoverExchange.cpp b/cpp/src/qpid/ha/FailoverExchange.cpp index 9c7b986bf8..f1b87c63c8 100644 --- a/cpp/src/qpid/ha/FailoverExchange.cpp +++ b/cpp/src/qpid/ha/FailoverExchange.cpp @@ -108,6 +108,11 @@ bool FailoverExchange::isBound(Queue::shared_ptr queue, const string* const, return queues.find(queue) != queues.end(); } +bool FailoverExchange::hasBindings() { + Lock l(lock); + return !queues.empty(); +} + void FailoverExchange::route(Deliverable&) { QPID_LOG(warning, "Message received by exchange " << typeName << " ignoring"); } diff --git a/cpp/src/qpid/ha/FailoverExchange.h b/cpp/src/qpid/ha/FailoverExchange.h index 6ec1d0f152..5263bdfb03 100644 --- a/cpp/src/qpid/ha/FailoverExchange.h +++ b/cpp/src/qpid/ha/FailoverExchange.h @@ -54,6 +54,7 @@ class FailoverExchange : public broker::Exchange bool bind(boost::shared_ptr<broker::Queue> queue, const std::string& routingKey, const framing::FieldTable* args); bool unbind(boost::shared_ptr<broker::Queue> queue, const std::string& routingKey, const framing::FieldTable* args); bool isBound(boost::shared_ptr<broker::Queue> queue, const std::string* const routingKey, const framing::FieldTable* const args); + bool hasBindings(); void route(broker::Deliverable& msg); private: diff --git a/cpp/src/qpid/ha/PrimaryTxObserver.cpp b/cpp/src/qpid/ha/PrimaryTxObserver.cpp index 0f8ed0a0a7..416bb329a6 100644 --- a/cpp/src/qpid/ha/PrimaryTxObserver.cpp +++ b/cpp/src/qpid/ha/PrimaryTxObserver.cpp @@ -66,6 +66,7 @@ class PrimaryTxObserver::Exchange : public broker::Exchange { bool bind(boost::shared_ptr<Queue>, const string&, const FieldTable*) { return false; } bool unbind(boost::shared_ptr<Queue>, const string&, const FieldTable*) { return false; } bool isBound(boost::shared_ptr<Queue>, const string* const, const FieldTable* const) { return false; } + bool hasBindings() { return false; } string getType() const { return TYPE_NAME; } private: diff --git a/cpp/src/qpid/ha/QueueReplicator.cpp b/cpp/src/qpid/ha/QueueReplicator.cpp index 22af7284a8..8037559c3d 100644 --- a/cpp/src/qpid/ha/QueueReplicator.cpp +++ b/cpp/src/qpid/ha/QueueReplicator.cpp @@ -293,6 +293,7 @@ ReplicationId QueueReplicator::getMaxId() { bool QueueReplicator::bind(boost::shared_ptr<Queue>, const std::string&, const FieldTable*) { return false; } bool QueueReplicator::unbind(boost::shared_ptr<Queue>, const std::string&, const FieldTable*) { return false; } bool QueueReplicator::isBound(boost::shared_ptr<Queue>, const std::string* const, const FieldTable* const) { return false; } +bool QueueReplicator::hasBindings() { return false; } std::string QueueReplicator::getType() const { return TYPE_NAME; } diff --git a/cpp/src/qpid/ha/QueueReplicator.h b/cpp/src/qpid/ha/QueueReplicator.h index 01abc88843..cbb36757f6 100644 --- a/cpp/src/qpid/ha/QueueReplicator.h +++ b/cpp/src/qpid/ha/QueueReplicator.h @@ -88,6 +88,7 @@ class QueueReplicator : public broker::Exchange, bool bind(boost::shared_ptr<broker::Queue>, const std::string&, const framing::FieldTable*); bool unbind(boost::shared_ptr<broker::Queue>, const std::string&, const framing::FieldTable*); bool isBound(boost::shared_ptr<broker::Queue>, const std::string* const, const framing::FieldTable* const); + bool hasBindings(); protected: typedef boost::function<void(const std::string&, sys::Mutex::ScopedLock&)> DispatchFn; |
