diff --git a/module_build_service/scheduler/handlers/modules.py b/module_build_service/scheduler/handlers/modules.py index ffcf3527..65a7188d 100644 --- a/module_build_service/scheduler/handlers/modules.py +++ b/module_build_service/scheduler/handlers/modules.py @@ -257,18 +257,27 @@ def wait(config, session, msg): artifact_name = "module-build-macros" task_id, state, reason, nvr = builder.build(artifact_name=artifact_name, source=srpm) - component_build = models.ComponentBuild( - module_id=build.id, - package=artifact_name, - format="rpms", - scmurl=srpm, - task_id=task_id, - state=state, - state_reason=reason, - nvr=nvr, - batch=1, - ) - session.add(component_build) + component_build = models.ComponentBuild.from_component_name( + session, artifact_name, build.id) + if component_build: + component_build.task_id = task_id + component_build.state = state + component_build.state_reason = reason + component_build.nvr = nvr + else: + component_build = models.ComponentBuild( + module_id=build.id, + package=artifact_name, + format="rpms", + scmurl=srpm, + task_id=task_id, + state=state, + state_reason=reason, + nvr=nvr, + batch=1, + ) + session.add(component_build) + build.transition(config, state="build") session.add(build) session.commit() diff --git a/tests/test_scheduler/test_module_wait.py b/tests/test_scheduler/test_module_wait.py index eb0bedb0..843b9dbe 100644 --- a/tests/test_scheduler/test_module_wait.py +++ b/tests/test_scheduler/test_module_wait.py @@ -31,6 +31,7 @@ import vcr import koji from tests import conf, db, app, scheduler_init_data from module_build_service import build_logs +from module_build_service.models import ComponentBuild base_dir = os.path.dirname(os.path.dirname(__file__)) cassette_dir = base_dir + '/vcr-request-data/' @@ -118,6 +119,12 @@ class TestModuleWait(unittest.TestCase): config=conf, session=db.session, msg=msg) koji_session.newRepo.assert_called_once_with("module-123-build") + # When module-build-macros is reused, it still has to appear only + # once in database. + builds_count = db.session.query(ComponentBuild).filter_by( + package="module-build-macros", module_id=1).count() + self.assertEqual(builds_count, 1) + @patch("module_build_service.builder.GenericBuilder.default_buildroot_groups", return_value={'build': [], 'srpm-build': []}) @patch("module_build_service.builder.KojiModuleBuilder.get_session")