diff options
| author | Alan Conway <aconway@apache.org> | 2007-07-19 21:52:24 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2007-07-19 21:52:24 +0000 |
| commit | 3abc57827f2e21dcfeb751056d58143e12399c1a (patch) | |
| tree | 9a7d7536166892091c77116829f0aac5fa026505 /qpid/cpp/src/qpidd.cpp | |
| parent | b47ba419dccd3c696c5085b616a216c52fb58ff1 (diff) | |
| download | qpid-python-3abc57827f2e21dcfeb751056d58143e12399c1a.tar.gz | |
* Summary:
- Connect cluster handlers into broker handler chains.
- Progress on wiring replication.
* src/tests/cluster.mk: Temporarily disabled Cluster test.
* src/tests/Cluster.h, cpp, Cluster_child.cpp: Updated to use UUIDs.
* src/qpidd.cpp:
- Load optional libs (cluster)
- Include plugin config in options.parse.
* src/qpid/cluster/SessionManager.h:
- Create sessions, update handler chains (as HandlerUpdater)
- Handle frames from cluster.
* src/qpid/cluster/ClusterPlugin.h, .cpp:
- renamed from ClusterPluginProvider
- Create and connect Cluster and SessionManager.
- Register SessionManager as HandlerUpdater.
* src/qpid/cluster/Cluster.h, .cpp: Refactor as SessionFrameHandler.
* src/qpid/broker/Connection.cpp: Apply HandlerUpdaters.
* src/qpid/broker/Broker.h, .cpp:
- Initialize plugins
- Apply HandlerUpdaters
* src/qpid/Plugin.h, .cpp: Simplified plugin framework.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@557788 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/qpidd.cpp')
| -rw-r--r-- | qpid/cpp/src/qpidd.cpp | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/qpid/cpp/src/qpidd.cpp b/qpid/cpp/src/qpidd.cpp index 7ab730bf52..53a68fc815 100644 --- a/qpid/cpp/src/qpidd.cpp +++ b/qpid/cpp/src/qpidd.cpp @@ -24,6 +24,8 @@ #include "qpid/log/Statement.h" #include "qpid/log/Options.h" #include "qpid/log/Logger.h" +#include "qpid/Plugin.h" +#include "qpid/sys/Shlib.h" #include "config.h" #include <boost/filesystem/path.hpp> #include <iostream> @@ -54,10 +56,10 @@ struct DaemonOptions : public qpid::Options { struct QpiddOptions : public qpid::Options { - DaemonOptions daemon; + CommonOptions common; Broker::Options broker; + DaemonOptions daemon; qpid::log::Options log; - CommonOptions common; QpiddOptions() : qpid::Options("Options") { common.config = "/etc/qpidd.conf"; @@ -65,6 +67,12 @@ struct QpiddOptions : public qpid::Options { add(broker); add(daemon); add(log); + const Plugin::Plugins& plugins= + Plugin::getPlugins(); + for (Plugin::Plugins::const_iterator i = plugins.begin(); + i != plugins.end(); + ++i) + add(*(*i)->getOptions()); } void usage() const { @@ -74,7 +82,7 @@ struct QpiddOptions : public qpid::Options { // Globals shared_ptr<Broker> brokerPtr; -QpiddOptions options; +auto_ptr<QpiddOptions> options; void shutdownHandler(int signal){ QPID_LOG(notice, "Shutting down on signal " << signal); @@ -84,45 +92,60 @@ void shutdownHandler(int signal){ struct QpiddDaemon : public Daemon { /** Code for parent process */ void parent() { - uint16_t port = wait(options.daemon.wait); - if (options.broker.port == 0) + uint16_t port = wait(options->daemon.wait); + if (options->broker.port == 0) cout << port << endl; } /** Code for forked child process */ void child() { - brokerPtr.reset(new Broker(options.broker)); + brokerPtr.reset(new Broker(options->broker)); uint16_t port=brokerPtr->getPort(); ready(port); // Notify parent. brokerPtr->run(); } }; +void tryShlib(const char* libname) { + try { + Shlib shlib(libname); + } + catch (const exception& e) { + // TODO aconway 2007-07-09: Should log failures as INFO + // at least, but we try shlibs before logging is configured. + } +} + int main(int argc, char* argv[]) { try { - options.parse(argc, argv, options.common.config); - qpid::log::Logger::instance().configure(options.log, argv[0]); + // Load optional modules + tryShlib("libqpidcluster.so.0"); + + // Parse options + options.reset(new QpiddOptions()); + options->parse(argc, argv, options->common.config); + qpid::log::Logger::instance().configure(options->log, argv[0]); // Options that just print information. - if(options.common.help || options.common.version) { - if (options.common.version) + if(options->common.help || options->common.version) { + if (options->common.version) cout << "qpidd (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION << endl; - else if (options.common.help) - options.usage(); + else if (options->common.help) + options->usage(); return 0; } // Options that affect a running daemon. - if (options.daemon.check || options.daemon.quit) { - pid_t pid = Daemon::getPid(options.broker.port); + if (options->daemon.check || options->daemon.quit) { + pid_t pid = Daemon::getPid(options->broker.port); if (pid < 0) return 1; - if (options.daemon.check) + if (options->daemon.check) cout << pid << endl; - if (options.daemon.quit && kill(pid, SIGINT) < 0) + if (options->daemon.quit && kill(pid, SIGINT) < 0) throw Exception("Failed to stop daemon: " + strError(errno)); return 0; } @@ -139,14 +162,14 @@ int main(int argc, char* argv[]) signal(SIGTTOU,SIG_IGN); signal(SIGTTIN,SIG_IGN); - if (options.daemon.daemon) { + if (options->daemon.daemon) { // Fork the daemon QpiddDaemon d; d.fork(); } else { // Non-daemon broker. - brokerPtr.reset(new Broker(options.broker)); - if (options.broker.port == 0) + brokerPtr.reset(new Broker(options->broker)); + if (options->broker.port == 0) cout << uint16_t(brokerPtr->getPort()) << endl; brokerPtr->run(); } |
