7 |
|
from crab_util import runCommand |
8 |
|
#from WMCore.SiteScreening.BlackWhiteListParser import CEBlackWhiteListParser |
9 |
|
from WMCore.SiteScreening.BlackWhiteListParser import SEBlackWhiteListParser |
10 |
+ |
import Scram |
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
import common |
15 |
|
import os |
16 |
|
import socket |
17 |
+ |
import re |
18 |
|
|
19 |
|
# FUTURE: for python 2.4 & 2.6 |
20 |
|
try: |
33 |
|
def __init__(self): |
34 |
|
SchedulerGrid.__init__(self,"RCONDOR") |
35 |
|
self.rcondorHost = os.getenv('RCONDOR_HOST') |
36 |
+ |
if self.rcondorHost == None: |
37 |
+ |
raise CrabException('FATAL ERROR: env.var RCONDOR_HOST not defined') |
38 |
|
self.datasetPath = None |
39 |
|
self.selectNoInput = None |
40 |
|
self.OSBsize = 50*1000*1000 # 50 MB |
41 |
|
|
42 |
|
self.environment_unique_identifier = None |
43 |
+ |
|
44 |
|
return |
45 |
|
|
46 |
|
|
54 |
|
self.proxyValid=0 |
55 |
|
self.dontCheckProxy=int(cfg_params.get("GRID.dont_check_proxy",0)) |
56 |
|
self.space_token = cfg_params.get("USER.space_token",None) |
57 |
< |
try: |
53 |
< |
self.proxyServer = Downloader("http://cmsdoc.cern.ch/cms/LCG/crab/config/").config("myproxy_server.conf") |
54 |
< |
self.proxyServer = self.proxyServer.strip() |
55 |
< |
if self.proxyServer is None: |
56 |
< |
raise CrabException("myproxy_server.conf retrieved but empty") |
57 |
< |
except Exception, e: |
58 |
< |
common.logger.info("Problem setting myproxy server endpoint: using myproxy.cern.ch") |
59 |
< |
common.logger.debug(e) |
60 |
< |
self.proxyServer= 'myproxy.cern.ch' |
57 |
> |
self.proxyServer= 'myproxy.cern.ch' |
58 |
|
self.group = cfg_params.get("GRID.group", None) |
59 |
|
self.role = cfg_params.get("GRID.role", None) |
60 |
|
self.VO = cfg_params.get('GRID.virtual_organization','cms') |
61 |
< |
|
61 |
> |
|
62 |
|
try: |
63 |
|
tmp = cfg_params['CMSSW.datasetpath'] |
64 |
|
if tmp.lower() == 'none': |
102 |
|
seString=self.blackWhiteListParser.cleanForBlackWhiteList(seDest) |
103 |
|
|
104 |
|
jobParams += '+DESIRED_SEs = "'+seString+'"; ' |
108 |
– |
myschedName = self.rcondorHost |
109 |
– |
jobParams += '+Glidein_MonitorID = "https://'+ myschedName + '//$(Cluster).$(Process)"; ' |
110 |
– |
|
111 |
– |
if (self.EDG_clock_time): |
112 |
– |
jobParams += '+MaxWallTimeMins = '+self.EDG_clock_time+'; ' |
113 |
– |
else: |
114 |
– |
jobParams += '+MaxWallTimeMins = %d; ' % (60*24) |
115 |
– |
|
116 |
– |
common._db.updateTask_({'jobType':jobParams}) |
117 |
– |
|
118 |
– |
|
119 |
– |
return jobParams |
120 |
– |
|
121 |
– |
|
122 |
– |
def realSchedParams(self, cfg_params): |
123 |
– |
""" |
124 |
– |
Return dictionary with specific parameters, to use with real scheduler |
125 |
– |
is called when scheduler is initialized in Boss, i.e. at each crab command |
126 |
– |
""" |
105 |
|
|
106 |
< |
tmpDir = os.path.join(common.work_space.shareDir(),'.condor_temp') |
107 |
< |
tmpDir = os.path.join(common.work_space.shareDir(),'.condor_temp') |
108 |
< |
jobDir = common.work_space.jobDir() |
106 |
> |
scram = Scram.Scram(None) |
107 |
> |
cmsVersion = scram.getSWVersion() |
108 |
> |
scramArch = scram.getArch() |
109 |
> |
|
110 |
> |
cmsver=re.split('_', cmsVersion) |
111 |
> |
numericCmsVersion = "%s%.2d%.2d" %(cmsver[1], int(cmsver[2]), int(cmsver[3])) |
112 |
|
|
113 |
< |
taskDir=common.work_space.topDir().split('/')[-2] |
114 |
< |
rcondorDir ='%s/.rcondor/%s/mount/' % (os.getenv('HOME'),self.rcondorHost) |
113 |
> |
jobParams += '+DESIRED_CMSVersion ="' +cmsVersion+'";' |
114 |
> |
jobParams += '+DESIRED_CMSVersionNr ="' +numericCmsVersion+'";' |
115 |
> |
jobParams += '+DESIRED_CMSScramArch ="' +scramArch+'";' |
116 |
> |
|
117 |
> |
myschedName = self.rcondorHost |
118 |
> |
jobParams += '+Glidein_MonitorID = "https://'+ myschedName + '//$(Cluster).$(Process)"; ' |
119 |
|
|
120 |
|
if (self.EDG_clock_time): |
121 |
|
jobParams += '+MaxWallTimeMins = '+self.EDG_clock_time+'; ' |
133 |
|
Return dictionary with specific parameters, to use with real scheduler |
134 |
|
is called when scheduler is initialized in Boss, i.e. at each crab command |
135 |
|
""" |
136 |
+ |
#SB this method is used to pass directory names to Boss Scheduler |
137 |
+ |
# via params dictionary |
138 |
|
|
152 |
– |
tmpDir = os.path.join(common.work_space.shareDir(),'.condor_temp') |
153 |
– |
tmpDir = os.path.join(common.work_space.shareDir(),'.condor_temp') |
139 |
|
jobDir = common.work_space.jobDir() |
155 |
– |
|
140 |
|
taskDir=common.work_space.topDir().split('/')[-2] |
141 |
< |
rcondorDir ='%s/.rcondor/%s/mount/' % (os.getenv('HOME'),self.rcondorHost) |
142 |
< |
tmpDir = os.path.join(rcondorDir,taskDir) |
159 |
< |
tmpDir = os.path.join(tmpDir,'condor_temp') |
141 |
> |
shareDir = common.work_space.shareDir() |
142 |
> |
#SBtmpDir = common.work_space.tmpDir() |
143 |
|
|
144 |
< |
params = {'tmpDir':tmpDir, |
145 |
< |
'jobDir':jobDir} |
144 |
> |
params = {'rcondorHost':self.rcondorHost, |
145 |
> |
'shareDir':shareDir, |
146 |
> |
#SB'tmpDir':tmpDir, |
147 |
> |
'jobDir':jobDir, |
148 |
> |
'taskDir':taskDir} |
149 |
|
|
150 |
|
return params |
151 |
|
|