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)) diff --git a/setup.py b/setup.py index ba6857781fdd0c7bfb4b05f257d5d2966e60f89d..8bc98c6dc9256e7dba35d923ed286760254f3ec2 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='inventory-provider', - version="0.24", + version="0.25", author='GEANT', author_email='swd@geant.org', description='Dashboard inventory provider',