Skip to content

Commit 917abea

Browse files
Suspend Apache Beam Provider due to grpcio limitation (#61926)
1 parent 2e5023d commit 917abea

33 files changed

+187
-86
lines changed

airflow-core/tests/unit/always/test_example_dags.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from tests_common.test_utils.asserts import assert_queries_count
3737
from tests_common.test_utils.markers import skip_if_force_lowest_dependencies_marker
3838
from tests_common.test_utils.paths import AIRFLOW_PROVIDERS_ROOT_PATH, AIRFLOW_ROOT_PATH
39+
from tests_common.test_utils.providers import get_suspended_providers_folders
3940

4041
CURRENT_PYTHON_VERSION = f"{sys.version_info.major}.{sys.version_info.minor}"
4142
PROVIDERS_PREFIXES = ["providers/"]
@@ -62,6 +63,23 @@
6263
# Deprecated Operators/Hooks, which replaced by common.sql Operators/Hooks
6364
)
6465

66+
IGNORE_EXAMPLE_DAGS: tuple[str, ...] = (
67+
# These example dags require suspended providers, eg: google dataflow dependent on the Apache Beam provider,
68+
# but it's in the suspended list, we can't import the dag
69+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_go.py",
70+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_java_streaming.py",
71+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_native_java.py",
72+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_native_python.py",
73+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_native_python_async.py",
74+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_pipeline.py",
75+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_pipeline_streaming.py",
76+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_sensors_deferrable.py",
77+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_streaming_python.py",
78+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_template.py",
79+
"providers/google/tests/system/google/cloud/dataflow/example_dataflow_yaml.py",
80+
"providers/google/tests/system/google/cloud/gcs/example_firestore.py",
81+
)
82+
6583
LONGER_IMPORT_TIMEOUTS: dict[str, float] = {
6684
"providers/google/tests/system/google/cloud/gen_ai/example_gen_ai_generative_model.py": 60
6785
}
@@ -79,19 +97,6 @@ def match_optional_dependencies(distribution_name: str, specifier: str | None) -
7997
return True, ""
8098

8199

82-
def get_suspended_providers_folders() -> list[str]:
83-
"""
84-
Returns a list of suspended providers folders that should be
85-
skipped when running tests (without any prefix - for example apache/beam, yandex, google etc.).
86-
"""
87-
suspended_providers = []
88-
for provider_path in AIRFLOW_PROVIDERS_ROOT_PATH.rglob("provider.yaml"):
89-
provider_yaml = yaml.safe_load(provider_path.read_text())
90-
if provider_yaml["state"] == "suspended":
91-
suspended_providers.append(provider_path.parent.resolve().as_posix())
92-
return suspended_providers
93-
94-
95100
def get_python_excluded_providers_folders() -> list[str]:
96101
"""
97102
Returns a list of providers folders that should be excluded for current Python version and
@@ -127,6 +132,13 @@ def example_not_excluded_dags(xfail_db_exception: bool = False):
127132
if candidate.startswith(tuple(suspended_providers_folders)):
128133
param_marks.append(pytest.mark.skip(reason="Suspended provider"))
129134

135+
if candidate.endswith(IGNORE_EXAMPLE_DAGS):
136+
param_marks.append(
137+
pytest.mark.skip(
138+
reason="Excluded from imports, these examples require suspended providers"
139+
)
140+
)
141+
130142
if candidate.startswith(tuple(current_python_excluded_providers_folders)):
131143
param_marks.append(
132144
pytest.mark.skip(reason=f"Not supported for Python {CURRENT_PYTHON_VERSION}")

airflow-core/tests/unit/serialization/test_dag_serialization.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@
105105
GithubLink,
106106
MockOperator,
107107
)
108+
from tests_common.test_utils.providers import (
109+
IGNORE_MODULE_IMPORT_ERRORS,
110+
get_suspended_providers_folders,
111+
)
108112
from tests_common.test_utils.timetables import (
109113
CustomSerializationTimetable,
110114
cron_timetable,
@@ -426,8 +430,8 @@ def get_excluded_patterns() -> Generator[str, None, None]:
426430
(AIRFLOW_REPO_ROOT_PATH / "generated" / "provider_dependencies.json").read_text()
427431
)
428432
for provider, provider_info in all_providers.items():
433+
provider_path = provider.replace(".", "/")
429434
if python_version in provider_info.get("excluded-python-versions"):
430-
provider_path = provider.replace(".", "/")
431435
yield f"providers/{provider_path}"
432436
current_python_version = sys.version_info[:2]
433437
if current_python_version >= (3, 13):
@@ -457,9 +461,12 @@ def collect_dags(dag_folder=None):
457461
patterns = dag_folder
458462
else:
459463
patterns = [dag_folder]
464+
suspended_providers_path = get_suspended_providers_folders()
465+
460466
excluded_patterns = [
461467
f"{AIRFLOW_REPO_ROOT_PATH}/{excluded_pattern}" for excluded_pattern in get_excluded_patterns()
462-
]
468+
] + suspended_providers_path
469+
463470
with mock.patch("airflow.dag_processing.dagbag.settings.get_dagbag_import_timeout", return_value=60):
464471
for pattern in patterns:
465472
for directory in glob(f"{AIRFLOW_REPO_ROOT_PATH}/{pattern}"):
@@ -553,6 +560,11 @@ def test_serialization(self):
553560
# This "looks" like a problem, but is just a quirk of the parse-all-dags-in-one-process we do
554561
# in this test
555562
if "AirflowDagDuplicatedIdException: Ignoring DAG example_sagemaker" not in error
563+
# Ignore module import errors for any suspended provider paths used in example dags
564+
if any(
565+
f"{ignore_module_import_error}" not in error
566+
for ignore_module_import_error in IGNORE_MODULE_IMPORT_ERRORS
567+
)
556568
}
557569

558570
# Let's not be exact about this, but if everything fails to parse we should fail this test too

dev/breeze/doc/images/output_build-docs.svg

Lines changed: 3 additions & 3 deletions
Loading
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
9cab0b55ae6a31b4cd43f8edb5d69521
1+
6f8557a503649e72517ecd140dadf2f6

dev/breeze/doc/images/output_release-management_add-back-references.svg

Lines changed: 3 additions & 3 deletions
Loading
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
244b18c58ed980a094c555a81698da9b
1+
c4f3137fd042c7fe7f6cf21479523c5d

0 commit comments

Comments
 (0)