Skip to content

Commit 564267d

Browse files
committed
chore(compute): update snapshot callback schema
1 parent f87b52c commit 564267d

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

apps/supervisor/src/services/computeSnapshotService.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,13 @@ export class ComputeSnapshotService {
8080

8181
/** Handle the callback from the gateway after a snapshot completes or fails. */
8282
async handleCallback(body: SnapshotCallbackPayload) {
83+
const snapshotId = body.status === "completed" ? body.snapshot_id : undefined;
84+
8385
this.logger.debug("Snapshot callback", {
84-
snapshotId: body.snapshot_id,
86+
snapshotId,
8587
instanceId: body.instance_id,
8688
status: body.status,
87-
error: body.error,
89+
error: body.status === "failed" ? body.error : undefined,
8890
metadata: body.metadata,
8991
durationMs: body.duration_ms,
9092
});
@@ -97,7 +99,7 @@ export class ComputeSnapshotService {
9799
return { ok: false as const, status: 400 };
98100
}
99101

100-
this.#emitSnapshotSpan(runId, body.duration_ms, body.snapshot_id);
102+
this.#emitSnapshotSpan(runId, body.duration_ms, snapshotId);
101103

102104
if (body.status === "completed") {
103105
const result = await this.workerClient.submitSuspendCompletion({

internal-packages/compute/src/types.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,20 @@ export const SnapshotRestoreRequestSchema = z.object({
6262
});
6363
export type SnapshotRestoreRequest = z.infer<typeof SnapshotRestoreRequestSchema>;
6464

65-
export const SnapshotCallbackPayloadSchema = z.object({
66-
snapshot_id: z.string(),
67-
instance_id: z.string(),
68-
status: z.enum(["completed", "failed"]),
69-
error: z.string().optional(),
70-
metadata: z.record(z.string()).optional(),
71-
duration_ms: z.number().optional(),
72-
});
65+
export const SnapshotCallbackPayloadSchema = z.discriminatedUnion("status", [
66+
z.object({
67+
status: z.literal("completed"),
68+
snapshot_id: z.string(),
69+
instance_id: z.string(),
70+
metadata: z.record(z.string()).optional(),
71+
duration_ms: z.number().optional(),
72+
}),
73+
z.object({
74+
status: z.literal("failed"),
75+
instance_id: z.string(),
76+
error: z.string().optional(),
77+
metadata: z.record(z.string()).optional(),
78+
duration_ms: z.number().optional(),
79+
}),
80+
]);
7381
export type SnapshotCallbackPayload = z.infer<typeof SnapshotCallbackPayloadSchema>;

0 commit comments

Comments
 (0)