From c6e56b963cf1d48b37d42f679b99856f9aaed038 Mon Sep 17 00:00:00 2001 From: Ken Giusti Date: Tue, 1 May 2012 13:57:50 +0000 Subject: 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 --- cpp/src/qpid/broker/Link.cpp | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/broker/Link.cpp') 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 -- cgit v1.2.1