b9f9d88d99
배치 단일 트랜잭션이라 한 행의 예외가 배치 전체(앞 행 processed_at 포함)를 롤백 → poison 행이 매 사이클 최저 id 로 재선택되어 후속 발행이 영구 정지. outbox 모델에 재시도/terminal 컬럼이 전무(processing_queue·study_jobs 의 per-item 격리 패턴 미적용). - mig377: publish_outbox 에 attempts/failed_at 추가 - 워커: 행별 savepoint(begin_nested) 격리 — 예외 시 attempts++, MAX(5) 초과 시 failed_at 스탬프(terminal) 후 select 제외. 실패 행은 rev 미소모(드문 gap 은 단일 라이터·커밋순 부여라 viewer since-rev 증분 동기에 무해). study_publish_enabled=false 기본이라 현재 inert, 발행 활성화(P0-1b) 전 선결. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9 lines
580 B
SQL
9 lines
580 B
SQL
-- 377_publish_outbox_attempts_failed.sql
|
|
-- publish_outbox poison row head-of-line block 차단. 발행 워커가 행별 savepoint 격리 후
|
|
-- 예외 시 attempts++ 하고 MAX 초과 시 failed_at 스탬프(terminal) → 그 행을 select 에서 제외해
|
|
-- 후속 발행이 막히지 않게 함. 기존 미처리 행은 attempts=0 / failed_at=NULL 로 정상 재처리.
|
|
-- (단일 ALTER = 1 statement = asyncpg prepared 호환.)
|
|
ALTER TABLE publish_outbox
|
|
ADD COLUMN IF NOT EXISTS attempts SMALLINT NOT NULL DEFAULT 0,
|
|
ADD COLUMN IF NOT EXISTS failed_at TIMESTAMPTZ;
|