Merge "Ensure job.queued is correct after reconfig"
This commit is contained in:
@@ -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
|
||||
@@ -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")
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user