Skip to content

Honor [scheduler] create_cron_data_intervals when serializing cron schedules in the Go SDK #67938

@jason810496

Description

@jason810496

Background

The Go bundle serializer always emits CronTriggerTimetable for a cron schedule, which only matches the default deployment ([scheduler] create_cron_data_intervals = False). When a deployment sets it to True, Python's _create_timetable (task-sdk/src/airflow/sdk/definitions/dag.py) produces CronDataIntervalTimetable instead, so a Go-authored DAG diverges from the equivalent Python DAG.

The Go bundle binary cannot read airflow.cfg, so it has no way to branch on the flag today. The relevant scheduler settings must be delivered from the supervisor (Python ExecutableCoordinator) to the lang-SDK over the coordinator protocol first.

Current hardcoded branch in go-sdk/pkg/execution/serde.go (serializeTimetable):

default:
    return map[string]any{
        "__type": "airflow.timetables.trigger.CronTriggerTimetable",
        "__var": map[string]any{
            "expression":      *schedule,
            "timezone":        "UTC",
            "interval":        0.0,
            "run_immediately": false,
        },
    }

What needs to happen

  1. Extend the coordinator protocol so the supervisor sends create_cron_data_intervals (and create_delta_data_intervals, once timedelta schedules are supported) to the bundle — e.g. as fields on DagFileParseRequest.
  2. In serializeTimetable, emit CronDataIntervalTimetable ({expression, timezone}) when create_cron_data_intervals is True and CronTriggerTimetable when False, mirroring _create_timetable.
  3. Carry the DAG timezone over the same channel; serializeTimetable currently hardcodes "UTC".

Acceptance criteria

  • A cron-scheduled Go DAG serializes to the same timetable __type and __var as the equivalent Python DAG under both values of create_cron_data_intervals.
  • DAG timezone is no longer hardcoded to "UTC".
  • The TODO on serializeTimetable in go-sdk/pkg/execution/serde.go is removed.

Context


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

Metadata

Metadata

Assignees

Labels

area:corearea:serializationgo-sdkLabel to track work items for golang task sdkkind:featureFeature Requestspriority:lowBug with a simple workaround that would not block a release

Type

No type
No fields configured for issues without a type.

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions