Merge "Update change deps on refresh after cache miss"

This commit is contained in:
Zuul 2022-04-13 16:10:00 +00:00 committed by Gerrit Code Review
commit 467af580cd
3 changed files with 20 additions and 12 deletions

View File

@ -211,8 +211,7 @@ class TestScaleOutScheduler(ZuulTestCase):
self.executor_server.hold_jobs_in_build = True
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
A.addApproval('Code-Review', 2)
self.fake_gerrit.addEvent(A.addApproval('Approved', 1))
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
self.waitUntilSettled()
# Delete the change cache
@ -220,6 +219,12 @@ class TestScaleOutScheduler(ZuulTestCase):
if hasattr(connection, '_change_cache'):
connection.maintainCache([], max_age=0)
B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
B.data["commitMessage"] = "{}\n\nDepends-On: {}\n".format(
B.subject, A.data["url"]
)
self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
# Release
self.executor_server.hold_jobs_in_build = False
self.executor_server.release()
@ -229,6 +234,9 @@ class TestScaleOutScheduler(ZuulTestCase):
dict(name='project-merge', result='SUCCESS', changes='1,1'),
dict(name='project-test1', result='SUCCESS', changes='1,1'),
dict(name='project-test2', result='SUCCESS', changes='1,1'),
dict(name='project-merge', result='SUCCESS', changes='1,1 2,1'),
dict(name='project-test1', result='SUCCESS', changes='1,1 2,1'),
dict(name='project-test2', result='SUCCESS', changes='1,1 2,1'),
], ordered=False)
def test_pipeline_summary(self):

View File

@ -1662,10 +1662,16 @@ class TenantParser(object):
tenant.layout = self._parseLayout(
tenant, parsed_config, loading_errors, layout_uuid)
if self.scheduler:
tenant.semaphore_handler = SemaphoreHandler(
self.zk_client, self.statsd, tenant.name, tenant.layout
)
# Only call the postConfig hook if we have a scheduler as this will
# change data in ZooKeeper. In case we are in a zuul-web context,
# we don't want to do that.
for pipeline in tenant.layout.pipelines.values():
pipeline.manager._postConfig()
return tenant
@ -2355,16 +2361,7 @@ class TenantParser(object):
layout = model.Layout(tenant, layout_uuid)
layout.loading_errors = loading_errors
self.log.debug("Created layout id %s", layout.uuid)
self._addLayoutItems(layout, tenant, data)
# Only call the postConfig hook if we have a scheduler as this will
# change data in ZooKeeper. In case we are in a zuul-web context,
# we don't want to do that.
if self.scheduler:
for pipeline in layout.pipelines.values():
pipeline.manager._postConfig(layout)
return layout

View File

@ -91,7 +91,8 @@ class PipelineManager(metaclass=ABCMeta):
finally:
self.current_context = None
def _postConfig(self, layout):
def _postConfig(self):
layout = self.pipeline.tenant.layout
# If our layout UUID already matches the UUID in ZK, we don't
# need to make any changes in ZK. But we do still need to
# update our local object pointers. Note that our local queue
@ -227,6 +228,8 @@ class PipelineManager(metaclass=ABCMeta):
change = source.getChange(key)
if change is None:
self.log.error("Unable to resolve change from key %s", key)
if isinstance(change, model.Change):
self.updateCommitDependencies(change, None, event=None)
self._change_cache[change.cache_key] = change
resolved_changes.append(change)
return resolved_changes