107 |
|
|
108 |
|
return |
109 |
|
|
110 |
< |
def createJobs_(self, jobsL): |
110 |
> |
def createJobs_(self, jobsL, isNew=True): |
111 |
|
""" |
112 |
|
Fill crab DB with the jobs filed |
113 |
|
""" |
116 |
|
jobs = [] |
117 |
|
for id in jobsL: |
118 |
|
parameters = {} |
119 |
< |
parameters['jobId'] = str(id) |
119 |
> |
parameters['jobId'] = int(id) |
120 |
> |
parameters['taskId'] = 1 |
121 |
|
parameters['name'] = task['name'] + '_' + 'job' + str(id) |
122 |
|
job = Job(parameters) |
123 |
|
jobs.append(job) |
124 |
|
common.bossSession.getRunningInstance(job) |
125 |
|
job.runningJob['status'] = 'C' |
126 |
< |
task.addJobs(jobs) |
126 |
> |
## added to support second step creation |
127 |
> |
## maybe it is not needed. TO CLARIFY |
128 |
> |
if isNew: |
129 |
> |
task.addJobs(jobs) |
130 |
> |
else: |
131 |
> |
task.appendJobs(jobs) |
132 |
|
try: |
133 |
|
common.bossSession.updateDB( task ) |
134 |
|
except Exception, e : |
321 |
|
def deserXmlStatus(self, reportList): |
322 |
|
|
323 |
|
task = self.getTask() |
318 |
– |
|
324 |
|
for job in task.jobs: |
325 |
|
if not job.runningJob: |
326 |
|
raise CrabException( "Missing running object for job %s"%str(job['jobId']) ) |
327 |
|
|
328 |
|
id = str(job.runningJob['jobId']) |
324 |
– |
# TODO linear search, probably it can be optized with binary search |
329 |
|
rForJ = None |
330 |
+ |
nj_list= [] |
331 |
|
for r in reportList: |
332 |
|
if r.getAttribute('id') in [ id, 'all']: |
333 |
|
rForJ = r |
334 |
|
break |
335 |
+ |
## Check the submission number and create new running jobs on the client side |
336 |
+ |
if int(job.runningJob['submission']) < int(rForJ.getAttribute('resubmit')) + 1: |
337 |
+ |
nj_list.append(id) |
338 |
+ |
self.newRunJobs(nj_list) |
339 |
|
|
340 |
< |
# Data alignment |
332 |
< |
jobStatus = str(job.runningJob['statusScheduler']) |
333 |
< |
if rForJ.getAttribute('statusScheduler') not in ['Created', 'Submitting', 'Unknown'] and \ |
334 |
< |
job.runningJob['statusScheduler'] != 'Cleared': |
335 |
< |
job.runningJob['statusScheduler'] = str( rForJ.getAttribute('status') ) |
336 |
< |
jobStatus = str(job.runningJob['statusScheduler']) |
337 |
< |
job.runningJob['status'] = str( rForJ.getAttribute('sched_status') ) |
338 |
< |
|
339 |
< |
job.runningJob['destination'] = str( rForJ.getAttribute('site') ) |
340 |
< |
dest = str(job.runningJob['destination']).split(':')[0] |
341 |
< |
|
342 |
< |
job.runningJob['applicationReturnCode'] = str( rForJ.getAttribute('exe_exit') ) |
343 |
< |
exe_exit_code = str(job.runningJob['applicationReturnCode']) |
344 |
< |
|
345 |
< |
job.runningJob['wrapperReturnCode'] = str( rForJ.getAttribute('job_exit') ) |
346 |
< |
job_exit_code = str(job.runningJob['wrapperReturnCode']) |
347 |
< |
|
348 |
< |
#if str( rForJ.getAttribute('resubmit') ).isdigit(): |
349 |
< |
# job['submissionNumber'] = int(rForJ.getAttribute('resubmit')) |
350 |
< |
# job.runningJob['submission'] = int(rForJ.getAttribute('resubmit')) |
340 |
> |
task_new = self.getTask() |
341 |
|
|
342 |
< |
# TODO cleared='0' field, how should it be handled/mapped in BL? #Fabio |
342 |
> |
for job in task_new.jobs: |
343 |
> |
id = str(job.runningJob['jobId']) |
344 |
> |
# TODO linear search, probably it can be optized with binary search |
345 |
> |
rForJ = None |
346 |
> |
for r in reportList: |
347 |
> |
if r.getAttribute('id') in [ id, 'all']: |
348 |
> |
rForJ = r |
349 |
> |
break |
350 |
> |
|
351 |
> |
# Data alignment |
352 |
> |
if str(job.runningJob['status']) != 'EE': |
353 |
> |
if rForJ.getAttribute('status') not in ['Created', 'Submitting', 'Unknown'] and \ |
354 |
> |
job.runningJob['statusScheduler'] != 'Cleared' and \ |
355 |
> |
not (job.runningJob['statusScheduler'] == 'Killing' and rForJ.getAttribute('statusScheduler')!='Killed'): |
356 |
> |
# update the status |
357 |
> |
common.logger.debug(3,"Updating DB status for job: " + str(id) + " @: " \ |
358 |
> |
+ str(rForJ.getAttribute('status')) ) |
359 |
> |
job.runningJob['statusScheduler'] = str( rForJ.getAttribute('status') ) |
360 |
> |
job.runningJob['status'] = str( rForJ.getAttribute('sched_status') ) |
361 |
> |
|
362 |
> |
job.runningJob['destination'] = str( rForJ.getAttribute('site') ) |
363 |
> |
dest = str(job.runningJob['destination']).split(':')[0] |
364 |
> |
|
365 |
> |
job.runningJob['applicationReturnCode'] = str( rForJ.getAttribute('exe_exit') ) |
366 |
> |
exe_exit_code = str(job.runningJob['applicationReturnCode']) |
367 |
> |
|
368 |
> |
job.runningJob['wrapperReturnCode'] = str( rForJ.getAttribute('job_exit') ) |
369 |
> |
job_exit_code = str(job.runningJob['wrapperReturnCode']) |
370 |
> |
|
371 |
> |
#if str( rForJ.getAttribute('resubmit') ).isdigit(): |
372 |
> |
# job['submissionNumber'] = int(rForJ.getAttribute('resubmit')) |
373 |
> |
# job.runningJob['submission'] = int(rForJ.getAttribute('resubmit')) |
374 |
> |
|
375 |
> |
# TODO cleared='0' field, how should it be handled/mapped in BL? #Fabio |
376 |
|
|
377 |
< |
common.bossSession.updateDB( task ) |
377 |
> |
common.bossSession.updateDB( task_new ) |
378 |
|
return |
379 |
|
|
380 |
|
# FIXME temporary method to verify what kind of submission to perform towards the server |