summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/qpid/ha/HaPlugin.cpp4
-rw-r--r--cpp/src/qpid/ha/Settings.h4
-rwxr-xr-xcpp/src/tests/ha_tests.py12
3 files changed, 14 insertions, 6 deletions
diff --git a/cpp/src/qpid/ha/HaPlugin.cpp b/cpp/src/qpid/ha/HaPlugin.cpp
index 3d77a4cbd1..cba9c0bb26 100644
--- a/cpp/src/qpid/ha/HaPlugin.cpp
+++ b/cpp/src/qpid/ha/HaPlugin.cpp
@@ -33,6 +33,8 @@ struct Options : public qpid::Options {
addOptions()
("ha-cluster", optValue(settings.cluster, "yes|no"),
"Join a HA active/passive cluster.")
+ ("ha-queue-replication", optValue(settings.queueReplication, "yes|no"),
+ "Enable replication of specific queues without joining a cluster")
("ha-brokers-url", optValue(settings.brokerUrl,"URL"),
"URL with address of each broker in the cluster.")
("ha-public-url", optValue(settings.clientUrl,"URL"),
@@ -68,7 +70,7 @@ struct HaPlugin : public Plugin {
void earlyInitialize(Plugin::Target& target) {
broker::Broker* broker = dynamic_cast<broker::Broker*>(&target);
- if (broker) {
+ if (broker && (settings.cluster || settings.queueReplication)) {
if (!broker->getManagementAgent()) {
QPID_LOG(info, "HA plugin disabled because management is disabled");
if (settings.cluster)
diff --git a/cpp/src/qpid/ha/Settings.h b/cpp/src/qpid/ha/Settings.h
index 1be068063a..d3dcb96dad 100644
--- a/cpp/src/qpid/ha/Settings.h
+++ b/cpp/src/qpid/ha/Settings.h
@@ -35,11 +35,13 @@ namespace ha {
class Settings
{
public:
- Settings() : cluster(false), replicateDefault(NONE), backupTimeout(5),
+ Settings() : cluster(false), queueReplication(false),
+ replicateDefault(NONE), backupTimeout(5),
flowMessages(100), flowBytes(0)
{}
bool cluster; // True if we are a cluster member.
+ bool queueReplication; // True if enabled.
std::string clientUrl;
std::string brokerUrl;
Enum<ReplicateLevel> replicateDefault;
diff --git a/cpp/src/tests/ha_tests.py b/cpp/src/tests/ha_tests.py
index bc5566ae63..968ffa8b4a 100755
--- a/cpp/src/tests/ha_tests.py
+++ b/cpp/src/tests/ha_tests.py
@@ -279,11 +279,13 @@ class ReplicationTests(HaBrokerTest):
"""Test replication of individual queues outside of cluster mode"""
l = LogLevel(ERROR) # Hide expected WARNING log messages from failover.
try:
- primary = HaBroker(self, name="primary", ha_cluster=False)
+ primary = HaBroker(self, name="primary", ha_cluster=False,
+ args=["--ha-queue-replication=yes"]);
pc = primary.connect()
ps = pc.session().sender("q;{create:always}")
pr = pc.session().receiver("q;{create:always}")
- backup = HaBroker(self, name="backup", ha_cluster=False)
+ backup = HaBroker(self, name="backup", ha_cluster=False,
+ args=["--ha-queue-replication=yes"])
br = backup.connect().session().receiver("q;{create:always}")
# Set up replication with qpid-ha
@@ -304,7 +306,8 @@ class ReplicationTests(HaBrokerTest):
finally: l.restore()
def test_queue_replica_failover(self):
- """Test individual queue replication from a cluster to a standalone backup broker, verify it fails over."""
+ """Test individual queue replication from a cluster to a standalone
+ backup broker, verify it fails over."""
l = LogLevel(ERROR) # Hide expected WARNING log messages from failover.
try:
cluster = HaCluster(self, 2)
@@ -312,7 +315,8 @@ class ReplicationTests(HaBrokerTest):
pc = cluster.connect(0)
ps = pc.session().sender("q;{create:always}")
pr = pc.session().receiver("q;{create:always}")
- backup = HaBroker(self, name="backup", ha_cluster=False)
+ backup = HaBroker(self, name="backup", ha_cluster=False,
+ args=["--ha-queue-replication=yes"])
br = backup.connect().session().receiver("q;{create:always}")
backup.replicate(cluster.url, "q")
ps.send("a")