Fixing RM.DEPLOY being executed after/during RM.RELEASE by adding a release_lock...
[nepi.git] / src / nepi / resources / planetlab / openvswitch / ovsport.py
index a7155fb..ec5f6f1 100644 (file)
@@ -20,7 +20,7 @@
 
 from nepi.execution.attribute import Attribute, Flags, Types
 from nepi.execution.resource import ResourceManager, clsinit_copy, \
-        ResourceState, failtrap
+        ResourceState
 from nepi.resources.planetlab.openvswitch.ovs import OVSWitch        
 from nepi.resources.planetlab.node import PlanetlabNode        
 from nepi.resources.linux.application import LinuxApplication
@@ -179,8 +179,7 @@ class OVSPort(LinuxApplication):
         command = self.replace_paths(command)
         return command
         
-    @failtrap
-    def deploy(self):
+    def do_deploy(self):
         """ Wait until ovswitch is started
         """
         ovswitch = self.ovswitch
@@ -189,39 +188,35 @@ class OVSPort(LinuxApplication):
             self.ec.schedule(reschedule_delay, self.deploy)
             
         else:
-            self.discover()
-            self.provision()
+            self.do_discover()
+            self.do_provision()
             self.get_host_ip()
             self.create_port()
             self.get_local_end()
             self.ovswitch.ovs_status()
-            super(OVSPort, self).deploy()
 
-    def release(self):
+            super(OVSPort, self).do_deploy()
+
+    def do_release(self):
         """ Release the port RM means delete the ports
         """
         # OVS needs to wait until all associated RMs are released
         # to be released
-        try:
-            from nepi.resources.planetlab.openvswitch.tunnel import Tunnel
-            rm = self.get_connected(Tunnel.rtype())
-            if rm and rm[0].state < ResourceState.FINISHED:
-                self.ec.schedule(reschedule_delay, self.release)
-                return 
-                
-            msg = "Deleting the port %s" % self.get('port_name')
-            self.info(msg)
-            cmd = "sliver-ovs del_port %s" % self.get('port_name')
-            (out, err), proc = self.node.run(cmd, self.ovswitch.ovs_checks,
-                    sudo = True)
-
-            if proc.poll():
-                self.fail()
-                self.error(msg, out, err)
-                raise RuntimeError, msg
-        except:
-            import traceback
-            err = traceback.format_exc()
-            self.error(err)
-
-        super(OVSPort, self).release()
+        from nepi.resources.planetlab.openvswitch.tunnel import Tunnel
+        rm = self.get_connected(Tunnel.rtype())
+        if rm and rm[0].state < ResourceState.FINISHED:
+            self.ec.schedule(reschedule_delay, self.release)
+            return 
+            
+        msg = "Deleting the port %s" % self.get('port_name')
+        self.info(msg)
+        cmd = "sliver-ovs del_port %s" % self.get('port_name')
+        (out, err), proc = self.node.run(cmd, self.ovswitch.ovs_checks,
+                sudo = True)
+
+        if proc.poll():
+            self.error(msg, out, err)
+            raise RuntimeError, msg
+
+        super(OVSPort, self).do_release()
+