From 3017dd2038fc11a41c8b886eb7c565c486c3e922 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Wed, 20 Aug 2014 13:00:58 +0200 Subject: [PATCH] allow allocate to receive an empty rspec, which is the only way a user can release her resources --- sfa/methods/Allocate.py | 16 +++++++++------- sfa/planetlab/pldriver.py | 24 +++++++++++++----------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/sfa/methods/Allocate.py b/sfa/methods/Allocate.py index a7dc8f98..e386b308 100644 --- a/sfa/methods/Allocate.py +++ b/sfa/methods/Allocate.py @@ -47,10 +47,11 @@ class Allocate(Method): self.api.logger.debug("Allocate, received expiration from credential: %s"%expiration) - # make sure request is not empty - slivers = RSpec(rspec).version.get_nodes_with_slivers() - if not slivers: - raise InvalidRSpec("Missing or element. Request rspec must explicitly allocate slivers") +# turned off, as passing an empty rspec is indeed useful for cleaning up the slice +# # make sure request is not empty +# slivers = RSpec(rspec).version.get_nodes_with_slivers() +# if not slivers: +# raise InvalidRSpec("Missing or element. Request rspec must explicitly allocate slivers") # flter rspec through sfatables if self.api.interface in ['aggregate']: @@ -61,9 +62,10 @@ class Allocate(Method): actual_caller_hrn = the_credential.actual_caller_hrn() self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, actual_caller_hrn, xrn.get_hrn(), self.name)) rspec = run_sfatables(chain_name, xrn.get_hrn(), actual_caller_hrn, rspec) - slivers = RSpec(rspec).version.get_nodes_with_slivers() - if not slivers: - raise SfatablesRejected(slice_xrn) +# turned off, as passing an empty rspec is indeed useful for cleaning up the slice +# slivers = RSpec(rspec).version.get_nodes_with_slivers() +# if not slivers: +# raise SfatablesRejected(slice_xrn) # pass this to the driver code in case they need it options['actual_caller_hrn'] = actual_caller_hrn diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index 53f12563..88c41fea 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -692,17 +692,19 @@ class PlDriver (Driver): slivers = aggregate.get_slivers(urns) if not slivers: sliver_id_parts = Xrn(urns[0]).get_sliver_id_parts() - filter = {} - try: - filter['slice_id'] = int(sliver_id_parts[0]) - except ValueError: - filter['name'] = sliver_id_parts[0] - slices = self.shell.GetSlices(filter,['hrn']) - if not slices: - raise Forbidden("Unable to locate slice record for sliver: %s" % xrn) - slice = slices[0] - slice_urn = hrn_to_urn(slice['hrn'], type='slice') - urns = [slice_urn] + # allow to be called with an empty rspec, meaning flush reservations + if sliver_id_parts: + filter = {} + try: + filter['slice_id'] = int(sliver_id_parts[0]) + except ValueError: + filter['name'] = sliver_id_parts[0] + slices = self.shell.GetSlices(filter,['hrn']) + if not slices: + raise Forbidden("Unable to locate slice record for sliver: %s" % xrn) + slice = slices[0] + slice_urn = hrn_to_urn(slice['hrn'], type='slice') + urns = [slice_urn] else: slice_id = slivers[0]['slice_id'] slice_hrn = self.shell.GetSliceHrn(slice_id) -- 2.43.0