diff options
author | Alan Conway <aconway@apache.org> | 2007-06-27 00:12:26 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-06-27 00:12:26 +0000 |
commit | d032f5584b0f1de890844a2796d6ba158b011fca (patch) | |
tree | 7ffc500423a1cee3c39d2a5e27d301057fbcd0e9 /cpp/src/qpidd.cpp | |
parent | 2e15ee024a7f47bda7bd6ea5991657a820bd0714 (diff) | |
download | qpid-python-d032f5584b0f1de890844a2796d6ba158b011fca.tar.gz |
Make check now starts a broker on a dynamically assigned port, so
multiple qpid builds on one host will not conflict.
* src/tests/run_test, start_broker, kill_broker:
Broker writes port to file, run_test sets QPID_PORT
in environment of all tests.
* src/tests/topic_publisher.cpp, topic_listener.cpp, client_test.cpp:
All test clients use TestOptions to parse options from args and env.
* src/qpid/Options.h: Renamed from CommonOptions.h
Simplified use of Options class.
* src/qpid/Url.h: Renamed defaultPort constant.
* src/tests/logging.cpp:
* src/tests/interop_runner.cpp:
* src/tests/TestOptions.h:
* src/qpidd.cpp:
* src/qpid/log/Options.cpp:
* src/qpid/log/Logger.cpp:
* src/qpid/broker/Broker.cpp:
Updated for changes to Options.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@550993 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpidd.cpp')
-rw-r--r-- | cpp/src/qpidd.cpp | 105 |
1 files changed, 37 insertions, 68 deletions
diff --git a/cpp/src/qpidd.cpp b/cpp/src/qpidd.cpp index 3378fcdc96..aa84f1d6ac 100644 --- a/cpp/src/qpidd.cpp +++ b/cpp/src/qpidd.cpp @@ -37,67 +37,45 @@ using namespace qpid::broker; using namespace qpid::sys; using namespace std; -/** Command line options */ -struct QpiddOptions : public Broker::Options, public log::Options -{ - bool help; - bool longHelp; - bool version; +struct DaemonOptions : public qpid::Options { bool daemon; bool quit; - bool kill; bool check; int wait; - string config; - po::options_description mainOpts; - po::options_description allOpts; - - QpiddOptions() : - help(false), version(false), daemon(false), - quit(false), check(false), - wait(10), - config("/etc/qpidd.conf"), - mainOpts("Broker Options") + + DaemonOptions() : qpid::Options("Daemon options"), daemon(false), quit(false), check(false), wait(10) { - using namespace po; - // First set up the sub-option groups. - options_description daemonOpts("Daemon Options"); - daemonOpts.add_options() + addOptions() ("daemon,d", optValue(daemon), "Run as a daemon. With --port 0 print actual listening port.") ("wait,w", optValue(wait, "SECONDS"), "Maximum wait for daemon response.") ("check,c", optValue(check), "If a daemon is running print its pid to stdout and return 0.") ("quit,q", optValue(quit), "Stop the running daemon politely."); + } +}; - options_description logOpts("Logging Options"); - log::Options::addTo(logOpts); - - // Populate the main options group for --help - Broker::Options::addTo(mainOpts); - mainOpts.add_options() - ("config", optValue(config, "FILE"), "Configuation file.") - ("help,h", optValue(help), "Print help message.") - ("long-help", optValue(longHelp), "Show complete list of options.") - ("version,v", optValue(version), "Print version information."); - mainOpts.add(daemonOpts); - - // Populate the all options group - allOpts.add(mainOpts).add(logOpts); +struct QpiddOptions : public qpid::Options { + DaemonOptions daemon; + Broker::Options broker; + log::Options log; + CommonOptions common; + + QpiddOptions() : qpid::Options("Options") { + common.config = "/etc/qpidd.conf"; + add(common); + add(broker); + add(daemon); + add(log); } - void parse(int argc, char* argv[]) { - parseOptions(allOpts, argc, argv, config); - } - - void usage(const po::options_description& opts) const { - cout << "Usage: qpidd [OPTIONS]" << endl << endl - << opts << endl; + void usage() const { + cout << "Usage: qpidd [OPTIONS]" << endl << endl << *this << endl; }; }; // Globals Broker::shared_ptr brokerPtr; -QpiddOptions config; +QpiddOptions options; void handle_signal(int /*signal*/){ QPID_LOG(notice, "Shutting down..."); @@ -106,7 +84,7 @@ void handle_signal(int /*signal*/){ /** Compute a name for the pid file */ std::string pidFileFn() { - uint16_t port=brokerPtr ? brokerPtr->getPort() : config.port; + uint16_t port=brokerPtr ? brokerPtr->getPort() : options.broker.port; string file=(boost::format("qpidd.%d.pid") % port).str(); string pidPath; if (getuid() == 0) // Use standard pid file for root. @@ -128,13 +106,13 @@ std::string pidFileFn() { /** Code for forked parent */ void parent(Daemon& demon) { uint16_t realPort = demon.wait(); - if (config.port == 0) + if (options.broker.port == 0) cout << realPort << endl; } /** Code for forked child */ void child(Daemon& demon) { - brokerPtr=Broker::create(config); + brokerPtr=Broker::create(options.broker); uint16_t realPort=brokerPtr->getPort(); demon.ready(realPort); // Notify parent. brokerPtr->run(); @@ -144,34 +122,30 @@ void child(Daemon& demon) { int main(int argc, char* argv[]) { // Spelled 'demon' to avoid clash with daemon.h function. - Daemon demon(pidFileFn, config.wait); + Daemon demon(pidFileFn, options.daemon.wait); try { - config.parse(argc, argv); - if (config.trace) - config.selectors.push_back("trace+"); - log::Logger::instance().configure(config, argv[0]); + options.parse(argc, argv, options.common.config); + log::Logger::instance().configure(options.log, argv[0]); // Options that just print information. - if(config.help || config.longHelp || config.version) { - if (config.version) + if(options.common.help || options.common.version) { + if (options.common.version) cout << "qpidd (" << PACKAGE_NAME << ") version " << PACKAGE_VERSION << endl; - if (config.longHelp) - config.usage(config.allOpts); - else if (config.help) - config.usage(config.mainOpts); + else if (options.common.help) + options.usage(); return 0; } // Stop running daemon - if (config.quit) { + if (options.daemon.quit) { demon.quit(); return 0; } // Query running daemon - if (config.check) { + if (options.daemon.check) { pid_t pid = demon.check(); if (pid < 0) return 1; @@ -183,25 +157,20 @@ int main(int argc, char* argv[]) // Starting the broker: signal(SIGINT, handle_signal); - if (config.daemon) { // Daemon broker + if (options.daemon.daemon) { // Daemon broker demon.fork(parent, child); } else { // Non-daemon broker. - brokerPtr = Broker::create(config); - if (config.port == 0) + brokerPtr = Broker::create(options.broker); + if (options.broker.port == 0) cout << uint16_t(brokerPtr->getPort()) << endl; brokerPtr->run(); } return 0; } - catch(const po::error& e) { - // Command line parsing error. - cerr << "Error: " << e.what() << endl - << "Type 'qpidd --long-help' for full usage." << endl; - } catch(const exception& e) { if (demon.isParent()) - cerr << "Error: " << e.what() << endl; + cerr << e.what() << endl; else QPID_LOG(critical, e.what()); } |