From f22691904ff4459629daf842390fd6fea94b049e Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Thu, 13 Jun 2013 20:03:27 +0200 Subject: [PATCH] scheduler: Simplify DependencyTaskGroup interface Instead of passing a function that takes one argument and returns a task that takes no arguments, simply pass a task that takes one argument. Change-Id: I73d5f137d5db492c09e6887f80e7e759734c211f --- heat/engine/parser.py | 2 +- heat/engine/scheduler.py | 17 ++++++++++------- heat/tests/test_scheduler.py | 12 +----------- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/heat/engine/parser.py b/heat/engine/parser.py index 974b8eb1c0..05341c5821 100644 --- a/heat/engine/parser.py +++ b/heat/engine/parser.py @@ -294,7 +294,7 @@ class Stack(object): res = None def resource_create(r): - return r.create + return r.create() create_task = scheduler.DependencyTaskGroup(self.dependencies, resource_create) diff --git a/heat/engine/scheduler.py b/heat/engine/scheduler.py index 6857c9bb44..ab98748273 100644 --- a/heat/engine/scheduler.py +++ b/heat/engine/scheduler.py @@ -263,19 +263,22 @@ class DependencyTaskGroup(object): A task which manages a group of subtasks that have ordering dependencies. """ - def __init__(self, dependencies, make_task=lambda o: o, + def __init__(self, dependencies, task=lambda o: o(), reverse=False, name=None): """ - Initialise with the task dependencies and (optionally) a function for - creating a task from each dependency object. + Initialise with the task dependencies and (optionally) a task to run on + each. + + If no task is supplied, it is assumed that the tasks are stored + directly in the dependency tree. If a task is supplied, the object + stored in the dependency tree is passed as an argument. """ - self._runners = dict((o, TaskRunner(make_task(o))) - for o in dependencies) + self._runners = dict((o, TaskRunner(task, o)) for o in dependencies) self._graph = dependencies.graph(reverse=reverse) if name is None: - name = '(%s) %s' % (getattr(make_task, '__name__', - task_description(make_task)), + name = '(%s) %s' % (getattr(task, '__name__', + task_description(task)), str(dependencies)) self.name = name diff --git a/heat/tests/test_scheduler.py b/heat/tests/test_scheduler.py index b7c54f6ed3..7d12c912f2 100644 --- a/heat/tests/test_scheduler.py +++ b/heat/tests/test_scheduler.py @@ -166,19 +166,9 @@ class DependencyTaskGroupTest(mox.MoxTestBase): def _dep_test(self, *edges): dummy = DummyTask(getattr(self, 'steps', 3)) - class TaskMaker(object): - def __init__(self, name): - self.name = name - - def __repr__(self): - return 'Dummy task "%s"' % self.name - - def __call__(self, *args, **kwargs): - return dummy(self.name, *args, **kwargs) - deps = dependencies.Dependencies(edges) - tg = scheduler.DependencyTaskGroup(deps, TaskMaker) + tg = scheduler.DependencyTaskGroup(deps, dummy) self.mox.StubOutWithMock(dummy, 'do_step')