def setMergeJobStatus(self,job,forceUpdate=False): # only whenmerge job generation is active if not forceUpdate and not job.activeMergeGen(): return True # get logger tmpLog = PLogger.getPandaLogger() # check status of merge job generation status,genStauts = Client.checkMergeGenerationStatus(job.JobID,verbose=self.verbose) if status != 0: tmpLog.error(genStauts) tmpLog.error("Failed to check status of merge job generation for JobID=%s" % job.JobID) return False # set status job.mergeJobStatus = genStauts['status'] # set merge job IDs if genStauts['mergeIDs'] != []: job.mergeJobID = '' for tmpID in genStauts['mergeIDs']: job.mergeJobID += '%s,' % tmpID job.mergeJobID = job.mergeJobID[:-1] # return return True
def retrieveMergeJobs(job, pandaJobDefId): ''' methods for retrieving panda job ids of merging jobs given a jobDefId ''' from pandatools import Client ick = False status = '' num_mjobs = 0 (ec, info) = Client.checkMergeGenerationStatus(pandaJobDefId) if ec == 0: try: status = info['status'] mergeJobDefIds = info['mergeIDs'] if status == 'NA': logger.warning('No merging jobs expected') job.backend.mergejobs = [] elif status == 'generating': logger.debug('merging jobs are generating') job.backend.mergejobs = [] elif status == 'standby': logger.debug('merging jobs to be created') job.backend.mergejobs = [] elif status == 'generated': logger.debug('merging jobs are generated') for id in mergeJobDefIds: logger.debug("merging jobDefId: %d" % id) ## retrieve merging job id,status given the jobDefId (ec2, mjs) = Client.getPandIDsWithJobID(id) if ec2 == 0: for jid,jinfo in mjs.items(): mjobj = PandaMergeJob() mjobj.id = jid #mjobj.status = jinfo[0] mjobj.url = 'http://panda.cern.ch/?job=%d' % jid if mjobj not in job.backend.mergejobs: job.backend.mergejobs.append(mjobj) else: logger.debug("merging job %s already exists locally" % mjobj.id) num_mjobs += 1 else: logger.warning("getPandIDsWithJobID returns non-zero exit code: %d" % ec2) ick = True except KeyError: logger.error('unexpected job information: %s' % repr(info)) except Exception as e: logger.error('general merge job information retrieval error') raise e else: logger.error('checkMergeGenerationStatus returns non-zero exit code: %d' % ec) return (ick, status, num_mjobs)
def retrieveMergeJobs(job, pandaJobDefId): ''' methods for retrieving panda job ids of merging jobs given a jobDefId ''' from pandatools import Client ick = False status = '' num_mjobs = 0 (ec, info) = Client.checkMergeGenerationStatus(pandaJobDefId) if ec == 0: try: status = info['status'] mergeJobDefIds = info['mergeIDs'] if status == 'NA': logger.warning('No merging jobs expected') job.backend.mergejobs = [] elif status == 'generating': logger.debug('merging jobs are generating') job.backend.mergejobs = [] elif status == 'standby': logger.debug('merging jobs to be created') job.backend.mergejobs = [] elif status == 'generated': logger.debug('merging jobs are generated') for id in mergeJobDefIds: logger.debug("merging jobDefId: %d" % id) ## retrieve merging job id,status given the jobDefId (ec2, mjs) = Client.getPandIDsWithJobID(id) if ec2 == 0: for jid, jinfo in mjs.items(): mjobj = PandaMergeJob() mjobj.id = jid #mjobj.status = jinfo[0] mjobj.url = 'http://panda.cern.ch/?job=%d' % jid if mjobj not in job.backend.mergejobs: job.backend.mergejobs.append(mjobj) else: logger.debug( "merging job %s already exists locally" % mjobj.id) num_mjobs += 1 else: logger.warning( "getPandIDsWithJobID returns non-zero exit code: %d" % ec2) ick = True except KeyError: logger.error('unexpected job information: %s' % repr(info)) except Exception as e: logger.error('general merge job information retrieval error') raise e else: logger.error( 'checkMergeGenerationStatus returns non-zero exit code: %d' % ec) return (ick, status, num_mjobs)