diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index 35ad30ce65dcbcde6298d682edcef52ba9007947..85e658db855ca1fabf66c80cbad43c10215880cc 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -509,10 +509,21 @@ def launch_refresh_cache_all(config): def _wait_for_tasks(task_ids, update_callback=lambda s: None): + + all_successful = True + start_time = time.time() while task_ids and time.time() - start_time < FINALIZER_TIMEOUT_S: update_callback('waiting for tasks to complete: %r' % task_ids) time.sleep(FINALIZER_POLLING_FREQUENCY_S) + + def _is_error(id): + status = check_task_status(id) + return status['ready'] and not status['success'] + + if any([_is_error(id) for id in task_ids]): + all_successful = False + task_ids = [ id for id in task_ids if not check_task_status(id)['ready'] @@ -521,6 +532,9 @@ def _wait_for_tasks(task_ids, update_callback=lambda s: None): if task_ids: raise InventoryTaskError( 'timeout waiting for pending tasks to complete') + if not all_successful: + raise InventoryTaskError( + 'some tasks finished with an error') update_callback('pending taskscompleted in {} seconds'.format( time.time() - start_time))