From 79e3eae43e31bb8efcf9b79fdb78d32705d09842 Mon Sep 17 00:00:00 2001 From: Brendan Reilly Date: Sep 02 2022 16:01:34 +0000 Subject: Add delay to missed new repo check --- diff --git a/module_build_service/scheduler/producer.py b/module_build_service/scheduler/producer.py index 496da5f..840f4a5 100644 --- a/module_build_service/scheduler/producer.py +++ b/module_build_service/scheduler/producer.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: MIT from __future__ import absolute_import from datetime import timedelta, datetime +import time import operator import koji @@ -452,5 +453,8 @@ def has_missed_new_repo_message(module_build, koji_session): 'Checking status of newRepo task "%d" for %s', module_build.new_repo_task_id, module_build) task_info = koji_session.getTaskInfo(module_build.new_repo_task_id) + # To avoid a race condition, wait at least 10 minutes to nudge build + if task_info['completion_ts'] and (time.time() - task_info['completion_ts']) < 600: + return False # Other final states, FAILED and CANCELED, are handled by retrigger_new_repo_on_failure return task_info["state"] == koji.TASK_STATES["CLOSED"] diff --git a/tests/test_scheduler/test_poller.py b/tests/test_scheduler/test_poller.py index 2ff41dd..02958aa 100644 --- a/tests/test_scheduler/test_poller.py +++ b/tests/test_scheduler/test_poller.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: MIT from __future__ import absolute_import from datetime import datetime, timedelta +import time import koji import mock @@ -77,14 +78,15 @@ class TestPoller: assert len(start_build_component.mock_calls) == expected_build_calls - @pytest.mark.parametrize('task_state, expect_start_build_component', ( - (None, True), # Indicates a newRepo task has not been triggered yet. - (koji.TASK_STATES["CLOSED"], True), - (koji.TASK_STATES["OPEN"], False), + @pytest.mark.parametrize('completion_ts, task_state, expect_start_build_component', ( + (None, None, True), # Indicates a newRepo task has not been triggered yet. + ((time.time() - 601), koji.TASK_STATES["CLOSED"], True), + (time.time(), koji.TASK_STATES["CLOSED"], False), + (None, koji.TASK_STATES["OPEN"], False), )) @patch("module_build_service.scheduler.batches.start_build_component") def test_process_paused_module_builds_with_new_repo_task( - self, start_build_component, create_builder, dbg, task_state, + self, start_build_component, create_builder, dbg, completion_ts, task_state, expect_start_build_component ): """ @@ -100,7 +102,8 @@ class TestPoller: module_build.time_modified = datetime.utcnow() - timedelta(days=5) if task_state: koji_session = mock.MagicMock() - koji_session.getTaskInfo.return_value = {"state": task_state} + koji_session.getTaskInfo.return_value = {"state": task_state, + "completion_ts": completion_ts} builder.koji_session = koji_session module_build.new_repo_task_id = 123 db_session.commit()