mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-05 08:02:18 +00:00
Every path that touches a data table's permissions or a principal its roles can name takes the workspace settings row before it locks anything else, and a transaction spanning workspaces takes them in `workspace_id` order. One lock acquired first cannot deadlock, so the rule is stated once on the lock rather than as an order each handler has to reproduce — the rename can write its thirty tables in whatever order reads best, and the statements moved around to fake an order move back. What waits for the config to commit is now decided from the plan and checked per role: a request that disables permissions still lists every role, so the set built from it claimed them all and no drop waited at all. A role the committed config no longer names is dropped whatever else changed meanwhile, where before any unrelated edit — a tenant, the default role — made the whole cleanup stand down and left the login behind with nothing that would ever remove it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01S5arH3G2Sa1Qqm32veJQ1n