def kill(self, JobID): # get logger tmpLog = PLogger.getPandaLogger() # check proxy self.gridPassPhrase, self.vomsFQAN = PsubUtils.checkGridProxy( self.gridPassPhrase, False, self.verbose) # get jobset jobList = self.getJobIDsWithSetID(JobID) if jobList == None: jobList = [JobID] else: tmpMsg = "JobsetID=%s is composed of JobID=" % JobID for tmpJobID in jobList: tmpMsg += '%s,' % tmpJobID tmpMsg = tmpMsg[:-1] tmpLog.info(tmpMsg) for tmpJobID in jobList: # get job info from local repository job = self.getJobInfo(tmpJobID) if job == None: tmpLog.warning( "JobID=%s not found in local repository. Synchronization may be needed" % tmpJobID) continue # skip frozen job if job.dbStatus == 'frozen': tmpLog.info('All subJobs in JobID=%s already finished/failed' % tmpJobID) continue # get PandaID list killJobs = job.PandaID.split(',') # kill tmpLog.info('Sending kill command ...') status, output = Client.killJobs(killJobs, self.verbose) if status != 0: tmpLog.error(output) tmpLog.error("Failed to kill JobID=%s" % tmpJobID) return False # update database job.commandToPilot = 'tobekilled' # update DB try: PdbUtils.updateJobDB(job, self.verbose) except: tmpLog.error("Failed to update local repository for JobID=%s" % tmpJobID) return False # done tmpLog.info('Done. JobID=%s will be killed in 30min' % tmpJobID) return True
def kill(self,JobID,useJobsetID=False): # get logger tmpLog = PLogger.getPandaLogger() # check proxy self.gridPassPhrase,self.vomsFQAN = PsubUtils.checkGridProxy( self.gridPassPhrase, False, self.verbose, useCache=True) # force update just in case self.status(JobID,True) # get jobset jobList = self.getJobIDsWithSetID(JobID) if jobList == None: # works only for jobsetID if useJobsetID: return # works with jobID jobList = [JobID] else: tmpMsg = "ID=%s is composed of JobID=" % JobID for tmpJobID in jobList: tmpMsg += '%s,' % tmpJobID tmpMsg = tmpMsg[:-1] tmpLog.info(tmpMsg) for tmpJobID in jobList: # get job info from local repository job = self.getJobInfo(tmpJobID) if job == None: tmpLog.warning("JobID=%s not found in local repository. Synchronization may be needed" % tmpJobID) continue # skip frozen job if job.dbStatus == 'frozen': tmpLog.info('All subJobs in JobID=%s already finished/failed' % tmpJobID) continue if not job.isJEDI(): # get PandaID list killJobs = job.PandaID.split(',') # kill tmpLog.info('Sending kill command ...') status,output = Client.killJobs(killJobs,self.verbose) if status != 0: tmpLog.error(output) tmpLog.error("Failed to kill JobID=%s" % tmpJobID) return False # update database job.commandToPilot = 'tobekilled' # update DB try: PdbUtils.updateJobDB(job,self.verbose) except: tmpLog.error("Failed to update local repository for JobID=%s" % tmpJobID) return False else: # kill JEDI task tmpLog.info('Sending killTask command ...') status,output = Client.killTask(job.jediTaskID,self.verbose) # communication error if status != 0: tmpLog.error(output) tmpLog.error("Failed to kill JobID=%s" % tmpJobID) return False tmpStat,tmpDiag = output if not tmpStat: tmpLog.error(tmpDiag) tmpLog.error("Failed to kill JobID=%s" % tmpJobID) return False tmpLog.info(tmpDiag) # done if job.isJEDI(): tmpLog.info('Done. TaskID=%s will be killed in 30min' % job.jediTaskID) else: tmpLog.info('Done. JobID=%s will be killed in 30min' % tmpJobID) return True