]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-129694: Add `--parallel-threads` TSAN job to CI (gh-129696)
authorSam Gross <colesbury@gmail.com>
Thu, 6 Feb 2025 15:19:00 +0000 (10:19 -0500)
committerGitHub <noreply@github.com>
Thu, 6 Feb 2025 15:19:00 +0000 (15:19 +0000)
For now, this just adds a single test suite to the TSAN CI to be run
with `--parallel-threads`.

.github/workflows/reusable-tsan.yml
Lib/test/libregrtest/cmdline.py
Lib/test/libregrtest/main.py
Lib/test/libregrtest/tsan.py

index 1d2548565d50efd24c6dbca3b37f641dc261c098..8ac2f84099e5636cf0f28bda2f56cce9d91cf9c6 100644 (file)
@@ -74,6 +74,9 @@ jobs:
       run: make pythoninfo
     - name: Tests
       run: ./python -m test --tsan -j4
+    - name: Parallel tests
+      if: fromJSON(inputs.free-threading)
+      run: ./python -m test --tsan-parallel --parallel-threads=4 -j4
     - name: Display TSAN logs
       if: always()
       run: find "${GITHUB_WORKSPACE}" -name 'tsan_log.*' | xargs head -n 1000
index 1f3b2381c71d4554f8436480446f31e0bf096dbd..81c7106ac0c0f43a4ee335f139917c60b3fff858 100644 (file)
@@ -168,6 +168,7 @@ class Namespace(argparse.Namespace):
         self.pgo = False
         self.pgo_extended = False
         self.tsan = False
+        self.tsan_parallel = False
         self.worker_json = None
         self.start = None
         self.timeout = None
@@ -351,6 +352,9 @@ def _create_parser():
                        help='enable extended PGO training (slower training)')
     group.add_argument('--tsan', dest='tsan', action='store_true',
                        help='run a subset of test cases that are proper for the TSAN test')
+    group.add_argument('--tsan-parallel', action='store_true',
+                       help='run a subset of test cases that are appropriate '
+                            'for TSAN with `--parallel-threads=N`')
     group.add_argument('--fail-env-changed', action='store_true',
                        help='if a test file alters the environment, mark '
                             'the test as failed')
index de377f185f7ed9cbceb34cd1d9f98dd4bea3e39f..2f8fd4c92c119da8fcde190c2527887fc0fb3cfb 100644 (file)
@@ -20,7 +20,7 @@ from .results import TestResults, EXITCODE_INTERRUPTED
 from .runtests import RunTests, HuntRefleak
 from .setup import setup_process, setup_test_dir
 from .single import run_single_test, PROGRESS_MIN_TIME
-from .tsan import setup_tsan_tests
+from .tsan import setup_tsan_tests, setup_tsan_parallel_tests
 from .utils import (
     StrPath, StrJSON, TestName, TestList, TestTuple, TestFilter,
     strip_py_suffix, count, format_duration,
@@ -60,6 +60,7 @@ class Regrtest:
         self.pgo: bool = ns.pgo
         self.pgo_extended: bool = ns.pgo_extended
         self.tsan: bool = ns.tsan
+        self.tsan_parallel: bool = ns.tsan_parallel
 
         # Test results
         self.results: TestResults = TestResults()
@@ -195,6 +196,9 @@ class Regrtest:
         if self.tsan:
             setup_tsan_tests(self.cmdline_args)
 
+        if self.tsan_parallel:
+            setup_tsan_parallel_tests(self.cmdline_args)
+
         exclude_tests = set()
         if self.exclude:
             for arg in self.cmdline_args:
index 00d5779d950e729fe16ff40eaa4727af11fc153f..1b32deec12bd75f9b9ce1d6c47921ff39e1433be 100644 (file)
@@ -28,7 +28,18 @@ TSAN_TESTS = [
     'test_free_threading.test_slots',
 ]
 
+# Tests that should be run with `--parallel-threads=N` under TSAN. These tests
+# typically do not use threads, but are run multiple times in parallel by
+# the regression test runner with the `--parallel-threads` option enabled.
+TSAN_PARALLEL_TESTS = [
+    'test_abc',
+]
+
 
 def setup_tsan_tests(cmdline_args) -> None:
     if not cmdline_args:
         cmdline_args[:] = TSAN_TESTS[:]
+
+def setup_tsan_parallel_tests(cmdline_args) -> None:
+    if not cmdline_args:
+        cmdline_args[:] = TSAN_PARALLEL_TESTS[:]