Merge "Discard pipeline trigger events when discarding tenant triggers"

This commit is contained in:
Zuul authored and Gerrit Code Review committed 2026-08-07 10:02:50 +00:00
commit c495a9e12c
2 files changed
+43 -1

No files matched your search

+38
View File
@@ -4190,6 +4190,44 @@ class TestTenantScopedWebApi(BaseTestWeb):
dict(name='project-test2', result='SUCCESS', changes='2,1'),
], ordered=False)
def test_state_post_timer(self):
self.executor_server.hold_jobs_in_build = False
authz = {'iss': 'zuul_operator',
'aud': 'zuul.example.com',
'sub': 'testuser',
'zuul': {
'admin': ['tenant-one', ],
},
'exp': int(time.time()) + 3600,
'iat': int(time.time())}
token = jwt.encode(authz, key='ThisIsABadSecretOnlyUsedForTesting',
algorithm='HS256')
args = {
'trigger_queue_discarding': True,
'reason': 'test discarding',
}
req = self.post_url(
'api/tenant/tenant-one/state',
headers={'Authorization': 'Bearer %s' % token},
json=args)
self.assertEqual(200, req.status_code, req.text)
self.commitConfigUpdate('common-config', 'layouts/timer.yaml')
self.scheds.execute(lambda app: app.sched.reconfigure(app.config))
self.waitUntilSettled()
# The pipeline triggers every second, so we should have seen
# several by now.
time.sleep(5)
self.waitUntilSettled()
self.commitConfigUpdate('common-config',
'layouts/no-timer.yaml')
self.scheds.execute(lambda app: app.sched.reconfigure(app.config))
self.waitUntilSettled()
self.assertHistory([])
@simple_layout('layouts/parameterized-builds.yaml')
def test_web_parameterized_build(self):
token = self._getToken(['tenant-one'])
+5 -1
View File
@@ -2715,6 +2715,7 @@ class Scheduler(threading.Thread):
].put(event.driver_name, event)
def process_pipeline_trigger_queue(self, tenant, tenant_lock, manager):
tenant_state = self.event_watcher.tenant_state[tenant.name]
for event in self.pipeline_trigger_events[tenant.name][
manager.pipeline.name]:
log = get_annotated_logger(self.log, event.zuul_event_id)
@@ -2739,7 +2740,10 @@ class Scheduler(threading.Thread):
if isinstance(event, SupercedeEvent):
self._doSupercedeEvent(event)
else:
self._process_trigger_event(tenant, manager, event)
if not tenant_state.trigger_queue_discarding:
self._process_trigger_event(tenant, manager, event)
else:
log.debug("Discarding trigger event %s", event)
except Exception:
log.exception("Failed to process trigger event %s", event)
finally: