diff options
-rw-r--r-- | qpid/cpp/Makefile.am | 4 | ||||
-rw-r--r-- | qpid/cpp/docs/man/qpidd.x | 36 | ||||
-rw-r--r-- | qpid/cpp/etc/qpidd.conf | 2 | ||||
-rw-r--r-- | qpid/cpp/qpidc.spec.in | 7 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/Options.cpp | 16 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/Options.h | 3 | ||||
-rw-r--r-- | qpid/cpp/src/qpidd.cpp | 3 |
7 files changed, 59 insertions, 12 deletions
diff --git a/qpid/cpp/Makefile.am b/qpid/cpp/Makefile.am index cd2f3a8dc8..42fc47ba5f 100644 --- a/qpid/cpp/Makefile.am +++ b/qpid/cpp/Makefile.am @@ -5,11 +5,13 @@ SPEC=$(PACKAGE).spec EXTRA_DIST = \ LICENSE NOTICE README RELEASE_NOTES\ - etc/qpidd \ + etc/qpidd etc/qpidd.conf \ $(SPEC) $(SPEC).in \ rpm/README.qpidd-devel \ xml/cluster.xml +sysconf_DATA = etc/qpidd.conf + SUBDIRS = src docs/api docs/man examples # Update libtool, if needed. diff --git a/qpid/cpp/docs/man/qpidd.x b/qpid/cpp/docs/man/qpidd.x index 91d3c3a969..5d4ce974e1 100644 --- a/qpid/cpp/docs/man/qpidd.x +++ b/qpid/cpp/docs/man/qpidd.x @@ -1,16 +1,46 @@ [NAME] + qpidd \- the Qpid AMQP broker daemon +[SYNOPSIS] + +qpidd [options] + [DESCRIPTION] -Start the AMQP broker. The broker options can be specified on the command line (e.g. --worker-threads 10), in an environment variable (e.g. export QPID_WORKER_THREADS=10), or as a line in a configuration file (e.g. worker-threads=10). +An AMQP broker daemon that stores, routes and forwards messages via +the AMQP protocol. + +[OPTIONS] + +Options may be specified via command line, environment variable or configuration file. See FILES and ENVIRONMENT below for details. + +[FILES] +.I /etc/qpidd.conf +.RS +Default configuration file. +.RE -Command line options take precedence over environment variables, which -take precedence over the config file. +Configuration file settings are over-ridden by command line or environment variable settings. '--config <file>' or 'export QPID_CONFIG=<file>' specifies an alternate file. +Each line is a name=value pair. Blank lines and lines beginning with # are ignored. For example: + # My qpidd configuration file. + port=6000 + max-connections=10 + log.output=stdout + log.output=/tmp/qpidd.log +[ENVIRONMENT] +.I QPID_<option> +.RS +There is an environment variable for each option. +.RE +The environment variable is the option name in uppercase, prefixed with QPID_ and '.' or '-' are replaced with '_'. Environment settings are over-ridden by command line settings. For example: + export QPID_PORT=6000 + export QPID_MAX_CONNECTIONS=10 + export QPID_LOG_OUTPUT=/tmp/qpidd.log diff --git a/qpid/cpp/etc/qpidd.conf b/qpid/cpp/etc/qpidd.conf new file mode 100644 index 0000000000..8064767e78 --- /dev/null +++ b/qpid/cpp/etc/qpidd.conf @@ -0,0 +1,2 @@ +# Configuration file for qpidd. +# Using default settings, qpidd --help to see defaults. diff --git a/qpid/cpp/qpidc.spec.in b/qpid/cpp/qpidc.spec.in index adb3297a2c..6f0bc1ba2f 100644 --- a/qpid/cpp/qpidc.spec.in +++ b/qpid/cpp/qpidc.spec.in @@ -5,7 +5,7 @@ Name: @PACKAGE@ Version: @VERSION@ -Release: 7%{?dist} +Release: 8%{?dist} Summary: Libraries for Qpid C++ client applications Group: System Environment/Libraries License: Apache Software License @@ -95,6 +95,7 @@ make check %_libdir/libqpidcommon.so.0.1.0 %_libdir/libqpidclient.so.0 %_libdir/libqpidclient.so.0.1.0 +%_sysconfdir/qpidd.conf %files devel %defattr(-,root,root,-) @@ -149,6 +150,10 @@ fi %changelog +* Thu Oct 4 2007 Alan Conway <aconway@redhat.com> - 0.2-8 +- Added qpidd.conf configuration file. +- Updated man page to detail configuration options. + * Thu Sep 20 2007 Alan Conway <aconway@redhat.com> - 0.2-7 - Removed apr dependency. diff --git a/qpid/cpp/src/qpid/Options.cpp b/qpid/cpp/src/qpid/Options.cpp index 081583f17e..291df341e7 100644 --- a/qpid/cpp/src/qpid/Options.cpp +++ b/qpid/cpp/src/qpid/Options.cpp @@ -59,13 +59,14 @@ struct EnvOptMapper { } std::string prettyArg(const std::string& name, const std::string& value) { - return value.empty() ? name : name+" (="+value+")"; + return value.empty() ? name+" " : name+" (="+value+") "; } Options::Options(const string& name) : po::options_description(name) {} void Options::parse(int argc, char** argv, const std::string& configFile) { + string defaultConfigFile = configFile; // May be changed by env/cmdline string parsing; try { po::variables_map vm; @@ -78,9 +79,14 @@ void Options::parse(int argc, char** argv, const std::string& configFile) if (!configFile.empty()) { parsing="configuration file "+configFile; ifstream conf(configFile.c_str()); - if (conf.good()) { - conf.exceptions(ifstream::failbit|ifstream::badbit); + if (conf.good()) po::store(po::parse_config_file(conf, *this), vm); + else { + // No error if default configfile is missing/unreadable + // but complain for non-default config file. + if (configFile != defaultConfigFile) + throw Exception("cannot read configuration file " + +configFile); } } po::notify(vm); @@ -94,7 +100,9 @@ void Options::parse(int argc, char** argv, const std::string& configFile) } } -CommonOptions::CommonOptions(const string& name) : Options(name) { +CommonOptions::CommonOptions(const string& name, const string& configfile) + : Options(name), config(configfile) +{ addOptions() ("help,h", optValue(help), "Print help message.") ("version,v", optValue(version), "Print version information.") diff --git a/qpid/cpp/src/qpid/Options.h b/qpid/cpp/src/qpid/Options.h index 0821dca7e5..f46e32032b 100644 --- a/qpid/cpp/src/qpid/Options.h +++ b/qpid/cpp/src/qpid/Options.h @@ -137,7 +137,8 @@ struct Options : public po::options_description { * Standard options for configuration */ struct CommonOptions : public Options { - CommonOptions(const std::string& name=std::string()); + CommonOptions(const std::string& name=std::string(), + const std::string& configfile=std::string()); bool help; bool version; std::string config; diff --git a/qpid/cpp/src/qpidd.cpp b/qpid/cpp/src/qpidd.cpp index 53a68fc815..97dd83689d 100644 --- a/qpid/cpp/src/qpidd.cpp +++ b/qpid/cpp/src/qpidd.cpp @@ -61,8 +61,7 @@ struct QpiddOptions : public qpid::Options { DaemonOptions daemon; qpid::log::Options log; - QpiddOptions() : qpid::Options("Options") { - common.config = "/etc/qpidd.conf"; + QpiddOptions() : qpid::Options("Options"), common("", "/etc/qpidd.conf") { add(common); add(broker); add(daemon); |