Author: aconway
Date: Thu Jul 19 20:18:39 2012
New Revision: 1363520

URL: http://svn.apache.org/viewvc?rev=1363520&view=rev
Log:
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.

Modified:
    qpid/trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp?rev=1363520&r1=1363519&r2=1363520&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp Thu Jul 19 20:18:39 
2012
@@ -225,22 +225,6 @@ void BrokerReplicator::initializeBridge(
              << " 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(
 }
 
 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<MessageProperties>();
     Variant::List list;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to