ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/SchedulerEdg.py
Revision: 1.121
Committed: Mon Jun 25 14:21:56 2007 UTC (17 years, 10 months ago) by spiga
Content type: text/x-python
Branch: MAIN
Changes since 1.120: +5 -0 lines
Log Message:
added def submitTout which retoun the timeout value

File Contents

# User Rev Content
1 nsmirnov 1.1 from Scheduler import Scheduler
2     from crab_logger import Logger
3     from crab_exceptions import *
4     from crab_util import *
5 slacapra 1.50 from EdgConfig import *
6 nsmirnov 1.1 import common
7    
8 slacapra 1.113 import os, sys, time
9 nsmirnov 1.1
10     class SchedulerEdg(Scheduler):
11     def __init__(self):
12     Scheduler.__init__(self,"EDG")
13 slacapra 1.8 self.states = [ "Acl", "cancelReason", "cancelling","ce_node","children", \
14     "children_hist","children_num","children_states","condorId","condor_jdl", \
15     "cpuTime","destination", "done_code","exit_code","expectFrom", \
16     "expectUpdate","globusId","jdl","jobId","jobtype", \
17     "lastUpdateTime","localId","location", "matched_jdl","network_server", \
18     "owner","parent_job", "reason","resubmitted","rsl","seed",\
19     "stateEnterTime","stateEnterTimes","subjob_failed", \
20     "user tags" , "status" , "status_code","hierarchy"]
21 slacapra 1.103
22 nsmirnov 1.1 return
23    
24     def configure(self, cfg_params):
25 spiga 1.49
26 slacapra 1.46 try:
27 fanzago 1.99 RB=cfg_params["EDG.rb"]
28     self.rb_param_file=self.rb_configure(RB)
29 slacapra 1.46 except KeyError:
30 fanzago 1.99 self.rb_param_file=''
31     pass
32 slacapra 1.51 try:
33     self.proxyServer = cfg_params["EDG.proxy_server"]
34     except KeyError:
35     self.proxyServer = 'myproxy.cern.ch'
36     common.logger.debug(5,'Setting myproxy server to '+self.proxyServer)
37 spiga 1.49
38 slacapra 1.79 try:
39 spiga 1.91 self.group = cfg_params["EDG.group"]
40     except KeyError:
41     self.group = None
42    
43     try:
44 slacapra 1.79 self.role = cfg_params["EDG.role"]
45     except KeyError:
46     self.role = None
47    
48 nsmirnov 1.1 try: self.LCG_version = cfg_params["EDG.lcg_version"]
49     except KeyError: self.LCG_version = '2'
50    
51 fanzago 1.48 try:
52     self.EDG_ce_black_list = cfg_params['EDG.ce_black_list']
53     except KeyError:
54     self.EDG_ce_black_list = ''
55    
56     try:
57     self.EDG_ce_white_list = cfg_params['EDG.ce_white_list']
58     except KeyError: self.EDG_ce_white_list = ''
59    
60 fanzago 1.14 try: self.VO = cfg_params['EDG.virtual_organization']
61     except KeyError: self.VO = 'cms'
62    
63 slacapra 1.102 try: self.copy_input_data = cfg_params["USER.copy_input_data"]
64     except KeyError: self.copy_input_data = 0
65    
66 spiga 1.49 try: self.return_data = cfg_params['USER.return_data']
67 spiga 1.91 except KeyError: self.return_data = 0
68    
69 fanzago 1.14 try:
70     self.copy_data = cfg_params["USER.copy_data"]
71 fanzago 1.30 if int(self.copy_data) == 1:
72     try:
73     self.SE = cfg_params['USER.storage_element']
74     self.SE_PATH = cfg_params['USER.storage_path']
75     except KeyError:
76     msg = "Error. The [USER] section does not have 'storage_element'"
77     msg = msg + " and/or 'storage_path' entries, necessary to copy the output"
78     common.logger.message(msg)
79     raise CrabException(msg)
80     except KeyError: self.copy_data = 0
81    
82     if ( int(self.return_data) == 0 and int(self.copy_data) == 0 ):
83     msg = 'Warning: return_data = 0 and copy_data = 0 ==> your exe output will be lost\n'
84 slacapra 1.118 msg = msg + 'Please modify return_data or copy_data value in your crab.cfg file\n'
85     raise CrabException(msg)
86    
87     if ( int(self.return_data) == 1 and int(self.copy_data) == 1 ):
88     msg = 'Warning: return_data = 1 and copy_data = 1\n'
89     msg = msg + 'Please modify return_data or copy_data value in your crab.cfg file\n'
90 fanzago 1.30 raise CrabException(msg)
91 fanzago 1.38
92 fanzago 1.119 ########### FEDE FOR DBS2 ##############################
93     try:
94     self.publish_data = cfg_params["USER.publish_data"]
95     if int(self.publish_data) == 1:
96     try:
97     self.publish_data_name = cfg_params['USER.publish_data_name']
98     except KeyError:
99     msg = "Error. The [USER] section does not have 'publish_data_name'"
100     common.logger.message(msg)
101     raise CrabException(msg)
102     except KeyError: self.publish_data = 0
103    
104     if ( int(self.copy_data) == 0 and int(self.publish_data) == 1 ):
105     msg = 'Warning: publish_data = 1 must be used with copy_data = 1\n'
106     msg = msg + 'Please modify copy_data value in your crab.cfg file\n'
107     common.logger.message(msg)
108     raise CrabException(msg)
109     #################################################
110 fanzago 1.38 try:
111     self.lfc_host = cfg_params['EDG.lfc_host']
112     except KeyError:
113     msg = "Error. The [EDG] section does not have 'lfc_host' value"
114     msg = msg + " it's necessary to know the LFC host name"
115     common.logger.message(msg)
116     raise CrabException(msg)
117     try:
118     self.lcg_catalog_type = cfg_params['EDG.lcg_catalog_type']
119     except KeyError:
120     msg = "Error. The [EDG] section does not have 'lcg_catalog_type' value"
121     msg = msg + " it's necessary to know the catalog type"
122     common.logger.message(msg)
123     raise CrabException(msg)
124     try:
125     self.lfc_home = cfg_params['EDG.lfc_home']
126     except KeyError:
127     msg = "Error. The [EDG] section does not have 'lfc_home' value"
128     msg = msg + " it's necessary to know the home catalog dir"
129     common.logger.message(msg)
130     raise CrabException(msg)
131 fanzago 1.30
132 fanzago 1.14 try:
133     self.register_data = cfg_params["USER.register_data"]
134 fanzago 1.30 if int(self.register_data) == 1:
135     try:
136     self.LFN = cfg_params['USER.lfn_dir']
137     except KeyError:
138     msg = "Error. The [USER] section does not have 'lfn_dir' value"
139 fanzago 1.36 msg = msg + " it's necessary for LCF registration"
140 fanzago 1.30 common.logger.message(msg)
141     raise CrabException(msg)
142     except KeyError: self.register_data = 0
143    
144     if ( int(self.copy_data) == 0 and int(self.register_data) == 1 ):
145     msg = 'Warning: register_data = 1 must be used with copy_data = 1\n'
146     msg = msg + 'Please modify copy_data value in your crab.cfg file\n'
147     common.logger.message(msg)
148     raise CrabException(msg)
149 fanzago 1.14
150     try: self.EDG_requirements = cfg_params['EDG.requirements']
151     except KeyError: self.EDG_requirements = ''
152 slacapra 1.97
153 slacapra 1.101 try: self.EDG_addJdlParam = string.split(cfg_params['EDG.additional_jdl_parameters'],',')
154     except KeyError: self.EDG_addJdlParam = []
155    
156 fanzago 1.14 try: self.EDG_retry_count = cfg_params['EDG.retry_count']
157     except KeyError: self.EDG_retry_count = ''
158 slacapra 1.97
159     try: self.EDG_shallow_retry_count= cfg_params['EDG.shallow_retry_count']
160     except KeyError: self.EDG_shallow_retry_count = ''
161    
162 fanzago 1.14 try: self.EDG_clock_time = cfg_params['EDG.max_wall_clock_time']
163     except KeyError: self.EDG_clock_time= ''
164 slacapra 1.97
165 fanzago 1.14 try: self.EDG_cpu_time = cfg_params['EDG.max_cpu_time']
166     except KeyError: self.EDG_cpu_time = ''
167    
168 fanzago 1.16 # Add EDG_WL_LOCATION to the python path
169    
170     try:
171     path = os.environ['EDG_WL_LOCATION']
172     except:
173     msg = "Error: the EDG_WL_LOCATION variable is not set."
174     raise CrabException(msg)
175    
176     libPath=os.path.join(path, "lib")
177     sys.path.append(libPath)
178     libPath=os.path.join(path, "lib", "python")
179     sys.path.append(libPath)
180 nsmirnov 1.1
181 slacapra 1.18 self.proxyValid=0
182 gutsche 1.60
183 slacapra 1.61 try:
184     self._taskId = cfg_params['taskId']
185     except:
186     self._taskId = ''
187 gutsche 1.60
188 slacapra 1.81 try: self.jobtypeName = cfg_params['CRAB.jobtype']
189     except KeyError: self.jobtypeName = ''
190    
191     try: self.schedulerName = cfg_params['CRAB.scheduler']
192     except KeyError: self.scheduler = ''
193    
194 slacapra 1.103 try: self.dontCheckProxy=cfg_params["EDG.dont_check_proxy"]
195     except KeyError: self.dontCheckProxy = 0
196    
197 nsmirnov 1.1 return
198    
199 fanzago 1.10
200 fanzago 1.99 def rb_configure(self, RB):
201     self.edg_config = ''
202     self.edg_config_vo = ''
203     self.rb_param_file = ''
204    
205     edgConfig = EdgConfig(RB)
206     self.edg_config = edgConfig.config()
207     self.edg_config_vo = edgConfig.configVO()
208    
209     if (self.edg_config and self.edg_config_vo != ''):
210     self.rb_param_file = 'RBconfig = "'+self.edg_config+'";\nRBconfigVO = "'+self.edg_config_vo+'";'
211 fanzago 1.100 #print "rb_param_file = ", self.rb_param_file
212 fanzago 1.99 return self.rb_param_file
213    
214    
215 fanzago 1.10 def sched_parameter(self):
216     """
217 spiga 1.88 Returns file with requirements and scheduler-specific parameters
218 fanzago 1.10 """
219 spiga 1.88 index = int(common.jobDB.nJobs()) - 1
220     job = common.job_list[index]
221     jbt = job.type()
222    
223 slacapra 1.95 lastBlock=-1
224 spiga 1.88 first = []
225     for n in range(common.jobDB.nJobs()):
226 slacapra 1.95 currBlock=common.jobDB.block(n)
227     if (currBlock!=lastBlock):
228     lastBlock = currBlock
229 spiga 1.88 first.append(n)
230    
231     req = ''
232     req = req + jbt.getRequirements()
233    
234     if self.EDG_requirements:
235     if (req == ' '):
236     req = req + self.EDG_requirements
237     else:
238     req = req + ' && ' + self.EDG_requirements
239 slacapra 1.95
240 spiga 1.88 if self.EDG_ce_white_list:
241     ce_white_list = string.split(self.EDG_ce_white_list,',')
242     for i in range(len(ce_white_list)):
243     if i == 0:
244     if (req == ' '):
245 spiga 1.106 req = req + '((RegExp("' + string.strip(ce_white_list[i]) + '", other.GlueCEUniqueId))'
246 spiga 1.88 else:
247 spiga 1.106 req = req + ' && ((RegExp("' + string.strip(ce_white_list[i]) + '", other.GlueCEUniqueId))'
248 spiga 1.88 pass
249     else:
250 spiga 1.106 req = req + ' || (RegExp("' + string.strip(ce_white_list[i]) + '", other.GlueCEUniqueId))'
251 spiga 1.88 req = req + ')'
252    
253     if self.EDG_ce_black_list:
254     ce_black_list = string.split(self.EDG_ce_black_list,',')
255     for ce in ce_black_list:
256     if (req == ' '):
257 spiga 1.106 req = req + '(!RegExp("' + string.strip(ce) + '", other.GlueCEUniqueId))'
258 spiga 1.88 else:
259 spiga 1.106 req = req + ' && (!RegExp("' + string.strip(ce) + '", other.GlueCEUniqueId))'
260 spiga 1.88 pass
261     if self.EDG_clock_time:
262     if (req == ' '):
263     req = req + 'other.GlueCEPolicyMaxWallClockTime>='+self.EDG_clock_time
264     else:
265     req = req + ' && other.GlueCEPolicyMaxWallClockTime>='+self.EDG_clock_time
266    
267     if self.EDG_cpu_time:
268     if (req == ' '):
269     req = req + ' other.GlueCEPolicyMaxCPUTime>='+self.EDG_cpu_time
270     else:
271     req = req + ' && other.GlueCEPolicyMaxCPUTime>='+self.EDG_cpu_time
272    
273     for i in range(len(first)): # Add loop DS
274 spiga 1.110 groupReq = req
275 spiga 1.88 self.param='sched_param_'+str(i)+'.clad'
276 fanzago 1.10 param_file = open(common.work_space.shareDir()+'/'+self.param, 'w')
277 spiga 1.88
278     itr4=self.findSites_(first[i])
279 slacapra 1.95 for arg in itr4:
280 spiga 1.110 groupReq = groupReq + ' && anyMatch(other.storage.CloseSEs, ('+str(arg)+'))'
281     param_file.write('Requirements = '+groupReq +';\n')
282 spiga 1.88
283 fanzago 1.99 if (self.rb_param_file != ''):
284     param_file.write(self.rb_param_file)
285 spiga 1.88
286 slacapra 1.101 if len(self.EDG_addJdlParam):
287     for p in self.EDG_addJdlParam:
288     param_file.write(p)
289    
290 fanzago 1.10 param_file.close()
291 spiga 1.88
292 fanzago 1.13
293 nsmirnov 1.2 def wsSetupEnvironment(self):
294     """
295     Returns part of a job script which does scheduler-specific work.
296     """
297 spiga 1.49 txt = ''
298 mkirn 1.75 txt += '# strip arguments\n'
299     txt += 'echo "strip arguments"\n'
300     txt += 'args=("$@")\n'
301     txt += 'nargs=$#\n'
302     txt += 'shift $nargs\n'
303 gutsche 1.60 txt += "# job number (first parameter for job wrapper)\n"
304 mkirn 1.75 #txt += "NJob=$1\n"
305     txt += "NJob=${args[0]}\n"
306 gutsche 1.60
307     txt += '# job identification to DashBoard \n'
308 gutsche 1.64 txt += 'MonitorJobID=`echo ${NJob}_$EDG_WL_JOBID`\n'
309     txt += 'SyncGridJobId=`echo $EDG_WL_JOBID`\n'
310     txt += 'MonitorID=`echo ' + self._taskId + '`\n'
311     txt += 'echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
312     txt += 'echo "SyncGridJobId=`echo $SyncGridJobId`" | tee -a $RUNTIME_AREA/$repo \n'
313     txt += 'echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
314 gutsche 1.60
315 spiga 1.49 txt += 'echo "middleware discovery " \n'
316 gutsche 1.84 txt += 'if [ $GRID3_APP_DIR ]; then\n'
317 spiga 1.49 txt += ' middleware=OSG \n'
318 gutsche 1.60 txt += ' echo "SyncCE=`echo $EDG_WL_LOG_DESTINATION`" | tee -a $RUNTIME_AREA/$repo \n'
319     txt += ' echo "GridFlavour=`echo $middleware`" | tee -a $RUNTIME_AREA/$repo \n'
320 spiga 1.49 txt += ' echo "middleware =$middleware" \n'
321     txt += 'elif [ $OSG_APP ]; then \n'
322     txt += ' middleware=OSG \n'
323 gutsche 1.60 txt += ' echo "SyncCE=`echo $EDG_WL_LOG_DESTINATION`" | tee -a $RUNTIME_AREA/$repo \n'
324     txt += ' echo "GridFlavour=`echo $middleware`" | tee -a $RUNTIME_AREA/$repo \n'
325 spiga 1.49 txt += ' echo "middleware =$middleware" \n'
326 gutsche 1.84 txt += 'elif [ $VO_CMS_SW_DIR ]; then \n'
327     txt += ' middleware=LCG \n'
328     txt += ' echo "SyncCE=`edg-brokerinfo getCE`" | tee -a $RUNTIME_AREA/$repo \n'
329     txt += ' echo "GridFlavour=`echo $middleware`" | tee -a $RUNTIME_AREA/$repo \n'
330     txt += ' echo "middleware =$middleware" \n'
331 spiga 1.49 txt += 'else \n'
332 gutsche 1.60 txt += ' echo "SET_CMS_ENV 10030 ==> middleware not identified" \n'
333     txt += ' echo "JOB_EXIT_STATUS = 10030" \n'
334     txt += ' echo "JobExitCode=10030" | tee -a $RUNTIME_AREA/$repo \n'
335     txt += ' dumpStatus $RUNTIME_AREA/$repo \n'
336 gutsche 1.64 txt += ' rm -f $RUNTIME_AREA/$repo \n'
337     txt += ' echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
338     txt += ' echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
339 gutsche 1.60 txt += ' exit 1 \n'
340     txt += 'fi \n'
341    
342     txt += '# report first time to DashBoard \n'
343     txt += 'dumpStatus $RUNTIME_AREA/$repo \n'
344 gutsche 1.64 txt += 'rm -f $RUNTIME_AREA/$repo \n'
345     txt += 'echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
346     txt += 'echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
347    
348 spiga 1.49 txt += '\n\n'
349    
350 fanzago 1.119 # if int(self.copy_data) == 1:
351     # if self.SE:
352     # txt += 'export SE='+self.SE+'\n'
353     # txt += 'echo "SE = $SE"\n'
354     # if self.SE_PATH:
355     # if ( self.SE_PATH[-1] != '/' ) : self.SE_PATH = self.SE_PATH + '/'
356     # txt += 'export SE_PATH='+self.SE_PATH+'\n'
357     # txt += 'echo "SE_PATH = $SE_PATH"\n'
358 spiga 1.49
359 fanzago 1.38 txt += 'export VO='+self.VO+'\n'
360 spiga 1.88 ### add some line for LFC catalog setting
361 spiga 1.49 txt += 'if [ $middleware == LCG ]; then \n'
362     txt += ' if [[ $LCG_CATALOG_TYPE != \''+self.lcg_catalog_type+'\' ]]; then\n'
363     txt += ' export LCG_CATALOG_TYPE='+self.lcg_catalog_type+'\n'
364     txt += ' fi\n'
365     txt += ' if [[ $LFC_HOST != \''+self.lfc_host+'\' ]]; then\n'
366     txt += ' export LFC_HOST='+self.lfc_host+'\n'
367     txt += ' fi\n'
368     txt += ' if [[ $LFC_HOME != \''+self.lfc_home+'\' ]]; then\n'
369     txt += ' export LFC_HOME='+self.lfc_home+'\n'
370     txt += ' fi\n'
371     txt += 'elif [ $middleware == OSG ]; then\n'
372     txt += ' echo "LFC catalog setting to be implemented for OSG"\n'
373 fanzago 1.38 txt += 'fi\n'
374     #####
375 fanzago 1.30 if int(self.register_data) == 1:
376 spiga 1.49 txt += 'if [ $middleware == LCG ]; then \n'
377     txt += ' export LFN='+self.LFN+'\n'
378     txt += ' lfc-ls $LFN\n'
379     txt += ' result=$?\n'
380     txt += ' echo $result\n'
381 fanzago 1.36 ### creation of LFN dir in LFC catalog, under /grid/cms dir
382 spiga 1.49 txt += ' if [ $result != 0 ]; then\n'
383     txt += ' lfc-mkdir $LFN\n'
384     txt += ' result=$?\n'
385     txt += ' echo $result\n'
386     txt += ' fi\n'
387     txt += 'elif [ $middleware == OSG ]; then\n'
388     txt += ' echo " Files registration to be implemented for OSG"\n'
389 fanzago 1.36 txt += 'fi\n'
390     txt += '\n'
391 spiga 1.49
392     if self.VO:
393     txt += 'export VO='+self.VO+'\n'
394     if self.LFN:
395     txt += 'if [ $middleware == LCG ]; then \n'
396     txt += ' export LFN='+self.LFN+'\n'
397     txt += 'fi\n'
398     txt += '\n'
399    
400     txt += 'if [ $middleware == LCG ]; then\n'
401     txt += ' CloseCEs=`edg-brokerinfo getCE`\n'
402     txt += ' echo "CloseCEs = $CloseCEs"\n'
403     txt += ' CE=`echo $CloseCEs | sed -e "s/:.*//"`\n'
404     txt += ' echo "CE = $CE"\n'
405     txt += 'elif [ $middleware == OSG ]; then \n'
406     txt += ' if [ $OSG_JOB_CONTACT ]; then \n'
407 slacapra 1.81 txt += ' CE=`echo $OSG_JOB_CONTACT | /usr/bin/awk -F\/ \'{print $1}\'` \n'
408 spiga 1.49 txt += ' else \n'
409 gutsche 1.60 txt += ' echo "SET_CMS_ENV 10099 ==> OSG mode: ERROR in setting CE name from OSG_JOB_CONTACT" \n'
410     txt += ' echo "JOB_EXIT_STATUS = 10099" \n'
411     txt += ' echo "JobExitCode=10099" | tee -a $RUNTIME_AREA/$repo \n'
412     txt += ' dumpStatus $RUNTIME_AREA/$repo \n'
413 gutsche 1.64 txt += ' rm -f $RUNTIME_AREA/$repo \n'
414     txt += ' echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
415     txt += ' echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
416 spiga 1.49 txt += ' exit 1 \n'
417     txt += ' fi \n'
418     txt += 'fi \n'
419    
420 nsmirnov 1.2 return txt
421 fanzago 1.15
422 fanzago 1.39 def wsCopyInput(self):
423     """
424     Copy input data from SE to WN
425     """
426     txt = ''
427 slacapra 1.102 if not self.copy_input_data: return txt
428 slacapra 1.90
429 spiga 1.49 ## OLI_Daniele deactivate for OSG (wait for LCG UI installed on OSG)
430 slacapra 1.92 txt += 'if [ $middleware == OSG ]; then\n'
431     txt += ' #\n'
432     txt += ' # Copy Input Data from SE to this WN deactivated in OSG mode\n'
433     txt += ' #\n'
434     txt += ' echo "Copy Input Data from SE to this WN deactivated in OSG mode"\n'
435     txt += 'elif [ $middleware == LCG ]; then \n'
436     txt += ' #\n'
437     txt += ' # Copy Input Data from SE to this WN\n'
438     txt += ' #\n'
439     ### changed by georgia (put a loop copying more than one input files per jobs)
440     txt += ' for input_file in $cur_file_list \n'
441     txt += ' do \n'
442     txt += ' lcg-cp --vo $VO --verbose -t 1200 lfn:$input_lfn/$input_file file:`pwd`/$input_file 2>&1\n'
443     txt += ' copy_input_exit_status=$?\n'
444     txt += ' echo "COPY_INPUT_EXIT_STATUS = $copy_input_exit_status"\n'
445     txt += ' if [ $copy_input_exit_status -ne 0 ]; then \n'
446     txt += ' echo "Problems with copying to WN" \n'
447     txt += ' else \n'
448     txt += ' echo "input copied into WN" \n'
449     txt += ' fi \n'
450     txt += ' done \n'
451     ### copy a set of PU ntuples (same for each jobs -- but accessed randomly)
452     txt += ' for file in $cur_pu_list \n'
453     txt += ' do \n'
454     txt += ' lcg-cp --vo $VO --verbose -t 1200 lfn:$pu_lfn/$file file:`pwd`/$file 2>&1\n'
455     txt += ' copy_input_pu_exit_status=$?\n'
456     txt += ' echo "COPY_INPUT_PU_EXIT_STATUS = $copy_input_pu_exit_status"\n'
457     txt += ' if [ $copy_input_pu_exit_status -ne 0 ]; then \n'
458     txt += ' echo "Problems with copying pu to WN" \n'
459     txt += ' else \n'
460     txt += ' echo "input pu files copied into WN" \n'
461     txt += ' fi \n'
462     txt += ' done \n'
463     txt += ' \n'
464     txt += ' ### Check SCRATCH space available on WN : \n'
465     txt += ' df -h \n'
466     txt += 'fi \n'
467 spiga 1.49
468 fanzago 1.39 return txt
469    
470 fanzago 1.14 def wsCopyOutput(self):
471     """
472     Write a CopyResults part of a job script, e.g.
473     to copy produced output into a storage element.
474     """
475     txt = ''
476 fanzago 1.119
477     ##### FEDE MOVED FROM SET_ENVIRONMENT ##############
478    
479     SE_PATH=''
480 fanzago 1.30 if int(self.copy_data) == 1:
481 fanzago 1.119 if self.SE:
482     txt += 'export SE='+self.SE+'\n'
483     txt += 'echo "SE = $SE"\n'
484     if self.SE_PATH:
485     if ( self.SE_PATH[-1] != '/' ) : self.SE_PATH = self.SE_PATH + '/'
486     SE_PATH=self.SE_PATH
487     ####### FEDE FOR DBS2
488     if int(self.publish_data) == 1:
489     txt += '### publish_data = 1 so the SE path where to copy the output is: \n'
490     txt += 'subject=`voms-proxy-info -subject | awk -F\'CN\' \'{print $2$3$4}\' | tr -d \'=/ \'` \n'
491     txt += 'echo "subject = $subject" \n'
492    
493     path_add = '${subject}/'+ self.publish_data_name +'_${PSETHASH}/'
494     SE_PATH = SE_PATH + path_add
495    
496     txt += 'export SE_PATH='+SE_PATH+'\n'
497     txt += 'echo "SE_PATH = $SE_PATH"\n'
498    
499     ##########################################################
500    
501     #if int(self.copy_data) == 1:
502 fanzago 1.14 txt += '#\n'
503 fanzago 1.15 txt += '# Copy output to SE = $SE\n'
504 fanzago 1.14 txt += '#\n'
505 gutsche 1.73 txt += ' if [ $middleware == OSG ]; then\n'
506     txt += ' echo "X509_USER_PROXY = $X509_USER_PROXY"\n'
507     txt += ' echo "source $OSG_APP/glite/setup_glite_ui.sh"\n'
508     txt += ' source $OSG_APP/glite/setup_glite_ui.sh\n'
509     txt += ' export X509_CERT_DIR=$OSG_APP/glite/etc/grid-security/certificates\n'
510     txt += ' echo "export X509_CERT_DIR=$X509_CERT_DIR"\n'
511     txt += ' fi \n'
512 spiga 1.91
513 corvo 1.34 txt += ' for out_file in $file_list ; do\n'
514 spiga 1.91 txt += ' echo "Trying to copy output file to $SE using srmcp"\n'
515     txt += ' echo "mkdir -p $HOME/.srmconfig"\n'
516     txt += ' mkdir -p $HOME/.srmconfig\n'
517     txt += ' if [ $middleware == LCG ]; then\n'
518     txt += ' echo "srmcp -retry_num 3 -retry_timeout 480000 file:////`pwd`/$out_file srm://${SE}:8443${SE_PATH}$out_file"\n'
519     txt += ' exitstring=`srmcp -retry_num 3 -retry_timeout 480000 file:////\`pwd\`/$out_file srm://${SE}:8443${SE_PATH}$out_file 2>&1`\n'
520     txt += ' elif [ $middleware == OSG ]; then\n'
521     txt += ' echo "srmcp -retry_num 3 -retry_timeout 240000 -x509_user_trusted_certificates $X509_CERT_DIR file:////`pwd`/$out_file srm://${SE}:8443${SE_PATH}$out_file"\n'
522     txt += ' exitstring=`srmcp -retry_num 3 -retry_timeout 240000 -x509_user_trusted_certificates $X509_CERT_DIR file:////\`pwd\`/$out_file srm://${SE}:8443${SE_PATH}$out_file 2>&1`\n'
523     txt += ' fi \n'
524 gutsche 1.73 txt += ' copy_exit_status=$?\n'
525 spiga 1.91 txt += ' echo "COPY_EXIT_STATUS for srmcp = $copy_exit_status"\n'
526 corvo 1.34 txt += ' echo "STAGE_OUT = $copy_exit_status"\n'
527 spiga 1.91
528 corvo 1.34 txt += ' if [ $copy_exit_status -ne 0 ]; then\n'
529 gutsche 1.73 txt += ' echo "Possible problem with SE = $SE"\n'
530 corvo 1.34 txt += ' echo "StageOutExitStatus = 198" | tee -a $RUNTIME_AREA/$repo\n'
531     txt += ' echo "StageOutExitStatusReason = $exitstring" | tee -a $RUNTIME_AREA/$repo\n'
532 mkirn 1.93 txt += ' echo "srmcp failed, attempting lcg-cp."\n'
533 spiga 1.91 if common.logger.debugLevel() >= 5:
534 fanzago 1.119 ########### FEDE CHANGES TO WRITE IN SRM LNL.INFN.IT #################
535     #txt += ' echo "lcg-cp --vo $VO -t 2400 --verbose file://`pwd`/$out_file gsiftp://${SE}${SE_PATH}$out_file"\n'
536     #txt += ' exitstring=`lcg-cp --vo $VO -t 2400 --verbose file://\`pwd\`/$out_file gsiftp://${SE}${SE_PATH}$out_file 2>&1`\n'
537     txt += ' echo "lcg-cp --vo $VO -t 2400 --verbose file://`pwd`/$out_file srm://${SE}:8443${SE_PATH}$out_file"\n'
538     txt += ' exitstring=`lcg-cp --vo $VO -t 2400 --verbose file://\`pwd\`/$out_file srm://${SE}:8443${SE_PATH}$out_file 2>&1`\n'
539 spiga 1.91 else:
540 fanzago 1.119 #txt += ' echo "lcg-cp --vo $VO -t 2400 file://`pwd`/$out_file gsiftp://${SE}${SE_PATH}$out_file"\n'
541     #txt += ' exitstring=`lcg-cp --vo $VO -t 2400 file://\`pwd\`/$out_file gsiftp://${SE}${SE_PATH}$out_file 2>&1`\n'
542     txt += ' echo "lcg-cp --vo $VO -t 2400 file://`pwd`/$out_file srm://${SE}:8443${SE_PATH}$out_file"\n'
543     txt += ' exitstring=`lcg-cp --vo $VO -t 2400 file://\`pwd\`/$out_file srm://${SE}:8443${SE_PATH}$out_file 2>&1`\n'
544 spiga 1.88 txt += ' copy_exit_status=$?\n'
545 spiga 1.91 txt += ' echo "COPY_EXIT_STATUS for lcg-cp = $copy_exit_status"\n'
546 slacapra 1.87 txt += ' echo "STAGE_OUT = $copy_exit_status"\n'
547 spiga 1.91
548 gutsche 1.73 txt += ' if [ $copy_exit_status -ne 0 ]; then\n'
549     txt += ' echo "Problems with SE = $SE"\n'
550     txt += ' echo "StageOutExitStatus = 198" | tee -a $RUNTIME_AREA/$repo\n'
551     txt += ' echo "StageOutExitStatusReason = $exitstring" | tee -a $RUNTIME_AREA/$repo\n'
552 mkirn 1.93 txt += ' echo "srmcp and lcg-cp and failed!"\n'
553 fanzago 1.114 txt += ' SE=""\n'
554     txt += ' echo "SE = $SE"\n'
555     txt += ' SE_PATH=""\n'
556     txt += ' echo "SE_PATH = $SE_PATH"\n'
557 gutsche 1.73 txt += ' else\n'
558     txt += ' echo "StageOutSE = $SE" | tee -a $RUNTIME_AREA/$repo\n'
559     txt += ' echo "StageOutCatalog = " | tee -a $RUNTIME_AREA/$repo\n'
560     txt += ' echo "output copied into $SE/$SE_PATH directory"\n'
561     txt += ' echo "StageOutExitStatus = 0" | tee -a $RUNTIME_AREA/$repo\n'
562 spiga 1.91 txt += ' echo "lcg-cp succeeded"\n'
563 gutsche 1.73 txt += ' fi\n'
564 corvo 1.34 txt += ' else\n'
565     txt += ' echo "StageOutSE = $SE" | tee -a $RUNTIME_AREA/$repo\n'
566     txt += ' echo "StageOutCatalog = " | tee -a $RUNTIME_AREA/$repo\n'
567     txt += ' echo "output copied into $SE/$SE_PATH directory"\n'
568     txt += ' echo "StageOutExitStatus = 0" | tee -a $RUNTIME_AREA/$repo\n'
569 spiga 1.91 txt += ' echo "srmcp succeeded"\n'
570 corvo 1.34 txt += ' fi\n'
571     txt += ' done\n'
572 fanzago 1.114 txt += ' exit_status=$copy_exit_status\n'
573 fanzago 1.14 return txt
574    
575     def wsRegisterOutput(self):
576     """
577     Returns part of a job script which does scheduler-specific work.
578     """
579    
580     txt = ''
581 fanzago 1.30 if int(self.register_data) == 1:
582 spiga 1.49 ## OLI_Daniele deactivate for OSG (wait for LCG UI installed on OSG)
583     txt += 'if [ $middleware == OSG ]; then\n'
584     txt += ' #\n'
585     txt += ' # Register output to LFC deactivated in OSG mode\n'
586     txt += ' #\n'
587     txt += ' echo "Register output to LFC deactivated in OSG mode"\n'
588     txt += 'elif [ $middleware == LCG ]; then \n'
589 fanzago 1.14 txt += '#\n'
590 fanzago 1.36 txt += '# Register output to LFC\n'
591 fanzago 1.14 txt += '#\n'
592 fanzago 1.66 txt += ' if [ $copy_exit_status -eq 0 ]; then\n'
593 spiga 1.49 txt += ' for out_file in $file_list ; do\n'
594     txt += ' echo "Trying to register the output file into LFC"\n'
595 fanzago 1.71 txt += ' echo "lcg-rf -l $LFN/$out_file --vo $VO -t 1200 sfn://$SE$SE_PATH/$out_file 2>&1"\n'
596 fanzago 1.70 txt += ' lcg-rf -l $LFN/$out_file --vo $VO -t 1200 sfn://$SE$SE_PATH/$out_file 2>&1 \n'
597 fanzago 1.14 txt += ' register_exit_status=$?\n'
598 fanzago 1.15 txt += ' echo "REGISTER_EXIT_STATUS = $register_exit_status"\n'
599     txt += ' echo "STAGE_OUT = $register_exit_status"\n'
600 fanzago 1.14 txt += ' if [ $register_exit_status -ne 0 ]; then \n'
601 spiga 1.49 txt += ' echo "Problems with the registration to LFC" \n'
602     txt += ' echo "Try with srm protocol" \n'
603 fanzago 1.71 txt += ' echo "lcg-rf -l $LFN/$out_file --vo $VO -t 1200 srm://$SE$SE_PATH/$out_file 2>&1"\n'
604 fanzago 1.70 txt += ' lcg-rf -l $LFN/$out_file --vo $VO -t 1200 srm://$SE$SE_PATH/$out_file 2>&1 \n'
605 spiga 1.49 txt += ' register_exit_status=$?\n'
606     txt += ' echo "REGISTER_EXIT_STATUS = $register_exit_status"\n'
607     txt += ' echo "STAGE_OUT = $register_exit_status"\n'
608     txt += ' if [ $register_exit_status -ne 0 ]; then \n'
609     txt += ' echo "Problems with the registration into LFC" \n'
610     txt += ' fi \n'
611     txt += ' else \n'
612     txt += ' echo "output registered to LFC"\n'
613 fanzago 1.14 txt += ' fi \n'
614 spiga 1.49 txt += ' echo "StageOutExitStatus = $register_exit_status" | tee -a $RUNTIME_AREA/$repo\n'
615     txt += ' done\n'
616 fanzago 1.66 txt += ' else \n'
617 spiga 1.49 txt += ' echo "Trying to copy output file to CloseSE"\n'
618     txt += ' CLOSE_SE=`edg-brokerinfo getCloseSEs | head -1`\n'
619     txt += ' for out_file in $file_list ; do\n'
620 fanzago 1.71 txt += ' echo "lcg-cr -v -l lfn:${LFN}/$out_file -d $CLOSE_SE -P $LFN/$out_file --vo $VO file://$RUNTIME_AREA/$out_file 2>&1" \n'
621 fanzago 1.70 txt += ' lcg-cr -v -l lfn:${LFN}/$out_file -d $CLOSE_SE -P $LFN/$out_file --vo $VO file://$RUNTIME_AREA/$out_file 2>&1 \n'
622 spiga 1.49 txt += ' register_exit_status=$?\n'
623     txt += ' echo "REGISTER_EXIT_STATUS = $register_exit_status"\n'
624     txt += ' echo "STAGE_OUT = $register_exit_status"\n'
625     txt += ' if [ $register_exit_status -ne 0 ]; then \n'
626 fanzago 1.66 txt += ' echo "Problems with CloseSE or Catalog" \n'
627 spiga 1.49 txt += ' else \n'
628     txt += ' echo "The program was successfully executed"\n'
629     txt += ' echo "SE = $CLOSE_SE"\n'
630     txt += ' echo "LFN for the file is LFN=${LFN}/$out_file"\n'
631     txt += ' fi \n'
632     txt += ' echo "StageOutExitStatus = $register_exit_status" | tee -a $RUNTIME_AREA/$repo\n'
633     txt += ' done\n'
634     txt += ' fi \n'
635 fanzago 1.68 txt += ' exit_status=$register_exit_status\n'
636 fanzago 1.14 txt += 'fi \n'
637     return txt
638 nsmirnov 1.1
639 spiga 1.23 def loggingInfo(self, id):
640 slacapra 1.7 """
641     retrieve the logging info from logging and bookkeeping and return it
642     """
643 slacapra 1.18 self.checkProxy()
644 fanzago 1.24 cmd = 'edg-job-get-logging-info -v 2 ' + id
645 slacapra 1.32 cmd_out = runCommand(cmd)
646 slacapra 1.7 return cmd_out
647    
648 nsmirnov 1.1 def queryDetailedStatus(self, id):
649     """ Query a detailed status of the job with id """
650     cmd = 'edg-job-status '+id
651     cmd_out = runCommand(cmd)
652     return cmd_out
653    
654 spiga 1.88 def findSites_(self, n):
655     itr4 =[]
656     sites = common.jobDB.destination(n)
657     if len(sites)>0 and sites[0]=="Any":
658     return itr4
659     itr = ''
660     if sites != [""]:#CarlosDaniele
661     for site in sites:
662     #itr = itr + 'target.GlueSEUniqueID=="'+site+'" || '
663     itr = itr + 'target.GlueSEUniqueID=="'+site+'" || '
664     itr = itr[0:-4]
665     itr4.append( itr )
666 slacapra 1.80 return itr4
667    
668     def createXMLSchScript(self, nj, argsList):
669 spiga 1.88
670 slacapra 1.80 """
671     Create a XML-file for BOSS4.
672     """
673     # job = common.job_list[nj]
674     """
675     INDY
676 spiga 1.88 [begin] FIX-ME:
677     I would pass jobType instead of job
678 slacapra 1.80 """
679     index = nj - 1
680     job = common.job_list[index]
681     jbt = job.type()
682    
683     inp_sandbox = jbt.inputSandbox(index)
684 slacapra 1.113 #out_sandbox = jbt.outputSandbox(index)
685 nsmirnov 1.5 """
686 spiga 1.88 [end] FIX-ME
687 nsmirnov 1.5 """
688 slacapra 1.6
689 slacapra 1.81
690     title = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'
691     jt_string = ''
692    
693     xml_fname = str(self.jobtypeName)+'.xml'
694     xml = open(common.work_space.shareDir()+'/'+xml_fname, 'a')
695    
696     #TaskName
697     dir = string.split(common.work_space.topDir(), '/')
698     taskName = dir[len(dir)-2]
699    
700     to_write = ''
701    
702     req=' '
703     req = req + jbt.getRequirements()
704    
705     if self.EDG_requirements:
706     if (req == ' '):
707     req = req + self.EDG_requirements
708     else:
709     req = req + ' && ' + self.EDG_requirements
710     if self.EDG_ce_white_list:
711     ce_white_list = string.split(self.EDG_ce_white_list,',')
712     for i in range(len(ce_white_list)):
713     if i == 0:
714     if (req == ' '):
715     req = req + '((RegExp("' + ce_white_list[i] + '", other.GlueCEUniqueId))'
716     else:
717     req = req + ' && ((RegExp("' + ce_white_list[i] + '", other.GlueCEUniqueId))'
718     pass
719     else:
720     req = req + ' || (RegExp("' + ce_white_list[i] + '", other.GlueCEUniqueId))'
721     req = req + ')'
722    
723     if self.EDG_ce_black_list:
724     ce_black_list = string.split(self.EDG_ce_black_list,',')
725     for ce in ce_black_list:
726     if (req == ' '):
727     req = req + '(!RegExp("' + ce + '", other.GlueCEUniqueId))'
728     else:
729     req = req + ' && (!RegExp("' + ce + '", other.GlueCEUniqueId))'
730     pass
731     if self.EDG_clock_time:
732     if (req == ' '):
733     req = req + 'other.GlueCEPolicyMaxWallClockTime>='+self.EDG_clock_time
734     else:
735     req = req + ' && other.GlueCEPolicyMaxWallClockTime>='+self.EDG_clock_time
736    
737     if self.EDG_cpu_time:
738     if (req == ' '):
739     req = req + ' other.GlueCEPolicyMaxCPUTime>='+self.EDG_cpu_time
740     else:
741     req = req + ' && other.GlueCEPolicyMaxCPUTime>='+self.EDG_cpu_time
742    
743     if ( self.EDG_retry_count ):
744     to_write = to_write + 'RetryCount = "'+self.EDG_retry_count+'"\n'
745     pass
746 nsmirnov 1.5
747 slacapra 1.97 if ( self.EDG_shallow_retry_count ):
748 slacapra 1.98 to_write = to_write + 'ShallowRetryCount = "'+self.EDG_shallow_retry_count+'"\n'
749 slacapra 1.97 pass
750    
751 slacapra 1.81 to_write = to_write + 'MyProxyServer = "&quot;' + self.proxyServer + '&quot;"\n'
752     to_write = to_write + 'VirtualOrganisation = "&quot;' + self.VO + '&quot;"\n'
753 nsmirnov 1.1
754 slacapra 1.102 #TaskName
755 slacapra 1.81 dir = string.split(common.work_space.topDir(), '/')
756     taskName = dir[len(dir)-2]
757    
758     xml.write(str(title))
759 spiga 1.116 #xml.write('<task name="' +str(taskName)+'" sub_path="' +common.work_space.pathForTgz() + 'share/.boss_cache">\n')
760    
761     #xml.write('<task name="' +str(taskName)+ '" sub_path="' +common.work_space.pathForTgz() + 'share/.boss_cache"' + '" task_info="' + os.path.expandvars('X509_USER_PROXY') + '">\n')
762     xml.write('<task name="' +str(taskName)+ '" sub_path="' +common.work_space.pathForTgz() + 'share/.boss_cache"' + ' task_info="' + os.environ["X509_USER_PROXY"] + '">\n')
763 slacapra 1.81 xml.write(jt_string)
764 spiga 1.88
765     if (to_write != ''):
766     xml.write('<extraTags\n')
767     xml.write(to_write)
768     xml.write('/>\n')
769     pass
770 slacapra 1.81
771     xml.write('<iterator>\n')
772     xml.write('\t<iteratorRule name="ITR1">\n')
773     xml.write('\t\t<ruleElement> 1:'+ str(nj) + ' </ruleElement>\n')
774     xml.write('\t</iteratorRule>\n')
775     xml.write('\t<iteratorRule name="ITR2">\n')
776     for arg in argsList:
777     xml.write('\t\t<ruleElement> <![CDATA[\n'+ arg + '\n\t\t]]> </ruleElement>\n')
778     pass
779     xml.write('\t</iteratorRule>\n')
780     #print jobList
781     xml.write('\t<iteratorRule name="ITR3">\n')
782     xml.write('\t\t<ruleElement> 1:'+ str(nj) + ':1:6 </ruleElement>\n')
783     xml.write('\t</iteratorRule>\n')
784    
785     '''
786 spiga 1.88 indy: here itr4
787 slacapra 1.81 '''
788    
789 spiga 1.116 xml.write('<chain name="' +str(taskName)+'__ITR1_" scheduler="'+str(self.schedulerName)+'">\n')
790     # xml.write('<chain scheduler="'+str(self.schedulerName)+'">\n')
791 slacapra 1.81 xml.write(jt_string)
792 fanzago 1.14
793 slacapra 1.81 #executable
794 nsmirnov 1.1
795 slacapra 1.81 """
796     INDY
797 spiga 1.88 script depends on jobType: it should be probably get in a different way
798 slacapra 1.81 """
799 nsmirnov 1.1 script = job.scriptFilename()
800 slacapra 1.81 xml.write('<program>\n')
801     xml.write('<exec> ' + os.path.basename(script) +' </exec>\n')
802     xml.write(jt_string)
803 corvo 1.107
804 slacapra 1.81 xml.write('<args> <![CDATA[\n _ITR2_ \n]]> </args>\n')
805     xml.write('<program_types> crabjob </program_types>\n')
806 corvo 1.107 inp_box = common.work_space.pathForTgz() + 'job/' + jbt.scriptName + ','
807 nsmirnov 1.1
808     if inp_sandbox != None:
809     for fl in inp_sandbox:
810 slacapra 1.81 inp_box = inp_box + '' + fl + ','
811 nsmirnov 1.1 pass
812     pass
813    
814 corvo 1.115 # if (not jbt.additional_inbox_files == []):
815 corvo 1.112 # inp_box = inp_box + ','
816 corvo 1.115 # for addFile in jbt.additional_inbox_files:
817     # #addFile = os.path.abspath(addFile)
818     # inp_box = inp_box+''+addFile+','
819     # pass
820 nsmirnov 1.1
821     if inp_box[-1] == ',' : inp_box = inp_box[:-1]
822 slacapra 1.81 inp_box = '<infiles> <![CDATA[\n' + inp_box + '\n]]> </infiles>\n'
823     xml.write(inp_box)
824    
825     base = jbt.name()
826     stdout = base + '__ITR3_.stdout'
827     stderr = base + '__ITR3_.stderr'
828 fanzago 1.14
829 slacapra 1.81 xml.write('<stderr> ' + stderr + '</stderr>\n')
830     xml.write('<stdout> ' + stdout + '</stdout>\n')
831 fanzago 1.14
832    
833 slacapra 1.81 out_box = stdout + ',' + \
834     stderr + ',.BrokerInfo,'
835    
836     """
837 fanzago 1.30 if int(self.return_data) == 1:
838 fanzago 1.14 if out_sandbox != None:
839     for fl in out_sandbox:
840 slacapra 1.81 out_box = out_box + '' + fl + ','
841 fanzago 1.14 pass
842 nsmirnov 1.1 pass
843     pass
844 slacapra 1.81 """
845 nsmirnov 1.1
846 slacapra 1.81 """
847     INDY
848 spiga 1.88 something similar should be also done for infiles (if it makes sense!)
849     """
850 slacapra 1.104 # Stuff to be returned _always_ via sandbox
851     for fl in jbt.output_file_sandbox:
852     out_box = out_box + '' + jbt.numberFile_(fl, '_ITR1_') + ','
853     pass
854     pass
855    
856     # via sandbox iif required return_data
857 slacapra 1.81 if int(self.return_data) == 1:
858     for fl in jbt.output_file:
859     out_box = out_box + '' + jbt.numberFile_(fl, '_ITR1_') + ','
860 fanzago 1.48 pass
861 slacapra 1.81 pass
862 slacapra 1.62
863 slacapra 1.81 if out_box[-1] == ',' : out_box = out_box[:-1]
864     out_box = '<outfiles> <![CDATA[\n' + out_box + '\n]]></outfiles>\n'
865     xml.write(out_box)
866    
867     xml.write('<BossAttr> crabjob.INTERNAL_ID=_ITR1_ </BossAttr>\n')
868 fanzago 1.48
869 slacapra 1.81 xml.write('</program>\n')
870     xml.write('</chain>\n')
871 nsmirnov 1.1
872 slacapra 1.81 xml.write('</iterator>\n')
873     xml.write('</task>\n')
874 slacapra 1.51
875 slacapra 1.81 xml.close()
876 spiga 1.88
877    
878 nsmirnov 1.1 return
879 slacapra 1.18
880     def checkProxy(self):
881     """
882     Function to check the Globus proxy.
883     """
884     if (self.proxyValid): return
885 slacapra 1.103
886     ### Just return if asked to do so
887 corvo 1.117 if (self.dontCheckProxy==1):
888 slacapra 1.103 self.proxyValid=1
889     return
890    
891 slacapra 1.50 minTimeLeft=10*3600 # in seconds
892 slacapra 1.51
893     minTimeLeftServer = 100 # in hours
894    
895 slacapra 1.50 mustRenew = 0
896 fanzago 1.69 timeLeftLocal = runCommand('voms-proxy-info -timeleft 2>/dev/null')
897 slacapra 1.50 timeLeftServer = -999
898 fanzago 1.53 if not timeLeftLocal or int(timeLeftLocal) <= 0 or not isInt(timeLeftLocal):
899 slacapra 1.50 mustRenew = 1
900     else:
901 fanzago 1.69 timeLeftServer = runCommand('voms-proxy-info -actimeleft 2>/dev/null | head -1')
902 slacapra 1.50 if not timeLeftServer or not isInt(timeLeftServer):
903     mustRenew = 1
904 slacapra 1.54 elif timeLeftLocal<minTimeLeft or timeLeftServer<minTimeLeft:
905 slacapra 1.50 mustRenew = 1
906     pass
907     pass
908    
909 slacapra 1.51 if mustRenew:
910 gutsche 1.94 common.logger.message( "No valid proxy found or remaining time of validity of already existing proxy shorter than 10 hours!\n Creating a user proxy with default length of 192h\n")
911 spiga 1.91 cmd = 'voms-proxy-init -voms '+self.VO
912     if self.group:
913     cmd += ':/'+self.VO+'/'+self.group
914 slacapra 1.79 if self.role:
915 spiga 1.91 cmd += '/role='+self.role
916 gutsche 1.94 cmd += ' -valid 192:00'
917 slacapra 1.18 try:
918 slacapra 1.32 # SL as above: damn it!
919 spiga 1.91 common.logger.debug(10,cmd)
920 slacapra 1.19 out = os.system(cmd)
921     if (out>0): raise CrabException("Unable to create a valid proxy!\n")
922 slacapra 1.18 except:
923     msg = "Unable to create a valid proxy!\n"
924     raise CrabException(msg)
925     pass
926 slacapra 1.51
927     ## now I do have a voms proxy valid, and I check the myproxy server
928     renewProxy = 0
929     cmd = 'myproxy-info -d -s '+self.proxyServer
930     cmd_out = runCommand(cmd,0,20)
931     if not cmd_out:
932     common.logger.message('No credential delegated to myproxy server '+self.proxyServer+' will do now')
933     renewProxy = 1
934     else:
935     # if myproxy exist but not long enough, renew
936     reTime = re.compile( r'timeleft: (\d+)' )
937     #print "<"+str(reTime.search( cmd_out ).group(1))+">"
938     if reTime.match( cmd_out ):
939 slacapra 1.113 time = reTime.search( cmd_out ).group(1)
940 slacapra 1.51 if time < minTimeLeftServer:
941     renewProxy = 1
942     common.logger.message('No credential delegation will expire in '+time+' hours: renew it')
943     pass
944     pass
945    
946     # if not, create one.
947     if renewProxy:
948     cmd = 'myproxy-init -d -n -s '+self.proxyServer
949     out = os.system(cmd)
950     if (out>0):
951 fanzago 1.53 raise CrabException("Unable to delegate the proxy to myproxyserver "+self.proxyServer+" !\n")
952 slacapra 1.51 pass
953    
954     # cache proxy validity
955 slacapra 1.18 self.proxyValid=1
956     return
957 spiga 1.49
958 slacapra 1.18 def configOpt_(self):
959     edg_ui_cfg_opt = ' '
960     if self.edg_config:
961 slacapra 1.51 edg_ui_cfg_opt = ' -c ' + self.edg_config + ' '
962 slacapra 1.18 if self.edg_config_vo:
963 slacapra 1.51 edg_ui_cfg_opt += ' --config-vo ' + self.edg_config_vo + ' '
964 slacapra 1.18 return edg_ui_cfg_opt
965 spiga 1.121
966     def submitTout(self, list):
967     return 120
968    
969