summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/Link.cpp
diff options
context:
space:
mode:
authorKen Giusti <kgiusti@apache.org>2012-05-01 13:57:50 +0000
committerKen Giusti <kgiusti@apache.org>2012-05-01 13:57:50 +0000
commitc6e56b963cf1d48b37d42f679b99856f9aaed038 (patch)
tree0b4220d79034f488710ea696db43dd6b63f7a111 /cpp/src/qpid/broker/Link.cpp
parented820c9a785098af71f44fc5daecf2fd2d62de19 (diff)
downloadqpid-python-c6e56b963cf1d48b37d42f679b99856f9aaed038.tar.gz
QPID-3963: replicate learned failover addresses to new cluster members
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1332657 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Link.cpp')
-rw-r--r--cpp/src/qpid/broker/Link.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Link.cpp b/cpp/src/qpid/broker/Link.cpp
index d416789572..f21c861149 100644
--- a/cpp/src/qpid/broker/Link.cpp
+++ b/cpp/src/qpid/broker/Link.cpp
@@ -104,7 +104,7 @@ public:
urlVec = urlArrayToVector(addresses);
for(size_t i = 0; i < urlVec.size(); ++i)
urls.insert(urls.end(), urlVec[i].begin(), urlVec[i].end());
- QPID_LOG(notice, "Remote broker has provided these failover addresses= " << urls);
+ QPID_LOG(debug, "Remote broker has provided these failover addresses= " << urls);
link->setUrl(urls);
}
}
@@ -253,6 +253,7 @@ void Link::established(Connection* c)
void Link::setUrl(const Url& u) {
+ QPID_LOG(info, "Setting remote broker failover addresses for link '" << getName() << "' to these urls: " << u);
Mutex::ScopedLock mutex(lock);
url = u;
reconnectNext = 0;
@@ -687,6 +688,35 @@ bool Link::getRemoteAddress(qpid::Address& addr) const
}
+// FieldTable keys for internal state data
+namespace {
+ const std::string FAILOVER_ADDRESSES("failover-addresses");
+ const std::string FAILOVER_INDEX("failover-index");
+}
+
+void Link::getState(framing::FieldTable& state) const
+{
+ state.clear();
+ Mutex::ScopedLock mutex(lock);
+ if (!url.empty()) {
+ state.setString(FAILOVER_ADDRESSES, url.str());
+ state.setInt(FAILOVER_INDEX, reconnectNext);
+ }
+}
+
+void Link::setState(const framing::FieldTable& state)
+{
+ Mutex::ScopedLock mutex(lock);
+ if (state.isSet(FAILOVER_ADDRESSES)) {
+ Url failovers(state.getAsString(FAILOVER_ADDRESSES));
+ setUrl(failovers);
+ }
+ if (state.isSet(FAILOVER_INDEX)) {
+ reconnectNext = state.getAsInt(FAILOVER_INDEX);
+ }
+}
+
+
const std::string Link::exchangeTypeName("qpid.LinkExchange");
}} // namespace qpid::broker