feat: 일괄 릴리스 실행 계획을 추가한다
Gateway와 권한 있는 프로필 작업을 하나의 고정 커밋과 순서로 영속화한다. 앞 대상 성공 뒤 다음 작업을 claim하고 실패 대상은 같은 작업 ID로 재시도한다.
This commit is contained in:
+38
@@ -0,0 +1,38 @@
|
||||
CREATE TABLE "gateway_bulk_release" (
|
||||
"id" UUID NOT NULL,
|
||||
"source_mode" "GatewaySourceMode" NOT NULL,
|
||||
"source_ref" TEXT NOT NULL,
|
||||
"resolved_commit_sha" TEXT NOT NULL,
|
||||
"reason" TEXT,
|
||||
"requested_by" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMPTZ(3) NOT NULL,
|
||||
CONSTRAINT "gateway_bulk_release_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
ALTER TABLE "gateway_operation"
|
||||
ADD COLUMN "bulk_release_id" UUID,
|
||||
ADD COLUMN "bulk_order" INTEGER;
|
||||
|
||||
ALTER TABLE "gateway_release_operation"
|
||||
ADD COLUMN "bulk_release_id" UUID,
|
||||
ADD COLUMN "bulk_order" INTEGER;
|
||||
|
||||
ALTER TABLE "gateway_operation"
|
||||
ADD CONSTRAINT "gateway_operation_bulk_release_id_fkey"
|
||||
FOREIGN KEY ("bulk_release_id") REFERENCES "gateway_bulk_release"("id")
|
||||
ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "gateway_release_operation"
|
||||
ADD CONSTRAINT "gateway_release_operation_bulk_release_id_fkey"
|
||||
FOREIGN KEY ("bulk_release_id") REFERENCES "gateway_bulk_release"("id")
|
||||
ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
CREATE INDEX "gateway_bulk_release_created_at_idx"
|
||||
ON "gateway_bulk_release"("created_at");
|
||||
|
||||
CREATE INDEX "gateway_operation_bulk_release_id_bulk_order_idx"
|
||||
ON "gateway_operation"("bulk_release_id", "bulk_order");
|
||||
|
||||
CREATE INDEX "gateway_release_operation_bulk_release_id_bulk_order_idx"
|
||||
ON "gateway_release_operation"("bulk_release_id", "bulk_order");
|
||||
@@ -402,6 +402,9 @@ model GatewayOperation {
|
||||
leaseUntil DateTime? @map("lease_until")
|
||||
heartbeatAt DateTime? @map("heartbeat_at")
|
||||
attempts Int @default(0)
|
||||
bulkReleaseId String? @map("bulk_release_id")
|
||||
bulkOrder Int? @map("bulk_order")
|
||||
bulkRelease GatewayBulkRelease? @relation(fields: [bulkReleaseId], references: [id], onDelete: SetNull)
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
logs GatewayOperationLog[]
|
||||
@@ -409,6 +412,7 @@ model GatewayOperation {
|
||||
@@index([status, scheduledAt, createdAt])
|
||||
@@index([status, leaseUntil, createdAt])
|
||||
@@index([profileName, createdAt])
|
||||
@@index([bulkReleaseId, bulkOrder])
|
||||
@@map("gateway_operation")
|
||||
}
|
||||
|
||||
@@ -457,15 +461,35 @@ model GatewayReleaseOperation {
|
||||
leaseUntil DateTime? @map("lease_until") @db.Timestamptz(6)
|
||||
heartbeatAt DateTime? @map("heartbeat_at") @db.Timestamptz(6)
|
||||
attempts Int @default(0)
|
||||
bulkReleaseId String? @map("bulk_release_id")
|
||||
bulkOrder Int? @map("bulk_order")
|
||||
bulkRelease GatewayBulkRelease? @relation(fields: [bulkReleaseId], references: [id], onDelete: SetNull)
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
||||
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
|
||||
logs GatewayReleaseLog[]
|
||||
|
||||
@@index([status, leaseUntil, createdAt])
|
||||
@@index([createdAt])
|
||||
@@index([bulkReleaseId, bulkOrder])
|
||||
@@map("gateway_release_operation")
|
||||
}
|
||||
|
||||
model GatewayBulkRelease {
|
||||
id String @id @default(uuid())
|
||||
sourceMode GatewaySourceMode @map("source_mode")
|
||||
sourceRef String @map("source_ref")
|
||||
resolvedCommitSha String @map("resolved_commit_sha")
|
||||
reason String?
|
||||
requestedBy String @map("requested_by")
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
|
||||
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
|
||||
gatewayOperations GatewayReleaseOperation[]
|
||||
profileOperations GatewayOperation[]
|
||||
|
||||
@@index([createdAt])
|
||||
@@map("gateway_bulk_release")
|
||||
}
|
||||
|
||||
model GatewayReleaseLog {
|
||||
id BigInt @id @default(autoincrement())
|
||||
operationId String @map("operation_id")
|
||||
|
||||
Reference in New Issue
Block a user