Skip to content

Commit 8b654bd

Browse files
committed
fix(webapp): default worker-version fresh-read on; update resolver tests
The fresh-read flag is optional and defaults on, so existing resolver constructions keep working; the control-plane resolver tests assert the fresh (no-cache) default and cover the kill-switch cache path.
1 parent 4e9273e commit 8b654bd

2 files changed

Lines changed: 39 additions & 7 deletions

File tree

apps/webapp/app/v3/runOpsMigration/controlPlaneResolver.server.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,12 @@ export type ControlPlaneResolverOptions = {
5959
cache: ControlPlaneCache;
6060
splitEnabled: () => boolean;
6161
/**
62-
* When true (default), the dequeue worker-version resolve reads the matched task/queue fresh on
63-
* every call (no cache). When false, it falls back to the legacy env-keyed cache over the whole
64-
* task/queue set — a kill-switch, retained only so the read shape can be reverted via config.
62+
* When true (the default when omitted), the dequeue worker-version resolve reads the matched
63+
* task/queue fresh on every call (no cache). When false, it falls back to the legacy env-keyed
64+
* cache over the whole task/queue set — a kill-switch, retained only so the read shape can be
65+
* reverted via config.
6566
*/
66-
workerVersionFreshReadEnabled: () => boolean;
67+
workerVersionFreshReadEnabled?: () => boolean;
6768
};
6869

6970
type CpClient = PrismaClient | PrismaReplicaClient;
@@ -111,7 +112,7 @@ export class ControlPlaneResolver {
111112
this.controlPlaneReplica = opts.controlPlaneReplica;
112113
this.cache = opts.cache;
113114
this.splitEnabled = opts.splitEnabled;
114-
this.workerVersionFreshReadEnabled = opts.workerVersionFreshReadEnabled;
115+
this.workerVersionFreshReadEnabled = opts.workerVersionFreshReadEnabled ?? (() => true);
115116
}
116117

117118
async resolveEnv(environmentId: string): Promise<ResolvedEnv | null> {

apps/webapp/test/v3/runOpsMigration/controlPlaneResolver.server.test.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ heteroPostgresTest(
224224
// --- resolveWorkerVersion ---------------------------------------------------
225225

226226
heteroPostgresTest(
227-
"resolveWorkerVersion (pinned) returns worker/tasks/queues and caches it",
227+
"resolveWorkerVersion (pinned) returns worker/tasks/queues and reads fresh each call",
228228
async ({ prisma14 }) => {
229229
const { environment, project } = await seedControlPlane(prisma14);
230230
const { worker, task, queue } = await seedWorker(prisma14, {
@@ -250,6 +250,37 @@ heteroPostgresTest(
250250
const readsAfterFirst = reads();
251251
expect(readsAfterFirst).toBeGreaterThanOrEqual(1);
252252

253+
const second = await resolver.resolveWorkerVersion({
254+
environmentId: environment.id,
255+
backgroundWorkerId: worker.id,
256+
});
257+
expect(second?.worker.id).toBe(worker.id);
258+
expect(reads()).toBeGreaterThan(readsAfterFirst);
259+
}
260+
);
261+
262+
heteroPostgresTest(
263+
"resolveWorkerVersion (pinned) serves from cache when the kill-switch is off",
264+
async ({ prisma14 }) => {
265+
const { environment, project } = await seedControlPlane(prisma14);
266+
const { worker } = await seedWorker(prisma14, {
267+
projectId: project.id,
268+
environmentId: environment.id,
269+
});
270+
const { client: counting, reads } = countQueries(prisma14);
271+
const resolver = new ControlPlaneResolver({
272+
controlPlaneReplica: counting,
273+
controlPlanePrimary: counting,
274+
cache: new ControlPlaneCache(),
275+
splitEnabled: () => true,
276+
workerVersionFreshReadEnabled: () => false,
277+
});
278+
279+
await resolver.resolveWorkerVersion({
280+
environmentId: environment.id,
281+
backgroundWorkerId: worker.id,
282+
});
283+
const readsAfterFirst = reads();
253284
const second = await resolver.resolveWorkerVersion({
254285
environmentId: environment.id,
255286
backgroundWorkerId: worker.id,
@@ -283,7 +314,7 @@ heteroPostgresTest(
283314

284315
const second = await resolver.resolveWorkerVersion({ environmentId: environment.id });
285316
expect(second?.worker.id).toBe(worker.id);
286-
expect(reads()).toBe(readsAfterFirst);
317+
expect(reads()).toBeGreaterThan(readsAfterFirst);
287318
}
288319
);
289320

0 commit comments

Comments
 (0)