Merge "Don't process builds not longer in job graph"
This commit is contained in:
commit
b5f294b225
|
@ -0,0 +1,61 @@
|
|||
- pipeline:
|
||||
name: check
|
||||
manager: independent
|
||||
trigger:
|
||||
gerrit:
|
||||
- event: patchset-created
|
||||
success:
|
||||
gerrit:
|
||||
Verified: 1
|
||||
failure:
|
||||
gerrit:
|
||||
Verified: -1
|
||||
|
||||
- job:
|
||||
name: base
|
||||
parent: null
|
||||
run: playbooks/run.yaml
|
||||
|
||||
- job:
|
||||
name: project-merge
|
||||
|
||||
- job:
|
||||
name: project-test1
|
||||
|
||||
- job:
|
||||
name: project-test2
|
||||
|
||||
- job:
|
||||
name: project-test3
|
||||
|
||||
- job:
|
||||
name: project-test4
|
||||
|
||||
- job:
|
||||
name: project-test5
|
||||
nodeset:
|
||||
nodes:
|
||||
- name: controller
|
||||
label: label1
|
||||
|
||||
- job:
|
||||
name: project-test6
|
||||
|
||||
- project:
|
||||
name: org/project
|
||||
check:
|
||||
fail-fast: true
|
||||
jobs:
|
||||
- project-merge
|
||||
- project-test2:
|
||||
dependencies: project-merge
|
||||
- project-test3:
|
||||
dependencies:
|
||||
- name: project-test2
|
||||
soft: true
|
||||
- project-test4:
|
||||
dependencies: project-test2
|
||||
- project-test5
|
||||
- project-test6:
|
||||
dependencies: project-merge
|
||||
voting: false
|
|
@ -7945,6 +7945,56 @@ class TestSchedulerFailFast(ZuulTestCase):
|
|||
dict(name='project-test6', result='FAILURE', changes='1,1'),
|
||||
], ordered=False)
|
||||
|
||||
def test_fail_fast_reconfigure(self):
|
||||
"""
|
||||
Tests that a pipeline that is flagged with fail-fast
|
||||
doesn't abort jobs when a job is removed during reconfig.
|
||||
"""
|
||||
self.executor_server.hold_jobs_in_build = True
|
||||
self.fake_nodepool.pause()
|
||||
|
||||
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
||||
self.executor_server.failJob('project-test1', A)
|
||||
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.waitUntilSettled()
|
||||
self.assertEqual(len(self.builds), 1)
|
||||
self.assertEqual(self.builds[0].name, 'project-merge')
|
||||
self.executor_server.release('project-merge')
|
||||
self.waitUntilSettled()
|
||||
|
||||
# Now project-test1, project-test2 and project-test6
|
||||
# should be running
|
||||
self.assertEqual(len(self.builds), 3)
|
||||
|
||||
# Commit new config that removes project-test1
|
||||
self.commitConfigUpdate('common-config',
|
||||
'layouts/fail-fast-reconfigure.yaml')
|
||||
self.sched.reconfigure(self.config)
|
||||
|
||||
# Release project-test1
|
||||
self.executor_server.release('project-test1')
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.fake_nodepool.unpause()
|
||||
self.executor_server.hold_jobs_in_build = False
|
||||
self.executor_server.release()
|
||||
self.waitUntilSettled()
|
||||
|
||||
self.assertEqual(len(self.builds), 0)
|
||||
self.assertEqual(A.reported, 1)
|
||||
self.assertEqual(A.patchsets[0]['approvals'][0]['value'], "1")
|
||||
self.assertHistory([
|
||||
dict(name='project-merge', result='SUCCESS', changes='1,1'),
|
||||
dict(name='project-test1', result='ABORTED', changes='1,1'),
|
||||
dict(name='project-test2', result='SUCCESS', changes='1,1'),
|
||||
dict(name='project-test3', result='SUCCESS', changes='1,1'),
|
||||
dict(name='project-test4', result='SUCCESS', changes='1,1'),
|
||||
dict(name='project-test5', result='SUCCESS', changes='1,1'),
|
||||
dict(name='project-test6', result='SUCCESS', changes='1,1'),
|
||||
], ordered=False)
|
||||
|
||||
|
||||
class TestPipelineSupersedes(ZuulTestCase):
|
||||
|
||||
|
|
|
@ -989,9 +989,14 @@ class PipelineManager(object):
|
|||
item = build.build_set.item
|
||||
|
||||
log.debug("Build %s of %s completed" % (build, item.change))
|
||||
item.pipeline.tenant.semaphore_handler.release(item, build.job)
|
||||
|
||||
if item.getJob(build.job.name) is None:
|
||||
log.info("Build %s no longer in job graph for item %s",
|
||||
build, item)
|
||||
return
|
||||
|
||||
item.setResult(build)
|
||||
item.pipeline.tenant.semaphore_handler.release(item, build.job)
|
||||
log.debug("Item %s status is now:\n %s", item, item.formatStatus())
|
||||
|
||||
if build.retry:
|
||||
|
|
Loading…
Reference in New Issue