SVN: zdaemon/trunk/src/zdaemon/ Bug fixed: detection of daemon startup and shutdown was broken

Florent Xicluna <[email protected]>
Newsgroups gmane.comp.web.zope.zope3.cvs
Message-ID <20071202170849.360C1203B1F__8765.18745576522$1196615359$gmane$org@mail.zope.org>
Log message for revision 82079:
  Bug fixed: detection of daemon startup and shutdown was broken
  

Changed:
  U   zdaemon/trunk/src/zdaemon/README.txt
  U   zdaemon/trunk/src/zdaemon/tests/tests.py
  U   zdaemon/trunk/src/zdaemon/zdctl.py

-=-
Modified: zdaemon/trunk/src/zdaemon/README.txt
===================================================================
--- zdaemon/trunk/src/zdaemon/README.txt	2007-12-02 14:03:30 UTC (rev 82078)
+++ zdaemon/trunk/src/zdaemon/README.txt	2007-12-02 17:08:48 UTC (rev 82079)
@@ -53,10 +53,11 @@
 daemon :)
 
     >>> system("./zdaemon -p 'sleep 100' start")
-    . daemon process started, pid=819
+    . .
+    daemon process started, pid=819
 
 This ran the sleep deamon.  We can check whether it ran with the
-status command:  
+status command:
 
     >>> system("./zdaemon -p 'sleep 100' status")
     program running; pid=819
@@ -64,6 +65,7 @@
 We can stop it with the stop command:
 
     >>> system("./zdaemon -p 'sleep 100' stop")
+    . .
     daemon process stopped
 
     >>> system("./zdaemon -p 'sleep 100' status")
@@ -82,7 +84,8 @@
 Now, we can run with the -C option to read the configuration file:
 
     >>> system("./zdaemon -Cconf start")
-    . daemon process started, pid=1136
+    . .
+    daemon process started, pid=1136
 
 If we list the directory:
 
@@ -96,6 +99,7 @@
 where this goes.
 
     >>> system("./zdaemon -Cconf stop")
+    . .
     daemon process stopped
 
     >>> open('conf', 'w').write(
@@ -108,7 +112,8 @@
 
 
     >>> system("./zdaemon -Cconf start")
-    . daemon process started, pid=1139
+    . .
+    daemon process started, pid=1139
 
     >>> system("ls")
     conf
@@ -119,6 +124,7 @@
     True
 
     >>> system("./zdaemon -Cconf stop")
+    . .
     daemon process stopped
 
 In the example, we included a command-line argument in the program
@@ -133,12 +139,14 @@
     ... ''')
 
     >>> system("./zdaemon -Cconf start 100")
-    . daemon process started, pid=1149
+    . .
+    daemon process started, pid=1149
 
     >>> system("./zdaemon -Cconf status")
     program running; pid=1149
 
     >>> system("./zdaemon -Cconf stop")
+    . .
     daemon process stopped
 
 Environment Variables
@@ -182,7 +190,7 @@
 controlling terminal.  It can optionally redirect the output to
 standard error and standard output to a file.  This is done with the
 transcript option.  This is, of course, useful for logging output from
-long-running applications.  
+long-running applications.
 
 Let's look at an example. We'll have a long-running process that
 simple tails a data file:
@@ -200,7 +208,8 @@
     ... ''')
 
     >>> system("./zdaemon -Cconf start")
-    . daemon process started, pid=7963
+    . .
+    daemon process started, pid=7963
 
 .. Wait a little bit to make sure tail has a chance to work
 
@@ -211,7 +220,7 @@
 
     >>> open('log').read()
     'rec 1\n'
-    
+
 We can rotate the transcript log by renaming it and telling zdaemon to
 reopen it:
 

