Skip to content

Fix owner_unallow using wrong ref when switching owners#342

Merged
josevalim merged 1 commit intoelixir-ecto:masterfrom
coop:fix-unallow-existing-cross-owner-cleanup
Mar 25, 2026
Merged

Fix owner_unallow using wrong ref when switching owners#342
josevalim merged 1 commit intoelixir-ecto:masterfrom
coop:fix-unallow-existing-cross-owner-cleanup

Conversation

@coop
Copy link
Copy Markdown
Contributor

@coop coop commented Mar 25, 2026

When ownership_allow is called with unallow_existing: true to move a process from one owner to another, owner_unallow was removing the process from the caller's owner ref rather than the process's current owner ref. This left the process in the old owner's allowed list.

When the old owner later exits, owner_down removes all processes in its allowed list from checkouts — including the process that was already re-allowed on a different owner. This causes an OwnershipError on the next query because the process is no longer in checkouts.

The fix looks up the process's current checkout entry to find its actual ref and proxy, then cleans up the correct owner's allowed list.

Also fixes the ETS delete in owner_unallow which was passing {pid, proxy} as the key instead of just pid — a no-op on a :set table keyed by the first element.

When ownership_allow is called with unallow_existing: true to move a
process from one owner to another, owner_unallow was removing the
process from the caller's owner ref rather than the process's current
owner ref. This left the process in the old owner's allowed list.

When the old owner later exits, owner_down removes all processes in
its allowed list from checkouts — including the process that was
already re-allowed on a different owner. This causes an
OwnershipError on the next query because the process is no longer in
checkouts.

The fix looks up the process's current checkout entry to find its
actual ref and proxy, then cleans up the correct owner's allowed list.

Also fixes the ETS delete in owner_unallow which was passing
{pid, proxy} as the key instead of just pid — a no-op on a :set
table keyed by the first element.
@josevalim josevalim merged commit a86b8eb into elixir-ecto:master Mar 25, 2026
2 checks passed
@josevalim
Copy link
Copy Markdown
Member

💚 💙 💜 💛 ❤️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants