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