summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2011-06-15 18:15:56 +0000
committerAlan Conway <aconway@apache.org>2011-06-15 18:15:56 +0000
commit29c8ea12bfd1f735b4e3bee3d222c8000ff0655c (patch)
treefab7c9c7311760434b970337d350a4f54417d401
parent02a6c2f7ab64332ea13dff4605a8478b4ec9bd37 (diff)
downloadqpid-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
-rw-r--r--qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp27
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()