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.