From 9aca8057a312f4344c6a91a496cd979014829df0 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Nov 18 2016 18:09:03 +0000 Subject: Handle the exception in builder.build(...) code and do not mark whole module as failed - mark just the particular component. --- diff --git a/module_build_service/utils.py b/module_build_service/utils.py index 2976b6a..a1aca93 100644 --- a/module_build_service/utils.py +++ b/module_build_service/utils.py @@ -107,14 +107,18 @@ def start_build_batch(config, module, session, builder, components=None): log.info('Concurrent build threshold met') break - c.task_id, c.state, c.state_reason, c.nvr = builder.build( - artifact_name=c.package, source=c.scmurl) - - if not c.task_id: - module.transition(config, models.BUILD_STATES["failed"], - "Failed to submit artifact %s to Koji" % (c.package)) - session.add(module) - break + try: + c.task_id, c.state, c.state_reason, c.nvr = builder.build( + artifact_name=c.package, source=c.scmurl) + except Exception as e: + c.state = koji.BUILD_STATES['FAILED'] + c.state_reason = "Failed to submit artifact %s to Koji: %s" % (c.package, str(e)) + continue + + if not c.task_id and c.state == koji.BUILD_STATES['BUILDING']: + c.state = koji.BUILD_STATES['FAILED'] + c.state_reason = "Failed to submit artifact %s to Koji" % (c.package) + continue session.commit() diff --git a/tests/test_scheduler/test_repo_done.py b/tests/test_scheduler/test_repo_done.py index 0db7a76..2b3334c 100644 --- a/tests/test_scheduler/test_repo_done.py +++ b/tests/test_scheduler/test_repo_done.py @@ -121,7 +121,4 @@ class TestRepoDone(unittest.TestCase): 'no matches for this...', '2016-some-guid-build') self.fn(config=self.config, session=self.session, msg=msg) build_fn.assert_called_once_with(artifact_name='foo', source='full_scm_url') - module_build.transition.assert_called_once_with(self.config, - module_build_service.models.BUILD_STATES["failed"], - 'Failed to submit artifact foo to Koji') self.assertEquals(unbuilt_component_build.state_reason, "Failed to submit artifact foo to Koji")