From 5307e4e09dd0a7982f0c6dfdd13065425c802005 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Sat, 9 Apr 2011 14:03:36 +0200 Subject: [PATCH] DeleteSliver supports call_id manager side delete_slice renamed into DeleteSliver --- sfa/client/sfi.py | 2 +- sfa/managers/aggregate_manager_openflow.py | 5 +++-- sfa/managers/aggregate_manager_pl.py | 5 +++-- sfa/managers/aggregate_manager_vini.py | 5 +++-- sfa/managers/component_manager_default.py | 2 +- sfa/managers/component_manager_pl.py | 2 +- sfa/managers/slice_manager_pl.py | 8 ++++---- sfa/methods/DeleteSliver.py | 8 +++----- tests/client/testAggregate.py | 2 +- tests/testInterfaces.py | 8 ++++---- 10 files changed, 24 insertions(+), 23 deletions(-) diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 67624baa..5974a03b 100755 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -910,7 +910,7 @@ class Sfi: delegated_cred = self.delegate_cred(slice_cred, get_authority(self.authority)) creds.append(delegated_cred) server = self.get_server_from_opts(opts) - return server.DeleteSliver(slice_urn, creds) + return server.DeleteSliver(slice_urn, creds, unique_call_id()) # start named slice def start(self, opts, args): diff --git a/sfa/managers/aggregate_manager_openflow.py b/sfa/managers/aggregate_manager_openflow.py index a31c11e2..1edc90b3 100755 --- a/sfa/managers/aggregate_manager_openflow.py +++ b/sfa/managers/aggregate_manager_openflow.py @@ -101,9 +101,10 @@ def stop_slice(cred, xrn): if DEBUG: print "Received stop_slice call" return msg_aggrMgr(SFA_STOP_SLICE) -def delete_slice(cred, xrn): +def DeleteSliver(cred, xrn, call_id): + if Callids().already_handled(call_id): return "" hrn = urn_to_hrn(xrn)[0] - if DEBUG: print "Received delete_slice call" + if DEBUG: print "Received DeleteSliver call" return msg_aggrMgr(SFA_DELETE_SLICE) def reset_slices(cred, xrn): diff --git a/sfa/managers/aggregate_manager_pl.py b/sfa/managers/aggregate_manager_pl.py index e71fc674..4b8f34db 100644 --- a/sfa/managers/aggregate_manager_pl.py +++ b/sfa/managers/aggregate_manager_pl.py @@ -254,8 +254,9 @@ def reset_slice(api, xrn): # XX not implemented at this interface return 1 -def delete_slice(api, xrn, creds): - hrn, type = urn_to_hrn(xrn) +def DeleteSliver(api, xrn, creds, call_id): + if Callids().already_handled(call_id): return "" + (hrn, type) = urn_to_hrn(xrn) slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}) if not slices: diff --git a/sfa/managers/aggregate_manager_vini.py b/sfa/managers/aggregate_manager_vini.py index 40ed258d..d9614435 100644 --- a/sfa/managers/aggregate_manager_vini.py +++ b/sfa/managers/aggregate_manager_vini.py @@ -36,8 +36,9 @@ def GetVersion(api): 'hrn':xrn.get_hrn(), }) -def delete_slice(api, xrn, creds): - hrn, type = urn_to_hrn(xrn) +def DeleteSliver(api, xrn, creds, call_id): + if Callids().already_handled(call_id): return "" + (hrn, type) = urn_to_hrn(xrn) slicename = hrn_to_pl_slicename(hrn) slices = api.plshell.GetSlices(api.plauth, {'name': slicename}) if not slices: diff --git a/sfa/managers/component_manager_default.py b/sfa/managers/component_manager_default.py index e6482d4a..bf7b8527 100644 --- a/sfa/managers/component_manager_default.py +++ b/sfa/managers/component_manager_default.py @@ -5,7 +5,7 @@ def start_slice(api, slicename): def stop_slice(api, slicename): return -def delete_slice(api, slicename): +def DeleteSliver(api, slicename, call_id): return def reset_slice(api, slicename): diff --git a/sfa/managers/component_manager_pl.py b/sfa/managers/component_manager_pl.py index ce4e9a54..961c0354 100644 --- a/sfa/managers/component_manager_pl.py +++ b/sfa/managers/component_manager_pl.py @@ -36,7 +36,7 @@ def stop_slice(api, xrn, creds): slicename = PlXrn(xrn, type='slice').pl_slicename() api.nodemanager.Stop(slicename) -def delete_slice(api, xrn, creds): +def DeleteSliver(api, xrn, creds, call_id): slicename = PlXrn(xrn, type='slice').pl_slicename() api.nodemanager.Destroy(slicename) diff --git a/sfa/managers/slice_manager_pl.py b/sfa/managers/slice_manager_pl.py index c6531d29..5bb923b9 100644 --- a/sfa/managers/slice_manager_pl.py +++ b/sfa/managers/slice_manager_pl.py @@ -203,9 +203,9 @@ def get_ticket(api, xrn, creds, rspec, users): return ticket.save_to_string(save_parents=True) -def delete_slice(api, xrn, creds): - hrn, type = urn_to_hrn(xrn) - +def DeleteSliver(api, xrn, creds, call_id): + if Callids().already_handled(call_id): return "" + (hrn, type) = urn_to_hrn(xrn) # get the callers hrn valid_cred = api.auth.checkCredentials(creds, 'deletesliver', hrn)[0] caller_hrn = Credential(string=valid_cred).get_gid_caller().get_hrn() @@ -221,7 +221,7 @@ def delete_slice(api, xrn, creds): if caller_hrn == aggregate and aggregate != api.hrn: continue server = api.aggregates[aggregate] - threads.run(server.DeleteSliver, xrn, credential) + threads.run(server.DeleteSliver, xrn, credential, call_id) threads.get_results() return 1 diff --git a/sfa/methods/DeleteSliver.py b/sfa/methods/DeleteSliver.py index 2df5f750..741bbd70 100644 --- a/sfa/methods/DeleteSliver.py +++ b/sfa/methods/DeleteSliver.py @@ -1,6 +1,3 @@ -### $Id: stop_slice.py 17732 2010-04-19 21:10:45Z tmack $ -### $URL: https://svn.planet-lab.org/svn/sfa/trunk/sfa/methods/stop_slice.py $ - from sfa.util.faults import * from sfa.util.xrn import urn_to_hrn from sfa.util.method import Method @@ -23,11 +20,12 @@ class DeleteSliver(Method): Parameter(str, "Human readable name of slice to delete (hrn or urn)"), Mixed(Parameter(str, "Credential string"), Parameter(type([str]), "List of credentials")), + Parameter(str, "call_id"), ] returns = Parameter(int, "1 if successful") - def call(self, xrn, creds): + def call(self, xrn, creds, call_id=""): hrn, type = urn_to_hrn(xrn) valid_creds = self.api.auth.checkCredentials(creds, 'deletesliver', hrn) @@ -36,6 +34,6 @@ class DeleteSliver(Method): self.api.logger.info("interface: %s\tcaller-hrn: %s\ttarget-hrn: %s\tmethod-name: %s"%(self.api.interface, origin_hrn, hrn, self.name)) manager = self.api.get_interface_manager() - manager.delete_slice(self.api, xrn, creds) + manager.DeleteSliver(self.api, xrn, creds, call_id) return 1 diff --git a/tests/client/testAggregate.py b/tests/client/testAggregate.py index df95850d..b276984f 100644 --- a/tests/client/testAggregate.py +++ b/tests/client/testAggregate.py @@ -22,7 +22,7 @@ tmack_components = a.list_resources(cred, slicehrn) pprint(tmack_components) #print "removing %(slicehrn)s from all nodes" % locals() -#a.delete_slice(cred, slicehrn) +#a.DeleteSliver(cred, slicehrn) print "adding %(slicehrn)s back to its original nodes" % locals() a.list_resources(cred, slicehrn) diff --git a/tests/testInterfaces.py b/tests/testInterfaces.py index d0e72538..4aa905a9 100755 --- a/tests/testInterfaces.py +++ b/tests/testInterfaces.py @@ -203,7 +203,7 @@ class AggregateTest(BasicTestCase): def testDeleteSlice(self): slice_credential = self.client.get_credential(self.slice['hrn'], 'slice') - self.aggregate.delete_slice(slice_credential, self.slice['hrn']) + self.aggregate.DeleteSliver(slice_credential, self.slice['hrn'],"call-id-delete-slice") def testGetTicket(self): slice_credential = self.client.get_credential(self.slice['hrn'], 'slice') @@ -234,7 +234,7 @@ class ComponentTest(BasicTestCase): self.cm.stop_slice(self.slice_cred, self.slice['hrn']) def testDeleteSlice(self): - self.cm.delete_slice(self.slice_cred, self.slice['hrn']) + self.cm.DeleteSliver(self.slice_cred, self.slice['hrn'],"call-id-delete-slice-cm") def testRestartSlice(self): self.cm.restart_slice(self.slice_cred, self.slice['hrn']) @@ -260,7 +260,7 @@ def CreateSliver(client): client.registry.register(auth_cred, slice_record) return slice_record -def delete_slice(cleint, slice): +def DeleteSliver(client, slice): authority = get_authority(client.hrn) auth_cred = client.get_credential(authority, 'authority') if slice: @@ -318,4 +318,4 @@ if __name__ == '__main__': unittest.TextTestRunner(verbosity=2).run(suite) # remove teset slice - delete_slice(client, test_slice) + DeleteSliver(client, test_slice) -- 2.43.0