Merge "Eliminate unnecessary sleeps during no-op update"
This commit is contained in:
commit
21bc5f9b76
|
@ -351,7 +351,8 @@ class DependencyTaskGroup(object):
|
||||||
of the error will be cancelled). Once all chains are complete, any
|
of the error will be cancelled). Once all chains are complete, any
|
||||||
errors will be rolled up into an ExceptionGroup exception.
|
errors will be rolled up into an ExceptionGroup exception.
|
||||||
"""
|
"""
|
||||||
self._runners = dict((o, TaskRunner(task, o)) for o in dependencies)
|
self._keys = list(dependencies)
|
||||||
|
self._runners = dict((o, TaskRunner(task, o)) for o in self._keys)
|
||||||
self._graph = dependencies.graph(reverse=reverse)
|
self._graph = dependencies.graph(reverse=reverse)
|
||||||
self.error_wait_time = error_wait_time
|
self.error_wait_time = error_wait_time
|
||||||
self.aggregate_exceptions = aggregate_exceptions
|
self.aggregate_exceptions = aggregate_exceptions
|
||||||
|
@ -374,6 +375,8 @@ class DependencyTaskGroup(object):
|
||||||
try:
|
try:
|
||||||
for k, r in self._ready():
|
for k, r in self._ready():
|
||||||
r.start()
|
r.start()
|
||||||
|
if not r:
|
||||||
|
del self._graph[k]
|
||||||
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
@ -417,8 +420,8 @@ class DependencyTaskGroup(object):
|
||||||
Ready subtasks are subtasks whose dependencies have all been satisfied,
|
Ready subtasks are subtasks whose dependencies have all been satisfied,
|
||||||
but which have not yet been started.
|
but which have not yet been started.
|
||||||
"""
|
"""
|
||||||
for k, n in six.iteritems(self._graph):
|
for k in self._keys:
|
||||||
if not n:
|
if not self._graph.get(k, True):
|
||||||
runner = self._runners[k]
|
runner = self._runners[k]
|
||||||
if runner and not runner.started():
|
if runner and not runner.started():
|
||||||
yield k, runner
|
yield k, runner
|
||||||
|
|
|
@ -94,7 +94,7 @@ class DependencyTaskGroupTest(common.HeatTestCase):
|
||||||
self.steps = 0
|
self.steps = 0
|
||||||
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
|
self.m.StubOutWithMock(scheduler.TaskRunner, '_sleep')
|
||||||
with self._dep_test(('second', 'first')):
|
with self._dep_test(('second', 'first')):
|
||||||
scheduler.TaskRunner._sleep(None).AndReturn(None)
|
pass
|
||||||
|
|
||||||
def test_single_node(self):
|
def test_single_node(self):
|
||||||
with self._dep_test(('only', None)) as dummy:
|
with self._dep_test(('only', None)) as dummy:
|
||||||
|
|
Loading…
Reference in New Issue