From 3a75d755f87a495ae02bdf69af6723c62584b190 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Tue, 2 Feb 2010 15:47:41 +0000 Subject: Cluster: fix update of failover exchange. During update the cluster was sending an extra update to the failover exchange. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@905676 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/cluster/Cluster.cpp | 6 +++--- cpp/src/qpid/cluster/FailoverExchange.cpp | 6 +++++- cpp/src/qpid/cluster/FailoverExchange.h | 5 ++++- cpp/src/tests/cluster_test.cpp | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) (limited to 'cpp') diff --git a/cpp/src/qpid/cluster/Cluster.cpp b/cpp/src/qpid/cluster/Cluster.cpp index 3a6c902d29..8eda6c1949 100644 --- a/cpp/src/qpid/cluster/Cluster.cpp +++ b/cpp/src/qpid/cluster/Cluster.cpp @@ -826,7 +826,7 @@ void Cluster::checkUpdateIn(Lock& l) { if (state != UPDATEE) return; // Wait till we reach the stall point. if (updatedMap) { // We're up to date map = *updatedMap; - memberUpdate(l); + failoverExchange->setUrls(getUrls(l)); mcast.mcastControl(ClusterReadyBody(ProtocolVersion(), myUrl.str()), self); state = CATCHUP; broker.setClusterUpdatee(false); @@ -908,9 +908,9 @@ void Cluster::memberUpdate(Lock& l) { std::vector urls = getUrls(l); std::vector ids = getIds(l); size_t size = urls.size(); - failoverExchange->setUrls(urls); + failoverExchange->updateUrls(urls); - if (size == 1 && lastSize > 1 && state >= CATCHUP) { + if (size == 1 && lastSize > 1 && state >= CATCHUP) { QPID_LOG(notice, *this << " last broker standing, update queue policies"); lastBroker = true; broker.getQueues().updateQueueClusterState(true); diff --git a/cpp/src/qpid/cluster/FailoverExchange.cpp b/cpp/src/qpid/cluster/FailoverExchange.cpp index e01c41494b..24518dbe9f 100644 --- a/cpp/src/qpid/cluster/FailoverExchange.cpp +++ b/cpp/src/qpid/cluster/FailoverExchange.cpp @@ -45,8 +45,12 @@ FailoverExchange::FailoverExchange(management::Manageable* parent) : Exchange(TY mgmtExchange->set_type(TYPE_NAME); } - void FailoverExchange::setUrls(const vector& u) { + Lock l(lock); + urls = u; +} + +void FailoverExchange::updateUrls(const vector& u) { Lock l(lock); urls=u; if (urls.empty()) return; diff --git a/cpp/src/qpid/cluster/FailoverExchange.h b/cpp/src/qpid/cluster/FailoverExchange.h index 738cd2a602..7eb9ea8c3a 100644 --- a/cpp/src/qpid/cluster/FailoverExchange.h +++ b/cpp/src/qpid/cluster/FailoverExchange.h @@ -41,8 +41,11 @@ class FailoverExchange : public broker::Exchange static const std::string TYPE_NAME; FailoverExchange(management::Manageable* parent); - + + /** Set the URLs but don't send an update.*/ void setUrls(const std::vector&); + /** Set the URLs and send an update.*/ + void updateUrls(const std::vector&); // Exchange overrides std::string getType() const; diff --git a/cpp/src/tests/cluster_test.cpp b/cpp/src/tests/cluster_test.cpp index bb1c014b99..d572126fff 100644 --- a/cpp/src/tests/cluster_test.cpp +++ b/cpp/src/tests/cluster_test.cpp @@ -272,7 +272,7 @@ QPID_AUTO_TEST_CASE(testMessageTimeToLive) { c0.session.queueDeclare("q", arg::durable=durableFlag); c0.session.messageTransfer(arg::content=ttlMessage("a", "q", 200, durableFlag)); c0.session.messageTransfer(arg::content=makeMessage("b", "q", durableFlag)); - c0.session.messageTransfer(arg::content=ttlMessage("x", "p", 10000, durableFlag)); + c0.session.messageTransfer(arg::content=ttlMessage("x", "p", 100000, durableFlag)); c0.session.messageTransfer(arg::content=makeMessage("y", "p", durableFlag)); cluster.add(); Client c2(cluster[1], "c2"); -- cgit v1.2.1