Modified: zdaemon/trunk/src/zdaemon/tests/tests.py
===================================================================
--- zdaemon/trunk/src/zdaemon/tests/tests.py	2007-12-02 14:03:30 UTC (rev 82078)
+++ zdaemon/trunk/src/zdaemon/tests/tests.py	2007-12-02 17:08:48 UTC (rev 82079)
@@ -31,7 +31,7 @@
 def make_sure_non_daemon_mode_doesnt_hang_when_program_exits():
     """
     The whole awhile bit that waits for a program to start
-    whouldn't be used on non-daemopn mode.
+    whouldn't be used on non-daemon mode.
 
     >>> open('conf', 'w').write(
     ... '''
@@ -58,14 +58,14 @@
     ... ''')
 
     >>> system("./zdaemon -Cconf start")
-    . . 
-    Daemon manager not running.
+    . .
+    daemon manager not running
 
     """
-    
+
 def allow_duplicate_arguments():
     """
-    
+
 Wrapper scripts will often embed configuration arguments. This could
 cause a problem when zdaemon reinvokes itself, passing it's own set of
 configuration arguments.  To deal with this, we'll allow duplicate
@@ -79,9 +79,11 @@
     ... ''')
 
     >>> system("./zdaemon -Cconf -Cconf -Cconf start")
-    . daemon process started, pid=21446
+    . .
+    daemon process started, pid=21446
 
     >>> system("./zdaemon -Cconf -Cconf -Cconf stop")
+    . .
     daemon process stopped
 
 """
@@ -127,6 +129,7 @@
             setUp=setUp, tearDown=tearDown,
             checker=renormalizing.RENormalizing([
                 (re.compile('pid=\d+'), 'pid=NNN'),
+                (re.compile('(\. )+\.?'), '<BLANKLINE>'),
                 ])
         ),
         doctest.DocFileSuite(
@@ -134,6 +137,7 @@
             setUp=setUp, tearDown=tearDown,
             checker=renormalizing.RENormalizing([
                 (re.compile('pid=\d+'), 'pid=NNN'),
+                (re.compile('(\. )+\.?'), '<BLANKLINE>'),
                 (re.compile('^env\n((?:.*\n)+)$'), checkenv),
                 ])
         ),

Modified: zdaemon/trunk/src/zdaemon/zdctl.py
===================================================================
--- zdaemon/trunk/src/zdaemon/zdctl.py	2007-12-02 14:03:30 UTC (rev 82078)
+++ zdaemon/trunk/src/zdaemon/zdctl.py	2007-12-02 17:08:48 UTC (rev 82079)
@@ -128,7 +128,7 @@
             if m:
                 s = m.group(1)
                 args = eval(s, {"__builtins__": {}})
-                program = self.options.program 
+                program = self.options.program
                 if args[:len(program)] != program:
                     print "WARNING! zdrun is managing a different program!"
                     print "our program   =", program
@@ -194,28 +194,26 @@
         return resp
 
     def awhile(self, cond, msg):
-        n = 0
-        was_running = True
+        was_running = False
         try:
-            if self.get_status():
-                was_running = True
-                
-            while not cond():
+            for n in range(10):
+                if self.get_status(): # running?
+                    was_running = True
+                elif was_running: # no longer running?
+                    break
+                if cond(): # condition fulfilled?
+                    break
                 sys.stdout.write(". ")
                 sys.stdout.flush()
                 time.sleep(1)
-                n += 1
-                if self.get_status():
-                    was_running = True
-                elif was_running or n > 10:
-                    print "\nDaemon manager not running."
-                    return
 
         except KeyboardInterrupt:
             print "^C"
-        else:
-            print msg % self.__dict__
 
+        if not cond():
+            msg = "daemon manager not running"
+        print "\n" + msg % self.__dict__
+
     def help_help(self):
         print "help          -- Print a list of available actions."
         print "help <action> -- Print help for <action>."
@@ -235,7 +233,7 @@
             else:
                 args = [self.options.python, sys.argv[0]]
                 os.environ['DAEMON_MANAGER_MODE'] = '1'
-                
+
             args += self._get_override("-S", "schemafile")
             args += self._get_override("-C", "configfile")
             args += self._get_override("-b", "backofflimit")
@@ -619,7 +617,7 @@
     if os.environ.get('DAEMON_MANAGER_MODE'):
         import zdaemon.zdrun
         return zdaemon.zdrun.main(args)
-        
+
     if options is None:
         options = ZDCtlOptions()
     options.realize(args)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.