From 0ff9978bc51cc262233f1b02850de6f9dcee26a9 Mon Sep 17 00:00:00 2001 From: Matt Martz Date: Thu, 22 Aug 2019 14:32:49 -0500 Subject: [PATCH] Ensure has_dead_workers functions (#60653) * Ensure has_dead_workers functions * Fix up tests * Add changelog. Fixes #29124 --- changelogs/fragments/29124-has-dead-workers.yaml | 4 ++++ lib/ansible/executor/task_queue_manager.py | 7 +++---- lib/ansible/plugins/strategy/__init__.py | 2 +- test/units/plugins/strategy/test_strategy_base.py | 2 ++ 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 changelogs/fragments/29124-has-dead-workers.yaml diff --git a/changelogs/fragments/29124-has-dead-workers.yaml b/changelogs/fragments/29124-has-dead-workers.yaml new file mode 100644 index 00000000000..a27141f1bfd --- /dev/null +++ b/changelogs/fragments/29124-has-dead-workers.yaml @@ -0,0 +1,4 @@ +bugfixes: +- TaskQueueManager - Ensure ``has_dead_workers`` can function, by using the + correct reference, and only allow an exit code of 0. + (https://github.com/ansible/ansible/issues/29124) diff --git a/lib/ansible/executor/task_queue_manager.py b/lib/ansible/executor/task_queue_manager.py index 336e1487675..cee75710084 100644 --- a/lib/ansible/executor/task_queue_manager.py +++ b/lib/ansible/executor/task_queue_manager.py @@ -286,10 +286,9 @@ class TaskQueueManager: # defunct = False - for (idx, x) in enumerate(self._workers): - if hasattr(x, 'exitcode'): - if x.exitcode in [-9, -11, -15]: - defunct = True + for x in self._workers: + if getattr(x, 'exitcode', None): + defunct = True return defunct def send_callback(self, method_name, *args, **kwargs): diff --git a/lib/ansible/plugins/strategy/__init__.py b/lib/ansible/plugins/strategy/__init__.py index e4fe388d2c1..3679d4f02b8 100644 --- a/lib/ansible/plugins/strategy/__init__.py +++ b/lib/ansible/plugins/strategy/__init__.py @@ -158,7 +158,7 @@ class StrategyBase: def __init__(self, tqm): self._tqm = tqm self._inventory = tqm.get_inventory() - self._workers = tqm.get_workers() + self._workers = tqm._workers self._variable_manager = tqm.get_variable_manager() self._loader = tqm.get_loader() self._final_q = tqm._final_q diff --git a/test/units/plugins/strategy/test_strategy_base.py b/test/units/plugins/strategy/test_strategy_base.py index ed318ee50ba..210cf76ee16 100644 --- a/test/units/plugins/strategy/test_strategy_base.py +++ b/test/units/plugins/strategy/test_strategy_base.py @@ -64,6 +64,7 @@ class TestStrategyBase(unittest.TestCase): mock_tqm = MagicMock(TaskQueueManager) mock_tqm._final_q = mock_queue + mock_tqm._workers = [] strategy_base = StrategyBase(tqm=mock_tqm) strategy_base.cleanup() @@ -103,6 +104,7 @@ class TestStrategyBase(unittest.TestCase): mock_tqm._failed_hosts = dict() mock_tqm._unreachable_hosts = dict() + mock_tqm._workers = [] strategy_base = StrategyBase(tqm=mock_tqm) mock_host = MagicMock()