diff options
author | Alan Conway <aconway@apache.org> | 2011-06-15 18:15:56 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2011-06-15 18:15:56 +0000 |
commit | 29c8ea12bfd1f735b4e3bee3d222c8000ff0655c (patch) | |
tree | fab7c9c7311760434b970337d350a4f54417d401 /qpid/cpp | |
parent | 02a6c2f7ab64332ea13dff4605a8478b4ec9bd37 (diff) | |
download | qpid-python-29c8ea12bfd1f735b4e3bee3d222c8000ff0655c.tar.gz |
QPID-3129: cluster_tests.LongTests.test_failover hangs.
Fixed a bug in ConnectionImpl: at each failover udpate the client was
appending rather than merging the new broker addresses so failover
took longer & longer.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1136138 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r-- | qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp index 345534b1c2..473f5ecd1c 100644 --- a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp +++ b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp @@ -40,11 +40,15 @@ using qpid::types::VAR_LIST; using qpid::framing::Uuid; namespace { -void convert(const Variant::List& from, std::vector<std::string>& to) +void merge(const std::string& value, std::vector<std::string>& list) { + if (std::find(list.begin(), list.end(), value) == list.end()) + list.push_back(value); +} + +void merge(const Variant::List& from, std::vector<std::string>& to) { - for (Variant::List::const_iterator i = from.begin(); i != from.end(); ++i) { - to.push_back(i->asString()); - } + for (Variant::List::const_iterator i = from.begin(); i != from.end(); ++i) + merge(i->asString(), to); } std::string asString(const std::vector<std::string>& v) { @@ -93,9 +97,9 @@ void ConnectionImpl::setOption(const std::string& name, const Variant& value) maxReconnectInterval = value; } else if (name == "reconnect-urls" || name == "reconnect_urls") { if (value.getType() == VAR_LIST) { - convert(value.asList(), urls); + merge(value.asList(), urls); } else { - urls.push_back(value.asString()); + merge(value.asString(), urls); } } else if (name == "username") { settings.username = value.asString(); @@ -255,14 +259,9 @@ void ConnectionImpl::connect(const qpid::sys::AbsTime& started) } void ConnectionImpl::mergeUrls(const std::vector<Url>& more, const sys::Mutex::ScopedLock&) { - if (more.size()) { - for (size_t i = 0; i < more.size(); ++i) { - if (std::find(urls.begin(), urls.end(), more[i].str()) == urls.end()) { - urls.push_back(more[i].str()); - } - } - QPID_LOG(debug, "Added known-hosts, reconnect-urls=" << asString(urls)); - } + for (std::vector<Url>::const_iterator i = more.begin(); i != more.end(); ++i) + merge(i->str(), urls); + QPID_LOG(debug, "Added known-hosts, reconnect-urls=" << asString(urls)); } bool ConnectionImpl::tryConnect() |