Skip to content

Commit

Permalink
pythongh-129694: Add --parallel-threads TSAN job to CI (pythongh-12…
Browse files Browse the repository at this point in the history
…9696)

For now, this just adds a single test suite to the TSAN CI to be run
with `--parallel-threads`.
  • Loading branch information
colesbury authored and srinivasreddy committed Feb 7, 2025
1 parent 31f6cd1 commit d98b717
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .github/workflows/reusable-tsan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions Lib/test/libregrtest/cmdline.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ def __init__(self, **kwargs) -> None:
self.pgo = False
self.pgo_extended = False
self.tsan = False
self.tsan_parallel = False
self.worker_json = None
self.start = None
self.timeout = None
Expand Down Expand Up @@ -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')
Expand Down
6 changes: 5 additions & 1 deletion Lib/test/libregrtest/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
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,
Expand Down Expand Up @@ -60,6 +60,7 @@ def __init__(self, ns: Namespace, _add_python_opts: bool = False):
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()
Expand Down Expand Up @@ -195,6 +196,9 @@ def find_tests(self, tests: TestList | None = None) -> tuple[TestTuple, TestList
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:
Expand Down
11 changes: 11 additions & 0 deletions Lib/test/libregrtest/tsan.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,18 @@
'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[:]

0 comments on commit d98b717

Please sign in to comment.