Merge "Centralize job canceling"

This commit is contained in:
Zuul
2019-04-15 21:52:18 +00:00
committed by Gerrit Code Review
2 changed files with 50 additions and 57 deletions

View File

@@ -420,46 +420,14 @@ class PipelineManager(object):
def cancelJobs(self, item, prime=True):
self.log.debug("Cancel jobs for change %s" % item.change)
canceled = False
jobs_to_release = []
old_build_set = item.current_build_set
old_jobs = {job.name: job for job in item.getJobs()}
jobs_to_cancel = item.getJobs()
if prime and item.current_build_set.ref:
item.resetAllBuilds()
for req in old_build_set.node_requests.values():
self.sched.nodepool.cancelRequest(req)
jobs_to_release.append(req.job)
old_build_set.node_requests = {}
canceled_jobs = set()
for build in old_build_set.getBuilds():
if build.result:
canceled_jobs.add(build.job.name)
continue
was_running = False
try:
was_running = self.sched.executor.cancel(build)
except Exception:
self.log.exception("Exception while canceling build %s "
"for change %s" % (build, item.change))
jobs_to_release.append(build.job)
if not was_running:
nodeset = build.build_set.getJobNodeSet(build.job.name)
self.sched.nodepool.returnNodeSet(nodeset, build)
build.result = 'CANCELED'
canceled = True
canceled_jobs.add(build.job.name)
for jobname, nodeset in list(old_build_set.nodesets.items()):
if jobname in canceled_jobs:
continue
self.sched.nodepool.returnNodeSet(nodeset)
jobs_to_release.append(old_jobs[jobname])
for job in jobs_to_release:
tenant = old_build_set.item.pipeline.tenant
tenant.semaphore_handler.release(
old_build_set.item, job)
for job in jobs_to_cancel:
self.sched.cancelJob(old_build_set, job)
for item_behind in item.items_behind:
self.log.debug("Canceling jobs for change %s, behind change %s" %