Merge "Don't request empty nodesets" into feature/zuulv3

This commit is contained in:
Jenkins 2017-08-07 19:36:06 +00:00 committed by Gerrit Code Review
commit 7f98f3132c
4 changed files with 26 additions and 6 deletions

View File

@ -43,6 +43,9 @@
- job: - job:
name: project-merge name: project-merge
hold-following-changes: true hold-following-changes: true
nodes:
- name: controller
label: label1
- job: - job:
name: project-test1 name: project-test1
@ -66,9 +69,15 @@
- job: - job:
name: project-test2 name: project-test2
nodes:
- name: controller
label: label1
- job: - job:
name: project1-project2-integration name: project1-project2-integration
nodes:
- name: controller
label: label1
- job: - job:
name: project-testfile name: project-testfile

View File

@ -62,7 +62,8 @@ class TestSchedulerSSL(SSLZuulTestCase):
self.assertEqual(A.reported, 2) self.assertEqual(A.reported, 2)
self.assertEqual(self.getJobFromHistory('project-test1').node, self.assertEqual(self.getJobFromHistory('project-test1').node,
'label1') 'label1')
self.assertIsNone(self.getJobFromHistory('project-test2').node) self.assertEqual(self.getJobFromHistory('project-test2').node,
'label1')
class TestScheduler(ZuulTestCase): class TestScheduler(ZuulTestCase):
@ -85,7 +86,8 @@ class TestScheduler(ZuulTestCase):
self.assertEqual(A.reported, 2) self.assertEqual(A.reported, 2)
self.assertEqual(self.getJobFromHistory('project-test1').node, self.assertEqual(self.getJobFromHistory('project-test1').node,
'label1') 'label1')
self.assertIsNone(self.getJobFromHistory('project-test2').node) self.assertEqual(self.getJobFromHistory('project-test2').node,
'label1')
# TODOv3(jeblair): we may want to report stats by tenant (also?). # TODOv3(jeblair): we may want to report stats by tenant (also?).
# Per-driver # Per-driver

View File

@ -409,6 +409,10 @@ class ExecutorClient(object):
del self.builds[job.unique] del self.builds[job.unique]
except: except:
pass pass
# Since this isn't otherwise going to get a build complete
# event, send one to the scheduler so that it can unlock
# the nodes.
self.sched.onBuildCompleted(build, 'CANCELED', {})
return True return True
return False return False

View File

@ -29,10 +29,15 @@ class Nodepool(object):
req = model.NodeRequest(self.sched.hostname, build_set, job, nodeset) req = model.NodeRequest(self.sched.hostname, build_set, job, nodeset)
self.requests[req.uid] = req self.requests[req.uid] = req
self.sched.zk.submitNodeRequest(req, self._updateNodeRequest) if nodeset.nodes:
# Logged after submission so that we have the request id self.sched.zk.submitNodeRequest(req, self._updateNodeRequest)
self.log.info("Submited node request %s" % (req,)) # Logged after submission so that we have the request id
self.log.info("Submited node request %s" % (req,))
else:
self.log.info("Fulfilling empty node request %s" % (req,))
req.state = model.STATE_FULFILLED
self.sched.onNodesProvisioned(req)
del self.requests[req.uid]
return req return req
def cancelRequest(self, request): def cancelRequest(self, request):