Expose strategies so doc generation can easily pick them up
Since we have put a warning on the engine components docs saying they should not be used externally it seems ok to make these more visible so that people reading the docs can follow more of how it works (and the components involved there-in). Depends-On: I0f07858e96ea3baf46f8a453e253b9ed29c7f7e2 Depends-On: I33bd2d9dff9cb7dc1a50177db7286b7317966784 Change-Id: I24d5cbfd47aa786ffab923243b97c7ae43b2f21f
This commit is contained in:
committed by
Joshua Harlow
parent
d34997642d
commit
40cf88e55c
@@ -31,24 +31,34 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class _Strategy(object):
|
||||
"""Local/internal helper strategy base object"""
|
||||
class Strategy(object):
|
||||
"""Failure resolution strategy base class."""
|
||||
|
||||
strategy = None
|
||||
|
||||
def __init__(self, runtime):
|
||||
self._runtime = runtime
|
||||
|
||||
@abc.abstractmethod
|
||||
def apply(self):
|
||||
"""Applies some algorithm to resolve some detected failure."""
|
||||
|
||||
def __str__(self):
|
||||
base = reflection.get_class_name(self, fully_qualified=False)
|
||||
return base + "(strategy=%s)" % (self.strategy.name)
|
||||
if self.strategy is not None:
|
||||
strategy_name = self.strategy.name
|
||||
else:
|
||||
strategy_name = "???"
|
||||
return base + "(strategy=%s)" % (strategy_name)
|
||||
|
||||
|
||||
class _RevertAndRetry(_Strategy):
|
||||
class RevertAndRetry(Strategy):
|
||||
"""Sets the *associated* subflow for revert to be later retried."""
|
||||
|
||||
strategy = retry_atom.RETRY
|
||||
|
||||
def __init__(self, runtime, retry):
|
||||
super(_RevertAndRetry, self).__init__(runtime)
|
||||
super(RevertAndRetry, self).__init__(runtime)
|
||||
self._retry = retry
|
||||
|
||||
def apply(self):
|
||||
@@ -59,13 +69,13 @@ class _RevertAndRetry(_Strategy):
|
||||
return tweaked
|
||||
|
||||
|
||||
class _RevertAll(_Strategy):
|
||||
class RevertAll(Strategy):
|
||||
"""Sets *all* nodes/atoms to the ``REVERT`` intention."""
|
||||
|
||||
strategy = retry_atom.REVERT_ALL
|
||||
|
||||
def __init__(self, runtime):
|
||||
super(_RevertAll, self).__init__(runtime)
|
||||
super(RevertAll, self).__init__(runtime)
|
||||
self._analyzer = runtime.analyzer
|
||||
|
||||
def apply(self):
|
||||
@@ -73,13 +83,13 @@ class _RevertAll(_Strategy):
|
||||
state=None, intention=st.REVERT)
|
||||
|
||||
|
||||
class _Revert(_Strategy):
|
||||
class Revert(Strategy):
|
||||
"""Sets atom and *associated* nodes to the ``REVERT`` intention."""
|
||||
|
||||
strategy = retry_atom.REVERT
|
||||
|
||||
def __init__(self, runtime, atom):
|
||||
super(_Revert, self).__init__(runtime)
|
||||
super(Revert, self).__init__(runtime)
|
||||
self._atom = atom
|
||||
|
||||
def apply(self):
|
||||
@@ -99,7 +109,7 @@ class Completer(object):
|
||||
self._retry_action = runtime.retry_action
|
||||
self._storage = runtime.storage
|
||||
self._task_action = runtime.task_action
|
||||
self._undefined_resolver = _RevertAll(self._runtime)
|
||||
self._undefined_resolver = RevertAll(self._runtime)
|
||||
|
||||
def _complete_task(self, task, event, result):
|
||||
"""Completes the given task, processes task failure."""
|
||||
@@ -152,7 +162,7 @@ class Completer(object):
|
||||
# Ask retry controller what to do in case of failure.
|
||||
strategy = self._retry_action.on_failure(retry, atom, failure)
|
||||
if strategy == retry_atom.RETRY:
|
||||
return _RevertAndRetry(self._runtime, retry)
|
||||
return RevertAndRetry(self._runtime, retry)
|
||||
elif strategy == retry_atom.REVERT:
|
||||
# Ask parent retry and figure out what to do...
|
||||
parent_resolver = self._determine_resolution(retry, failure)
|
||||
@@ -162,9 +172,9 @@ class Completer(object):
|
||||
if parent_resolver is not self._undefined_resolver:
|
||||
if parent_resolver.strategy != retry_atom.REVERT:
|
||||
return parent_resolver
|
||||
return _Revert(self._runtime, retry)
|
||||
return Revert(self._runtime, retry)
|
||||
elif strategy == retry_atom.REVERT_ALL:
|
||||
return _RevertAll(self._runtime)
|
||||
return RevertAll(self._runtime)
|
||||
else:
|
||||
raise ValueError("Unknown atom failure resolution"
|
||||
" action/strategy '%s'" % strategy)
|
||||
|
||||
Reference in New Issue
Block a user