Skip to content

chore(deps): minato ~> 0.18.10 for the prepared-statement fix - #56

Merged
Taure merged 1 commit into
mainfrom
chore/minato-0.18.10
Aug 10, 2026
Merged

chore(deps): minato ~> 0.18.10 for the prepared-statement fix#56
Taure merged 1 commit into
mainfrom
chore/minato-0.18.10

Conversation

@Taure

@Taure Taure commented Aug 9, 2026

Copy link
Copy Markdown
Owner

minato 0.18.10 (Taure/minato#41) makes prepared-statement names unique per connection. Before it the name came from a connection-local counter, which collides behind a transaction pooler - many connections multiplexed onto few backends, two counting from zero, and the second gets 42P05 prepared statement "minato_30" already exists.

The floor moves to ~> 0.18.10, not just the lock. ~> 0.18 still admits 0.18.5, so a clean checkout could resolve back onto a version with the collision. The lock was the only thing preventing it.

Worth taking seriously in a job queue specifically: correctness rests on FOR UPDATE SKIP LOCKED claims inside a transaction, and a query that fails at random mid-claim is a considerably worse failure mode than a slow one. The bug presents as random because which query dies depends on which backend the pooler hands out - see widgrensit/asobi#419, where it took out guest signup intermittently across every tenant of a production deployment.

eunit 82, ct 110, xref / dialyzer / fmt clean.

minato 0.18.10 (Taure/minato#41) makes prepared-statement names unique per
connection. Before it, names came from a connection-local counter, which
collides behind a transaction pooler: many connections are multiplexed onto
few backends, two of them count from zero, and the second gets 42P05,
`prepared statement "minato_30" already exists`.

The floor moves from `~> 0.18` to `~> 0.18.10` rather than only refreshing
the lock. `~> 0.18` still admits 0.18.5, so a clean checkout could resolve
back onto a version with the collision - the lock was the only thing
preventing it, and a lock is not a promise to anyone building from source.

Worth taking seriously here specifically: a job queue's correctness rests on
FOR UPDATE SKIP LOCKED claims inside a transaction, and a random query
failure mid-claim is a much worse failure than a slow one.
@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

🟠 Code Coverage — 57.4%

1015 of 1769 lines covered.


🟡 ELP Lint — 1 warning

1 diagnostic found. See job logs for details.

@Taure
Taure merged commit 7194ce8 into main Aug 10, 2026
17 checks passed
@Taure
Taure deleted the chore/minato-0.18.10 branch August 10, 2026 01:36
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.

1 participant