Skip to content

Improve BaseCoordinator interface to support pluggable communication channels #66838

Closed

Description

@jason810496

Summary

The current BaseCoordinator interface is tightly coupled to subprocess-based execution and socket communication (TCP or Unix Domain). As the coordinator pattern expands to support additional SDK implementations, the base interface should be abstract enough to accommodate alternative transport mechanisms without requiring subclasses to override low-level internals.

Problem

  • BaseCoordinator exposes implementation details specific to subprocess + socket IPC
  • Coordinators that could benefit from other communication channels (e.g. shared memory, in-process execution) have no clean abstraction to build against
  • The current design makes it harder to reason about what is a required contract vs. what is a Java-specific detail

Proposed Changes

  • Raise the abstraction level of BaseCoordinator's public interface so that communication channel and process launching are not assumed
  • The interface should be defined in terms of high-level operations (e.g. accepting a DagFileParsingRequest and returning a DagFileParsingResponse) rather than prescribing how those operations are carried out underneath
  • Concrete implementations such as JavaCoordinator remain free to use subprocesses and sockets internally

Acceptance Criteria

  • BaseCoordinator public interface makes no assumptions about transport (sockets, shared memory, etc.) or process model (subprocess vs. in-process)
  • Existing JavaCoordinator and Go SDK coordinator behavior is preserved
  • A new coordinator implementation using a non-socket channel could be built against BaseCoordinator without workarounds

Drafted-by: Claude Code (Opus 4.7); reviewed by @jason810496 before posting

Activity

  1. self-assigned this
    on May 13, 2026
  2. added
    priority:highHigh priority bug that should be patched quickly but does not require immediate new release
    on May 13, 2026
  3. moved this from Backlog to In progress in Java-SDKon May 13, 2026
  4. anmolxlight commented on May 14, 2026

    @anmolxlight
    Contributor

    Opened a targeted PR against the coordinator feature branch: https://github.com/astronomer/airflow/pull/1579

    I intentionally did not open this directly against apache/airflow:main because the coordinator layer currently lives in #65958; targeting main would include that whole draft branch. This PR is a one-commit delta on top of astronomer:task-sdk/feature/coordinator-interface and can update #65958 cleanly.

  5. added
    priority:mediumBug that should be fixed before next release but would not block a release
    and removed
    priority:highHigh priority bug that should be patched quickly but does not require immediate new release
    on May 20, 2026
  6. uranusjr commented on May 20, 2026

    @uranusjr
    Member

    I added a very coarse interface to allow JavaCoordinator to rewire the entire execution. We probably still should do some refactoring to make JavaActivitySubprocess more generic to work with Go, but this is not needed for now.

  7. jason810496 commented on May 20, 2026

    @jason810496
    MemberAuthor

    Yes, this issue will track the common coordinator interface. (e.g. Socket/ IPC/ InProcess Coordinator, some better naming).
    From he TODO comment here: https://github.com/apache/airflow/pull/67161/changes#diff-f476aa1363e4eb3c52afc7d320b35ba9ff0f36e51c4f411f1937333e0144e6a5R49-R54

    On hold this issue until #67161 (initial PR to introduce Executable Coordinator) get merged.

  8. moved this from In progress to In review in Java-SDKon May 25, 2026
  9. moved this from In review to Done in Java-SDKon May 27, 2026
  10. added this to the Airflow 3.3.0 milestone on Jun 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:coordinatorCoordinator: The interface to spawn Lang-SDK subprocessesarea:corearea:java-sdkkind:featureFeature Requestson holdpriority:mediumBug that should be fixed before next release but would not block a release

Type

No type

Projects

  • Status
    Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions