You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2008/06/02 23:20:35 UTC
svn commit: r662570 - in /incubator/qpid/trunk/qpid/cpp: etc/qpidd
etc/qpidd.conf qpidc.spec.in src/qpid/broker/Daemon.cpp
src/qpid/broker/Daemon.h src/qpidd.cpp
Author: tross
Date: Mon Jun 2 14:20:35 2008
New Revision: 662570
URL: http://svn.apache.org/viewvc?rev=662570&view=rev
Log:
QPID-1114 Daemon mode improvements
Modified:
incubator/qpid/trunk/qpid/cpp/etc/qpidd
incubator/qpid/trunk/qpid/cpp/etc/qpidd.conf
incubator/qpid/trunk/qpid/cpp/qpidc.spec.in
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.h
incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp
Modified: incubator/qpid/trunk/qpid/cpp/etc/qpidd
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/etc/qpidd?rev=662570&r1=662569&r2=662570&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/etc/qpidd (original)
+++ incubator/qpid/trunk/qpid/cpp/etc/qpidd Mon Jun 2 14:20:35 2008
@@ -39,7 +39,7 @@
if [ $RETVAL = 0 ]; then
touch $pidfile
chown qpidd.qpidd $pidfile
- runuser -s /bin/sh qpidd -c "qpidd -c > $pidfile"
+ runuser -s /bin/sh qpidd -c "/usr/sbin/$prog --check > $pidfile"
fi
return $RETVAL
}
Modified: incubator/qpid/trunk/qpid/cpp/etc/qpidd.conf
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/etc/qpidd.conf?rev=662570&r1=662569&r2=662570&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/etc/qpidd.conf (original)
+++ incubator/qpid/trunk/qpid/cpp/etc/qpidd.conf Mon Jun 2 14:20:35 2008
@@ -1,2 +1,3 @@
# Configuration file for qpidd.
# Using default settings, qpidd --help to see defaults.
+pid-dir=/var/run/qpidd
Modified: incubator/qpid/trunk/qpid/cpp/qpidc.spec.in
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/qpidc.spec.in?rev=662570&r1=662569&r2=662570&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/qpidc.spec.in (original)
+++ incubator/qpid/trunk/qpid/cpp/qpidc.spec.in Mon Jun 2 14:20:35 2008
@@ -102,6 +102,7 @@
make install DESTDIR=%{buildroot}
install -Dp -m0755 etc/qpidd %{buildroot}%{_initrddir}/qpidd
install -d -m0755 %{buildroot}%{_localstatedir}/lib/qpidd
+install -d -m0755 %{buildroot}/var/run/qpidd
rm -f %{buildroot}%_libdir/*.a
rm -f %{buildroot}%_libdir/*.la
@@ -146,6 +147,7 @@
%config(noreplace) %_sysconfdir/sasl2/qpidd.conf
%{_initrddir}/%{qpidd}
%attr(755, qpidd, qpidd) %_localstatedir/lib/qpidd
+%attr(755, qpidd, qpidd) /var/run/qpidd
%attr(600, qpidd, qpidd) %config(noreplace) %_localstatedir/lib/qpidd/qpidd.sasldb
%doc %_mandir/man1/%{qpidd}.*
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.cpp?rev=662570&r1=662569&r2=662570&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.cpp Mon Jun 2 14:20:35 2008
@@ -71,18 +71,14 @@
} // namespace
-Daemon::Daemon() {
+Daemon::Daemon(std::string _pidDir) : pidDir(_pidDir) {
pid = -1;
pipeFds[0] = pipeFds[1] = -1;
}
-string Daemon::dir() {
- return (getuid() == 0 ? "/var/run" : "/tmp");
-}
-
-string Daemon::pidFile(uint16_t port) {
+string Daemon::pidFile(string pidDir, uint16_t port) {
ostringstream path;
- path << dir() << "/qpidd." << port << ".pid";
+ path << pidDir << "/qpidd." << port << ".pid";
return path.str();
}
@@ -110,7 +106,7 @@
// Misc
throwIf(setsid()<0, "Cannot set session ID");
- throwIf(chdir(dir().c_str()) < 0, "Cannot change directory to "+dir());
+ throwIf(chdir(pidDir.c_str()) < 0, "Cannot change directory to "+pidDir);
umask(027);
// Child behavior
@@ -197,7 +193,7 @@
* hears the good news, it ill exit.
*/
void Daemon::ready(uint16_t port) { // child
- lockFile = pidFile(port);
+ lockFile = pidFile(pidDir, port);
LockFile lf(lockFile, true);
/*
@@ -228,8 +224,8 @@
* The parent process reads the child's pid
* from the lockfile.
*/
-pid_t Daemon::getPid(uint16_t port) {
- string name = pidFile(port);
+pid_t Daemon::getPid(string _pidDir, uint16_t port) {
+ string name = pidFile(_pidDir, port);
LockFile lf(name, false);
pid_t pid;
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.h?rev=662570&r1=662569&r2=662570&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/Daemon.h Mon Jun 2 14:20:35 2008
@@ -35,9 +35,9 @@
{
public:
/** Check daemon is running on port, throw exception if not */
- static pid_t getPid(uint16_t port);
+ static pid_t getPid(std::string pidDir, uint16_t port);
- Daemon();
+ Daemon(std::string pidDir);
virtual ~Daemon();
@@ -68,12 +68,12 @@
void ready(uint16_t port);
private:
- static std::string dir();
- static std::string pidFile(uint16_t port);
+ static std::string pidFile(std::string pidDir, uint16_t port);
pid_t pid;
int pipeFds[2];
std::string lockFile;
+ std::string pidDir;
};
}} // namespace qpid::broker
Modified: incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp?rev=662570&r1=662569&r2=662570&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpidd.cpp Mon Jun 2 14:20:35 2008
@@ -60,11 +60,13 @@
bool quit;
bool check;
int wait;
+ std::string piddir;
- DaemonOptions() : qpid::Options("Daemon options"), daemon(false), quit(false), check(false), wait(10)
+ DaemonOptions() : qpid::Options("Daemon options"), daemon(false), quit(false), check(false), wait(10), piddir("/tmp")
{
addOptions()
("daemon,d", optValue(daemon), "Run as a daemon.")
+ ("pid-dir", optValue(piddir, "DIR"), "Directory where port-specific PID file is stored")
("wait,w", optValue(wait, "SECONDS"), "Sets the maximum wait time to initialize the daemon. If the daemon fails to initialize, prints an error and returns 1")
("check,c", optValue(check), "Prints the daemon's process ID to stdout and returns 0 if the daemon is running, otherwise returns 1")
("quit,q", optValue(quit), "Tells the daemon to shut down");
@@ -127,6 +129,8 @@
}
struct QpiddDaemon : public Daemon {
+ QpiddDaemon(std::string pidDir) : Daemon(pidDir) {}
+
/** Code for parent process */
void parent() {
uint16_t port = wait(options->daemon.wait);
@@ -216,7 +220,7 @@
// Options that affect a running daemon.
if (options->daemon.check || options->daemon.quit) {
- pid_t pid = Daemon::getPid(options->broker.port);
+ pid_t pid = Daemon::getPid(options->daemon.piddir, options->broker.port);
if (pid < 0)
return 1;
if (options->daemon.check)
@@ -240,7 +244,7 @@
if (options->daemon.daemon) {
// Fork the daemon
- QpiddDaemon d;
+ QpiddDaemon d(options->daemon.piddir);
d.fork();
}
else { // Non-daemon broker.