From 0f85fec12649ca9af15d5b543fe4da302a1ca2d4 Mon Sep 17 00:00:00 2001 From: aIbrahiim Date: Tue, 31 Mar 2026 15:16:38 +0200 Subject: [PATCH 1/4] raise pytest/grpc timeout --- .github/workflows/beam_PreCommit_Python.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/beam_PreCommit_Python.yml b/.github/workflows/beam_PreCommit_Python.yml index 4115034a8a19..e53f1ab08857 100644 --- a/.github/workflows/beam_PreCommit_Python.yml +++ b/.github/workflows/beam_PreCommit_Python.yml @@ -111,12 +111,14 @@ jobs: env: TOX_TESTENV_PASSENV: "DOCKER_*,TESTCONTAINERS_*,TC_*,BEAM_*,GRPC_*,OMP_*,OPENBLAS_*,PYTHONHASHSEED,PYTEST_*" # Aggressive retry and timeout settings for flaky CI - PYTEST_ADDOPTS: "-v --tb=short --maxfail=5 --durations=30 --reruns=5 --reruns-delay=15 --timeout=600 --disable-warnings" + PYTEST_ADDOPTS: "-v --tb=short --maxfail=5 --durations=30 --reruns=5 --reruns-delay=15 --timeout=900 --disable-warnings" # Container stability - much more generous timeouts TC_TIMEOUT: "300" TC_MAX_TRIES: "15" TC_SLEEP_TIME: "5" # Additional gRPC stability for flaky environment + GRPC_ARG_KEEPALIVE_TIME_MS: "60000" + GRPC_ARG_KEEPALIVE_TIMEOUT_MS: "60000" GRPC_ARG_MAX_CONNECTION_IDLE_MS: "60000" GRPC_ARG_HTTP2_BDP_PROBE: "1" GRPC_ARG_SO_REUSEPORT: "1" @@ -125,6 +127,7 @@ jobs: # Additional gRPC settings GRPC_ARG_MAX_RECONNECT_BACKOFF_MS: "120000" GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS: "2000" + BEAM_RUNNER_BUNDLE_TIMEOUT_MS: "600000" uses: ./.github/actions/gradle-command-self-hosted-action with: gradle-command: :sdks:python:test-suites:tox:py${{steps.set_py_ver_clean.outputs.py_ver_clean}}:preCommitPy${{steps.set_py_ver_clean.outputs.py_ver_clean}} From 70df4637df49979d81e3b60efc00319cc64aa0e1 Mon Sep 17 00:00:00 2001 From: aIbrahiim Date: Tue, 31 Mar 2026 19:45:42 +0200 Subject: [PATCH 2/4] revert timeout bump --- .github/workflows/beam_PreCommit_Python.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/beam_PreCommit_Python.yml b/.github/workflows/beam_PreCommit_Python.yml index e53f1ab08857..e43eae781b13 100644 --- a/.github/workflows/beam_PreCommit_Python.yml +++ b/.github/workflows/beam_PreCommit_Python.yml @@ -111,7 +111,7 @@ jobs: env: TOX_TESTENV_PASSENV: "DOCKER_*,TESTCONTAINERS_*,TC_*,BEAM_*,GRPC_*,OMP_*,OPENBLAS_*,PYTHONHASHSEED,PYTEST_*" # Aggressive retry and timeout settings for flaky CI - PYTEST_ADDOPTS: "-v --tb=short --maxfail=5 --durations=30 --reruns=5 --reruns-delay=15 --timeout=900 --disable-warnings" + PYTEST_ADDOPTS: "-v --tb=short --maxfail=5 --durations=30 --reruns=5 --reruns-delay=15 --timeout=600 --disable-warnings" # Container stability - much more generous timeouts TC_TIMEOUT: "300" TC_MAX_TRIES: "15" From f1a2b73f9b309d68ea65d83f2d36380f2acf77f2 Mon Sep 17 00:00:00 2001 From: aIbrahiim Date: Thu, 2 Apr 2026 11:53:18 +0200 Subject: [PATCH 3/4] Stabilize Python PreCommit with gRPC fork env and YAML CI venv clone fix --- .github/workflows/beam_PreCommit_Python.yml | 1 + sdks/python/apache_beam/yaml/yaml_provider.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/beam_PreCommit_Python.yml b/.github/workflows/beam_PreCommit_Python.yml index e43eae781b13..2c776291f62e 100644 --- a/.github/workflows/beam_PreCommit_Python.yml +++ b/.github/workflows/beam_PreCommit_Python.yml @@ -57,6 +57,7 @@ env: PYTHONHASHSEED: "0" OMP_NUM_THREADS: "1" OPENBLAS_NUM_THREADS: "1" + GRPC_ENABLE_FORK_SUPPORT: "0" # gRPC stability - more conservative for unstable networks GRPC_ARG_KEEPALIVE_TIME_MS: "10000" GRPC_ARG_KEEPALIVE_TIMEOUT_MS: "15000" diff --git a/sdks/python/apache_beam/yaml/yaml_provider.py b/sdks/python/apache_beam/yaml/yaml_provider.py index 5a3ccf6b0c2e..c5e2d65a2989 100755 --- a/sdks/python/apache_beam/yaml/yaml_provider.py +++ b/sdks/python/apache_beam/yaml/yaml_provider.py @@ -1412,7 +1412,8 @@ def _create_venv_from_clone( @classmethod def _create_venv_to_clone(cls, base_python: str) -> str: - if '.dev' in beam_version: + _ci = os.environ.get('CI', '').lower() in ('true', '1', 'yes') + if '.dev' in beam_version and not _ci: base_venv = os.path.dirname(os.path.dirname(base_python)) print('Cloning dev environment from', base_venv) return base_venv From 6f5cc7198012d2fd05773f87c463ad7310fe4004 Mon Sep 17 00:00:00 2001 From: aIbrahiim Date: Thu, 2 Apr 2026 20:36:59 +0200 Subject: [PATCH 4/4] Set GRPC_ENABLE_FORK_SUPPORT=0 in Python PreCommit with grpc#37710 TODO --- .github/workflows/beam_PreCommit_Python.yml | 1 + sdks/python/apache_beam/yaml/yaml_provider.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/beam_PreCommit_Python.yml b/.github/workflows/beam_PreCommit_Python.yml index 2c776291f62e..42098a3d72d2 100644 --- a/.github/workflows/beam_PreCommit_Python.yml +++ b/.github/workflows/beam_PreCommit_Python.yml @@ -57,6 +57,7 @@ env: PYTHONHASHSEED: "0" OMP_NUM_THREADS: "1" OPENBLAS_NUM_THREADS: "1" + # TODO(https://github.com/grpc/grpc/issues/37710): Remove once fixed. GRPC_ENABLE_FORK_SUPPORT: "0" # gRPC stability - more conservative for unstable networks GRPC_ARG_KEEPALIVE_TIME_MS: "10000" diff --git a/sdks/python/apache_beam/yaml/yaml_provider.py b/sdks/python/apache_beam/yaml/yaml_provider.py index c5e2d65a2989..5a3ccf6b0c2e 100755 --- a/sdks/python/apache_beam/yaml/yaml_provider.py +++ b/sdks/python/apache_beam/yaml/yaml_provider.py @@ -1412,8 +1412,7 @@ def _create_venv_from_clone( @classmethod def _create_venv_to_clone(cls, base_python: str) -> str: - _ci = os.environ.get('CI', '').lower() in ('true', '1', 'yes') - if '.dev' in beam_version and not _ci: + if '.dev' in beam_version: base_venv = os.path.dirname(os.path.dirname(base_python)) print('Cloning dev environment from', base_venv) return base_venv