diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/include/qpid/client/FailoverListener.h | 9 | ||||
-rw-r--r-- | cpp/src/qpid/client/FailoverListener.cpp | 12 | ||||
-rw-r--r-- | cpp/src/tests/ClusterFixture.cpp | 2 |
3 files changed, 19 insertions, 4 deletions
diff --git a/cpp/include/qpid/client/FailoverListener.h b/cpp/include/qpid/client/FailoverListener.h index 8414b80f2b..59108eb7cb 100644 --- a/cpp/include/qpid/client/FailoverListener.h +++ b/cpp/include/qpid/client/FailoverListener.h @@ -60,6 +60,12 @@ class FailoverListener : private MessageListener, private qpid::sys::Runnable /** Subscribe to amq.failover exchange. */ QPID_CLIENT_EXTERN FailoverListener(Connection); + /** Subscribe to amq.failover exchange. + *@param useInitial If true use the connection's initial brokers as + * the initial value of getKnownBrokers + */ + QPID_CLIENT_EXTERN FailoverListener(Connection, bool useInitial); + QPID_CLIENT_EXTERN ~FailoverListener(); /** Returns the latest list of known broker URLs. */ @@ -68,7 +74,8 @@ class FailoverListener : private MessageListener, private qpid::sys::Runnable private: void received(Message& msg); void run(); - + void init(bool); + mutable sys::Mutex lock; Connection connection; Session session; diff --git a/cpp/src/qpid/client/FailoverListener.cpp b/cpp/src/qpid/client/FailoverListener.cpp index 3396f5598c..bf4fa91d49 100644 --- a/cpp/src/qpid/client/FailoverListener.cpp +++ b/cpp/src/qpid/client/FailoverListener.cpp @@ -33,8 +33,16 @@ FailoverListener::FailoverListener(Connection c) : connection(c), session(c.newSession(AMQ_FAILOVER+"."+framing::Uuid(true).str())), subscriptions(session) -{ - knownBrokers = c.getInitialBrokers(); +{ init(true); } + +FailoverListener::FailoverListener(Connection c, bool useInitial) : + connection(c), + session(c.newSession(AMQ_FAILOVER+"."+framing::Uuid(true).str())), + subscriptions(session) +{ init(useInitial); } + +void FailoverListener::init(bool useInitial) { + if (useInitial) knownBrokers = connection.getInitialBrokers(); if (session.exchangeQuery(arg::name=AMQ_FAILOVER).getNotFound()) { session.close(); return; diff --git a/cpp/src/tests/ClusterFixture.cpp b/cpp/src/tests/ClusterFixture.cpp index 04a5d35b06..6b62cb6fc7 100644 --- a/cpp/src/tests/ClusterFixture.cpp +++ b/cpp/src/tests/ClusterFixture.cpp @@ -142,7 +142,7 @@ void ClusterFixture::killWithSilencer(size_t n, client::Connection& c, int sig) *@param n if specified wait for the cluster size to be n, up to a timeout. */ std::set<int> knownBrokerPorts(qpid::client::Connection& c, int n) { - FailoverListener fl(c); + FailoverListener fl(c, false); std::vector<qpid::Url> urls = fl.getKnownBrokers(); if (n >= 0 && unsigned(n) != urls.size()) { // Retry up to 10 secs in .1 second intervals. |