summaryrefslogtreecommitdiff
path: root/taskflow/patterns/linear_flow.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-07-06 22:32:25 +0000
committerGerrit Code Review <review@openstack.org>2013-07-06 22:32:25 +0000
commitb04ba8a43c392f36c4cf3b6d342e03822ab04971 (patch)
tree14b5f56f73dc994768ed88319fd9a8270583228c /taskflow/patterns/linear_flow.py
parentae9af359783106a1db6a88638e8ce0d332bcb3d8 (diff)
parentc17a85dcee81ded5f3c6b0d0bd441f03eee2bede (diff)
downloadtaskflow-b04ba8a43c392f36c4cf3b6d342e03822ab04971.tar.gz
Merge "Ensure we document and complete correct removal."
Diffstat (limited to 'taskflow/patterns/linear_flow.py')
-rw-r--r--taskflow/patterns/linear_flow.py27
1 files changed, 18 insertions, 9 deletions
diff --git a/taskflow/patterns/linear_flow.py b/taskflow/patterns/linear_flow.py
index 47c9b18..9a9df15 100644
--- a/taskflow/patterns/linear_flow.py
+++ b/taskflow/patterns/linear_flow.py
@@ -103,17 +103,26 @@ class Flow(base.Flow):
return "; ".join(lines)
@decorators.locked
- def remove(self, task_uuid):
- removed = False
+ def remove(self, uuid):
+ index_removed = -1
for (i, r) in enumerate(self._runners):
- if r.uuid == task_uuid:
- self._runners.pop(i)
- self._connected = False
- self._leftoff_at = None
- removed = True
+ if r.uuid == uuid:
+ index_removed = i
break
- if not removed:
- raise IndexError("No task found with uuid %s" % (task_uuid))
+ if index_removed == -1:
+ raise ValueError("No runner found with uuid %s" % (uuid))
+ else:
+ # Ensure that we reset out internal state after said removal.
+ removed = self._runners.pop(index_removed)
+ self._connected = False
+ self._leftoff_at = None
+ # Go and remove it from any runner after the removed runner since
+ # those runners may have had an attachment to it.
+ for r in self._runners[index_removed:]:
+ try:
+ r.runs_before.remove(removed)
+ except (IndexError, ValueError):
+ pass
def _connect(self):
if self._connected: