fix: 가오픈 명령과 GAME WALL 시간 경계 회귀 수정

This commit is contained in:
2026-09-05 00:55:33 +00:00
parent 1d53e6f226
commit 3437cd99f4
25 changed files with 458 additions and 71 deletions
@@ -316,7 +316,13 @@ export const createGatewayReleaseRepository = (prisma: GatewayPrismaClient): Gat
where:
candidate.status === 'QUEUED'
? { id: candidate.id, status: 'QUEUED' }
: { id: candidate.id, status: 'RUNNING', leaseUntil: candidate.leaseUntil },
: {
id: candidate.id,
status: 'RUNNING',
// 마이크로초 lease를 Date로 왕복한 값과 equality CAS하면
// 만료된 행도 선점하지 못한다. 갱신 race는 만료 조건으로 막는다.
leaseUntil: candidate.leaseUntil ? { lt: now } : null,
},
data: {
status: 'RUNNING',
startedAt: candidate.startedAt ?? now,
@@ -802,7 +802,13 @@ export const createGatewayProfileRepository = (prisma: GatewayPrismaClient): Gat
where:
candidate.status === 'QUEUED'
? { id: candidate.id, status: 'QUEUED' }
: { id: candidate.id, status: 'RUNNING', leaseUntil: candidate.leaseUntil },
: {
id: candidate.id,
status: 'RUNNING',
// DB microseconds는 JS Date로 읽을 때 잘린다. timestamp
// 동등 비교 대신 갱신되지 않은 만료 lease인지 DB에서 재검사한다.
leaseUntil: candidate.leaseUntil ? { lt: now } : null,
},
data: {
status: 'RUNNING',
startedAt: candidate.startedAt ?? now,