Merge "Delete nodeset requests for canceled jobs"

This commit is contained in:
Zuul
2025-05-07 20:54:38 +00:00
committed by Gerrit Code Review
2 changed files with 25 additions and 3 deletions

View File

@ -512,6 +512,26 @@ class TestLauncher(LauncherBaseTestCase):
'zuul.nodes.state.requested',
kind='g')
@simple_layout('layouts/nodepool.yaml', enable_nodepool=True)
def test_canceled_request(self):
# Test that a canceled request is cleaned up
self.hold_jobs_in_queue = True
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
A.addApproval('Code-Review', 2)
self.fake_gerrit.addEvent(A.addApproval('Approved', 1))
self.waitUntilSettled()
queue = list(self.executor_api.queued())
self.assertEqual(len(self.builds), 0)
self.assertEqual(len(queue), 1)
self.fake_gerrit.addEvent(A.getChangeAbandonedEvent())
self.waitUntilSettled()
self.assertHistory([])
reqs = self.launcher.api.getNodesetRequests()
self.assertEqual(0, len(reqs))
@simple_layout('layouts/nodepool-empty-nodeset.yaml', enable_nodepool=True)
def test_empty_nodeset(self):
self.executor_server.hold_jobs_in_build = True

View File

@ -3186,10 +3186,12 @@ class Scheduler(threading.Thread):
# Cancel node request if needed
req_id = buildset.getJobNodeRequestID(job)
if req_id:
if not isinstance(req_id, dict):
req = self.nodepool.zk_nodepool.getNodeRequest(req_id)
if req:
if self.nodepool.isNodeRequestID(req_id):
if req := self.nodepool.zk_nodepool.getNodeRequest(req_id):
self.nodepool.cancelRequest(req)
else:
if req := self.launcher.getRequest(req_id):
self.launcher.deleteRequest(req)
# Make sure we always remove the node request from the buildset
# (empty request don't have an ID).