Revision: | 1.75 |
Committed: | Fri May 29 15:10:50 2009 UTC (15 years, 11 months ago) by spiga |
Content type: | text/x-python |
Branch: | MAIN |
CVS Tags: | CRAB_2_9_1, CRAB_2_9_1_pre2, CRAB_2_9_1_pre1, CRAB_2_9_0, CRAB_2_9_0_pre2, CRAB_2_9_0_pre1, CRAB_2_8_8, CRAB_2_8_8_pre1, CRAB_2_8_7_patch3, CRAB_2_8_7_patch2, CRAB_2_8_7_patch1, CRAB_2_8_7, CRAB_2_8_7_pre2, CRAB_2_8_7_pre1, CRAB_2_8_6, CRAB_2_8_6_pre1, CRAB_2_8_5_patch3, CRAB_2_8_5_patch2, CRAB_2_8_5_patch1, CRAB_2_8_5, CRAB_2_8_5_pre5, CRAB_2_8_5_pre4, CRAB_2_8_5_pre3, CRAB_2_8_4_patch3, CRAB_2_8_5_pre2, CRAB_2_8_4_patch2, CRAB_2_8_5_pre1, CRAB_2_8_4_patch1, CRAB_2_8_4, CRAB_2_8_4_pre5, CRAB_2_8_4_pre4, CRAB_2_8_4_pre3, CRAB_2_8_4_pre2, CRAB_2_8_4_pre1, CRAB_2_8_3, CRAB_2_8_3_pre4, CRAB_2_8_3_pre3, CRAB_2_8_3_pre2, CRAB_2_8_3_pre1, CRAB_2_8_2_patch1, CRAB_2_8_2, CRAB_2_8_2_pre5, CRAB_2_8_2_pre4, CRAB_2_8_2_pre3, CRAB_2_8_2_pre2, CRAB_2_8_2_pre1, CRAB_2_8_1, CRAB_2_8_0, CRAB_2_8_0_pre1, CRAB_2_7_10_pre3, CRAB_2_7_9_patch2_pre1, CRAB_2_7_10_pre2, CRAB_2_7_10_pre1, CRAB_2_7_9_patch1, CRAB_2_7_9, CRAB_2_7_9_pre5, CRAB_2_7_9_pre4, CRAB_2_7_9_pre3, CRAB_2_7_9_pre2, CRAB_2_7_8_patch2, CRAB_2_7_9_pre1, CRAB_2_7_8_patch2_pre1, CRAB_2_7_8_patch1, CRAB_2_7_8_patch1_pre1, CRAB_2_7_8, CRAB_2_7_8_pre3, CRAB_2_7_8_pre2, CRAB_2_7_8_dash3, CRAB_2_7_8_dash2, CRAB_2_7_8_dash, CRAB_2_7_7_patch1, CRAB_2_7_7_patch1_pre1, CRAB_2_7_8_pre1, CRAB_2_7_7, CRAB_2_7_7_pre2, CRAB_2_7_7_pre1, CRAB_2_7_6_patch1, CRAB_2_7_6, CRAB_2_7_6_pre1, CRAB_2_7_5_patch1, CRAB_2_7_5, CRAB_2_7_5_pre3, CRAB_2_7_5_pre2, CRAB_2_7_5_pre1, CRAB_2_7_4_patch1, CRAB_2_7_4, CRAB_2_7_4_pre6, CRAB_2_7_4_pre5, CRAB_2_7_4_pre4, CRAB_2_7_4_pre3, CRAB_2_7_4_pre2, CRAB_2_7_4_pre1, CRAB_2_7_3, CRAB_2_7_3_pre3, CRAB_2_7_3_pre3_beta, CRAB_2_7_3_pre2, CRAB_2_7_3_pre2_beta, CRAB_2_7_3_pre1, CRAB_2_7_3_beta3, CRAB_2_7_3_beta2, CRAB_2_7_3_beta1, CRAB_2_7_3_beta, CRAB_2_7_2_p1, CRAB_2_7_1_branch_firstMERGE, CRAB_2_7_2, CRAB_2_7_2_pre4, CRAB_2_7_2_pre3, CRAB_2_7_2_pre2, CRAB_2_7_2_pre1, CRAB_2_7_1, fede_170310, CRAB_2_7_1_pre12, CRAB_2_7_1_pre11, CRAB_2_7_1_pre10, CRAB_2_7_1_pre9, CRAB_LumiMask, CRAB_2_7_lumi, from_LimiMask, CRAB_2_7_1_pre8, CRAB_2_7_1_pre6, CRAB_2_7_1_pre5, CRAB_2_7_1_wmbs_pre4, CRAB_2_7_1_pre4, CRAB_2_7_1_pre3, CRAB_2_6_6_pre6, CRAB_2_7_1_pre2, CRAB_2_6_6_pre5, CRAB_2_7_1_pre1, CRAB_2_6_6_pre4, CRAB_2_6_6_pre3, CRAB_2_6_6_pre2, CRAB_2_6_6_check, CRAB_2_6_6, CRAB_2_6_6_pre1, CRAB_2_7_0, CRAB_2_6_5, CRAB_2_7_0_pre8, CRAB_2_6_5_pre1, CRAB_2_7_0_pre7, CRAB_2_6_4, CRAB_2_7_0_pre6, CRAB_2_6_4_pre1, CRAB_2_7_0_pre5, CRAB_2_6_3_patch_2, CRAB_2_6_3_patch_2_pre2, CRAB_2_6_3_patch_2_pre1, CRAB_2_6_3_patch_1, CRAB_2_7_0_pre4, CRAB_2_7_0_pre3, CRAB_2_6_3, CRAB_2_6_3_pre5, CRAB_2_6_3_pre4, CRAB_2_6_3_pre3, CRAB_2_6_3_pre2, CRAB_2_7_0_pre2, CRAB_2_6_3_pre1, test_1, CRAB_2_7_0_pre1, CRAB_2_6_2, CRAB_2_6_2_pre2, CRAB_2_6_2_pre1, CRAB_2_6_1_pre4, CRAB_2_6_1_pre3, CRAB_2_6_1_pre2, CRAB_2_6_1_pre1, CRAB_2_6_1, CRAB_2_6_0, CRAB_2_6_0_pre14, CRAB_2_6_0_pre13, CRAB_2_6_0_pre12, CRAB_2_6_0_pre11, CRAB_2_6_0_pre10, CRAB_2_6_0_pre9, CRAB_2_6_0_pre8, CRAB_2_6_0_pre7, CRAB_2_6_0_pre6, HEAD |
Branch point for: | CRAB_multiout, CRAB_2_7_1_branch, Lumi2_8, CRAB_2_6_X_br |
Changes since 1.74: | +3 -2 lines |
Log Message: | improved logging |
# | User | Rev | Content |
---|---|---|---|
1 | nsmirnov | 1.1 | from Actor import Actor |
2 | from WorkSpace import WorkSpace | ||
3 | from JobList import JobList | ||
4 | from ScriptWriter import ScriptWriter | ||
5 | from Scheduler import Scheduler | ||
6 | from crab_exceptions import * | ||
7 | from crab_util import * | ||
8 | import common | ||
9 | |||
10 | slacapra | 1.8 | import os, string, math |
11 | slacapra | 1.45 | import time |
12 | |||
13 | nsmirnov | 1.1 | class Creator(Actor): |
14 | spiga | 1.70 | def __init__(self, job_type_name, cfg_params, ncjobs, skip_blocks=False,isNew=True,first_jobID=0): |
15 | nsmirnov | 1.1 | self.job_type_name = job_type_name |
16 | corvo | 1.30 | self.job_type = None |
17 | nsmirnov | 1.1 | self.cfg_params = cfg_params |
18 | nsmirnov | 1.2 | self.total_njobs = 0 |
19 | self.total_number_of_events = 0 | ||
20 | self.job_number_of_events = 0 | ||
21 | slacapra | 1.7 | self.first_event = 0 |
22 | gutsche | 1.38 | self.jobParamsList=[] |
23 | spiga | 1.70 | self.first_jobID = first_jobID |
24 | self.isNew = isNew | ||
25 | |||
26 | self.createJobTypeObject(ncjobs,skip_blocks,self.isNew) | ||
27 | spiga | 1.73 | common.logger.debug( __name__+": JobType "+self.job_type.name()+" created") |
28 | nsmirnov | 1.1 | |
29 | |||
30 | gutsche | 1.38 | self.total_njobs = self.job_type.numberOfJobs(); |
31 | spiga | 1.73 | common.logger.debug( __name__+": total # of jobs = "+`self.total_njobs`) |
32 | nsmirnov | 1.1 | |
33 | self.ncjobs = ncjobs | ||
34 | if ncjobs == 'all' : self.ncjobs = self.total_njobs | ||
35 | if ncjobs > self.total_njobs : self.ncjobs = self.total_njobs | ||
36 | spiga | 1.11 | |
37 | spiga | 1.60 | self.job_type_name = self.job_type.name() |
38 | |||
39 | spiga | 1.73 | common.logger.debug( "Creator constructor finished") |
40 | nsmirnov | 1.1 | return |
41 | |||
42 | spiga | 1.70 | def writeJobsSpecsToDB(self, first_jobID=0): |
43 | slacapra | 1.7 | """ |
44 | Write firstEvent and maxEvents in the DB for future use | ||
45 | """ | ||
46 | |||
47 | spiga | 1.70 | self.job_type.split(self.jobParamsList,first_jobID) |
48 | nsmirnov | 1.2 | return |
49 | |||
50 | nsmirnov | 1.1 | def nJobs(self): |
51 | return self.total_njobs | ||
52 | |||
53 | spiga | 1.61 | |
54 | def nJobsL(self): | ||
55 | jobsL=[] | ||
56 | for i in range(self.total_njobs): | ||
57 | spiga | 1.70 | jobsL.append(self.first_jobID+i+1) |
58 | spiga | 1.61 | return jobsL |
59 | |||
60 | spiga | 1.70 | def createJobTypeObject(self,ncjobs,skip_blocks,isNew): |
61 | nsmirnov | 1.1 | file_name = 'cms_'+ string.lower(self.job_type_name) |
62 | klass_name = string.capitalize(self.job_type_name) | ||
63 | |||
64 | try: | ||
65 | klass = importName(file_name, klass_name) | ||
66 | except KeyError: | ||
67 | msg = 'No `class '+klass_name+'` found in file `'+file_name+'.py`' | ||
68 | raise CrabException(msg) | ||
69 | except ImportError, e: | ||
70 | msg = 'Cannot create job type '+self.job_type_name | ||
71 | msg += ' (file: '+file_name+', class '+klass_name+'):\n' | ||
72 | msg += str(e) | ||
73 | raise CrabException(msg) | ||
74 | |||
75 | spiga | 1.70 | self.job_type = klass(self.cfg_params,ncjobs,skip_blocks,isNew) |
76 | nsmirnov | 1.1 | return |
77 | nsmirnov | 1.5 | |
78 | def jobType(self): | ||
79 | return self.job_type | ||
80 | nsmirnov | 1.1 | |
81 | def run(self): | ||
82 | nsmirnov | 1.4 | """ |
83 | The main method of the class. | ||
84 | """ | ||
85 | nsmirnov | 1.1 | |
86 | spiga | 1.73 | common.logger.debug( "Creator::run() called") |
87 | slacapra | 1.45 | start = time.time() |
88 | nsmirnov | 1.1 | # Instantiate ScriptWriter |
89 | spiga | 1.69 | script_writer = ScriptWriter(self.cfg_params,'crab_template.sh') |
90 | nsmirnov | 1.1 | |
91 | # Loop over jobs | ||
92 | slacapra | 1.44 | argsList = [] |
93 | nsmirnov | 1.1 | njc = 0 |
94 | spiga | 1.60 | listID=[] |
95 | listField=[] | ||
96 | spiga | 1.63 | listRunField=[] |
97 | spiga | 1.67 | run_jobToSave = {'status' :'C', \ |
98 | mcinquil | 1.72 | 'statusScheduler' : 'Created', \ |
99 | 'state' : "Created" } | ||
100 | |||
101 | spiga | 1.75 | msg = ("Creating jobs :\n") |
102 | nsmirnov | 1.4 | for nj in range(self.total_njobs): |
103 | spiga | 1.70 | nj=nj+self.first_jobID |
104 | spiga | 1.64 | output=[] |
105 | nsmirnov | 1.1 | if njc == self.ncjobs : break |
106 | |||
107 | spiga | 1.75 | msg += "... job # %s "%str(nj+1) |
108 | spiga | 1.63 | listRunField.append(run_jobToSave) |
109 | nsmirnov | 1.3 | |
110 | nsmirnov | 1.1 | # Prepare configuration file |
111 | |||
112 | spiga | 1.64 | output.append('out_files_'+str(nj+1)+'.tgz') |
113 | job_ToSave={'outputFiles': output} | ||
114 | spiga | 1.60 | listField.append(job_ToSave) |
115 | spiga | 1.57 | |
116 | spiga | 1.62 | listID.append(nj+1) |
117 | nsmirnov | 1.1 | njc = njc + 1 |
118 | pass | ||
119 | spiga | 1.75 | common.logger.log(10-1,msg) |
120 | spiga | 1.60 | # ## Not clear why here.. DS |
121 | # self.job_type.setArgsList() | ||
122 | spiga | 1.70 | common._db.updateRunJob_(listID , listRunField ) |
123 | common._db.updateJob_(listID, listField ) | ||
124 | spiga | 1.57 | |
125 | spiga | 1.70 | if self.isNew: |
126 | # Create script (sh) | ||
127 | script_writer.modifyTemplateScript() | ||
128 | |||
129 | # SL This should be a list, rather than a string! | ||
130 | concString = ',' | ||
131 | inSand='' | ||
132 | if len(self.job_type.inputSandbox(1)): | ||
133 | inSand += concString.join(self.job_type.inputSandbox(1)) | ||
134 | # Sandbox, Start Dir , outputDir | ||
135 | param = {'globalSandbox': inSand , 'startDirectory': common.work_space.cwdDir() , 'outputDirectory': common.work_space.resDir() } | ||
136 | common._db.updateTask_(param) | ||
137 | # define requirement | ||
138 | common.scheduler.sched_fix_parameter() | ||
139 | common.scheduler.declare(listID) | ||
140 | spiga | 1.60 | |
141 | stop = time.time() | ||
142 | spiga | 1.73 | common.logger.info('Creating '+str(self.total_njobs)+' jobs, please wait...') |
143 | fanzago | 1.12 | |
144 | slacapra | 1.45 | stop = time.time() |
145 | spiga | 1.73 | common.logger.debug( "Creation Time: "+str(stop - start)) |
146 | slacapra | 1.45 | |
147 | spiga | 1.74 | msg = 'Total of %d jobs created'%njc |
148 | nsmirnov | 1.1 | if njc != self.ncjobs: msg = msg + ' from %d requested'%self.ncjobs |
149 | msg = msg + '.\n' | ||
150 | spiga | 1.73 | common.logger.info(msg) |
151 | slacapra | 1.45 | |
152 | nsmirnov | 1.1 | return |