Return-Path: Mailing-List: contact gump-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list gump@jakarta.apache.org Received: (qmail 57184 invoked by uid 500); 6 Oct 2003 14:04:12 -0000 Received: (qmail 57181 invoked from network); 6 Oct 2003 14:04:12 -0000 Received: from unknown (HELO minotaur.apache.org) (209.237.227.194) by daedalus.apache.org with SMTP; 6 Oct 2003 14:04:12 -0000 Received: (qmail 26346 invoked by uid 1728); 6 Oct 2003 14:04:16 -0000 Date: 6 Oct 2003 14:04:16 -0000 Message-ID: <20031006140416.26345.qmail@minotaur.apache.org> From: ajack@apache.org To: jakarta-gump-cvs@apache.org Subject: cvs commit: jakarta-gump/python/gump launcher.py check.py conf.py X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N 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