annotate commons/core/launcher/Launcher2.py @ 18:94ab73e8a190

Uploaded
author m-zytnicki
date Mon, 29 Apr 2013 03:20:15 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
1 from commons.tools.CleanClusterNodesAfterRepet import CleanClusterNodesAfterRepet
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
2 from commons.core.stat.Stat import Stat
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
3 from commons.core.launcher.WriteScript import WriteScript
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
4 from commons.core.sql.TableJobAdaptatorFactory import TableJobAdaptatorFactory
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
5 from commons.core.sql.Job import Job
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
6 import stat
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
7 import os
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
8 import re
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
9 import sys
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
10 import time
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
11 import glob
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
12
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
13 class LauncherParameter(object):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
14
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
15 def __init__(self, jobDB):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
16 self._jobDB = jobDB
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
17
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
18 def getJobDB(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
19 return self._jobDB
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
20
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
21 def setQuery(self, query):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
22 self._query = query
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
23
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
24 def setSubject(self, subject):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
25 self._subject = subject
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
26
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
27 def setParam(self, param):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
28 self._param = param
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
29
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
30 def setCurrentDir(self, currentDir):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
31 self._currentDir = currentDir
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
32
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
33 def getCurrentDir(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
34 return self._currentDir
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
35
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
36 def setTempDir(self, tempDir):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
37 self._tempDir = tempDir
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
38
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
39 def getTempDir(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
40 return self._tempDir
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
41
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
42 def setJobTable(self, jobTable):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
43 self._jobTable = jobTable
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
44
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
45 def setQueue(self, queue):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
46 self._queue = queue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
47
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
48 def getQueue(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
49 return self._queue
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
50
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
51 def setGroupId(self, groupId):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
52 self._groupId = groupId
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
53
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
54 def getGroupId(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
55 return self._groupId
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
56
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
57 def setAcronym(self, acronym):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
58 self._acronym = acronym
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
59
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
60 def getAcronym(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
61 return self._acronym
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
62
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
63 @staticmethod
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
64 def createParameter(jobdb, groupid, acronym):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
65 launcherParameter = LauncherParameter(jobdb)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
66 launcherParameter.setQuery(os.getcwd())
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
67 launcherParameter.setSubject("")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
68 launcherParameter.setParam("")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
69 launcherParameter.setCurrentDir(os.getcwd())
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
70 launcherParameter.setTempDir(os.getcwd())
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
71 launcherParameter.setJobTable("")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
72 launcherParameter.setQueue("")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
73 launcherParameter.setGroupId(groupid)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
74 launcherParameter.setAcronym(acronym)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
75 return launcherParameter
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
76
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
77
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
78 class Launcher2(object):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
79
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
80 #TODO: remove unused parameters : query="", subject="", param="", job_table=""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
81 def __init__(self, iLauncherParameter):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
82 jobdb = iLauncherParameter.getJobDB()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
83 cdir = iLauncherParameter.getCurrentDir()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
84 if jobdb.__class__.__name__ == "RepetJob":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
85 self.jobdb = TableJobAdaptatorFactory.createInstance(jobdb, "jobs")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
86 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
87 self.jobdb = jobdb
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
88 self.jobdb.checkJobTable()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
89 if cdir == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
90 cdir = os.getcwd()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
91 self.cdir = cdir
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
92 self.tmpdir = iLauncherParameter.getTempDir()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
93 self.groupid = iLauncherParameter.getGroupId()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
94 self.acronyme = iLauncherParameter.getAcronym()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
95 self._chooseTemplateWithCopy = False
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
96 self._chooseTemplateLight = False
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
97 self.queue, self.lResources = self.getQueueNameAndResources(iLauncherParameter.getQueue())
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
98 self._createJobInstance()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
99 self._nbJobs = 0
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
100
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
101 def getQueueNameAndResources(self, configQueue):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
102 tokens = configQueue.replace("'","").split(" ")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
103 queueName = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
104 lResources = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
105 if tokens[0] != "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
106 if re.match(".*\.q", tokens[0]):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
107 queueName = tokens[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
108 lResources = tokens[1:]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
109 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
110 lResources = tokens
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
111 return queueName, lResources
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
112
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
113 def createGroupidIfItNotExist(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
114 if self.groupid == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
115 self.job.groupid = str(os.getpid())
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
116 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
117 self.job.groupid = self.groupid
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
118
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
119 def beginRun( self ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
120 self.createGroupidIfItNotExist()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
121 if self.jobdb.hasUnfinishedJob(self.job.groupid):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
122 self.jobdb.waitJobGroup(self.job.groupid)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
123 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
124 self.jobdb.cleanJobGroup(self.job.groupid)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
125
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
126 ## Launch one job in parallel
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
127 #
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
128 # @param cmdStart string command-line for the job to be launched
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
129 # @param cmdFinish string command to retrieve result files
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
130 # @warning the jobname has to be defined outside from this method
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
131 #
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
132 def runSingleJob(self, cmdStart, cmdFinish = "", cmdSize = "", cmdCopy = ""):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
133 if self._nbJobs == 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
134 self._nbJobs = 1
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
135 pid = str(os.getpid())
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
136 now = time.localtime()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
137 #TODO: rename ClusterLauncher_ ...
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
138 pyFileName = self.cdir + "/ClusterLauncher_" + self.job.groupid + "_" +\
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
139 self.job.jobname + "_" + str(now[0]) + "-" + str(now[1]) +\
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
140 "-" + str(now[2]) + "_" + pid + ".py"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
141 self.job.launcher = pyFileName
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
142
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
143 #TODO: to remove when refactoring is done
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
144 cmdStart = self._indentCmd(cmdStart)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
145 cmdFinish = self._indentCmd(cmdFinish)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
146
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
147 iWriteScript = WriteScript(self.job, self.jobdb, self.cdir, self.tmpdir, self._chooseTemplateWithCopy, self._chooseTemplateLight)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
148 iWriteScript.run(cmdStart, cmdFinish, pyFileName, cmdSize, cmdCopy)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
149 os.chmod(pyFileName, stat.S_IRWXU+stat.S_IRGRP+stat.S_IXGRP+stat.S_IROTH+stat.S_IXOTH)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
150 sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
151 log = self.jobdb.submitJob(self.job)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
152 if log != 0:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
153 print "ERROR while submitting job to the cluster"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
154 sys.exit(1)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
155
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
156 def endRun(self, cleanNodes = False):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
157 string = "waiting for %i job(s) with groupid '%s' (%s)" % (self._nbJobs, self.job.groupid, time.strftime("%Y-%m-%d %H:%M:%S"))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
158 print string; sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
159 self.jobdb.waitJobGroup(self.job.groupid)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
160 if self._nbJobs > 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
161 string = "all jobs with groupid '%s' are finished (%s)" % (self.job.groupid, time.strftime("%Y-%m-%d %H:%M:%S"))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
162 print string; sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
163
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
164 if cleanNodes:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
165 string = "start cleaning cluster nodes (%s)" % time.strftime("%Y-%m-%d %H:%M:%S")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
166 print string; sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
167 self.cleanNodes()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
168 string = "end cleaning cluster nodes (%s)" % time.strftime("%Y-%m-%d %H:%M:%S")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
169 print string; sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
170
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
171 statsExecutionTime = self.getStatsOfExecutionTime()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
172 if self._nbJobs > 1:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
173 print "execution time of all jobs (seconds): %f" % statsExecutionTime.getSum()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
174 print "execution time per job: %s" % statsExecutionTime.string()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
175 sys.stdout.flush()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
176 self.jobdb.cleanJobGroup(self.job.groupid)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
177
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
178 def getStatsOfExecutionTime(self, acronyme = ""):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
179 stat = Stat()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
180 if acronyme == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
181 pattern = "%s*.o*" % self.acronyme
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
182 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
183 pattern = "%s*.o*" % acronyme
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
184 lJobFiles = glob.glob(pattern)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
185 for f in lJobFiles:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
186 fH = open(f, "r")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
187 while True:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
188 line = fH.readline()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
189 if line == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
190 break
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
191 if "executionTime" in line:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
192 stat.add( float(line[:-1].split("=")[1] ) )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
193 break
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
194 fH.close()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
195 return stat
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
196
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
197 def clean( self, acronyme = "", stdout = True, stderr = True ):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
198 lFileToRemove = []
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
199 if acronyme == "":
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
200 acronyme = self.acronyme
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
201 pattern = "ClusterLauncher*%s*.py" % ( acronyme )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
202 lFileToRemove.extend(glob.glob( pattern ))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
203 if stdout:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
204 pattern = "%s*.o*" % ( acronyme )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
205 lFileToRemove.extend(glob.glob( pattern ))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
206 if stderr:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
207 pattern = "%s*.e*" % ( acronyme )
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
208 lFileToRemove.extend(glob.glob( pattern ))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
209 for file in lFileToRemove:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
210 os.remove(file)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
211
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
212 #TODO: handle of nodesMustBeCleaned => class attribute ?
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
213 def runLauncherForMultipleJobs(self, acronymPrefix, lCmdsTuples, cleanMustBeDone = True, nodesMustBeCleaned = False):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
214 self.beginRun()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
215 print "submitting job(s) with groupid '%s' (%s)" % (self.job.groupid, time.strftime("%Y-%m-%d %H:%M:%S"))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
216 for cmdsTuple in lCmdsTuples:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
217 self._nbJobs += 1
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
218 self.acronyme = "%s_%s" % (acronymPrefix, self._nbJobs)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
219 self.job.jobname = self.acronyme
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
220 if len(cmdsTuple) == 2:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
221 self.runSingleJob(cmdsTuple[0], cmdsTuple[1])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
222 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
223 self.runSingleJob(cmdsTuple[0], cmdsTuple[1], cmdsTuple[2], cmdsTuple[3])
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
224 self._createJobInstance()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
225 self.createGroupidIfItNotExist()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
226 self.acronyme = acronymPrefix
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
227 self.endRun(nodesMustBeCleaned)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
228 if cleanMustBeDone:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
229 self.clean("%s_" % acronymPrefix)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
230 self.jobdb.close()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
231
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
232 def prepareCommands(self, lCmds, lCmdStart = [], lCmdFinish = [], lCmdSize = [], lCmdCopy = []):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
233 cmdStart = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
234 for cmd in lCmdStart:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
235 cmdStart += "%s\n\t" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
236 for cmd in lCmds:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
237 cmdStart += "%s\n\t" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
238 cmdFinish = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
239 for cmd in lCmdFinish:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
240 cmdFinish += "%s\n\t" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
241 cmdSize = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
242 for cmd in lCmdSize:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
243 cmdSize += "%s\n\t\t" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
244 cmdCopy = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
245 for cmd in lCmdCopy:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
246 cmdCopy += "%s\n\t\t" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
247 return (cmdStart, cmdFinish, cmdSize, cmdCopy)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
248
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
249 #TODO: to remove when refactoring is done
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
250 def prepareCommands_withoutIndentation(self, lCmds, lCmdStart = [], lCmdFinish = [], lCmdSize = [], lCmdCopy = []):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
251 cmdStart = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
252 for cmd in lCmdStart:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
253 cmdStart += "%s\n" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
254 for cmd in lCmds:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
255 cmdStart += "%s\n" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
256 cmdFinish = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
257 for cmd in lCmdFinish:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
258 cmdFinish += "%s\n" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
259 cmdSize = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
260 for cmd in lCmdSize:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
261 cmdSize += "%s\n\t\t" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
262 cmdCopy = ""
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
263 for cmd in lCmdCopy:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
264 cmdCopy += "%s\n\t\t" % cmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
265 return (cmdStart, cmdFinish, cmdSize, cmdCopy)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
266
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
267 def getSystemCommand(self, prg, lArgs):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
268 systemCmd = "log = os.system(\"" + prg
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
269 for arg in lArgs:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
270 systemCmd += " " + arg
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
271 systemCmd += "\")"
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
272 return systemCmd
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
273
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
274 def cleanNodes(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
275 iCleanClusterNodeAfterRepet = CleanClusterNodesAfterRepet()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
276 iCleanClusterNodeAfterRepet.setLNodes(self.jobdb.getNodesListByGroupId(self.groupid))
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
277 iCleanClusterNodeAfterRepet.setTempDirectory(self.tmpdir)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
278 iCleanClusterNodeAfterRepet.setPattern("%s*" % self.groupid)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
279 iCleanClusterNodeAfterRepet.run()
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
280
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
281 #TODO: to remove when refactoring is done
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
282 def _indentCmd(self, cmd):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
283 lCmd = cmd.split("\n")
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
284 cmd_Tab = "%s\n" % lCmd[0]
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
285 for line in lCmd[1:-1]:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
286 cmd_Tab += "\t%s\n" % line
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
287 return cmd_Tab
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
288
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
289 def _createJobInstance(self):
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
290 if self.lResources == []:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
291 #To have mem_free=1G:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
292 self.job = Job(queue=self.queue)
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
293 else:
94ab73e8a190 Uploaded
m-zytnicki
parents:
diff changeset
294 self.job = Job(queue=self.queue, lResources=self.lResources)