From 99b0993fe02c405c42a1077cf3f1c87d2a03902e Mon Sep 17 00:00:00 2001 From: Ralph Bean Date: Sat, 29 Oct 2016 16:07:41 -0400 Subject: [PATCH] Pass around more info on pre-built components so we can resume module builds. --- module_build_service/builder.py | 17 +++++++++++----- .../scheduler/handlers/modules.py | 20 +++++++++---------- module_build_service/utils.py | 4 +--- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/module_build_service/builder.py b/module_build_service/builder.py index 35075863..591586e2 100644 --- a/module_build_service/builder.py +++ b/module_build_service/builder.py @@ -546,7 +546,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules if tagged: assert len(tagged) == 1, "Expected exactly one item in list. Got %s" % tagged - return tagged[0]['task_id'] + return tagged[0] return None @@ -554,7 +554,7 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules """ :param source : scmurl to spec repository : param artifact_name: name of artifact (which we couldn't get from spec due involved macros) - :return koji build task id + :return 4-tuple of the form (koji build task id, state, reason, nvr) """ # This code supposes that artifact_name can be built within the component @@ -577,11 +577,12 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules raise RuntimeError("Buildroot is not prep-ed") # Skip existing builds - task_id = self._get_task_by_artifact(artifact_name) + task_info = self._get_task_by_artifact(artifact_name) + task_id = task_info['task_id'] if task_id: log.info("skipping build of %s. Build already exists (task_id=%s), via %s" % ( source, task_id, self)) - return task_id + return task_id, koji.BUILD_STATES['COMPLETE'], 'Build already exists.', task_info['nvr'] self._koji_whitelist_packages([artifact_name,]) if '://' not in source: @@ -595,7 +596,13 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules priority=self.build_priority) log.info("submitted build of %s (task_id=%s), via %s" % ( source, task_id, self)) - return task_id + if task_id: + state = koji.BUILD_STATES['BUILDING'] + reason = "Submitted %s to Koji" % (artifact_name) + else: + state = koji.BUILD_STATES['FAILED'] + reason = "Failed to submit artifact %s to Koji" % (artifact_name) + return task_id, state, reason, None @classmethod def tag_to_repo(cls, config, tag_name, arch): diff --git a/module_build_service/scheduler/handlers/modules.py b/module_build_service/scheduler/handlers/modules.py index 6f30f7c4..2d651e24 100644 --- a/module_build_service/scheduler/handlers/modules.py +++ b/module_build_service/scheduler/handlers/modules.py @@ -27,6 +27,7 @@ from module_build_service import models, db, log import module_build_service.builder import module_build_service.pdc import module_build_service.utils +import module_build_service.messaging import koji @@ -130,15 +131,7 @@ def wait(config, session, msg): build.batch = 1 artifact_name = "module-build-macros" - state = koji.BUILD_STATES['BUILDING'] # Default state - state_reason = "" - task_id = builder.build(artifact_name=artifact_name, source=srpm) - - # Fail task if we failed to submit it to koji - # This typically happens when koji auth failed - if not task_id: - state = koji.BUILD_STATES['FAILED'] - state_reason = "Failed to submit artifact %s to Koji" % (artifact_name) + task_id, state, reason, nvr = builder.build(artifact_name=artifact_name, source=srpm) component_build = models.ComponentBuild( module_id=build.id, @@ -147,9 +140,16 @@ def wait(config, session, msg): scmurl=srpm, task_id=task_id, state=state, - state_reason = state_reason, + state_reason=reason, + nvr=nvr, batch=1, ) session.add(component_build) build.transition(config, state="build") + session.add(build) session.commit() + + # If this build already exists and is done, then fake the repo change event + # back to the scheduler + if state == koji.BUILD_STATES['COMPLETE']: + return [module_build_service.messaging.KojiRepoChange('fake msg', build.koji_tag)] diff --git a/module_build_service/utils.py b/module_build_service/utils.py index 25da016b..5457f164 100644 --- a/module_build_service/utils.py +++ b/module_build_service/utils.py @@ -70,11 +70,9 @@ def start_next_build_batch(config, module, session, builder, components=None): module.batch += 1 for c in unbuilt_components: c.batch = module.batch - c.task_id = builder.build(artifact_name=c.package, source=c.scmurl) + c.task_id, c.state, c.state_reason, c.nvr = builder.build(artifact_name=c.package, source=c.scmurl) if not c.task_id: - c.state = koji.BUILD_STATES["FAILED"] - c.state_reason = "Failed to submit to Koji" module.transition(config, models.BUILD_STATES["failed"], "Failed to submit artifact %s to Koji" % (c.package)) session.add(module)