You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2012/07/20 17:28:15 UTC

svn commit: r1363839 - in /qpid/branches/0.18/qpid: ./ cpp/src/ cpp/src/qpid/ha/HaBroker.cpp cpp/src/qpid/ha/HaBroker.h cpp/src/qpid/ha/HaPlugin.cpp

Author: gsim
Date: Fri Jul 20 15:28:15 2012
New Revision: 1363839

URL: http://svn.apache.org/viewvc?rev=1363839&view=rev
Log:
QPID-4156: HA close window for clients to connect before HA broker is initialized; merged r1363498

Modified:
    qpid/branches/0.18/qpid/   (props changed)
    qpid/branches/0.18/qpid/cpp/src/   (props changed)
    qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.cpp
    qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.h
    qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaPlugin.cpp

Propchange: qpid/branches/0.18/qpid/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid:r1363498

Propchange: qpid/branches/0.18/qpid/cpp/src/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src:r1363498

Modified: qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.cpp?rev=1363839&r1=1363838&r2=1363839&view=diff
==============================================================================
--- qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.cpp (original)
+++ qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.cpp Fri Jul 20 15:28:15 2012
@@ -55,6 +55,7 @@ using types::Variant;
 using types::Uuid;
 using sys::Mutex;
 
+// Called in Plugin::earlyInitialize
 HaBroker::HaBroker(broker::Broker& b, const Settings& s)
     : logPrefix("Broker: "),
       broker(b),
@@ -63,12 +64,26 @@ HaBroker::HaBroker(broker::Broker& b, co
       observer(new ConnectionObserver(*this, systemId)),
       mgmtObject(0),
       status(STANDALONE),
-      brokerInfo(broker.getSystem()->getNodeName(),
-                 // TODO aconway 2012-05-24: other transports?
-                 broker.getPort(broker::Broker::TCP_TRANSPORT), systemId),
       membership(systemId),
       replicationTest(s.replicateDefault.get())
 {
+    // If we are joining a cluster we must start excluding clients now,
+    // otherwise there's a window for a client to connect before we get to
+    // initialize()
+    if (settings.cluster) {
+        observer->setObserver(boost::shared_ptr<broker::ConnectionObserver>(
+                              new BackupConnectionExcluder));
+        broker.getConnectionObservers().add(observer);
+    }
+}
+
+// Called in Plugin::initialize
+void HaBroker::initialize() {
+
+    // FIXME aconway 2012-07-19: assumes there's a TCP transport with a meaningful port.
+    brokerInfo = BrokerInfo(
+        broker.getSystem()->getNodeName(), broker.getPort(broker::Broker::TCP_TRANSPORT), systemId);
+
     // Set up the management object.
     ManagementAgent* ma = broker.getManagementAgent();
     if (settings.cluster && !ma)
@@ -87,10 +102,7 @@ HaBroker::HaBroker(broker::Broker& b, co
     // If we are in a cluster, start as backup in joining state.
     if (settings.cluster) {
         status = JOINING;
-        observer->setObserver(boost::shared_ptr<broker::ConnectionObserver>(
-                                  new BackupConnectionExcluder));
-        broker.getConnectionObservers().add(observer);
-        backup.reset(new Backup(*this, s));
+        backup.reset(new Backup(*this, settings));
         broker.getKnownBrokers = boost::bind(&HaBroker::getKnownBrokers, this);
     }
 

Modified: qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.h
URL: http://svn.apache.org/viewvc/qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.h?rev=1363839&r1=1363838&r2=1363839&view=diff
==============================================================================
--- qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.h (original)
+++ qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaBroker.h Fri Jul 20 15:28:15 2012
@@ -63,9 +63,13 @@ class Primary;
 class HaBroker : public management::Manageable
 {
   public:
+    /** HaBroker is constructed during earlyInitialize */
     HaBroker(broker::Broker&, const Settings&);
     ~HaBroker();
 
+    /** Called during plugin initialization */
+    void initialize();
+
     // Implement Manageable.
     qpid::management::ManagementObject* GetManagementObject() const { return mgmtObject; }
     management::Manageable::status_t ManagementMethod (

Modified: qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaPlugin.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaPlugin.cpp?rev=1363839&r1=1363838&r2=1363839&view=diff
==============================================================================
--- qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaPlugin.cpp (original)
+++ qpid/branches/0.18/qpid/cpp/src/qpid/ha/HaPlugin.cpp Fri Jul 20 15:28:15 2012
@@ -62,16 +62,21 @@ struct HaPlugin : public Plugin {
 
     Options* getOptions() { return &options; }
 
-    void earlyInitialize(Plugin::Target& ) {}
-
-    void initialize(Plugin::Target& target) {
+    void earlyInitialize(Plugin::Target& target) {
         broker::Broker* broker = dynamic_cast<broker::Broker*>(&target);
         if (broker) {
+            // Must create the HaBroker in earlyInitialize so it can set up its
+            // connection observer before clients start conneting.
             haBroker.reset(new ha::HaBroker(*broker, settings));
             broker->addFinalizer(boost::bind(&HaPlugin::finalize, this));
         }
     }
 
+    void initialize(Plugin::Target& target) {
+        broker::Broker* broker = dynamic_cast<broker::Broker*>(&target);
+        if (broker) haBroker->initialize();
+    }
+
     void finalize() {
         haBroker.reset();
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org