Skip to content

Commit 76f3494

Browse files
committed
fix(webapp): inject runStore into UpdateMetadataService
The service statically imported the db.server-backed runStore singleton, which dragged the Prisma client into otherwise-light test module graphs and opened an eager connection to DATABASE_URL on import. The metadata service test then threw an unhandled connection error whenever no database was reachable at the configured address. Make runStore a required constructor option, pass the singleton at the production construction site, and inject a testcontainer-backed store in the tests.
1 parent 3c22b32 commit 76f3494

3 files changed

Lines changed: 15 additions & 3 deletions

File tree

apps/webapp/app/services/metadata/updateMetadata.server.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import { type RuntimeFiber } from "effect/Fiber";
1414
import { setTimeout } from "timers/promises";
1515
import { Logger, LogLevel } from "@trigger.dev/core/logger";
1616
import type { RunStore } from "@internal/run-store";
17-
import { runStore as defaultRunStore } from "~/v3/runStore.server";
1817

1918
const RUN_UPDATABLE_WINDOW_MS = 60 * 60 * 1000; // 1 hour
2019

@@ -26,7 +25,7 @@ type BufferedRunMetadataChangeOperation = {
2625

2726
export type UpdateMetadataServiceOptions = {
2827
prisma: PrismaClientOrTransaction;
29-
runStore?: RunStore;
28+
runStore: RunStore;
3029
flushIntervalMs?: number;
3130
flushEnabled?: boolean;
3231
flushLoggingEnabled?: boolean;
@@ -61,7 +60,7 @@ export class UpdateMetadataService {
6160

6261
constructor(private readonly options: UpdateMetadataServiceOptions) {
6362
this._prisma = options.prisma;
64-
this._runStore = options.runStore ?? defaultRunStore;
63+
this._runStore = options.runStore;
6564
this.flushIntervalMs = options.flushIntervalMs ?? 5000;
6665
this.flushEnabled = options.flushEnabled ?? true;
6766
this.flushLoggingEnabled = options.flushLoggingEnabled ?? true;

apps/webapp/app/services/metadata/updateMetadataInstance.server.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ import { singleton } from "~/utils/singleton";
22
import { env } from "~/env.server";
33
import { UpdateMetadataService } from "./updateMetadata.server";
44
import { prisma } from "~/db.server";
5+
import { runStore } from "~/v3/runStore.server";
56
import { publishChangeRecord } from "~/services/realtime/runChangeNotifierInstance.server";
67

78
export const updateMetadataService = singleton(
89
"update-metadata-service",
910
() =>
1011
new UpdateMetadataService({
1112
prisma,
13+
runStore,
1214
flushIntervalMs: env.BATCH_METADATA_OPERATIONS_FLUSH_INTERVAL_MS,
1315
flushEnabled: env.BATCH_METADATA_OPERATIONS_FLUSH_ENABLED === "1",
1416
flushLoggingEnabled: env.BATCH_METADATA_OPERATIONS_FLUSH_LOGGING_ENABLED === "1",

apps/webapp/test/updateMetadata.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { containerTest } from "@internal/testcontainers";
22
import { parsePacket } from "@trigger.dev/core/v3";
33
import { setTimeout } from "timers/promises";
44
import { describe } from "vitest";
5+
import { PostgresRunStore } from "@internal/run-store";
56
import { UpdateMetadataService } from "~/services/metadata/updateMetadata.server";
67
import { MetadataTooLargeError } from "~/utils/packets";
78

@@ -13,6 +14,7 @@ describe("UpdateMetadataService.call", () => {
1314
async ({ prisma, redisOptions }) => {
1415
const service = new UpdateMetadataService({
1516
prisma,
17+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
1618
flushIntervalMs: 100,
1719
flushEnabled: true,
1820
flushLoggingEnabled: true,
@@ -112,6 +114,7 @@ describe("UpdateMetadataService.call", () => {
112114
async ({ prisma, redisOptions }) => {
113115
const service = new UpdateMetadataService({
114116
prisma,
117+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
115118
flushIntervalMs: 100,
116119
flushEnabled: true,
117120
flushLoggingEnabled: true,
@@ -280,6 +283,7 @@ describe("UpdateMetadataService.call", () => {
280283
async ({ prisma, redisOptions }) => {
281284
const service = new UpdateMetadataService({
282285
prisma,
286+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
283287
flushIntervalMs: 100,
284288
flushEnabled: true,
285289
flushLoggingEnabled: true,
@@ -395,6 +399,7 @@ describe("UpdateMetadataService.call", () => {
395399
async ({ prisma, redisOptions }) => {
396400
const service = new UpdateMetadataService({
397401
prisma,
402+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
398403
flushIntervalMs: 100,
399404
flushEnabled: true,
400405
flushLoggingEnabled: true,
@@ -587,6 +592,7 @@ describe("UpdateMetadataService.call", () => {
587592
async ({ prisma, redisOptions }) => {
588593
const service = new UpdateMetadataService({
589594
prisma,
595+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
590596
flushIntervalMs: 100,
591597
flushEnabled: true,
592598
flushLoggingEnabled: true,
@@ -785,6 +791,7 @@ describe("UpdateMetadataService.call", () => {
785791

786792
const service = new UpdateMetadataService({
787793
prisma,
794+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
788795
flushIntervalMs: 100000, // Very long interval so we can control flushing
789796
flushEnabled: true,
790797
flushLoggingEnabled: true,
@@ -893,6 +900,7 @@ describe("UpdateMetadataService.call", () => {
893900

894901
const service = new UpdateMetadataService({
895902
prisma,
903+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
896904
flushIntervalMs: 100,
897905
flushEnabled: true,
898906
flushLoggingEnabled: true,
@@ -1004,6 +1012,7 @@ describe("UpdateMetadataService.call", () => {
10041012
async ({ prisma, redisOptions }) => {
10051013
const service = new UpdateMetadataService({
10061014
prisma,
1015+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
10071016
flushIntervalMs: 100000, // Very long interval so we can control flushing
10081017
flushEnabled: true,
10091018
flushLoggingEnabled: true,
@@ -1134,6 +1143,7 @@ describe("UpdateMetadataService.call", () => {
11341143
async ({ prisma, redisOptions }) => {
11351144
const service = new UpdateMetadataService({
11361145
prisma,
1146+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
11371147
flushIntervalMs: 100,
11381148
flushEnabled: true,
11391149
flushLoggingEnabled: true,
@@ -1209,6 +1219,7 @@ describe("UpdateMetadataService.call", () => {
12091219
async ({ prisma, redisOptions }) => {
12101220
const service = new UpdateMetadataService({
12111221
prisma,
1222+
runStore: new PostgresRunStore({ prisma, readOnlyPrisma: prisma }),
12121223
flushIntervalMs: 100,
12131224
flushEnabled: true,
12141225
flushLoggingEnabled: true,

0 commit comments

Comments
 (0)