[CI] Fix resource leak when setUpClass fails (#21338)
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user