[CI] Fix resource leak when setUpClass fails (#21338)

This commit is contained in:
Liangsheng Yin
2026-03-25 16:22:44 -07:00
committed by GitHub
parent d5c5683d2b
commit 4dd4e06f1d
4 changed files with 42 additions and 8 deletions
+27
View File
@@ -2083,6 +2083,33 @@ def _distributed_worker(rank, world_size, backend, port, func, result_queue, kwa
class CustomTestCase(unittest.TestCase):
def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
# Wrap the effective setUpClass so that tearDownClass is called
# even when setUpClass fails. Python's unittest skips tearDownClass
# if setUpClass raises, which can leak resources (ports, processes).
setup = cls.setUpClass
if getattr(setup, "_safe_setup_wrapped", False):
return
def safe_setUpClass(klass, _orig=setup):
try:
_orig.__func__(klass)
except Exception:
# Best-effort cleanup; suppress teardown errors so the
# original setUpClass exception propagates clearly.
try:
klass.tearDownClass()
except Exception:
pass
raise
# Set sentinel on the raw function so that bound method attribute
# lookup (which delegates to __func__) can detect it in subclasses.
safe_setUpClass._safe_setup_wrapped = True
cls.setUpClass = classmethod(safe_setUpClass)
def _callTestMethod(self, method):
max_retry = envs.SGLANG_TEST_MAX_RETRY.get()
if max_retry is None: