Package Ganga :: Package Runtime :: Module Repository_runtime
[hide private]
[frames] | no frames]

Source Code for Module Ganga.Runtime.Repository_runtime

  1  """ 
  2  Internal initialization of the repositories. 
  3  """ 
  4   
  5  import Ganga.Utility.Config 
  6  config = Ganga.Utility.Config.getConfig('Configuration') 
  7   
  8  from Ganga.Utility.logging import getLogger,log_user_exception 
  9  logger = getLogger() 
 10   
 11  import os.path 
 12  from Ganga.Utility.files import expandfilename 
 13  from Ganga.Core.GangaRepository import getRegistries, RepositoryError 
 14   
15 -def requiresAfsToken():
16 from Ganga.Utility.files import fullpath 17 return fullpath(getLocalRoot()).find('/afs') == 0
18
19 -def requiresGridProxy():
20 return False
21
22 -def getLocalRoot():
23 if config['repositorytype'] in ['LocalXML','LocalAMGA','LocalPickle','SQLite']: 24 return os.path.join(expandfilename(config['gangadir']),'repository',config['user'],config['repositorytype']) 25 else: 26 return ''
27
28 -def getOldJobs():
29 salvaged_jobs = {'jobs':[],'templates':[]} 30 basepath = os.path.join(expandfilename(config['gangadir']),'repository',config['user']) 31 names = ['jobs','templates'] 32 33 path = os.path.join(basepath,"LocalAMGA") 34 if os.path.exists(path) and not os.path.exists(os.path.join(path,"converted.to.XML.6.0")): 35 from Ganga.Core.JobRepository.ARDA import repositoryFactory 36 for name in names: 37 try: 38 rep = repositoryFactory(subpath = name) 39 co_jobs = rep.checkoutJobs({}) 40 salvaged_jobs[name].extend(co_jobs) 41 file(os.path.join(path,"converted.to.XML.6.0"),"w").close() 42 rep.releaseAllLocks() 43 if len(co_jobs) > 0: 44 logger.warning("Converted %i jobs from old AMGA repository" % len(co_jobs)) 45 except Exception,x: 46 logger.error("Could not load old AMGA repository: %s" % x) 47 raise 48 49 from Ganga.Core.JobRepositoryXML import factory, version 50 for name in names: 51 path = os.path.join(basepath,"LocalXML",version,name) 52 if os.path.exists(path) and not os.path.exists(os.path.join(path,"converted.to.XML.6.0")): 53 try: 54 rep = factory(dir = path) 55 co_jobs = rep.checkoutJobs({}) 56 salvaged_jobs[name].extend(co_jobs) 57 file(os.path.join(path,"converted.to.XML.6.0"),"w").close() 58 rep.releaseAllLocks() 59 if len(co_jobs) > 0: 60 logger.warning("Converted %i jobs from old XML repository" % len(co_jobs)) 61 except Exception,x: 62 logger.error("Could not load old XML repository: %s" % x) 63 raise 64 65 return salvaged_jobs
66 67 started_registries = []
68 -def bootstrap():
69 oldJobs = getOldJobs() 70 retval = [] 71 for registry in getRegistries(): 72 if registry.name in started_registries: continue 73 registry.type = config["repositorytype"] 74 registry.location = getLocalRoot() 75 registry.startup() 76 logger.info("started " + registry.info(full=False)) 77 if registry.name == "jobs": 78 registry.print_other_sessions() 79 started_registries.append(registry.name) 80 retval.append((registry.name, registry.getProxy(), registry.doc)) 81 if registry.name in oldJobs: 82 for j in oldJobs[registry.name]: 83 j._index_cache = None 84 if not j.id in registry: 85 registry._add(j, force_index = j.id) 86 else: 87 logger.warning("Import Collision at id %i, appending job to the end...", j.id) 88 registry._add(j) 89 import atexit 90 atexit.register(shutdown) 91 return retval
92
93 -def shutdown():
94 logger.debug("registry shutdown") 95 for registry in getRegistries(): 96 if not registry.name in started_registries: continue 97 started_registries.remove(registry.name) # in case this is called repeatedly, only call shutdown once 98 registry.shutdown() # flush and release locks
99