00001 import re
00002 from GBSJobAnalyser import GBSJobAnalyser
00003
00004 class MinosRSMJobAnalyser(GBSJobAnalyser) :
00005 """Job termination analysis object. Based on output returned and
00006 past history decides what to do next.
00007
00008 This class inherits from GBSJobAnalyser and adds support for the
00009 retry request NEW_SEED by renaming the job to the next free subrun
00010 number for the job's run number.
00011 """
00012
00013 def __init__(self,name,parent,model,model_args):
00014 GBSJobAnalyser.__init__(self,name,parent,model,model_args)
00015
00016 def Apply(self):
00017
00018 """Apply results of analysis to client job dealing with NEW_SEED request."""
00019
00020 job = self.GetJob()
00021
00022 if not job or not re.search("NEW_SEED",self.GetRetryArgs()):
00023 GBSJobAnalyser.Apply(self)
00024 return
00025 run = job.GetRun()
00026 subrun = job.GetSubrun()
00027 task = job.GetParent()
00028 job_list = task.GetJobs("job_%8.8d_.*" % run)
00029 max_subrun = 0
00030 for j_name,j in job_list.iteritems(): max_subrun = max(max_subrun,j.GetSubrun())
00031 max_subrun += 1
00032 task.RenameJob(job.GetName(),"job_%8.8d_%4.4d" % (run,max_subrun))
00033 GBSJobAnalyser.Apply(self)
00034 jobTryDir = job._GetTryOutputDir()
00035 gbs_log_file_spec = jobTryDir + "/" + job._GetGbsLogFileName()
00036 f = open(gbs_log_file_spec,'a')
00037 f.write(" Rename subrun %d - > %d" % (subrun,max_subrun))
00038 f.write(" - This explains the 'GBS_JOB_ANALYSIS Unable to find file, recreating it'")
00039 f.write(" - Look at the GBS log file for the old subrun for the remainder of the log.")
00040 f.close()
00041