Skip to content

Commit 7644d92

Browse files
authored
Fix restored runner ID and various small enhancements (#1880)
* make worker nodetype configurable * make max dequeue count configurable from supervisor * deterministic runner ids * update runner id on restore * disable resource monitor * explicit run controller type imports * enhance debug logs
1 parent e6efb3c commit 7644d92

File tree

12 files changed

+158
-69
lines changed

12 files changed

+158
-69
lines changed

apps/supervisor/src/env.ts

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const Env = z.object({
3131
// Dequeue settings (provider mode)
3232
TRIGGER_DEQUEUE_ENABLED: BoolEnv.default("true"),
3333
TRIGGER_DEQUEUE_INTERVAL_MS: z.coerce.number().int().default(1000),
34+
TRIGGER_DEQUEUE_MAX_RUN_COUNT: z.coerce.number().int().default(10),
3435

3536
// Optional services
3637
TRIGGER_WARM_START_URL: z.string().optional(),
@@ -50,6 +51,7 @@ const Env = z.object({
5051
// Kubernetes specific settings
5152
KUBERNETES_FORCE_ENABLED: BoolEnv.default(false),
5253
KUBERNETES_NAMESPACE: z.string().default("default"),
54+
KUBERNETES_WORKER_NODETYPE_LABEL: z.string().default("v4-worker"),
5355
EPHEMERAL_STORAGE_SIZE_LIMIT: z.string().default("10Gi"),
5456
EPHEMERAL_STORAGE_SIZE_REQUEST: z.string().default("2Gi"),
5557

apps/supervisor/src/index.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ class ManagedSupervisor {
9999
this.logger.warn("[ManagedWorker] Failed pod handler disabled");
100100
}
101101

102-
this.resourceMonitor = new KubernetesResourceMonitor(createK8sApi(), "");
102+
this.resourceMonitor = new KubernetesResourceMonitor(
103+
createK8sApi(),
104+
env.TRIGGER_WORKER_INSTANCE_NAME
105+
);
103106
this.workloadManager = new KubernetesWorkloadManager(workloadManagerOptions);
104107
} else {
105108
this.resourceMonitor = new DockerResourceMonitor(new Docker());
@@ -113,10 +116,11 @@ class ManagedSupervisor {
113116
managedWorkerSecret: env.MANAGED_WORKER_SECRET,
114117
dequeueIntervalMs: env.TRIGGER_DEQUEUE_INTERVAL_MS,
115118
queueConsumerEnabled: env.TRIGGER_DEQUEUE_ENABLED,
119+
maxRunCount: env.TRIGGER_DEQUEUE_MAX_RUN_COUNT,
116120
runNotificationsEnabled: env.TRIGGER_WORKLOAD_API_ENABLED,
117121
preDequeue: async () => {
118122
if (this.isKubernetes) {
119-
// TODO: Test k8s resource monitor and remove this
123+
// Not used in k8s for now
120124
return {};
121125
}
122126

@@ -234,10 +238,11 @@ class ManagedSupervisor {
234238
snapshotFriendlyId: message.snapshot.friendlyId,
235239
});
236240

237-
this.resourceMonitor.blockResources({
238-
cpu: message.run.machine.cpu,
239-
memory: message.run.machine.memory,
240-
});
241+
// Disabled for now
242+
// this.resourceMonitor.blockResources({
243+
// cpu: message.run.machine.cpu,
244+
// memory: message.run.machine.memory,
245+
// });
241246
} catch (error) {
242247
this.logger.error("[ManagedWorker] Failed to create workload", { error });
243248
}

apps/supervisor/src/util.ts

+4
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,7 @@ export function getDockerHostDomain() {
44

55
return isMacOs || isWindows ? "host.docker.internal" : "localhost";
66
}
7+
8+
export function getRunnerId(runId: string) {
9+
return `runner-${runId.replace("run_", "")}`;
10+
}

apps/supervisor/src/workloadManager/docker.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
2-
import { RunnerId } from "@trigger.dev/core/v3/isomorphic";
32
import {
43
type WorkloadManager,
54
type WorkloadManagerCreateOptions,
65
type WorkloadManagerOptions,
76
} from "./types.js";
87
import { x } from "tinyexec";
98
import { env } from "../env.js";
10-
import { getDockerHostDomain } from "../util.js";
9+
import { getDockerHostDomain, getRunnerId } from "../util.js";
1110

1211
export class DockerWorkloadManager implements WorkloadManager {
1312
private readonly logger = new SimpleStructuredLogger("docker-workload-provider");
@@ -23,7 +22,8 @@ export class DockerWorkloadManager implements WorkloadManager {
2322
async create(opts: WorkloadManagerCreateOptions) {
2423
this.logger.log("[DockerWorkloadProvider] Creating container", { opts });
2524

26-
const runnerId = RunnerId.generate();
25+
const runnerId = getRunnerId(opts.runFriendlyId);
26+
2727
const runArgs = [
2828
"run",
2929
"--detach",

apps/supervisor/src/workloadManager/kubernetes.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import {
44
type WorkloadManagerCreateOptions,
55
type WorkloadManagerOptions,
66
} from "./types.js";
7-
import { RunnerId } from "@trigger.dev/core/v3/isomorphic";
87
import type { EnvironmentType, MachinePreset } from "@trigger.dev/core/v3";
98
import { env } from "../env.js";
109
import { type K8sApi, createK8sApi, type k8s } from "../clients/kubernetes.js";
10+
import { getRunnerId } from "../util.js";
1111

1212
type ResourceQuantities = {
1313
[K in "cpu" | "memory" | "ephemeral-storage"]?: string;
@@ -31,7 +31,7 @@ export class KubernetesWorkloadManager implements WorkloadManager {
3131
async create(opts: WorkloadManagerCreateOptions) {
3232
this.logger.log("[KubernetesWorkloadManager] Creating container", { opts });
3333

34-
const runnerId = RunnerId.generate().replace(/_/g, "-");
34+
const runnerId = getRunnerId(opts.runFriendlyId);
3535

3636
try {
3737
await this.k8s.core.createNamespacedPod({
@@ -217,7 +217,7 @@ export class KubernetesWorkloadManager implements WorkloadManager {
217217
automountServiceAccountToken: false,
218218
imagePullSecrets: this.getImagePullSecrets(),
219219
nodeSelector: {
220-
nodetype: "worker-re2",
220+
nodetype: env.KUBERNETES_WORKER_NODETYPE_LABEL,
221221
},
222222
};
223223
}

apps/webapp/app/routes/engine.v1.worker-actions.dequeue.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { json, TypedResponse } from "@remix-run/server-runtime";
2-
import { WorkerApiDequeueRequestBody, WorkerApiDequeueResponseBody } from "@trigger.dev/core/v3/workers";
2+
import {
3+
WorkerApiDequeueRequestBody,
4+
WorkerApiDequeueResponseBody,
5+
} from "@trigger.dev/core/v3/workers";
36
import { createActionWorkerApiRoute } from "~/services/routeBuilders/apiBuilder.server";
47

58
export const action = createActionWorkerApiRoute(
@@ -10,6 +13,7 @@ export const action = createActionWorkerApiRoute(
1013
return json(
1114
await authenticatedWorker.dequeue({
1215
maxResources: body.maxResources,
16+
maxRunCount: body.maxRunCount,
1317
})
1418
);
1519
}

0 commit comments

Comments
 (0)