summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-01-12 16:10:05 +0000
committerGerrit Code Review <review@openstack.org>2023-01-12 16:10:05 +0000
commita643be9a5d4202a3b70336118239e596a1baeec7 (patch)
treee27cd6dd879accdafc648592f81c9572724bd870
parenta1717e39ef200bb4c629e6f9e3d5d7bfae40f26f (diff)
parentf82ef0882cbbbab468bf0b5551cdf91d715f0321 (diff)
downloadzuul-a643be9a5d4202a3b70336118239e596a1baeec7.tar.gz
Merge "Further avoid unnecessary change dependency updates"
-rw-r--r--tests/fixtures/layouts/two-check.yaml47
-rw-r--r--tests/unit/test_scheduler.py16
-rw-r--r--zuul/source/__init__.py2
3 files changed, 64 insertions, 1 deletions
diff --git a/tests/fixtures/layouts/two-check.yaml b/tests/fixtures/layouts/two-check.yaml
new file mode 100644
index 000000000..bc3e59818
--- /dev/null
+++ b/tests/fixtures/layouts/two-check.yaml
@@ -0,0 +1,47 @@
+- pipeline:
+ name: check1
+ manager: independent
+ trigger:
+ gerrit:
+ - event: patchset-created
+ success:
+ gerrit:
+ Verified: 1
+ failure:
+ gerrit:
+ Verified: -1
+
+- pipeline:
+ name: check2
+ manager: independent
+ trigger:
+ gerrit:
+ - event: patchset-created
+ success:
+ gerrit:
+ Verified: 1
+ failure:
+ gerrit:
+ Verified: -1
+
+- job:
+ name: base
+ parent: null
+ run: playbooks/base.yaml
+ nodeset:
+ nodes:
+ - label: ubuntu-xenial
+ name: controller
+
+- job:
+ name: check-job
+ run: playbooks/check.yaml
+
+- project:
+ name: org/project
+ check1:
+ jobs:
+ - check-job
+ check2:
+ jobs:
+ - check-job
diff --git a/tests/unit/test_scheduler.py b/tests/unit/test_scheduler.py
index 6a0da1279..5c36e6621 100644
--- a/tests/unit/test_scheduler.py
+++ b/tests/unit/test_scheduler.py
@@ -3713,6 +3713,22 @@ class TestScheduler(ZuulTestCase):
self.assertEqual(self.history[4].pipeline, 'check')
self.assertEqual(self.history[5].pipeline, 'check')
+ @simple_layout('layouts/two-check.yaml')
+ def test_query_dependency_count(self):
+ # Test that we efficiently query dependent changes
+ A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
+ B = self.fake_gerrit.addFakeChange('org/project', 'master', 'B')
+ B.data['commitMessage'] = '%s\n\nDepends-On: %s\n' % (
+ B.subject, A.data['url'])
+ self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+ # 1. The query to find the change id
+ # from the Depends-On string "change:1" (simpleQuery)
+ # 2. The query to populate the change once we know the id
+ # (queryChange)
+ self.assertEqual(A.queried, 2)
+ self.assertEqual(B.queried, 1)
+
def test_reconfigure_merge(self):
"""Test that two reconfigure events are merged"""
# Wrap the recofiguration handler so we can count how many
diff --git a/zuul/source/__init__.py b/zuul/source/__init__.py
index dd11aa9b6..01a683b23 100644
--- a/zuul/source/__init__.py
+++ b/zuul/source/__init__.py
@@ -109,7 +109,7 @@ class BaseSource(object, metaclass=abc.ABCMeta):
time.sleep(1)
else:
raise
- return dep
+ return dep
@abc.abstractmethod
def getChangesDependingOn(self, change, projects, tenant):