diff options
| author | Ken Giusti <kgiusti@apache.org> | 2012-05-04 19:45:32 +0000 |
|---|---|---|
| committer | Ken Giusti <kgiusti@apache.org> | 2012-05-04 19:45:32 +0000 |
| commit | 60f328e85f79636dc9aa9822602b85555678718a (patch) | |
| tree | 50fecd7435b228255d899f7049b8994b7d235611 /cpp/src/qpid/ha/QueueReplicator.cpp | |
| parent | 83286c75a7a393bf8dabe311e33bda75124db8a5 (diff) | |
| download | qpid-python-60f328e85f79636dc9aa9822602b85555678718a.tar.gz | |
QPID-3767: re-index bridge and link by constant name, not address
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1334138 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/ha/QueueReplicator.cpp')
| -rw-r--r-- | cpp/src/qpid/ha/QueueReplicator.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/cpp/src/qpid/ha/QueueReplicator.cpp b/cpp/src/qpid/ha/QueueReplicator.cpp index 633619be13..5ab09d3213 100644 --- a/cpp/src/qpid/ha/QueueReplicator.cpp +++ b/cpp/src/qpid/ha/QueueReplicator.cpp @@ -60,9 +60,11 @@ QueueReplicator::QueueReplicator(boost::shared_ptr<Queue> q, boost::shared_ptr<L // This must be separate from the constructor so we can call shared_from_this. void QueueReplicator::activate() { - // Note this may create a new bridge or use an existing one. + sys::Mutex::ScopedLock l(lock); + std::pair<Bridge::shared_ptr, bool> result = queue->getBroker()->getLinks().declare( - link->getHost(), link->getPort(), + bridgeName, + *link, false, // durable queue->getName(), // src getName(), // dest @@ -77,21 +79,24 @@ void QueueReplicator::activate() { // before initializeBridge is called. boost::bind(&QueueReplicator::initializeBridge, shared_from_this(), _1, _2) ); + bridge = result.first; } QueueReplicator::~QueueReplicator() {} void QueueReplicator::deactivate() { + // destroy the route sys::Mutex::ScopedLock l(lock); - queue->getBroker()->getLinks().destroy( - link->getHost(), link->getPort(), queue->getName(), getName(), string()); - QPID_LOG(debug, logPrefix << "Deactivated bridge " << bridgeName); + if (bridge) { + bridge->close(); + bridge.reset(); + QPID_LOG(debug, logPrefix << "Deactivated bridge " << bridgeName); + } } // Called in a broker connection thread when the bridge is created. void QueueReplicator::initializeBridge(Bridge& bridge, SessionHandler& sessionHandler) { sys::Mutex::ScopedLock l(lock); - bridgeName = bridge.getName(); framing::AMQP_ServerProxy peer(sessionHandler.out); const qmf::org::apache::qpid::broker::ArgsLinkBridge& args(bridge.getArgs()); framing::FieldTable settings; |
