Skip to content

Commit 5d24dd1

Browse files
committed
feat(webapp): use background flag for shadow mode template creation
1 parent 6809f07 commit 5d24dd1

File tree

4 files changed

+18
-25
lines changed

4 files changed

+18
-25
lines changed

apps/webapp/app/v3/services/computeTemplateCreation.server.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ export class ComputeTemplateCreationService {
6262
return "skip";
6363
}
6464

65-
async createTemplate(imageReference: string): Promise<{ success: boolean; error?: string }> {
65+
async createTemplate(
66+
imageReference: string,
67+
options?: { background?: boolean }
68+
): Promise<{ success: boolean; error?: string }> {
6669
if (!this.client) {
6770
return { success: false, error: "Compute gateway not configured" };
6871
}
@@ -72,6 +75,7 @@ export class ComputeTemplateCreationService {
7275
image: imageReference,
7376
cpu: 0.5,
7477
memory_mb: 512,
78+
background: options?.background,
7579
});
7680
return { success: true };
7781
} catch (error) {
@@ -83,20 +87,4 @@ export class ComputeTemplateCreationService {
8387
return { success: false, error: message };
8488
}
8589
}
86-
87-
/**
88-
* Fire-and-forget template creation. No HTTP connection held open,
89-
* no response awaited. Used for shadow rollout mode.
90-
*/
91-
createTemplateBackground(imageReference: string): void {
92-
if (!this.client) {
93-
return;
94-
}
95-
96-
this.client.createTemplateBackground({
97-
image: imageReference,
98-
cpu: 0.5,
99-
memory_mb: 512,
100-
});
101-
}
10290
}

apps/webapp/app/v3/services/finalizeDeployment.server.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,13 @@ export class FinalizeDeploymentService extends BaseService {
191191

192192
// Shadow mode: fire-and-forget template creation after deploy is finalized
193193
if (templateMode === "shadow" && deployment.imageReference) {
194-
logger.debug("Shadow compute template creation (background)", {
195-
id,
196-
imageReference: deployment.imageReference,
194+
templateService.createTemplate(deployment.imageReference, { background: true }).catch((error) => {
195+
logger.error("Shadow compute template creation failed", {
196+
id,
197+
imageReference: deployment.imageReference,
198+
error: error instanceof Error ? error.message : String(error),
199+
});
197200
});
198-
templateService.createTemplateBackground(deployment.imageReference);
199201
}
200202

201203
return finalizedDeployment;

apps/webapp/app/v3/services/finalizeDeploymentV2.server.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,13 @@ export class FinalizeDeploymentV2Service extends BaseService {
241241
imageReference: string,
242242
deploymentFriendlyId: string
243243
) {
244-
logger.debug("Shadow compute template creation (background)", {
245-
id: deploymentFriendlyId,
246-
imageReference,
244+
templateService.createTemplate(imageReference, { background: true }).catch((error) => {
245+
logger.error("Shadow compute template creation failed", {
246+
id: deploymentFriendlyId,
247+
imageReference,
248+
error: error instanceof Error ? error.message : String(error),
249+
});
247250
});
248-
templateService.createTemplateBackground(imageReference);
249251
}
250252
}
251253

internal-packages/compute/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const TemplateCreateRequestSchema = z.object({
44
image: z.string(),
55
cpu: z.number(),
66
memory_mb: z.number(),
7+
background: z.boolean().optional(),
78
callback: z
89
.object({
910
url: z.string(),

0 commit comments

Comments
 (0)