Merge "Fix wedged scheduler on force-merge of non-existing template"

This commit is contained in:
Zuul 2019-02-05 18:49:44 +00:00 committed by Gerrit Code Review
commit e1c0eb080d
9 changed files with 117 additions and 1 deletions

View File

@ -0,0 +1,2 @@
- hosts: all
tasks: []

View File

@ -0,0 +1,35 @@
- pipeline:
name: check
manager: independent
trigger:
gerrit:
- event: patchset-created
success:
gerrit:
Verified: 1
failure:
gerrit:
Verified: -1
- pipeline:
name: post
manager: independent
trigger:
gerrit:
- event: ref-updated
ref: ^(?!refs/).*$
precedence: low
- job:
name: base
parent: null
- job:
name: post-job
run: playbooks/test.yaml
- job:
name: other-job
run: playbooks/test.yaml

View File

@ -0,0 +1 @@
test

View File

@ -0,0 +1,7 @@
- project:
check:
jobs:
- noop
post:
jobs:
- post-job

View File

@ -0,0 +1 @@
test

View File

@ -0,0 +1,4 @@
- project:
check:
jobs:
- other-job

View File

@ -0,0 +1,17 @@
- tenant:
name: tenant-one
source:
gerrit:
config-projects:
- common-config
untrusted-projects:
- org/project
- tenant:
name: tenant-two
source:
gerrit:
config-projects:
- common-config
untrusted-projects:
- org/project2

View File

@ -5002,3 +5002,47 @@ class TestProvidesRequires(ZuulDBTestCase):
])
self.assertIn('image-user : SKIPPED', B.messages[0])
self.assertIn('not met by build', B.messages[0])
class TestForceMergeMissingTemplate(ZuulTestCase):
tenant_config_file = "config/force-merge-template/main.yaml"
def test_force_merge_missing_template(self):
"""
Tests that force merging a change using a non-existent project
template triggering a post job doesn't wedge zuul on reporting.
"""
# Create change that adds uses a non-existent project template
conf = textwrap.dedent(
"""
- project:
templates:
- non-existent
check:
jobs:
- noop
post:
jobs:
- post-job
""")
file_dict = {'zuul.yaml': conf}
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A',
files=file_dict)
# Now force merge the change
A.setMerged()
self.fake_gerrit.addEvent(A.getChangeMergedEvent())
self.waitUntilSettled()
self.fake_gerrit.addEvent(A.getRefUpdatedEvent())
self.waitUntilSettled()
B = self.fake_gerrit.addFakeChange('org/project2', 'master', 'B')
self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
self.waitUntilSettled()
self.assertEqual(B.reported, 1)
self.assertHistory([
dict(name='other-job', result='SUCCESS', changes='2,1'),
])

View File

@ -912,7 +912,12 @@ class PipelineManager(object):
layout = (item.layout or self.pipeline.tenant.layout)
project_in_pipeline = True
if not layout.getProjectPipelineConfig(item):
ppc = None
try:
ppc = layout.getProjectPipelineConfig(item)
except Exception:
self.log.exception("Invalid config for change %s" % item.change)
if not ppc:
self.log.debug("Project %s not in pipeline %s for change %s" % (
item.change.project, self.pipeline, item.change))
project_in_pipeline = False