From 0abeedb197dcc422a076d67d087c1d5839342f4c Mon Sep 17 00:00:00 2001 From: Sandrine Avakian Date: Tue, 9 Oct 2012 13:43:19 +0200 Subject: [PATCH] Cleaning. --- sfa/senslab/slabdriver.py | 3 +- sfa/senslab/slabpostgres.py | 113 ++++++++++++++++++------------------ sfa/senslab/slabslices.py | 50 ++++++++-------- 3 files changed, 80 insertions(+), 86 deletions(-) diff --git a/sfa/senslab/slabdriver.py b/sfa/senslab/slabdriver.py index 95fa8d7b..9bd11ac0 100644 --- a/sfa/senslab/slabdriver.py +++ b/sfa/senslab/slabdriver.py @@ -177,8 +177,7 @@ class SlabDriver(Driver): rspec = RSpec(rspec_string) logger.debug("SLABDRIVER.PY \t create_sliver \tr spec.version %s slice_record %s " \ %(rspec.version,slice_record)) - - #self.synchronize_oar_and_slice_table(slice_hrn) + # ensure site record exists? # ensure slice record exists #Removed options to verify_slice SA 14/08/12 diff --git a/sfa/senslab/slabpostgres.py b/sfa/senslab/slabpostgres.py index 96c94983..b49416eb 100644 --- a/sfa/senslab/slabpostgres.py +++ b/sfa/senslab/slabpostgres.py @@ -1,18 +1,14 @@ import sys -from sqlalchemy import create_engine, and_ +from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sfa.util.config import Config from sfa.util.sfalogging import logger -from sqlalchemy import Column, Integer, String, DateTime -from sqlalchemy import Table, Column, MetaData, join, ForeignKey -import sfa.storage.model as model -from sfa.storage.model import RegSlice +from sqlalchemy import Column, Integer, String +from sqlalchemy import Table, Column, MetaData from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import relationship, backref - from sqlalchemy.dialects import postgresql @@ -20,11 +16,12 @@ from sqlalchemy import MetaData, Table from sqlalchemy.exc import NoSuchTableError from sqlalchemy import String -from sfa.storage.alchemy import dbsession #Dict holding the columns names of the table as keys #and their type, used for creation of the table -slice_table = {'record_id_user':'integer PRIMARY KEY references X ON DELETE CASCADE ON UPDATE CASCADE','oar_job_id':'integer DEFAULT -1', 'record_id_slice':'integer', 'slice_hrn':'text NOT NULL'} +slice_table = {'record_id_user':'integer PRIMARY KEY references X ON DELETE \ +CASCADE ON UPDATE CASCADE','oar_job_id':'integer DEFAULT -1', \ +'record_id_slice':'integer', 'slice_hrn':'text NOT NULL'} #Dict with all the specific senslab tables tablenames_dict = {'slice_senslab': slice_table} @@ -35,22 +32,23 @@ tablenames_dict = {'slice_senslab': slice_table} SlabBase = declarative_base() - - - class SliceSenslab (SlabBase): __tablename__ = 'slice_senslab' #record_id_user = Column(Integer, primary_key=True) - slice_hrn = Column(String,primary_key=True) - peer_authority = Column( String,nullable = True) + slice_hrn = Column(String, primary_key=True) + peer_authority = Column(String, nullable = True) record_id_slice = Column(Integer) record_id_user = Column(Integer) #oar_job_id = Column( Integer,default = -1) #node_list = Column(postgresql.ARRAY(String), nullable =True) - def __init__ (self, slice_hrn =None, record_id_slice=None, record_id_user= None,peer_authority=None): + def __init__ (self, slice_hrn =None, record_id_slice=None, \ + record_id_user= None,peer_authority=None): + """ + Defines a row of the slice_senslab table + """ if record_id_slice: self.record_id_slice = record_id_slice if slice_hrn: @@ -62,12 +60,20 @@ class SliceSenslab (SlabBase): def __repr__(self): - result=">sys.stderr, " \r\n \r\n SLAPOSTGRES INIT unix_url %s" %(unix_url) + (config.SFA_DB_USER, config.SFA_DB_PASSWORD, \ + config.SFA_DB_PORT, dbname) + # the TCP fallback method tcp_url = "postgresql+psycopg2://%s:%s@%s:%s/%s"%\ - (config.SFA_DB_USER,config.SFA_DB_PASSWORD,config.SFA_DB_HOST,config.SFA_DB_PORT,dbname) + (config.SFA_DB_USER, config.SFA_DB_PASSWORD, config.SFA_DB_HOST, \ + config.SFA_DB_PORT, dbname) for url in [ unix_url, tcp_url ] : try: - self.slab_engine = create_engine (url,echo_pool = l_echo_pool, echo = l_echo) + self.slab_engine = create_engine (url, echo_pool = \ + l_echo_pool, echo = l_echo) self.check() - self.url=url + self.url = url return except: pass - self.slab_engine=None - raise Exception,"Could not connect to database" + self.slab_engine = None + raise Exception, "Could not connect to database" @@ -136,23 +130,28 @@ class SlabDB: def session (self): + """ + Creates a SQLalchemy session. Once the session object is created + it should be used throughout the code for all the operations on + tables for this given database. + + """ if self.slab_session is None: - Session=sessionmaker () - self.slab_session=Session(bind=self.slab_engine) + Session = sessionmaker() + self.slab_session = Session(bind = self.slab_engine) return self.slab_session - - - - #Close connection to database + def close(self): + """ + Closes connection to database. + + """ if self.connection is not None: self.connection.close() self.connection = None - - - + def exists(self, tablename): """ Checks if the table specified as tablename exists. @@ -165,25 +164,23 @@ class SlabDB: return True except NoSuchTableError: - print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES EXISTS NOPE! tablename %s " %(tablename) + logger.log_exc("SLABPOSTGRES tablename %s does not exists" \ + %(tablename)) return False def createtable(self, tablename ): """ - Creates the specifed table. Uses the global dictionnary holding the tablenames and - the table schema. + Creates the specifed table. Uses the global dictionnary holding the + tablenames and the table schema. """ - print>>sys.stderr, " \r\n \r\n \t SLABPOSTGRES createtable SlabBase.metadata.sorted_tables %s \r\n engine %s" %(SlabBase.metadata.sorted_tables , slab_engine) + logger.debug("SLABPOSTGRES createtable SlabBase.metadata.sorted_tables \ + %s \r\n engine %s" %(SlabBase.metadata.sorted_tables , slab_engine)) SlabBase.metadata.create_all(slab_engine) return - - - - from sfa.util.config import Config diff --git a/sfa/senslab/slabslices.py b/sfa/senslab/slabslices.py index 7779fcb1..3f42ef2b 100644 --- a/sfa/senslab/slabslices.py +++ b/sfa/senslab/slabslices.py @@ -7,18 +7,8 @@ MAXINT = 2L**31-1 class SlabSlices: rspec_to_slice_tag = {'max_rate':'net_max_rate'} - - #def __init__(self, api, ttl = .5, origin_hrn=None): - #self.api = api - ##filepath = path + os.sep + filename - #self.policy = Policy(self.api) - #self.origin_hrn = origin_hrn - #self.registry = api.registries[api.hrn] - #self.credential = api.getCredential() - #self.nodes = [] - #self.persons = [] - - + + def __init__(self, driver): self.driver = driver @@ -148,7 +138,8 @@ class SlabSlices: #First get the list of current leases from OAR leases = self.driver.GetLeases({'name':sfa_slice['name']}) - #leases = self.driver.GetLeases({'name':sfa_slice['name']}, ['lease_id']) + #leases = self.driver.GetLeases({'name':sfa_slice['name']},\ + #['lease_id']) if leases : current_leases = [lease['lease_id'] for lease in leases] #Deleted leases are the ones with lease id not declared in the Rspec @@ -157,16 +148,19 @@ class SlabSlices: try: if peer: #peer = RegAuyhority object is unsubscriptable - #TODO :UnBindObjectFromPeer Quick and dirty auth='senslab2 SA 27/07/12 - self.driver.UnBindObjectFromPeer('senslab2', 'slice', \ - sfa_slice['record_id_slice'], peer.hrn) + #TODO :UnBindObjectFromPeer Quick and dirty + #auth='senslab2 SA 27/07/12 + + #Commented out UnBindObjectFromPeer SA 09/10/12 + #self.driver.UnBindObjectFromPeer('senslab2', 'slice', \ + #sfa_slice['record_id_slice'], peer.hrn) self.driver.DeleteLeases(deleted_leases, \ sfa_slice['name']) - #TODO : catch other exception? + #TODO verify_slice_leases: catch other exception? except KeyError: - logger.log_exc('Failed to add/remove slice leases') + logger.log_exc('Failed to remove slice leases') #Add new leases for start_time in requested_jobs_dict: @@ -189,7 +183,8 @@ class SlabSlices: deleted_nodes = list(set(current_slivers).\ difference(requested_slivers)) # add nodes from rspec - #added_nodes = list(set(requested_slivers).difference(current_slivers)) + #added_nodes = list(set(requested_slivers).\ + #difference(current_slivers)) #Update the table with the nodes that populate the slice logger.debug("SLABSLICES \tverify_slice_nodes slice %s\ @@ -322,7 +317,8 @@ class SlabSlices: for sl in slices_list: logger.debug("SLABSLICE \tverify_slice slicename %s sl %s \ - slice_record %s"%(slicename, sl, slice_record)) + slice_record %s"%(slicename, sl, \ + slice_record)) sfa_slice = sl sfa_slice.update(slice_record) #del slice['last_updated'] @@ -331,8 +327,9 @@ class SlabSlices: #slice['peer_slice_id'] = slice_record.get('slice_id', None) ## unbind from peer so we can modify if necessary. ## Will bind back later - #self.driver.UnBindObjectFromPeer('slice', slice['slice_id'], \ - #peer['shortname']) + #self.driver.UnBindObjectFromPeer('slice', \ + #slice['slice_id'], \ + #peer['shortname']) #Update existing record (e.g. expires field) #it with the latest info. ##if slice_record and slice['expires'] != slice_record['expires']: @@ -450,15 +447,16 @@ class SlabSlices: ldap_reslt = self.driver.ldap.LdapSearch(req) if ldap_reslt: logger.debug(" SLABSLICE.PY \tverify_person users \ - USER already in Senslab \t ldap_reslt %s "%( ldap_reslt)) + USER already in Senslab \t ldap_reslt %s \ + "%( ldap_reslt)) existing_users.append(ldap_reslt[1]) else: #User not existing in LDAP - #TODO SA 21/08/12 raise something to add user or add it auto ? + #TODO SA 21/08/12 raise smthg to add user or add it auto ? logger.debug(" SLABSLICE.PY \tverify_person users \ - not in ldap ...NEW ACCOUNT NEEDED %s \r\n \t ldap_reslt %s " \ - %(users, ldap_reslt)) + not in ldap ...NEW ACCOUNT NEEDED %s \r\n \t \ + ldap_reslt %s " %(users, ldap_reslt)) requested_user_ids = users_by_id.keys() requested_user_hrns = users_by_hrn.keys() -- 2.47.0