Investigate sqlite3.OperationalError: no such column: total_cpu_millicores from the Iris controller scheduling loop.
The controller started selecting WorkerRow columns:
total_cpu_millicorestotal_memory_bytestotal_gpu_counttotal_tpu_countdevice_typedevice_variant
but the workers table schema created at startup did not include them. The failure surfaced in the scheduling loop as an unhandled thread exception.
The denormalized worker scheduling fields were added to controller code paths, but no migration added them to the workers table.
- Add an idempotent migration that adds the worker scheduling columns.
- Backfill existing rows from
metadata_proto. - Add a deterministic test that fresh
ControllerDBstartup exposes the new columns.
Confirmed by inspecting fresh ControllerDB startup: PRAGMA table_info(workers) did not contain the new columns before this fix.
- Add coverage for other denormalized row-model columns so missing migrations fail earlier.