Skip to content

Commit b75e18a

Browse files
committed
fix(webapp): fail-open entitlement lookup in migration mode, harden region fallback
1 parent 222d653 commit b75e18a

6 files changed

Lines changed: 34 additions & 12 deletions

File tree

apps/webapp/app/presenters/v3/ApiRetrieveRunPresenter.server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ async function createCommonRunStructure(run: CommonRelatedRun, apiVersion: API_V
522522
batchId: run.batch?.friendlyId,
523523
metadata,
524524
region:
525-
run.region || run.workerQueue ? run.region ?? baseWorkerQueue(run.workerQueue) : undefined,
525+
run.region || run.workerQueue ? run.region || baseWorkerQueue(run.workerQueue) : undefined,
526526
};
527527
}
528528

apps/webapp/app/presenters/v3/SpanPresenter.server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export class SpanPresenter extends BasePresenter {
303303
location: true,
304304
},
305305
where: {
306-
masterQueue: run.region ?? baseWorkerQueue(run.workerQueue),
306+
masterQueue: run.region || baseWorkerQueue(run.workerQueue),
307307
},
308308
});
309309

apps/webapp/app/routes/resources.taskruns.$runParam.replay.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
215215
region:
216216
environment.type === "DEVELOPMENT"
217217
? undefined
218-
: run.region ?? baseWorkerQueue(run.workerQueue),
218+
: run.region || baseWorkerQueue(run.workerQueue),
219219
regions: regionsResult.regions,
220220
ttlSeconds: run.ttl ? parseDuration(run.ttl, "s") ?? undefined : undefined,
221221
idempotencyKey: run.idempotencyKey,

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,16 +173,30 @@ export class ComputeTemplateCreationService {
173173
}
174174
const defaultQueue = project.defaultWorkerGroup?.masterQueue;
175175
if (defaultQueue && backingForQueue(defaultQueue, workerRegionRegistry.current() ?? [])) {
176-
const planType = (await getEntitlement(project.organization.id))?.plan?.type;
177176
if (!globalFlagsRegistry.isLoaded) {
178177
await globalFlagsRegistry.waitUntilReady(env.GLOBAL_FLAGS_READY_TIMEOUT_MS);
179178
}
180-
const migrated = isOrgMigrated({
181-
planType,
179+
const decision = {
182180
orgId: project.organization.id,
183181
orgFeatureFlags: project.organization.featureFlags as Record<string, unknown> | null,
184182
flags: globalFlagsRegistry.current(),
185-
});
183+
};
184+
// Per-org override needs no plan; only the percentage path does. So skip the
185+
// external entitlement lookup unless it could matter, and degrade gracefully
186+
// if it throws - a shadow-template check must never fail a deploy.
187+
let migrated = isOrgMigrated({ ...decision, planType: undefined });
188+
if (!migrated && (decision.flags?.computeMigrationEnabled ?? false)) {
189+
let planType: string | undefined;
190+
try {
191+
planType = (await getEntitlement(project.organization.id))?.plan?.type;
192+
} catch (error) {
193+
logger.warn("compute migration: entitlement lookup failed; skipping shadow template", {
194+
organizationId: project.organization.id,
195+
error: error instanceof Error ? error.message : String(error),
196+
});
197+
}
198+
migrated = isOrgMigrated({ ...decision, planType });
199+
}
186200
if (migrated) {
187201
return "shadow";
188202
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ export class ReplayTaskRunService extends BaseService {
6868
authenticatedEnvironment.type === "DEVELOPMENT";
6969
const region = ignoreRegion
7070
? undefined
71-
: overrideOptions.region ??
72-
existingTaskRun.region ??
71+
: overrideOptions.region ||
72+
existingTaskRun.region ||
7373
baseWorkerQueue(existingTaskRun.workerQueue);
7474

7575
try {

internal-packages/clickhouse/src/taskRuns.test.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ describe("Task Runs V2", () => {
8383
"concurrency_key_1234", // concurrency_key
8484
["bulk_action_group_id_1234", "bulk_action_group_id_1235"], // bulk_action_group_ids
8585
"", // worker_queue
86+
"", // region
8687
null, // max_duration_in_seconds
8788
"", // trigger_source
8889
"", // root_trigger_source
@@ -215,6 +216,7 @@ describe("Task Runs V2", () => {
215216
"", // concurrency_key
216217
[], // bulk_action_group_ids
217218
"", // worker_queue
219+
"", // region
218220
null, // max_duration_in_seconds
219221
"", // trigger_source
220222
"", // root_trigger_source
@@ -270,6 +272,7 @@ describe("Task Runs V2", () => {
270272
"", // concurrency_key
271273
[], // bulk_action_group_ids
272274
"", // worker_queue
275+
"", // region
273276
null, // max_duration_in_seconds
274277
"", // trigger_source
275278
"", // root_trigger_source
@@ -372,6 +375,7 @@ describe("Task Runs V2", () => {
372375
"", // concurrency_key
373376
[], // bulk_action_group_ids
374377
"", // worker_queue
378+
"", // region
375379
null, // max_duration_in_seconds
376380
"", // trigger_source
377381
"", // root_trigger_source
@@ -482,6 +486,7 @@ describe("Task Runs V2", () => {
482486
"", // concurrency_key
483487
[], // bulk_action_group_ids
484488
"", // worker_queue
489+
"", // region
485490
null, // max_duration_in_seconds
486491
"", // trigger_source
487492
"", // root_trigger_source
@@ -536,7 +541,8 @@ describe("Task Runs V2", () => {
536541
0,
537542
"",
538543
[],
539-
"",
544+
"", // worker_queue
545+
"", // region
540546
null,
541547
"",
542548
"",
@@ -597,7 +603,8 @@ describe("Task Runs V2", () => {
597603
0,
598604
"",
599605
[],
600-
"",
606+
"", // worker_queue
607+
"", // region
601608
null,
602609
"",
603610
"",
@@ -652,7 +659,8 @@ describe("Task Runs V2", () => {
652659
0,
653660
"",
654661
[],
655-
"",
662+
"", // worker_queue
663+
"", // region
656664
null,
657665
"",
658666
"",

0 commit comments

Comments
 (0)