diff options
| author | Ken Giusti <kgiusti@apache.org> | 2012-05-01 13:57:50 +0000 |
|---|---|---|
| committer | Ken Giusti <kgiusti@apache.org> | 2012-05-01 13:57:50 +0000 |
| commit | c6e56b963cf1d48b37d42f679b99856f9aaed038 (patch) | |
| tree | 0b4220d79034f488710ea696db43dd6b63f7a111 /cpp/src/qpid/broker/Link.cpp | |
| parent | ed820c9a785098af71f44fc5daecf2fd2d62de19 (diff) | |
| download | qpid-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.cpp | 32 |
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 |
