FilipBl4gojevic
b3b7d6b5e1
CI / typecheck + vitest (Node 20) (push) Has been cancelled
fix(gateway): per-run deadline + queue bound on Mutex - 08-12 freeze fix
...
One chain call that never settled, run under the per-key Mutex with no
deadline, convoyed every subsequent request on that key silently while
/models and /account stayed healthy (2026-08-12 incident). The per-fetch
30s aborts in the Ogmios providers predate the freeze and did not prevent
it; the unbounded thing was the composition under the mutex.
Mutex.run() now races each fn against a deadline (default 180s): on
expiry the run rejects with MutexTimeoutError and the chain advances, so
queued work proceeds instead of freezing. A zombie that settles later can
at worst lose a UTxO-contention race with the run that replaced it -
strictly better than a permanent convoy. New work is refused with
MutexQueueFullError past a queue bound (default 64) instead of queueing
without limit. Serialization and rejection-tolerance semantics are
unchanged (covered by tests). Session locks in transcripts.ts construct
the same class and inherit both protections.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-16 09:56:41 +02:00
..
2026-05-19 14:59:25 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-11 08:49:07 +02:00
2026-06-03 11:37:49 +02:00
2026-06-03 11:37:49 +02:00
2026-06-03 11:37:49 +02:00
2026-06-03 11:59:20 +02:00
2026-06-03 11:59:20 +02:00
2026-06-03 11:37:49 +02:00
2026-05-06 13:27:48 +02:00
2026-07-09 20:48:52 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-19 10:52:01 +02:00
2026-05-19 10:52:01 +02:00
2026-05-06 19:00:40 +02:00
2026-06-08 16:18:54 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-08-16 09:56:41 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-07-29 11:16:19 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-07-09 02:29:10 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-08-13 15:15:13 +02:00
2026-07-09 20:48:52 +02:00
2026-08-13 15:15:13 +02:00
2026-08-10 16:40:00 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-08-10 16:40:00 +02:00
2026-05-06 13:27:48 +02:00
2026-08-13 15:15:13 +02:00
2026-08-13 15:15:13 +02:00
2026-05-06 19:01:35 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-08-10 17:12:12 +02:00
2026-07-09 20:48:52 +02:00
2026-05-06 19:01:35 +02:00
2026-07-09 20:48:52 +02:00
2026-08-10 12:10:45 +02:00
2026-07-29 11:16:19 +02:00
2026-07-29 11:16:19 +02:00
2026-05-06 13:27:48 +02:00
2026-05-20 10:59:11 +02:00
2026-07-29 11:16:19 +02:00
2026-07-29 11:16:19 +02:00
2026-05-06 13:27:48 +02:00
2026-08-10 12:10:45 +02:00
2026-05-06 13:27:48 +02:00
2026-08-10 14:22:02 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-08-10 17:12:12 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00
2026-05-11 09:09:49 +02:00
2026-05-06 13:27:48 +02:00
2026-05-06 13:27:48 +02:00