You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2011/06/15 20:15:57 UTC
svn commit: r1136138 -
/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
Author: aconway
Date: Wed Jun 15 18:15:56 2011
New Revision: 1136138
URL: http://svn.apache.org/viewvc?rev=1136138&view=rev
Log:
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.
Modified:
qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp?rev=1136138&r1=1136137&r2=1136138&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp Wed Jun 15 18:15:56 2011
@@ -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
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:
}
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()
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org