(hopefully last) glitches with dbsession
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Fri, 8 Nov 2013 08:11:33 +0000 (09:11 +0100)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Fri, 8 Nov 2013 08:11:33 +0000 (09:11 +0100)
still only targeting PL

sfa/planetlab/plslices.py
sfa/server/sfaapi.py
sfa/storage/model.py

index de9791f..319c38b 100644 (file)
@@ -265,7 +265,7 @@ class PlSlices:
                                       component_id=component_id,
                                       slice_urn = slice_urn, 
                                       allocation_state='geni_allocated')      
-            record.sync()
+            record.sync(self.driver.api.dbsession)
         return resulting_nodes
 
     def free_egre_key(self):
index 5639b4b..f1d96a0 100644 (file)
@@ -170,7 +170,8 @@ class SfaApi (XmlrpcApi):
         if not auth_hrn or hrn == self.config.SFA_INTERFACE_HRN:
             auth_hrn = hrn
         auth_info = self.auth.get_auth_info(auth_hrn)
-        from sfa.storage.alchemy import dbsession
+        # xxx although unlikely we might want to check for a potential leak
+        dbsession=self.dbsession()
         from sfa.storage.model import RegRecord
         record = dbsession.query(RegRecord).filter_by(type='authority+sa', hrn=hrn).first()
         if not record:
index 1228290..46e2dee 100644 (file)
@@ -228,6 +228,8 @@ class RegSlice (RegRecord):
         self.reg_researchers = researchers
 
     # when dealing with credentials, we need to retrieve the PIs attached to a slice
+    # WARNING: with the move to passing dbsessions around, we face a glitch here because this
+    # helper function is called from the trust/ area that
     def get_pis (self):
         from sqlalchemy.orm import sessionmaker
         Session=sessionmaker()
@@ -371,11 +373,7 @@ class SliverAllocation(Base,AlchemyObj):
             dbsession.delete(sliver_allocation)
         dbsession.commit()
     
-    def sync(self):
-        
-        from sqlalchemy.orm import sessionmaker
-        Session=sessionmaker()
-        dbsession=Session.object_session(self)
+    def sync(self, dbsession):
         constraints = [SliverAllocation.sliver_id==self.sliver_id]
         results = dbsession.query(SliverAllocation).filter(and_(*constraints))
         records = []