From: Thierry Parmentelat Date: Fri, 8 Nov 2013 08:11:33 +0000 (+0100) Subject: (hopefully last) glitches with dbsession X-Git-Tag: sfa-3.1-1~42^2~14 X-Git-Url: http://git.onelab.eu/?p=sfa.git;a=commitdiff_plain;h=530da21961ce85b954fdc62a2b2be07fc31a9776 (hopefully last) glitches with dbsession still only targeting PL --- diff --git a/sfa/planetlab/plslices.py b/sfa/planetlab/plslices.py index de9791f4..319c38b9 100644 --- a/sfa/planetlab/plslices.py +++ b/sfa/planetlab/plslices.py @@ -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): diff --git a/sfa/server/sfaapi.py b/sfa/server/sfaapi.py index 5639b4bb..f1d96a08 100644 --- a/sfa/server/sfaapi.py +++ b/sfa/server/sfaapi.py @@ -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: diff --git a/sfa/storage/model.py b/sfa/storage/model.py index 1228290f..46e2deed 100644 --- a/sfa/storage/model.py +++ b/sfa/storage/model.py @@ -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 = []