summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2013-01-23 21:23:21 +0000
committerAlan Conway <aconway@apache.org>2013-01-23 21:23:21 +0000
commit5705c6575e717d74e6bd2a942b7ee085eb62cffb (patch)
treef42539002368bc3776de0331e209b2443bd1d17f /qpid/cpp/src
parent58e5ec4839a77ed0a859e85f94386fbb9d57a451 (diff)
downloadqpid-python-5705c6575e717d74e6bd2a942b7ee085eb62cffb.tar.gz
NO-JIRA: HA refactor, centralize critical error shutdown logic.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1437742 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/ha/BrokerReplicator.cpp14
-rw-r--r--qpid/cpp/src/qpid/ha/HaBroker.cpp12
-rw-r--r--qpid/cpp/src/qpid/ha/HaBroker.h4
-rw-r--r--qpid/cpp/src/qpid/ha/QueueReplicator.cpp4
4 files changed, 17 insertions, 17 deletions
diff --git a/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp b/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
index fc13314d8f..f51a69e461 100644
--- a/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
+++ b/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
@@ -439,9 +439,10 @@ void BrokerReplicator::route(Deliverable& msg) {
}
}
} catch (const std::exception& e) {
- QPID_LOG(critical, logPrefix << "Configuration replication failed: " << e.what()
- << ": while handling: " << list);
- haBroker.shutdown();
+;
+ haBroker.shutdown(
+ QPID_MSG(logPrefix << "Configuration replication failed: "
+ << e.what() << ": while handling: " << list));
throw;
}
}
@@ -725,9 +726,10 @@ void BrokerReplicator::doResponseHaBroker(Variant::Map& values) {
<< ") does not match primary (" << primary << ")"));
haBroker.setMembership(values[MEMBERS].asList());
} catch (const std::exception& e) {
- QPID_LOG(critical, logPrefix << "Invalid HA Broker response: " << e.what()
- << ": " << values);
- haBroker.shutdown();
+ haBroker.shutdown(
+ QPID_MSG(logPrefix << "Invalid HA Broker response: " << e.what()
+ << ": " << values));
+
throw;
}
}
diff --git a/qpid/cpp/src/qpid/ha/HaBroker.cpp b/qpid/cpp/src/qpid/ha/HaBroker.cpp
index e15fb0c096..0fd8c9e518 100644
--- a/qpid/cpp/src/qpid/ha/HaBroker.cpp
+++ b/qpid/cpp/src/qpid/ha/HaBroker.cpp
@@ -256,9 +256,10 @@ std::vector<Url> HaBroker::getKnownBrokers() const {
return knownBrokers;
}
-void HaBroker::shutdown() {
- QPID_LOG(critical, logPrefix << "Critical error, shutting down.");
+void HaBroker::shutdown(const std::string& message) {
+ QPID_LOG(critical, message);
broker.shutdown();
+ throw Exception(message);
}
BrokerStatus HaBroker::getStatus() const {
@@ -294,12 +295,11 @@ void HaBroker::setStatus(BrokerStatus newStatus, Mutex::ScopedLock& l) {
QPID_LOG(info, logPrefix << "Status change: "
<< printable(status) << " -> " << printable(newStatus));
bool legal = checkTransition(status, newStatus);
+ assert(legal);
if (!legal) {
- QPID_LOG(critical, logPrefix << "Illegal state transition: "
- << printable(status) << " -> " << printable(newStatus));
- shutdown();
+ shutdown(QPID_MSG(logPrefix << "Illegal state transition: "
+ << printable(status) << " -> " << printable(newStatus)));
}
- assert(legal); // FIXME aconway 2012-12-07: fail
status = newStatus;
statusChanged(l);
}
diff --git a/qpid/cpp/src/qpid/ha/HaBroker.h b/qpid/cpp/src/qpid/ha/HaBroker.h
index f2a837ddea..71e856fbeb 100644
--- a/qpid/cpp/src/qpid/ha/HaBroker.h
+++ b/qpid/cpp/src/qpid/ha/HaBroker.h
@@ -78,8 +78,8 @@ class HaBroker : public management::Manageable
broker::Broker& getBroker() { return broker; }
const Settings& getSettings() const { return settings; }
- /** Shut down the broker. Caller should log a critical error message. */
- void shutdown();
+ /** Shut down the broker because of a critical error. */
+ void shutdown(const std::string& message);
BrokerStatus getStatus() const;
void setStatus(BrokerStatus);
diff --git a/qpid/cpp/src/qpid/ha/QueueReplicator.cpp b/qpid/cpp/src/qpid/ha/QueueReplicator.cpp
index 6b270b41d3..6fe49bc1af 100644
--- a/qpid/cpp/src/qpid/ha/QueueReplicator.cpp
+++ b/qpid/cpp/src/qpid/ha/QueueReplicator.cpp
@@ -260,9 +260,7 @@ void QueueReplicator::route(Deliverable& msg)
// Ignore unknown event keys, may be introduced in later versions.
}
catch (const std::exception& e) {
- QPID_LOG(critical, logPrefix << "Replication failed: " << e.what());
- haBroker.shutdown();
- throw;
+ haBroker.shutdown(QPID_MSG(logPrefix << "Replication failed: " << e.what()));
}
}