You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@gump.apache.org by aj...@apache.org on 2003/10/06 16:04:16 UTC

cvs commit: jakarta-gump/python/gump launcher.py check.py conf.py

ajack       2003/10/06 07:04:15

  Modified:    python/gump launcher.py check.py conf.py
  Log:
  Add timeout on launched commands (UNIX only)
  Defaults to 30 minutes, will allow override some time.
  
  Revision  Changes    Path
  1.10      +21 -2     jakarta-gump/python/gump/launcher.py
  
  Index: launcher.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/launcher.py,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- launcher.py	30 Sep 2003 03:52:24 -0000	1.9
  +++ launcher.py	6 Oct 2003 14:04:15 -0000	1.10
  @@ -65,7 +65,8 @@
   import os
   import sys
   import logging
  -
  +import signal
  +    
   from string import split
   
   from gump import log, gumpSafeName
  @@ -255,6 +256,16 @@
       result.exit_code=0
       result.status=CMD_STATUS_SUCCESS  
       return result
  +
  +def killChildren():
  +    pid=os.getpid()
  +    log.info('Kill all children for ' + str(pid))    
  +    os.system('pkill -P ' + str(pid))
  +    
  +def timeoutHandler(signum, frame):
  +    log.info('Signal handler called with signal: ' + str(signum))
  +    killChildren()
  +    raise Error, "Timeout"
       
   def execute(cmd,tmp=dir.tmp):
       res=CmdResult(cmd)
  @@ -323,9 +334,17 @@
           #############################################################                
           log.info('Executing: ' + execString + ' (Output to ' + str(outputFile) + ')')
       
  +        # Set the signal handler and an N-second alarm
  +        if not os.name == 'dos' and not os.name == 'nt':
  +            signal.signal(signal.SIGALRM, timeoutHandler)
  +            signal.alarm(setting.timeout)
  +
           # Execute Command & Wait
           result.exit_code=os.system(execString + ' >>' + str(outputFile) + ' 2>&1')
       
  +        if not os.name == 'dos' and not os.name == 'nt':
  +            signal.alarm(0)          # Disable the alarm
  +
           # Process Outputs (exit_code and stderr/stdout)
           if result.exit_code < 0:
             result.status=CMD_STATUS_TIMED_OUT
  @@ -344,7 +363,7 @@
                   result.output=outputFile
               else:
                   os.remove(outputFile)
  -    
  +                
         except Exception, details :
           log.error('Failed to launch command. Details: ' + str(details))
           
  
  
  
  1.24      +7 -3      jakarta-gump/python/gump/check.py
  
  Index: check.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/check.py,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- check.py	29 Sep 2003 22:50:07 -0000	1.23
  +++ check.py	6 Oct 2003 14:04:15 -0000	1.24
  @@ -152,6 +152,9 @@
           context.noRSync=1
           context.addWarning('"rsync" command not found, so attempting recursive copy "cp -R"')
           
  +    if not checkExecutable(workspace, context, 'pkill','-help',0): 
  +        context.noPKill=1
  +        context.addWarning('"pkill" command not found, no process clean-ups can occur')        
       
       # :TODO:
       # Need to check javac classes are on CLASSPATH
  @@ -169,6 +172,7 @@
       except Exception, details:
           ok=0
           log.error('Failed to detect [' + command + '] : ' + str(details))
  +        result=None
          
       # Update Context
       context.performedWork(CommandWorkItem(WORK_TYPE_CHECK,cmd,result))
  
  
  
  1.17      +5 -3      jakarta-gump/python/gump/conf.py
  
  Index: conf.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/conf.py,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- conf.py	28 Sep 2003 15:05:43 -0000	1.16
  +++ conf.py	6 Oct 2003 14:04:15 -0000	1.17
  @@ -113,6 +113,8 @@
       
       datetimeformat="%a, %d %b %Y %H:%M:%S (%Z)"
       
  +    timeout=60*30 # 30 minutes (in seconds)
  +    
   class switch:
       """Configuration of switches """   
       optimize=0 # Optimize (at risk to exact correctness) anywhere one can