From 86ec92715e981988e4ff4ce9e6905fac6088d210 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Thu, 19 Jul 2012 20:18:39 +0000 Subject: QPID-4158: HA transition to CATCHUP status too early. Previously we set status to CATCHUP when the BrokerReplicators bridge was initialized. This is too early, it's possible for an aborted attempt to connect to another backup to get as far as bridge init. This patch waits till we receive the first actual message from the primary before updating status to CATCHUP. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1363520 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/ha/BrokerReplicator.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) (limited to 'qpid/cpp/src') diff --git a/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp b/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp index 1415b8179a..9214bc2f87 100644 --- a/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp +++ b/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp @@ -225,22 +225,6 @@ void BrokerReplicator::initializeBridge(Bridge& bridge, SessionHandler& sessionH << " status:" << printable(haBroker.getStatus())); initialized = true; - switch (haBroker.getStatus()) { - case JOINING: - haBroker.setStatus(CATCHUP); - break; - case CATCHUP: - break; - case READY: - break; - case RECOVERING: - case ACTIVE: - assert(0); // Primary does not reconnect. - return; - case STANDALONE: - return; - } - framing::AMQP_ServerProxy peer(sessionHandler.out); const qmf::org::apache::qpid::broker::ArgsLinkBridge& args(bridge.getArgs()); @@ -267,6 +251,10 @@ void BrokerReplicator::initializeBridge(Bridge& bridge, SessionHandler& sessionH } void BrokerReplicator::route(Deliverable& msg) { + // We transition from JOINING->CATCHUP on the first message received from the primary. + // Until now we couldn't be sure if we had a good connection to the primary. + if (haBroker.getStatus() == JOINING) haBroker.setStatus(CATCHUP); + const framing::FieldTable* headers = msg.getMessage().getApplicationHeaders(); const MessageProperties* messageProperties = msg.getMessage().getProperties(); Variant::List list; -- cgit v1.2.1