From 5307e4e09dd0a7982f0c6dfdd13065425c802005 Mon Sep 17 00:00:00 2001
From: Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
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.47.0