summaryrefslogtreecommitdiff
path: root/cpp/src/qpidd.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-06-27 00:12:26 +0000
committerAlan Conway <aconway@apache.org>2007-06-27 00:12:26 +0000
commitd032f5584b0f1de890844a2796d6ba158b011fca (patch)
tree7ffc500423a1cee3c39d2a5e27d301057fbcd0e9 /cpp/src/qpidd.cpp
parent2e15ee024a7f47bda7bd6ea5991657a820bd0714 (diff)
downloadqpid-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.cpp105
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());
}