Adding attribute hardRelease for base ResourceManager class
authorAlina Quereilhac <alina.quereilhac@inria.fr>
Sat, 19 Apr 2014 18:18:29 +0000 (20:18 +0200)
committerAlina Quereilhac <alina.quereilhac@inria.fr>
Sat, 19 Apr 2014 18:18:29 +0000 (20:18 +0200)
src/nepi/execution/ec.py
src/nepi/execution/resource.py
src/nepi/resources/linux/application.py

index 1d337e8..94784b2 100644 (file)
@@ -869,6 +869,9 @@ class ExperimentController(object):
             :type guids: list
 
         """
+        if isinstance(guids, int):
+            guids = [guids]
+
         if not guids:
             guids = self.resources
 
@@ -883,6 +886,10 @@ class ExperimentController(object):
             self.schedule("0s", rm.release)
 
         self.wait_released(guids)
+
+        for guid in guids:
+            if self.get(guid, "hardRelease"):
+                del self._resources[guid]
         
     def shutdown(self):
         """ Releases all resources and stops the ExperimentController
index c56aa5b..ba84805 100644 (file)
@@ -193,8 +193,17 @@ class ResourceManager(Logger):
                 type = Types.Bool,
                 default = True,
                 flags = Flags.Design)
+        hard_release = Attribute("hardRelease", 
+                "Forces removal of all result files and directories associated "
+                "to the RM upon resource release. After release the RM will "
+                "be removed from the EC and the results will not longer be "
+                "accessible",
+                type = Types.Bool,
+                default = False,
+                flags = Flags.Design)
 
         cls._register_attribute(critical)
+        cls._register_attribute(hard_release)
         
     @classmethod
     def _register_traces(cls):
index 9da05af..45efd21 100644 (file)
@@ -637,11 +637,15 @@ class LinuxApplication(ResourceManager):
     def do_release(self):
         self.info("Releasing resource")
 
+        self.do_stop()
+        
         tear_down = self.get("tearDown")
         if tear_down:
             self.node.execute(tear_down)
 
-        self.do_stop()
+        hard_release = self.get("hardRelease")
+        if hard_release:
+            self.node.rmdir(self.app_home)
 
         super(LinuxApplication, self).do_release()