From 7db0c0970eac260626263314c30f0e20d4ef6c21 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Fri, 17 Oct 2008 16:45:24 +0000 Subject: QPID-1367 Mick Goulish: improvements to client-side failover. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@705668 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/client/FailoverConnection.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'cpp/src/qpid/client/FailoverConnection.cpp') diff --git a/cpp/src/qpid/client/FailoverConnection.cpp b/cpp/src/qpid/client/FailoverConnection.cpp index e98de868de..33b06a6a1a 100644 --- a/cpp/src/qpid/client/FailoverConnection.cpp +++ b/cpp/src/qpid/client/FailoverConnection.cpp @@ -36,7 +36,6 @@ namespace client { FailoverConnection::FailoverConnection ( ) : - name(), failoverCompleteTime(0) { connection.registerFailureCallback @@ -59,7 +58,6 @@ FailoverConnection::open ( const std::string& host, settings.host = host; settings.port = port; settings.username = uid; - settings.username = uid; settings.password = pwd; settings.virtualhost = virtualhost; settings.maxFrameSize = maxFrameSize; @@ -124,9 +122,19 @@ FailoverConnection::registerFailureCallback ( boost::function /*fn*/ ) void FailoverConnection::failover ( ) { + std::vector::iterator sessions_iterator; + + for ( sessions_iterator = sessions.begin(); + sessions_iterator != sessions.end(); + ++ sessions_iterator ) + { + FailoverSession * fs = * sessions_iterator; + fs->failover_in_progress = true; + } + std::vector knownBrokers = connection.getKnownBrokers(); if (knownBrokers.empty()) - throw Exception(QPID_MSG("FailoverConnection::failover " << name << " no known brokers.")); + throw Exception(QPID_MSG("FailoverConnection::failover no known brokers.")); Connection newConnection; for (std::vector::iterator i = knownBrokers.begin(); i != knownBrokers.end(); ++i) { @@ -148,7 +156,6 @@ FailoverConnection::failover ( ) */ // FIXME aconway 2008-10-10: thread unsafe, possible race with concurrent newSession - std::vector::iterator sessions_iterator; for ( sessions_iterator = sessions.begin(); sessions_iterator < sessions.end(); ++ sessions_iterator @@ -173,6 +180,15 @@ FailoverConnection::failover ( ) FailoverSession * fs = * sessions_iterator; fs->failover ( ); } + + for ( sessions_iterator = sessions.begin(); + sessions_iterator < sessions.end(); + ++ sessions_iterator + ) + { + FailoverSession * fs = * sessions_iterator; + fs->failover_in_progress = false; + } } -- cgit v1.2.1