Skip to content

Add Multi-Lang KubernetesExecutor system test#68709

Merged
potiuk merged 4 commits into
apache:mainfrom
jason810496:feature/lang-sdk/k8s-system-test
Jul 1, 2026
Merged

Add Multi-Lang KubernetesExecutor system test#68709
potiuk merged 4 commits into
apache:mainfrom
jason810496:feature/lang-sdk/k8s-system-test

Conversation

@jason810496

@jason810496 jason810496 commented Jun 18, 2026

Copy link
Copy Markdown
Member

Why

The Multi-Lang feature works across executors, the best way to verify whether Multi-Lang works across executors or not is adding k8s system test. We use CeleryExecutor for E2E test in docker-compose, the LocalExecutor is used for normal breeze start-airflow setup.

How

We haven't settle down the Artifact deployment for Multi-Lang (e.g. How does *.jars and binaries being sync to worker). We intentionally defer this part to users to figure out the most comfortable way for them, then stabilize as best practice.

The current k8s test add a small utility script (stage_artifacts.py) which leverages S3DagBundle in the initContainer section to provision the artifacts in the pod that KubernetesExecutor created. See more details in kubernetes-tests/lang_sdk/README.md.

What

  • Add k8s test for Multi-Lang feature that trigger a Dag with both Python, Java, and Go Tasks in it with KubernetesExecutor.
  • More details in kubernetes-tests/lang_sdk/README.md regarding how does the test setup.

Was generative AI tooling used to co-author this PR?

Comment thread kubernetes-tests/lang_sdk/go_example/main.go Fixed
…Executor

Adds a kind-based system test that runs one Dag (lang_sdk_combined) whose
tasks span the Python task-runner and the Go/Java coordinators on the
KubernetesExecutor. The golang/java queues route to their coordinators,
each carrying a pod_template_file (the worktree-1 feature). Each worker
pod's init container stages the queue's artifact (Go binary / Java jar)
from a per-language localstack S3 bucket through the DagBundle interface
into a shared emptyDir that is the coordinator's executables_root/jars_root.
The Go queue runs on the prod image (self-contained static binary); the
Java queue runs on the CI image (bundles the JVM the JavaCoordinator needs).

New k8s-test-only bundles: go-sdk/example/k8s_combined and
java-sdk/k8s-example. Provisioning is a new breeze command,
`breeze k8s setup-lang-sdk-test`, which builds the artifacts, deploys
localstack, uploads artifacts and the Python stub Dag, renders the
pod-template image placeholders, and installs the Helm release.
@jason810496 jason810496 force-pushed the feature/lang-sdk/k8s-system-test branch from 5aeaef4 to ec67c69 Compare July 1, 2026 03:29
The lang-SDK Helm values set config.dag_processor.dag_bundle_config_list to only
the localstack S3 bundle, which replaced the default dags-folder bundle. The
standard KubernetesExecutor example-Dag tests share the same test run, so
dropping dags-folder marked their Dags stale and their dagRun triggers returned
404. Configure the bundles additively via dagProcessor.dagBundleConfigList (the
chart-recommended input) so both the example Dags and the lang-SDK stub Dag are
served.
@jason810496 jason810496 added AIP-108: java-sdk Change this to an 'area:' label after AIP acceptance. AIP-108: Coordinator Change this to an 'area:' label after AIP acceptance. and removed area:providers kind:documentation provider:cncf-kubernetes Kubernetes (k8s) provider related issues area:task-sdk area:ConfigTemplates labels Jul 1, 2026
…tes-tests

The Go and Java coordinator example sources for the KubernetesExecutor lang-SDK
system test lived under go-sdk/example/k8s_combined and java-sdk/k8s-example,
cluttering the SDK source trees. Move them next to the rest of the test assets
under kubernetes-tests/lang_sdk/ (go_example, java_example).

go_example becomes its own Go module resolving the in-repo go-sdk via a replace
directive (it no longer sits inside the go-sdk module); java_example stays a
standalone Gradle build that resolves the SDK from mavenLocal, now built with
java-sdk's gradle wrapper pointed at the moved project. The breeze provisioning
command, README, and stub-Dag docs are updated to the new paths.
Comment thread kubernetes-tests/lang_sdk/go_example/main.go Dismissed
@jason810496 jason810496 changed the title Add Lang-SDK KubernetesExecutor system test Add Multi-Lang KubernetesExecutor system test Jul 1, 2026
@jason810496 jason810496 marked this pull request as ready for review July 1, 2026 10:36

@potiuk potiuk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NICE

@potiuk potiuk merged commit f86b03c into apache:main Jul 1, 2026
269 of 286 checks passed
Lee-W added a commit to astronomer/airflow that referenced this pull request Jul 7, 2026
vatsrahul1001 pushed a commit to astronomer/airflow that referenced this pull request Jul 7, 2026
* Add Go + Java + Python lang-SDK coordinator system test on KubernetesExecutor

Adds a kind-based system test that runs one Dag (lang_sdk_combined) whose
tasks span the Python task-runner and the Go/Java coordinators on the
KubernetesExecutor. The golang/java queues route to their coordinators,
each carrying a pod_template_file (the worktree-1 feature). Each worker
pod's init container stages the queue's artifact (Go binary / Java jar)
from a per-language localstack S3 bucket through the DagBundle interface
into a shared emptyDir that is the coordinator's executables_root/jars_root.
The Go queue runs on the prod image (self-contained static binary); the
Java queue runs on the CI image (bundles the JVM the JavaCoordinator needs).

