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]

Reply via email to