handleUpdateAddons was fully synchronous including BuildKit Jobs per addon image. cetmix_tower auto-pulls 8 deps × ~30-90s each on a fresh cluster = 5-15 min. Reverse proxy timeout (60-120s) cuts the request mid-build, browser shows 'Saving' forever, drawer eventually closes on the timeout error, AND the cancelled context kills the goroutine mid-flight so values.yaml never gets committed. Now: handler validates inline (immediate feedback on bad input), spawns an addon-stage op, returns 202 + opId in <1s. The goroutine runs phases (resolve → build → commit → refresh) with a fresh context that survives client disconnect. Operator watches it in the bell + Activity tab, can keep working in another tab. Same pattern Deploy/Migrate/Apply already use.
2.0 KiB
2.0 KiB