READY = 3
STARTED = 4
STOPPED = 5
- FINISHED = 6
- FAILED = 7
- RELEASED = 8
+ FAILED = 6
+ RELEASED = 7
ResourceState2str = dict({
ResourceState.NEW : "NEW",
ResourceState.READY : "READY",
ResourceState.STARTED : "STARTED",
ResourceState.STOPPED : "STOPPED",
- ResourceState.FINISHED : "FINISHED",
ResourceState.FAILED : "FAILED",
ResourceState.RELEASED : "RELEASED",
})
def failtrap(func):
""" Decorator function for instance methods that should set the
RM state to FAILED when an error is raised. The methods that must be
- decorated are: discover, provision, deploy, start, stop and finish.
+ decorated are: discover, provision, deploy, start, stop.
"""
def wrapped(self, *args, **kwargs):
self._provision_time = None
self._ready_time = None
self._release_time = None
- self._finish_time = None
self._failed_time = None
self._state = ResourceState.NEW
""" Returns the release time of the RM as a timestamp """
return self._release_time
- @property
- def finish_time(self):
- """ Returns the finalization time of the RM as a timestamp """
- return self._finish_time
-
@property
def failed_time(self):
""" Returns the time failure occured for the RM as a timestamp """
self.set_released()
self.debug("----- RELEASED ---- ")
- @failtrap
- def finish(self):
- """ Sets the RM to state FINISHED.
-
- The FINISHED state is different from STOPPED state in that it
- should not be directly invoked by the user.
- STOPPED indicates that the user interrupted the RM, FINISHED means
- that the RM concluded normally the actions it was supposed to perform.
-
- This method should not be overriden directly. Specific functionality
- should be added in the do_finish method.
-
- """
- with self._release_lock:
- if self._state != ResourceState.RELEASED:
- self.do_finish()
-
def fail(self):
""" Sets the RM to state FAILED.
t = rm.start_time
elif state == ResourceState.STOPPED:
t = rm.stop_time
- elif state == ResourceState.FINISHED:
- t = rm.finish_time
elif state == ResourceState.RELEASED:
t = rm.release_time
else:
def do_release(self):
pass
- def do_finish(self):
- # In case the RM passed from STARTED directly to FINISHED,
- # we set the stop_time for consistency
- if self.stop_time == None:
- self.set_stopped()
-
- self.set_finished()
-
def do_fail(self):
self.set_failed()
""" Mark ResourceManager as REALEASED """
self.set_state(ResourceState.RELEASED, "_release_time")
- def set_finished(self):
- """ Mark ResourceManager as FINISHED """
- self.set_state(ResourceState.FINISHED, "_finish_time")
-
def set_failed(self):
""" Mark ResourceManager as FAILED """
self.set_state(ResourceState.FAILED, "_failed_time")
if not command:
# If no command was given (i.e. Application was used for dependency
- # installation), then the application is directly marked as FINISHED
- super(LinuxApplication, self).do_finish()
+ # installation), then the application is directly marked as STOPPED
+ super(LinuxApplication, self).set_stopped()
else:
if self.in_foreground:
self._run_in_foreground()
self.do_fail()
elif retcode == 0:
- self.do_finish()
+ self.set_stopped()
else:
# We need to query the status of the command we launched in
# background. In order to avoid overwhelming the remote host and
self.error(msg, out, err)
self.do_fail()
else:
- self.do_finish()
+ self.set_stopped()
self._last_state_check = tnow()