Merge "Ensure job.queued is correct after reconfig"

This commit is contained in:
Zuul
2020-02-25 12:28:56 +00:00
committed by Gerrit Code Review
3 changed files with 109 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
- pipeline:
name: check
manager: independent
trigger:
gerrit:
- event: patchset-created
success:
gerrit:
Verified: 1
failure:
gerrit:
Verified: -1
- pipeline:
name: gate
manager: dependent
success-message: Build succeeded (gate).
trigger:
gerrit:
- event: comment-added
approval:
- Approved: 1
success:
gerrit:
Verified: 2
submit: true
failure:
gerrit:
Verified: -2
start:
gerrit:
Verified: 0
precedence: high
- pipeline:
name: post
manager: independent
trigger:
gerrit:
- event: ref-updated
ref: ^(?!refs/).*$
- job:
name: base
parent: null
run: playbooks/base.yaml
nodeset:
nodes:
- label: ubuntu-xenial
name: controller
- job:
name: check-job
run: playbooks/check.yaml
- job:
name: post-job
run: playbooks/post.yaml
- project:
name: org/project
check:
jobs:
- check-job
gate:
jobs:
- check-job
post:
jobs:
- post-job
+34
View File
@@ -3732,6 +3732,40 @@ class TestScheduler(ZuulTestCase):
self.assertEqual(A.data['status'], 'MERGED')
self.assertEqual(A.reported, 2)
@simple_layout('layouts/single-job-with-nodeset.yaml')
def test_live_reconfiguration_queued_node_requests(self):
# Test that a job with a queued node request still has the
# correct state after reconfiguration.
self.fake_nodepool.pause()
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
self.waitUntilSettled()
def get_job():
data = json.loads(self.sched.formatStatusJSON('tenant-one'))
for pipeline in data['pipelines']:
for queue in pipeline['change_queues']:
for head in queue['heads']:
for item in head:
for job in item['jobs']:
if job['name'] == 'check-job':
return job
job = get_job()
self.assertTrue(job['queued'])
self.sched.reconfigure(self.config)
self.waitUntilSettled()
job = get_job()
self.assertTrue(job['queued'])
self.fake_nodepool.unpause()
self.waitUntilSettled()
self.assertHistory([
dict(name='check-job', result='SUCCESS', changes='1,1'),
])
@simple_layout('layouts/repo-deleted.yaml')
def test_repo_deleted(self):
self.init_repo("org/delete-project")
+5
View File
@@ -2592,6 +2592,11 @@ class QueueItem(object):
req = build_set.getJobNodeRequest(job.name)
if req is None:
jobs_not_requested.add(job)
else:
# This may have been reset due to a reconfig;
# since we know there is a queued request for
# it, set it here.
job.queued = True
# Attempt to request nodes for jobs in the order jobs appear
# in configuration.