New k8s-test-only bundles: go-sdk/example/k8s_combined and
java-sdk/k8s-example. Provisioning is a new breeze command,
`breeze k8s setup-lang-sdk-test`, which builds the artifacts, deploys
localstack, uploads artifacts and the Python stub Dag, renders the
pod-template image placeholders, and installs the Helm release.

* Wire up lang-sdk test with breeze k8s command

* Keep the dags-folder bundle when provisioning the lang-SDK k8s test

The lang-SDK Helm values set config.dag_processor.dag_bundle_config_list to only
the localstack S3 bundle, which replaced the default dags-folder bundle. The
standard KubernetesExecutor example-Dag tests share the same test run, so
dropping dags-folder marked their Dags stale and their dagRun triggers returned
404. Configure the bundles additively via dagProcessor.dagBundleConfigList (the
chart-recommended input) so both the example Dags and the lang-SDK stub Dag are
served.

* Move lang-SDK k8s example sources out of go-sdk/java-sdk into kubernetes-tests

The Go and Java coordinator example sources for the KubernetesExecutor lang-SDK
system test lived under go-sdk/example/k8s_combined and java-sdk/k8s-example,
cluttering the SDK source trees. Move them next to the rest of the test assets
under kubernetes-tests/lang_sdk/ (go_example, java_example).

go_example becomes its own Go module resolving the in-repo go-sdk via a replace
directive (it no longer sits inside the go-sdk module); java_example stays a
standalone Gradle build that resolves the SDK from mavenLocal, now built with
java-sdk's gradle wrapper pointed at the moved project. The breeze provisioning
command, README, and stub-Dag docs are updated to the new paths.
# Conflicts:
#	dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
#	dev/breeze/doc/images/output_setup_regenerate-command-images.txt
vatsrahul1001 pushed a commit to astronomer/airflow that referenced this pull request Jul 7, 2026
jason810496 added a commit to astronomer/airflow that referenced this pull request Jul 7, 2026
* Add Go + Java + Python lang-SDK coordinator system test on KubernetesExecutor

Adds a kind-based system test that runs one Dag (lang_sdk_combined) whose
tasks span the Python task-runner and the Go/Java coordinators on the
KubernetesExecutor. The golang/java queues route to their coordinators,
each carrying a pod_template_file (the worktree-1 feature). Each worker
pod's init container stages the queue's artifact (Go binary / Java jar)
from a per-language localstack S3 bucket through the DagBundle interface
into a shared emptyDir that is the coordinator's executables_root/jars_root.
The Go queue runs on the prod image (self-contained static binary); the
Java queue runs on the CI image (bundles the JVM the JavaCoordinator needs).

New k8s-test-only bundles: go-sdk/example/k8s_combined and
java-sdk/k8s-example. Provisioning is a new breeze command,
`breeze k8s setup-lang-sdk-test`, which builds the artifacts, deploys
localstack, uploads artifacts and the Python stub Dag, renders the
pod-template image placeholders, and installs the Helm release.

* Wire up lang-sdk test with breeze k8s command

* Keep the dags-folder bundle when provisioning the lang-SDK k8s test

The lang-SDK Helm values set config.dag_processor.dag_bundle_config_list to only
the localstack S3 bundle, which replaced the default dags-folder bundle. The
standard KubernetesExecutor example-Dag tests share the same test run, so
dropping dags-folder marked their Dags stale and their dagRun triggers returned
404. Configure the bundles additively via dagProcessor.dagBundleConfigList (the
chart-recommended input) so both the example Dags and the lang-SDK stub Dag are
served.

* Move lang-SDK k8s example sources out of go-sdk/java-sdk into kubernetes-tests

The Go and Java coordinator example sources for the KubernetesExecutor lang-SDK
system test lived under go-sdk/example/k8s_combined and java-sdk/k8s-example,
cluttering the SDK source trees. Move them next to the rest of the test assets
under kubernetes-tests/lang_sdk/ (go_example, java_example).

go_example becomes its own Go module resolving the in-repo go-sdk via a replace
directive (it no longer sits inside the go-sdk module); java_example stays a
standalone Gradle build that resolves the SDK from mavenLocal, now built with
java-sdk's gradle wrapper pointed at the moved project. The breeze provisioning
command, README, and stub-Dag docs are updated to the new paths.
# Conflicts:
#	dev/breeze/doc/images/output_setup_check-all-params-in-groups.txt
#	dev/breeze/doc/images/output_setup_regenerate-command-images.txt
jason810496 pushed a commit to astronomer/airflow that referenced this pull request Jul 7, 2026
Lee-W added a commit that referenced this pull request Jul 7, 2026
…69532)

Co-authored-by: Jason(Zhe-You) Liu <68415893+jason810496@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AIP-108: Coordinator Change this to an 'area:' label after AIP acceptance. AIP-108: java-sdk Change this to an 'area:' label after AIP acceptance. area:dev-tools area:go-sdk area:kubernetes-tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants