X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fplc%2Fslices.py;h=bca329eb703caf2e48e5457bd8eaaee786e10c21;hb=eb8744f06017554a62357ee1167a80abd1e7c325;hp=622c0e9213901e6df4c990da3fa50ae015c801bf;hpb=acae426433020998d0d45ed25584ebed0591d036;p=sfa.git diff --git a/sfa/plc/slices.py b/sfa/plc/slices.py index 622c0e92..bca329eb 100644 --- a/sfa/plc/slices.py +++ b/sfa/plc/slices.py @@ -7,12 +7,12 @@ import traceback import sys from types import StringTypes -from sfa.util.misc import * +from sfa.util.namespace import * from sfa.util.rspec import * from sfa.util.specdict import * from sfa.util.faults import * from sfa.util.storage import * -from sfa.util.record import GeniRecord +from sfa.util.record import SfaRecord from sfa.util.policy import Policy from sfa.util.prefixTree import prefixTree from sfa.util.debug import log @@ -38,7 +38,8 @@ class Slices(SimpleStorage): self.load() self.origin_hrn = origin_hrn - def get_slivers(self, hrn, node=None): + def get_slivers(self, xrn, node=None): + hrn, type = urn_to_hrn(xrn) slice_name = hrn_to_pl_slicename(hrn) # XX Should we just call PLCAPI.GetSliceTicket(slice_name) instead @@ -142,7 +143,8 @@ class Slices(SimpleStorage): return slivers - def get_peer(self, hrn): + def get_peer(self, xrn): + hrn, type = urn_to_hrn(xrn) # Becaues of myplc federation, we first need to determine if this # slice belongs to out local plc or a myplc peer. We will assume it # is a local site, unless we find out otherwise @@ -163,7 +165,9 @@ class Slices(SimpleStorage): return peer - def get_sfa_peer(self, hrn): + def get_sfa_peer(self, xrn): + hrn, type = urn_to_hrn(xrn) + # return the authority for this hrn or None if we are the authority sfa_peer = None slice_authority = get_authority(hrn) @@ -248,8 +252,11 @@ class Slices(SimpleStorage): def verify_site(self, registry, credential, slice_hrn, peer, sfa_peer): + import pdb + pdb.set_trace() authority = get_authority(slice_hrn) - site_records = registry.resolve(credential, authority) + authority_urn = hrn_to_urn(authority, 'authority') + site_records = registry.resolve(credential, authority_urn) site = {} for site_record in site_records: @@ -272,6 +279,9 @@ class Slices(SimpleStorage): else: site_id = sites[0]['site_id'] remote_site_id = sites[0]['peer_site_id'] + old_site = sites[0] + #the site is alredy on the remote agg. Let us update(e.g. max_slices field) it with the latest info. + self.sync_site(old_site, site, peer) return (site_id, remote_site_id) @@ -401,8 +411,8 @@ class Slices(SimpleStorage): except: pass - def create_slice_aggregate(self, hrn, rspec): - + def create_slice_aggregate(self, xrn, rspec): + hrn, type = urn_to_hrn(xrn) # Determine if this is a peer slice peer = self.get_peer(hrn) sfa_peer = self.get_sfa_peer(hrn) @@ -479,11 +489,20 @@ class Slices(SimpleStorage): return 1 + def sync_site(self, old_record, new_record, peer): + if old_record['max_slices'] != new_record['max_slices']: + if peer: + self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'site', old_record['site_id'], peer) + self.api.plshell.UpdateSite(self.api.plauth, old_record['site_id'], {'max_slices' : new_record['max_slices']}) + if peer: + self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', old_record['site_id'], peer, old_record['peer_site_id']) + return 1 + def sync_slice(self, old_record, new_record, peer): if old_record['expires'] != new_record['expires']: if peer: self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'slice', old_record['slice_id'], peer) - self.api.plshell.UpdateSlice(self.api.plauth, old_record['slice_id'], {'expires' : new_record['expires']}) + self.api.plshell.UpdateSlice(self.api.plauth, old_record['slice_id'], {'expires' : new_record['expires']}) if peer: self.api.plshell.BindObjectToPeer(self.api.plauth, 'slice', old_record['slice_id'], peer, old_record['peer_slice_id']) return 1