fix: recover orphaned code queue runs
This commit is contained in:
@@ -14,6 +14,10 @@ interface RuntimeConfig {
|
||||
port: number;
|
||||
databaseUrl: string;
|
||||
logFile: string;
|
||||
deployServiceId: string;
|
||||
deployRepo: string;
|
||||
deployCommit: string;
|
||||
deployRequestedCommit: string;
|
||||
mgrDatabasePoolMax: number;
|
||||
traceDatabasePoolMax: number;
|
||||
defaultProviderId: string;
|
||||
@@ -284,6 +288,10 @@ function configFromEnv(): RuntimeConfig {
|
||||
port: envNumber("PORT", 4278),
|
||||
databaseUrl,
|
||||
logFile: envString("LOG_FILE", "/var/log/unidesk/code-queue-mgr.jsonl"),
|
||||
deployServiceId: envString("UNIDESK_CODE_QUEUE_MGR_DEPLOY_SERVICE_ID", "code-queue-mgr"),
|
||||
deployRepo: envString("UNIDESK_CODE_QUEUE_MGR_DEPLOY_REPO", ""),
|
||||
deployCommit: envString("UNIDESK_CODE_QUEUE_MGR_DEPLOY_COMMIT", ""),
|
||||
deployRequestedCommit: envString("UNIDESK_CODE_QUEUE_MGR_DEPLOY_REQUESTED_COMMIT", ""),
|
||||
mgrDatabasePoolMax: Math.max(1, Math.min(2, envNumber("CODE_QUEUE_MGR_DATABASE_POOL_MAX", 2))),
|
||||
traceDatabasePoolMax: Math.max(1, Math.min(2, envNumber("CODE_QUEUE_TRACE_DATABASE_POOL_MAX", 1))),
|
||||
defaultProviderId: envString("CODE_QUEUE_MAIN_PROVIDER_ID", "D601"),
|
||||
@@ -1240,26 +1248,27 @@ async function queueSummary(tasks?: QueueTask[], queueRecords?: QueueRecord[]):
|
||||
counts[task.status] = Number(counts[task.status] ?? 0) + 1;
|
||||
summary.counts = counts;
|
||||
if (terminalTaskUnread(task)) summary.unreadTerminal = Number(summary.unreadTerminal) + 1;
|
||||
if ((task.status === "running" || task.status === "judging") && summary.activeTaskId === null) summary.activeTaskId = task.id;
|
||||
if ((task.status === "queued" || task.status === "retry_wait") && summary.runnableTaskId === null) summary.runnableTaskId = task.id;
|
||||
}
|
||||
const counts = taskRows.reduce<Record<string, number>>((memo, task) => {
|
||||
memo[task.status] = (memo[task.status] ?? 0) + 1;
|
||||
return memo;
|
||||
}, {});
|
||||
const activeTaskIds = taskRows.filter((task) => task.status === "running" || task.status === "judging").map((task) => task.id).sort();
|
||||
const orphanedActiveTaskIds = taskRows.filter((task) => task.status === "running" || task.status === "judging").map((task) => task.id).sort();
|
||||
const queueList = Array.from(summaries.values()).sort((left, right) => String(left.id).localeCompare(String(right.id)));
|
||||
return {
|
||||
total: taskRows.length,
|
||||
defaultQueueId: config.defaultQueueId,
|
||||
queueCount: queueList.length,
|
||||
queues: queueList,
|
||||
activeQueueIds: queueList.filter((queue) => typeof queue.activeTaskId === "string").map((queue) => String(queue.id)),
|
||||
activeQueueIds: [],
|
||||
processingQueueIds: [],
|
||||
activeRunSlotCount: activeTaskIds.length,
|
||||
activeRunSlotCount: 0,
|
||||
activeRunSlotWaiters: [],
|
||||
activeTaskIds,
|
||||
activeTaskId: activeTaskIds[0] ?? null,
|
||||
activeTaskIds: [],
|
||||
activeTaskId: null,
|
||||
orphanedActiveTaskIds,
|
||||
orphanedActiveTaskCount: orphanedActiveTaskIds.length,
|
||||
processing: false,
|
||||
counts,
|
||||
unreadTerminal: taskRows.reduce((total, task) => total + (terminalTaskUnread(task) ? 1 : 0), 0),
|
||||
@@ -2059,6 +2068,12 @@ async function route(req: Request): Promise<Response> {
|
||||
ok: schemaReady,
|
||||
service: "code-queue-mgr",
|
||||
role: "master-control-plane",
|
||||
deploy: {
|
||||
serviceId: config.deployServiceId,
|
||||
repo: config.deployRepo,
|
||||
commit: config.deployCommit,
|
||||
requestedCommit: config.deployRequestedCommit,
|
||||
},
|
||||
startedAt: serviceStartedAt,
|
||||
schemaReady,
|
||||
schemaLastError,
|
||||
|
||||
Reference in New Issue
Block a user