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