mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 13:01:00 +00:00
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.
23 lines
901 B
SQL
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$;
|