Package Ganga :: Package Utility :: Module migrate41to42
[hide private]
[frames] | no frames]

Source Code for Module Ganga.Utility.migrate41to42

  1  ############################################################################### 
  2  # Ganga Project. http://cern.ch/ganga 
  3  # 
  4  # Utility for migrate jobs from v4.1 to v4.2 
  5  # 
  6  # To use it call: 
  7  # 
  8  # JobCheckForV41() 
  9  # 
 10  ############################################################################### 
 11   
 12  import Ganga.Utility.logging 
 13   
 14  log = Ganga.Utility.logging.getLogger(name='Ganga.Utility.migrate41to42') 
 15   
 16  from Ganga.GPI import * 
 17   
18 -def JobCheckForV41():
19 20 jobsv41ready = [] 21 jobsv41notready = [] 22 23 24 for j in jobs: 25 26 v41,ready = _CheckForV41(j) 27 if v41: 28 if ready: 29 jobsv41ready.append(j.id) 30 else: 31 jobsv41notready.append(j.id) 32 33 34 if len(jobsv41ready): 35 log.warning("Job(s) %s were created in (uncompatible) version 4.1 "%jobsv41ready) 36 log.warning("To convert them to version 4.2: JobConvertToV42(jobid)") 37 log.warning("JobConvertToV42() convert all(v4.1) jobs") 38 if len(jobsv41notready): 39 log.warning("Job(s) %s were created in (compatible) version 4.1, but not ready for conversion"%jobsv41notready) 40 log.warning("Wait for completion or stop them")
41
42 -def _CheckForV41(j):
43 44 v41=False 45 ready = True 46 for i in range(len(j.subjobs)): 47 sj = j.subjobs[i] 48 if sj.id==j.id*100000+i+1: 49 v41=True 50 if not sj.status in ('completed','failed','killed'): 51 ready=False 52 53 return (v41,ready)
54 55
56 -def JobConvertToV42(jobid=None):
57 'repository migration utility (4.1->4.2)' 58 if jobid==None: 59 for j in jobs: 60 JobConvertToV42(j.id) 61 else: 62 j = jobs[jobid] 63 64 try: 65 jid = j.id 66 except AttributeError: 67 log.warning("No such job: %d"%jobid) 68 return 69 70 v41,ready = _CheckForV41(j) 71 if v41 and ready: 72 log.info("Converting job %d from v4.1 to v4.2"%jobid) 73 _ConvertToV42(j)
74 75
76 -def _ConvertToV42(j):
77 78 import os 79 80 for i in range(len(j.subjobs)): 81 82 sj = j.subjobs[i] 83 path = os.path.normpath(sj.inputdir) 84 path = os.path.dirname(path) 85 path = os.path.normpath(path) 86 d,f = os.path.split(path) 87 newpath = os.path.join(d,str(j.id)) 88 newpath = os.path.join(newpath,str(i)) 89 90 try: 91 os.rename(path,newpath) 92 log.info("%s --> %s"%(path,newpath)) 93 except OSError: 94 log.warning("Can't move %s to %s"%(path,newpath)) 95 96 sj._impl.id=i 97 sj._impl.inputdir=os.path.join(newpath,"input")+os.sep 98 sj._impl.outputdir=os.path.join(newpath,"output")+os.sep 99 100 j._impl._commit()
101