fix(db): serialise schema migrations with an advisory lock + stagger drain crons #240
Reference in New Issue
Block a user
Delete Branch "worktree-drain-deadlock"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
הבעיה
legal-halacha-drainקרס 29 פעמים עםasyncpg.exceptions.DeadlockDetectedError.שורש: כל drain קצר-חיים (cron) מריץ מחדש בעלייתו את כל ה-schema migrations האידמפוטנטיות (
get_pool→_run_schema_migrations). שלושה jobs —metadata-drain,halacha-drain,halacha-supervisor— נדלקו באותה דקה (*/15/ תחילת-שעה). שני תהליכים שהריצו את ה-DDL במקביל לקחוAccessExclusiveLockבסדר הפוך → Postgres הרג אחד מהם ב-deadlock.התיקון — שתי שכבות
_run_schema_migrationsב-pg_advisory_lockברמת-session — רק תהליך אחד מריץ DDL בכל רגע; מקבילים ממתינים במקום deadlock. גוף ה-DDL חולץ ל-_apply_schema_ddl. אידמפוטנטי, הסכמה לא משתנה.:00, supervisor:05, halacha-drain:10, digest:12, court-fetch:17— כך שאחים לא עולים יחד.SCRIPTS.mdעודכן בהתאם.אימות
pg_advisory_lockנבדק חי מול ה-DB (localhost:5433): migrations רצו, הנעילה שוחררה (0 locks תלויים).pm2 saveבוצע על ה-host).db.pyעוברast.parse; שלושת ה-.cjsעובריםnode -c.Invariants
🤖 Generated with Claude Code