jason810496 opened a new issue, #67938:
URL: https://github.com/apache/airflow/issues/67938
### 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`):
```go
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
- Originating PR: #67155 (Go-SDK Dag/Task specs and downstream wiring in the
authoring API) — serde parity review.
- Related: #66942 (Cross-SDK DagSerialization compatibility CI for the Go
SDK) — a CI harness like that would catch this divergence automatically.
- Python reference: `_create_timetable` in
`task-sdk/src/airflow/sdk/definitions/dag.py`; config default in
`airflow-core/src/airflow/config_templates/config.yml`
(`create_cron_data_intervals`, default `False`).
---
Drafted-by: Claude Code (Opus 4.8); reviewed by @jason810496 before posting
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]