Files
HealthLog/prisma/migrations/0480_status_note_failure_streak/migration.sql
T
Marc-André Bombeck b2c99e5c8d fix(migrations): bound the lock wait of 0475 and 0480, and of every file after
0475 and 0480 added their columns with a bare ALTER TABLE, which waits
for its table lock behind every open transaction while every write to
the table queues behind it. Both now run in a DO block with a five
second lock_timeout and carry the boot's retry marker; the effect is
the same and both stay safe to run again.

Neither has shipped in a release. A database that already applied them
is unaffected: prisma migrate deploy and migrate status ignore the
checksum of an applied migration (checked against a database migrated
with the old files), so nothing is re-run and nothing is reported.

The lock-timeout guard now refuses, from 0475 on, any statement that
takes a table lock outside such a block.
2026-10-25 02:42:09 +01:00

23 lines
901 B
SQL

-- Count the generations in a row that ended without a note, per status note.
--
-- A note whose generation failed opened a fixed five-minute negative window.
-- A model that never answers kept failing every five minutes per note, and a
-- note re-selected by the next data sync ignored the window altogether. The
-- streak sets the next window: five minutes, doubling per failure in a row,
-- up to two hours. A written or re-dated note resets it to zero.
--
-- Existing rows start at zero, which is the five-minute window they had.
--
-- The lock wait is bounded inside a DO block and the file is safe to run
-- again, so the boot retries it on a lock timeout.
--
-- @retry-on-lock-timeout
DO $migration$
BEGIN
PERFORM set_config('lock_timeout', '5s', true);
ALTER TABLE "insight_status_caches"
ADD COLUMN IF NOT EXISTS "failure_streak" INTEGER NOT NULL DEFAULT 0;
END
$migration$;