Request dependent job nodes from paused parent provider
When requesting nodes for a dependent job whose parent is paused, request nodes from the same provider as the paused parent. Change-Id: Iaa1ec5f3254ac26e6133a98dbda460a09e95d986 Depends-On: https://review.openstack.org/639418
This commit is contained in:
parent
8e09a758cf
commit
4fc2b345b4
|
@ -5120,6 +5120,7 @@ class TestJobPausePriority(AnsibleZuulTestCase):
|
|||
reqs = self.fake_nodepool.getNodeRequests()
|
||||
self.assertEqual(len(reqs), 1)
|
||||
self.assertEqual(reqs[0]['_oid'], '200-0000000000')
|
||||
self.assertEqual(reqs[0]['provider'], None)
|
||||
|
||||
self.fake_nodepool.unpause()
|
||||
self.waitUntilSettled()
|
||||
|
@ -5134,6 +5135,7 @@ class TestJobPausePriority(AnsibleZuulTestCase):
|
|||
|
||||
self.assertEqual(len(reqs), 1)
|
||||
self.assertEqual(reqs[0]['_oid'], '199-0000000001')
|
||||
self.assertEqual(reqs[0]['provider'], 'test-provider')
|
||||
|
||||
self.fake_nodepool.unpause()
|
||||
self.waitUntilSettled()
|
||||
|
|
|
@ -714,6 +714,7 @@ class NodeRequest(object):
|
|||
self.stat = None
|
||||
self.uid = uuid4().hex
|
||||
self.relative_priority = relative_priority
|
||||
self.provider = self._getPausedParentProvider()
|
||||
self.id = None
|
||||
self._zk_data = {} # Data that we read back from ZK
|
||||
# Zuul internal flags (not stored in ZK so they are not
|
||||
|
@ -721,18 +722,32 @@ class NodeRequest(object):
|
|||
self.failed = False
|
||||
self.canceled = False
|
||||
|
||||
def _getPausedParent(self):
|
||||
if self.build_set:
|
||||
job_graph = self.build_set.item.job_graph
|
||||
if job_graph:
|
||||
for parent in job_graph.getParentJobsRecursively(
|
||||
self.job.name):
|
||||
build = self.build_set.getBuild(parent.name)
|
||||
if build.paused:
|
||||
return build
|
||||
return None
|
||||
|
||||
def _getPausedParentProvider(self):
|
||||
build = self._getPausedParent()
|
||||
if build:
|
||||
nodeset = self.build_set.getJobNodeSet(build.job.name)
|
||||
if nodeset and nodeset.nodes:
|
||||
return list(nodeset.nodes.values())[0].provider
|
||||
return None
|
||||
|
||||
@property
|
||||
def priority(self):
|
||||
precedence_adjustment = 0
|
||||
if self.build_set:
|
||||
precedence = self.build_set.item.pipeline.precedence
|
||||
job_graph = self.build_set.item.job_graph
|
||||
if job_graph:
|
||||
for parent in job_graph.getParentJobsRecursively(
|
||||
self.job.name):
|
||||
build = self.build_set.getBuild(parent.name)
|
||||
if build.paused:
|
||||
precedence_adjustment = -1
|
||||
if self._getPausedParent():
|
||||
precedence_adjustment = -1
|
||||
else:
|
||||
precedence = PRECEDENCE_NORMAL
|
||||
initial_precedence = PRIORITY_MAP[precedence]
|
||||
|
@ -764,6 +779,7 @@ class NodeRequest(object):
|
|||
d.setdefault('node_types', nodes)
|
||||
d.setdefault('requestor', self.requestor)
|
||||
d.setdefault('created_time', self.created_time)
|
||||
d.setdefault('provider', self.provider)
|
||||
# We might change these
|
||||
d['state'] = self.state
|
||||
d['state_time'] = self.state_time
|
||||
|
|
Loading…
Reference in New Issue