1 |
< |
from SchedulerCondorCommon import SchedulerCondorCommon |
2 |
< |
import common |
1 |
> |
#!/usr/bin/env python |
2 |
> |
""" |
3 |
> |
_SchedulerGlidein_ |
4 |
> |
""" |
5 |
|
|
6 |
|
__revision__ = "$Id$" |
7 |
|
__version__ = "$Revision$" |
8 |
|
|
9 |
< |
class SchedulerGlidein(SchedulerCondorCommon): |
10 |
< |
def __init__(self): |
9 |
< |
SchedulerCondorCommon.__init__(self,"GLIDEIN") |
10 |
< |
return |
11 |
< |
|
12 |
< |
def sched_parameter(self,i,task): |
13 |
< |
""" |
14 |
< |
Return scheduler-specific parameters |
15 |
< |
""" |
16 |
< |
jobParams = SchedulerCondorCommon.sched_parameter(self,i,task) |
17 |
< |
|
18 |
< |
ceDest = self.seListToCElist(task.jobs[i-1]['dlsDestination'], onlyOSG=False) |
19 |
< |
ceString = ','.join(ceDest) |
20 |
< |
|
21 |
< |
jobParams += '+DESIRED_Gatekeepers = "'+ceString+'"; ' |
22 |
< |
jobParams += '+DESIRED_Archs = "INTEL,X86_64"; ' |
23 |
< |
jobParams += "Requirements = stringListMember(GLIDEIN_Gatekeeper,DESIRED_Gatekeepers) && stringListMember(Arch,DESIRED_Archs); " |
24 |
< |
if (self.EDG_clock_time): |
25 |
< |
jobParams += '+MaxWallTimeMins = '+self.EDG_clock_time+'; ' |
9 |
> |
from ProdCommon.BossLite.Scheduler.SchedulerCondorCommon import SchedulerCondorCommon |
10 |
> |
import os |
11 |
|
|
12 |
< |
common._db.updateTask_({'jobType':jobParams}) |
13 |
< |
return jobParams # Not sure I even need to return anything |
12 |
> |
class SchedulerGlidein(SchedulerCondorCommon) : |
13 |
> |
""" |
14 |
> |
basic class to handle glite jobs through wmproxy API |
15 |
> |
""" |
16 |
> |
def __init__( self, **args ): |
17 |
> |
|
18 |
> |
# call super class init method |
19 |
> |
super(SchedulerGlidein, self).__init__(**args) |
20 |
> |
|
21 |
> |
def singleApiJdl( self, job, requirements='' ): |
22 |
> |
""" |
23 |
> |
build a job jdl easy to be handled by the wmproxy API interface |
24 |
> |
and gives back the list of input files for a better handling |
25 |
> |
""" |
26 |
> |
|
27 |
> |
jdl = 'Universe = vanilla\n' |
28 |
> |
superJdl, filelist, ce \ |
29 |
> |
= super(SchedulerGlidein, self).singleApiJdl(job, requirements) |
30 |
> |
jdl += superJdl |
31 |
> |
|
32 |
> |
x509 = None |
33 |
> |
x509tmp = '/tmp/x509up_u'+str(os.getuid()) |
34 |
> |
if 'X509_USER_PROXY' in os.environ: |
35 |
> |
x509 = os.environ['X509_USER_PROXY'] |
36 |
> |
elif os.path.isfile(x509tmp): |
37 |
> |
x509 = x509tmp |
38 |
> |
|
39 |
> |
if x509: |
40 |
> |
jdl += 'x509userproxy = %s\n' % x509 |
41 |
> |
|
42 |
> |
# Glidein parameters |
43 |
> |
jdl += 'Environment = JobRunCount=$$([ GJobRunCount ])\n' |
44 |
> |
jdl += '+GJobRunCount=ifThenElse(isUndefined(JobRunCount),0,JobRunCount)\n' |
45 |
> |
jdl += '+JOB_Site = "$$(GLIDEIN_Site:Unknown)" \n' |
46 |
> |
jdl += '+JOB_VM = "$$(Name:Unknown)" \n' |
47 |
> |
#jdl += '+JOB_Machine_KFlops = \"\$\$(KFlops:Unknown)\" \n"); |
48 |
> |
#jdl += '+JOB_Machine_Mips = \"\$\$(Mips:Unknown)\" \n"); |
49 |
> |
jdl += '+JOB_GLIDEIN_Schedd = "$$(GLIDEIN_Schedd:Unknown)" \n' |
50 |
> |
jdl += '+JOB_GLIDEIN_ClusterId = "$$(GLIDEIN_ClusterId:Unknown)" \n' |
51 |
> |
jdl += '+JOB_GLIDEIN_ProcId = "$$(GLIDEIN_ProcId:Unknown)" \n' |
52 |
> |
jdl += '+JOB_GLIDEIN_Factory = "$$(GLIDEIN_Factory:Unknown)" \n' |
53 |
> |
jdl += '+JOB_GLIDEIN_Name = "$$(GLIDEIN_Name:Unknown)" \n' |
54 |
> |
jdl += '+JOB_GLIDEIN_Frontend = "$$(GLIDEIN_Client:Unknown)" \n' |
55 |
> |
jdl += '+JOB_Gatekeeper = "$$(GLIDEIN_Gatekeeper:Unknown)" \n' |
56 |
> |
jdl += '+JOB_GridType = "$$(GLIDEIN_GridType:Unknown)" \n' |
57 |
> |
jdl += '+JOB_GlobusRSL = "$$(GLIDEIN_GlobusRSL:Unknown)" \n' |
58 |
> |
jdl += 'since=(CurrentTime-EnteredCurrentStatus)\n' |
59 |
> |
jdl += 'Periodic_Remove = (((JobStatus == 2) && ((CurrentTime - JobCurrentStartDate) > (MaxWallTimeMins*60))) =?= True) || ' |
60 |
> |
jdl += '(JobStatus==5 && $(since)>691200) || (JobStatus==1 && $(since)>691200)\n' |
61 |
> |
|
62 |
> |
|
63 |
> |
return jdl, filelist, 'Unknown' |