From 549103881899751e84b411212f7820cde502b42b Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Fri, 24 Sep 2021 11:51:45 -0700 Subject: [PATCH] Attempt to refresh deps less often We may be able to avoid refreshing deps in some cases if we remove old versions of changes before refreshing deps. (It's not clear if a change-abandoned event will ever also be a message updated event, but it's theoretically possible, so that case is covered too.) Change-Id: Ia43a241da9930f955874fb0a470f3dd6c6c3b17b --- zuul/manager/__init__.py | 6 +++++- zuul/scheduler.py | 9 +++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/zuul/manager/__init__.py b/zuul/manager/__init__.py index 7287acc5c2..55b6801065 100644 --- a/zuul/manager/__init__.py +++ b/zuul/manager/__init__.py @@ -218,13 +218,17 @@ class PipelineManager(metaclass=ABCMeta): if not isinstance(change, model.Change): return + change_in_pipeline = False for item in self.pipeline.getAllItems(): for dep_change_ref in item.change.commit_needs_changes: + if item.change.equals(change): + change_in_pipeline = True dep_change_key = ChangeKey.fromReference(dep_change_ref) if dep_change_key.isSameChange(change.cache_stat.key): self.updateCommitDependencies(item.change, None, event) - self.updateCommitDependencies(change, None, event) + if change_in_pipeline: + self.updateCommitDependencies(change, None, event) def reportEnqueue(self, item): if not self.pipeline._disabled: diff --git a/zuul/scheduler.py b/zuul/scheduler.py index b52a684847..e2739dc855 100644 --- a/zuul/scheduler.py +++ b/zuul/scheduler.py @@ -1748,15 +1748,16 @@ class Scheduler(threading.Thread): e.change, project.source) return + if event.isPatchsetCreated(): + pipeline.manager.removeOldVersionsOfChange(change, event) + elif event.isChangeAbandoned(): + pipeline.manager.removeAbandonedChange(change, event) + # Let the pipeline update any dependencies that may need # refreshing if this change has updated. if event.isPatchsetCreated() or event.isMessageChanged(): pipeline.manager.refreshDeps(change, event) - if event.isPatchsetCreated(): - pipeline.manager.removeOldVersionsOfChange(change, event) - elif event.isChangeAbandoned(): - pipeline.manager.removeAbandonedChange(change, event) if pipeline.manager.eventMatches(event, change): pipeline.manager.addChange(change, event)