Fixing RM.DEPLOY being executed after/during RM.RELEASE by adding a release_lock...
[nepi.git] / src / nepi / resources / planetlab / node.py
index eadcd0d..c8039a1 100644 (file)
@@ -20,7 +20,7 @@
 
 from nepi.execution.attribute import Attribute, Flags, Types
 from nepi.execution.resource import ResourceManager, clsinit_copy, \
 
 from nepi.execution.attribute import Attribute, Flags, Types
 from nepi.execution.resource import ResourceManager, clsinit_copy, \
-        ResourceState, reschedule_delay, failtrap
+        ResourceState, reschedule_delay
 from nepi.resources.linux.node import LinuxNode
 from nepi.resources.planetlab.plcapi import PLCAPIFactory 
 from nepi.util.execfuncs import lexec
 from nepi.resources.linux.node import LinuxNode
 from nepi.resources.planetlab.plcapi import PLCAPIFactory 
 from nepi.util.execfuncs import lexec
@@ -37,6 +37,8 @@ class PlanetlabNode(LinuxNode):
             "associated to a PlanetLab user account"
     _backend = "planetlab"
 
             "associated to a PlanetLab user account"
     _backend = "planetlab"
 
+    ## XXX A.Q. This lock could use a more descriptive name and 
+    #           an explanatory comment
     lock = threading.Lock()
 
     @classmethod
     lock = threading.Lock()
 
     @classmethod
@@ -207,7 +209,7 @@ class PlanetlabNode(LinuxNode):
             
         return self._plapi
 
             
         return self._plapi
 
-    def discover(self):
+    def do_discover(self):
         """
         Based on the attributes defined by the user, discover the suitable nodes
         """
         """
         Based on the attributes defined by the user, discover the suitable nodes
         """
@@ -237,7 +239,7 @@ class PlanetlabNode(LinuxNode):
                     else:
                         self._put_node_in_provision(node_id)
                         self._node_to_provision = node_id
                     else:
                         self._put_node_in_provision(node_id)
                         self._node_to_provision = node_id
-                        super(PlanetlabNode, self).discover()
+                        super(PlanetlabNode, self).do_discover()
                 
                 else:
                     self.fail_node_not_available(hostname)
                 
                 else:
                     self.fail_node_not_available(hostname)
@@ -265,11 +267,11 @@ class PlanetlabNode(LinuxNode):
 
             if node_id:
                 self._node_to_provision = node_id
 
             if node_id:
                 self._node_to_provision = node_id
-                super(PlanetlabNode, self).discover()
+                super(PlanetlabNode, self).do_discover()
             else:
                self.fail_not_enough_nodes() 
             
             else:
                self.fail_not_enough_nodes() 
             
-    def provision(self):
+    def do_provision(self):
         """
         Add node to user's slice after verifing that the node is functioning
         correctly
         """
         Add node to user's slice after verifing that the node is functioning
         correctly
@@ -288,7 +290,7 @@ class PlanetlabNode(LinuxNode):
             except:
                 with PlanetlabNode.lock:
                     self._blacklist_node(node)
             except:
                 with PlanetlabNode.lock:
                     self._blacklist_node(node)
-                self.discover()
+                self.do_discover()
                 continue
 
             self._add_node_to_slice(node)
                 continue
 
             self._add_node_to_slice(node)
@@ -315,7 +317,7 @@ class PlanetlabNode(LinuxNode):
                     self._blacklist_node(node)
                     self._delete_node_from_slice(node)
                 self.set('hostname', None)
                     self._blacklist_node(node)
                     self._delete_node_from_slice(node)
                 self.set('hostname', None)
-                self.discover()
+                self.do_discover()
                 continue
             
             # check /proc directory is mounted (ssh_ok = True)
                 continue
             
             # check /proc directory is mounted (ssh_ok = True)
@@ -327,7 +329,7 @@ class PlanetlabNode(LinuxNode):
                         self._blacklist_node(node)
                         self._delete_node_from_slice(node)
                     self.set('hostname', None)
                         self._blacklist_node(node)
                         self._delete_node_from_slice(node)
                     self.set('hostname', None)
-                    self.discover()
+                    self.do_discover()
                     continue
             
                 else:
                     continue
             
                 else:
@@ -336,12 +338,13 @@ class PlanetlabNode(LinuxNode):
                     ip = self._get_ip(node)
                     self.set("ip", ip)
             
                     ip = self._get_ip(node)
                     self.set("ip", ip)
             
-        super(PlanetlabNode, self).provision()
+        super(PlanetlabNode, self).do_provision()
 
     def _filter_based_on_attributes(self):
         """
         Retrive the list of nodes ids that match user's constraints 
         """
 
     def _filter_based_on_attributes(self):
         """
         Retrive the list of nodes ids that match user's constraints 
         """
+
         # Map user's defined attributes with tagnames of PlanetLab
         timeframe = self.get("timeframe")[0]
         attr_to_tags = {
         # Map user's defined attributes with tagnames of PlanetLab
         timeframe = self.get("timeframe")[0]
         attr_to_tags = {
@@ -513,7 +516,7 @@ class PlanetlabNode(LinuxNode):
             return nodes_id
 
     def _choose_random_node(self, nodes):
             return nodes_id
 
     def _choose_random_node(self, nodes):
-        """
+        """ 
         From the possible nodes for provision, choose randomly to decrese the
         probability of different RMs choosing the same node for provision
         """
         From the possible nodes for provision, choose randomly to decrese the
         probability of different RMs choosing the same node for provision
         """
@@ -632,23 +635,19 @@ class PlanetlabNode(LinuxNode):
         return ip
 
     def fail_discovery(self):
         return ip
 
     def fail_discovery(self):
-        self.fail()
         msg = "Discovery failed. No candidates found for node"
         self.error(msg)
         raise RuntimeError, msg
 
     def fail_node_not_alive(self, hostname=None):
         msg = "Discovery failed. No candidates found for node"
         self.error(msg)
         raise RuntimeError, msg
 
     def fail_node_not_alive(self, hostname=None):
-        self.fail()
         msg = "Node %s not alive" % hostname
         raise RuntimeError, msg
     
     def fail_node_not_available(self, hostname):
         msg = "Node %s not alive" % hostname
         raise RuntimeError, msg
     
     def fail_node_not_available(self, hostname):
-        self.fail()
         msg = "Node %s not available for provisioning" % hostname
         raise RuntimeError, msg
 
     def fail_not_enough_nodes(self):
         msg = "Node %s not available for provisioning" % hostname
         raise RuntimeError, msg
 
     def fail_not_enough_nodes(self):
-        self.fail()
         msg = "Not enough nodes available for provisioning"
         raise RuntimeError, msg
 
         msg = "Not enough nodes available for provisioning"
         raise RuntimeError, msg