diff options
author | Alan Conway <aconway@apache.org> | 2012-11-14 19:51:37 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2012-11-14 19:51:37 +0000 |
commit | 9fb307487ed47a807d409574f0f6c1c8ac5ac230 (patch) | |
tree | fd001bfd323b8118328fd25cee6640e0cefb6778 /cpp/src | |
parent | 20e4d2144cef80dd431233904f7ab3670e995603 (diff) | |
download | qpid-python-9fb307487ed47a807d409574f0f6c1c8ac5ac230.tar.gz |
QPID-4436: HA fix qpidd crash when mgmt-enable=no
- Don't initialize HaBroker if management is disabled.
- Fix use of constants from another compilation unit in QueueReplicator.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1409327 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/ha/HaPlugin.cpp | 14 | ||||
-rw-r--r-- | cpp/src/qpid/ha/QueueReplicator.cpp | 7 | ||||
-rw-r--r-- | cpp/src/qpid/ha/types.cpp | 3 | ||||
-rw-r--r-- | cpp/src/qpid/ha/types.h | 1 |
4 files changed, 15 insertions, 10 deletions
diff --git a/cpp/src/qpid/ha/HaPlugin.cpp b/cpp/src/qpid/ha/HaPlugin.cpp index 9a06a227a5..3d77a4cbd1 100644 --- a/cpp/src/qpid/ha/HaPlugin.cpp +++ b/cpp/src/qpid/ha/HaPlugin.cpp @@ -69,10 +69,16 @@ struct HaPlugin : public Plugin { 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 connecting. - haBroker.reset(new ha::HaBroker(*broker, settings)); - broker->addFinalizer(boost::bind(&HaPlugin::finalize, this)); + if (!broker->getManagementAgent()) { + QPID_LOG(info, "HA plugin disabled because management is disabled"); + if (settings.cluster) + throw Exception("Cannot start HA: management is disabled"); + } else { + // Must create the HaBroker in earlyInitialize so it can set up its + // connection observer before clients start connecting. + haBroker.reset(new ha::HaBroker(*broker, settings)); + broker->addFinalizer(boost::bind(&HaPlugin::finalize, this)); + } } } diff --git a/cpp/src/qpid/ha/QueueReplicator.cpp b/cpp/src/qpid/ha/QueueReplicator.cpp index 1f14ce4669..6b270b41d3 100644 --- a/cpp/src/qpid/ha/QueueReplicator.cpp +++ b/cpp/src/qpid/ha/QueueReplicator.cpp @@ -40,6 +40,7 @@ namespace { const std::string QPID_REPLICATOR_("qpid.replicator-"); const std::string TYPE_NAME("qpid.queue-replicator"); +const std::string QPID_HA("qpid.ha-"); } namespace qpid { @@ -49,8 +50,8 @@ using namespace framing; using namespace std; using sys::Mutex; -const std::string QueueReplicator::DEQUEUE_EVENT_KEY(QPID_HA_PREFIX+"dequeue"); -const std::string QueueReplicator::POSITION_EVENT_KEY(QPID_HA_PREFIX+"position"); +const std::string QueueReplicator::DEQUEUE_EVENT_KEY(QPID_HA+"dequeue"); +const std::string QueueReplicator::POSITION_EVENT_KEY(QPID_HA+"position"); const std::string QueueReplicator::QPID_SYNC_FREQUENCY("qpid.sync_frequency"); std::string QueueReplicator::replicatorName(const std::string& queueName) { @@ -62,7 +63,7 @@ bool QueueReplicator::isReplicatorName(const std::string& name) { } bool QueueReplicator::isEventKey(const std::string key) { - const std::string& prefix = QPID_HA_PREFIX; + const std::string& prefix = QPID_HA; bool ret = key.size() > prefix.size() && key.compare(0, prefix.size(), prefix) == 0; return ret; } diff --git a/cpp/src/qpid/ha/types.cpp b/cpp/src/qpid/ha/types.cpp index 57712762ab..4010ec03a8 100644 --- a/cpp/src/qpid/ha/types.cpp +++ b/cpp/src/qpid/ha/types.cpp @@ -33,8 +33,7 @@ namespace ha { using namespace std; const string QPID_REPLICATE("qpid.replicate"); -const string QPID_HA_PREFIX("qpid.ha-"); -const string QPID_HA_UUID(QPID_HA_PREFIX+"uuid"); +const string QPID_HA_UUID("qpid.ha-uuid"); string EnumBase::str() const { assert(value < count); diff --git a/cpp/src/qpid/ha/types.h b/cpp/src/qpid/ha/types.h index d1afbf1190..f8c48afc5a 100644 --- a/cpp/src/qpid/ha/types.h +++ b/cpp/src/qpid/ha/types.h @@ -99,7 +99,6 @@ inline bool isBackup(BrokerStatus s) { return !isPrimary(s); } // String constants. extern const std::string QPID_REPLICATE; -extern const std::string QPID_HA_PREFIX; extern const std::string QPID_HA_UUID; /** Define IdSet type, not a typedef so we can overload operator << */ |