summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/ha
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-11-12 13:42:36 +0000
committerGordon Sim <gsim@apache.org>2013-11-12 13:42:36 +0000
commit5f3ff3bcc03691d0646cd75d8408be284d8adee6 (patch)
treed475768bd96b23ac17771b1b9d8617b2790d83e5 /cpp/src/qpid/ha
parent3741945c58f6b835003bbdb978efa34ff6a681b5 (diff)
downloadqpid-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.cpp9
-rw-r--r--cpp/src/qpid/ha/BrokerReplicator.h2
-rw-r--r--cpp/src/qpid/ha/FailoverExchange.cpp5
-rw-r--r--cpp/src/qpid/ha/FailoverExchange.h1
-rw-r--r--cpp/src/qpid/ha/PrimaryTxObserver.cpp1
-rw-r--r--cpp/src/qpid/ha/QueueReplicator.cpp1
-rw-r--r--cpp/src/qpid/ha/QueueReplicator.h1
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;