갱신 행의 ID를 보존하고 예약턴의 불필요한 시퀀스를 제거한다
This commit is contained in:
1 parent
bc54b157c1
commit
81e101ffef
43 files changed
+587
-113
No files matched your search
@@ -77,6 +77,24 @@ Lease를 잃은 process는 fencing 검사에서 commit하지 못합니다.
|
||||
`InMemoryTurnWorld`에서 읽습니다. 따라서 flush 실패 뒤 다음 run도 복원된
|
||||
checkpoint에서 시작합니다.
|
||||
|
||||
## 내부 ID와 처리 순서
|
||||
|
||||
예약턴의 순서는 `turnIdx`, 변경 감지는 revision, 실행 권한은 lease/fencing으로
|
||||
판정합니다. `GeneralTurn`은 `(generalId, turnIdx)`, `NationTurn`은
|
||||
`(nationId, officerLevel, turnIdx)` 기본키를 사용합니다. 기존 transaction 안의
|
||||
삭제·재삽입 순서를 유지하면서 사용하지 않는 자동 ID/sequence를 제거했습니다.
|
||||
|
||||
접속 기록·현재 월 통계·랭킹·유산 포인트·베팅·보존 기록/연감은 갱신 시 기존 ID를
|
||||
유지하고 신규 업무 키에만 ID를 발급합니다. Prisma 갱신은
|
||||
`packages/infra/src/stableRowId.ts`의 `upsertWithoutSequence()`가 먼저 UPDATE하고,
|
||||
미존재 결과인 P2025에서만 원래 upsert로 생성합니다. 제약 위반·다른 오류는 그대로
|
||||
전파하고, 새 키의 동시 생성 경합은 ON CONFLICT가 처리합니다. raw SQL은 같은
|
||||
module의 `existingRowIdOrNext()`로 기존 ID를 재사용합니다.
|
||||
|
||||
`input_event.sequence`, 외교 감사 sequence, outbox/log ID는 실행 순서·cursor·
|
||||
claim/완료 식별자이므로 자동 증가를 유지합니다. 새 행 생성의 rollback이나 동시
|
||||
생성 경합에서 생기는 sequence gap은 정상이며 번호를 되감지 않습니다.
|
||||
|
||||
## 저장 위치
|
||||
|
||||
| 상태 | 기준 |
|
||||
|
||||
@@ -116,8 +116,11 @@ server build는 기존 Turbo cache를 재사용할 수 있지만, 자원 보호
|
||||
profile frontend release task의 `NODE_OPTIONS`만 덮어쓰며 server package Turbo
|
||||
build와 배포 후 PM2 process의 heap은 바꾸지 않습니다. 전용 heap을 늘릴 때는
|
||||
runtime container hard limit과 전체 process RSS를 먼저 확인합니다.
|
||||
- migration 이후 이전 애플리케이션으로 돌아갈 때 schema 하위 호환성이
|
||||
유지됩니다.
|
||||
- migration 이후 이전 애플리케이션으로 돌아갈 때 schema 하위 호환성을
|
||||
버전별로 확인합니다. `20261114020000_reserved_turn_slot_primary_keys`는 미사용
|
||||
예약턴 ID/sequence를 제거하므로 구형 Prisma client로 단독 rollback할 수 없습니다.
|
||||
Profile의 모든 구형 game process를 정지한 뒤 matching client로 전환하며,
|
||||
복구는 forward fix 또는 검증한 사전 DB backup의 restore 경로를 사용합니다.
|
||||
|
||||
## Commit worktree 자동 정리
|
||||
|
||||
|
||||
@@ -219,6 +219,21 @@ no-op, unique/FK/index, runtime query와 reload를 확인합니다. 기존 migra
|
||||
Prisma reload, 유일성 및 transaction rollback을 검증합니다. `log_entry`·`inheritance_log`의 API 숫자 cursor는
|
||||
`Number.MAX_SAFE_INTEGER`까지 정확성을 보장하며 그 이상은 명시적으로 거부합니다.
|
||||
|
||||
### 예약턴 복합키와 일반 갱신 ID 회귀
|
||||
|
||||
`RESERVED_TURN_MIGRATION_TEST_DATABASE_URL`을 격리 개발 DB에 주입해
|
||||
`pnpm --filter @sammo-ts/infra verify:migration:reserved-turn-keys`를 실행합니다.
|
||||
기존 기수의 명령·인자·시간·revision·lease 보존, 자연키 유일성, queue 교체 rollback,
|
||||
sequence 제거, 새 schema 전체 migration과 deploy 재실행을 확인합니다.
|
||||
이전 `verify:migration:rank-data`는 64비트 확장 당시의 migration head까지만
|
||||
검사합니다. 이후 예약턴 ID를 제거한 현재 전체 chain은 새 검증기가 소유합니다.
|
||||
|
||||
`stableRowId.integration.test.ts`는 `IMMEDIATE_ACTION_DATABASE_URL` 전용 schema에서
|
||||
실제 Prisma의 기존 ID 보존, 원자적 increment, 신규 키 동시 생성, 미존재 fallback의
|
||||
transaction 생존, 제약 위반 전파와 rollback을 검사합니다. 접속량/지연 접속량 및
|
||||
batch 저장 test는 같은 행을 갱신할 때 sequence가 증가하지 않는지도 확인합니다.
|
||||
예약 API의 실제 HTTP 권한 행렬과 daemon/API lease 통합 검증도 함께 실행합니다.
|
||||
|
||||
## 결과 기록
|
||||
|
||||
Report에는 실행 명령, commit, 서비스와 fixture, pass/fail/skip 수, baseline
|
||||
|
||||
Reference in new issue
Block a user