From 244f29f25fe685490c6ebedc15decacb262da71a Mon Sep 17 00:00:00 2001 From: mprahl Date: Mon, 9 Mar 2020 16:30:51 -0400 Subject: [PATCH] Make record_module_build_arches idempotent This function could get called multiple times if the init handler runs more than once. This can happen if the build failed in the init handler due to external infrastructure being down and the user resumes their build. --- module_build_service/scheduler/submit.py | 3 ++- tests/test_scheduler/test_submit.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/module_build_service/scheduler/submit.py b/module_build_service/scheduler/submit.py index c4a3d44f..06c7ee00 100644 --- a/module_build_service/scheduler/submit.py +++ b/module_build_service/scheduler/submit.py @@ -104,7 +104,8 @@ def record_module_build_arches(mmd, build): arch_obj = db_session.query(models.ModuleArch).filter_by(name=arch).first() if not arch_obj: arch_obj = models.ModuleArch(name=arch) - build.arches.append(arch_obj) + if arch_obj not in build.arches: + build.arches.append(arch_obj) db_session.commit() diff --git a/tests/test_scheduler/test_submit.py b/tests/test_scheduler/test_submit.py index cbdb032d..5127d6bc 100644 --- a/tests/test_scheduler/test_submit.py +++ b/tests/test_scheduler/test_submit.py @@ -87,6 +87,10 @@ class TestSubmit: arches = {arch.name for arch in build.arches} assert arches == set(get_build_arches.return_value) + # Ensure the function is idempotent + record_module_build_arches(build.mmd(), build) + assert len(build.arches) == len(get_build_arches.return_value) + @pytest.mark.parametrize( "scmurl", [