From 222f0417cf0648d3e2d49ddbf42ff0223e5a7624 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: May 29 2019 11:45:08 +0000 Subject: Use single session object in greenwave handler and call commit() in the end. --- diff --git a/module_build_service/scheduler/consumer.py b/module_build_service/scheduler/consumer.py index 956f2fa..7a5fb7f 100644 --- a/module_build_service/scheduler/consumer.py +++ b/module_build_service/scheduler/consumer.py @@ -235,7 +235,7 @@ class MBSConsumer(fedmsg.consumers.FedmsgConsumer): build = models.ModuleBuild.from_module_event(session, msg) elif type(msg) == module_build_service.messaging.GreenwaveDecisionUpdate: handler = self.on_decision_update - build = greenwave.get_corresponding_module_build(msg.subject_identifier) + build = greenwave.get_corresponding_module_build(session, msg.subject_identifier) else: return diff --git a/module_build_service/scheduler/handlers/greenwave.py b/module_build_service/scheduler/handlers/greenwave.py index 7c39a13..ff3a2f3 100644 --- a/module_build_service/scheduler/handlers/greenwave.py +++ b/module_build_service/scheduler/handlers/greenwave.py @@ -21,14 +21,15 @@ # # Written by Chenxiong Qi -from module_build_service import conf, db, log +from module_build_service import conf, log from module_build_service.builder.KojiModuleBuilder import KojiModuleBuilder from module_build_service.models import ModuleBuild, BUILD_STATES -def get_corresponding_module_build(nvr): +def get_corresponding_module_build(session, nvr): """Find corresponding module build from database and return + :param session: the SQLAlchemy database session object. :param str nvr: module build NVR. This is the subject_identifier included inside ``greenwave.decision.update`` message. :return: the corresponding module build object. For whatever the reason, @@ -48,7 +49,7 @@ def get_corresponding_module_build(nvr): # handling Greenwave event. return None - return ModuleBuild.get_by_id(db.session, module_build_id) + return ModuleBuild.get_by_id(session, module_build_id) def decision_update(config, session, msg): @@ -88,7 +89,7 @@ def decision_update(config, session, msg): ) return - build = get_corresponding_module_build(module_build_nvr) + build = get_corresponding_module_build(session, module_build_nvr) if build is None: log.debug( @@ -110,3 +111,5 @@ def decision_update(config, session, msg): module_build_nvr, msg.decision_context, ) + + session.commit() diff --git a/tests/test_scheduler/test_greenwave.py b/tests/test_scheduler/test_greenwave.py index 976bd1f..1853d04 100644 --- a/tests/test_scheduler/test_greenwave.py +++ b/tests/test_scheduler/test_greenwave.py @@ -43,7 +43,7 @@ class TestGetCorrespondingModuleBuild: def test_module_build_nvr_does_not_exist_in_koji(self, ClientSession): ClientSession.return_value.getBuild.return_value = None - assert get_corresponding_module_build("n-v-r") is None + assert get_corresponding_module_build(db.session, "n-v-r") is None @pytest.mark.parametrize( "build_info", @@ -60,7 +60,7 @@ class TestGetCorrespondingModuleBuild: def test_cannot_find_module_build_id_from_build_info(self, ClientSession, build_info): ClientSession.return_value.getBuild.return_value = build_info - assert get_corresponding_module_build("n-v-r") is None + assert get_corresponding_module_build(db.session, "n-v-r") is None @patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession") def test_corresponding_module_build_id_does_not_exist_in_db(self, ClientSession): @@ -70,7 +70,7 @@ class TestGetCorrespondingModuleBuild: "extra": {"typeinfo": {"module": {"module_build_service_id": fake_module_build_id + 1}}} } - assert get_corresponding_module_build("n-v-r") is None + assert get_corresponding_module_build(db.session, "n-v-r") is None @patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession") def test_find_the_module_build(self, ClientSession): @@ -82,7 +82,7 @@ class TestGetCorrespondingModuleBuild: "extra": {"typeinfo": {"module": {"module_build_service_id": expected_module_build.id}}} } - build = get_corresponding_module_build("n-v-r") + build = get_corresponding_module_build(db.session, "n-v-r") assert expected_module_build.id == build.id assert expected_module_build.name == build.name