From 47d34ce582eadd65268a4e212184e671f66bdb2b Mon Sep 17 00:00:00 2001 From: Sviatoslav Sydorenko Date: Wed, 31 Aug 2022 19:23:14 +0200 Subject: [PATCH] Fail fast in stuck `ansible-galaxy-collection` (#78627) This specific integration test gets stuck periodically causing the Galaxy jobs to be killed on timeout wasting an hour of runtime. The module that gets stuck waiting on Pulp is an in-test one, called `setup_collections`. When it works, the task is complete in around 70 seconds but when it doesn't, it just freezes the whole play. This patch attempts to make it fail faster by putting a reasonable timeout value of 2 minutes. (cherry picked from commit f1c56e988dbbb769b34a3c80baa40c916b4d0c88) --- .../library/setup_collections.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test/integration/targets/ansible-galaxy-collection/library/setup_collections.py b/test/integration/targets/ansible-galaxy-collection/library/setup_collections.py index 58ec9b2a514..35b18dec873 100644 --- a/test/integration/targets/ansible-galaxy-collection/library/setup_collections.py +++ b/test/integration/targets/ansible-galaxy-collection/library/setup_collections.py @@ -87,6 +87,10 @@ from ansible.module_utils.basic import AnsibleModule from ansible.module_utils._text import to_bytes from functools import partial from multiprocessing import dummy as threading +from multiprocessing import TimeoutError + + +COLLECTIONS_BUILD_AND_PUBLISH_TIMEOUT = 120 def publish_collection(module, collection): @@ -241,7 +245,14 @@ def run_module(): pool = threading.Pool(4) publish_func = partial(publish_collection, module) - result['results'] = pool.map(publish_func, module.params['collections']) + try: + result['results'] = pool.map_async( + publish_func, module.params['collections'], + ).get(timeout=COLLECTIONS_BUILD_AND_PUBLISH_TIMEOUT) + except TimeoutError as timeout_err: + module.fail_json( + 'Timed out waiting for collections to be provisioned.', + ) failed = bool(sum( r['build']['rc'] + r['publish']['rc'] for r in result['results']