Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/young-ligers-suffer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"trigger.dev": patch
---

- dev runs will no longer get stuck in DEQUEUED status
- prevent an ENOENT "System failure" in some dev runs when making the first change after running the dev CLI.
8 changes: 0 additions & 8 deletions packages/cli-v3/src/dev/devSession.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,14 +148,6 @@ export async function startDevSession({
if (bundled) {
eventBus.emit("rebuildStarted", "dev");
}

const outdir = b.initialOptions.outdir;
if (outdir && existsSync(outdir)) {
logger.debug("Removing outdir", { outdir });

rmSync(outdir, { recursive: true, force: true });
mkdirSync(outdir, { recursive: true });
}
});
b.onEnd(async (result: esbuild.BuildResult) => {
const errors = result.errors;
Expand Down
52 changes: 2 additions & 50 deletions packages/cli-v3/src/dev/devSupervisor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,15 +264,11 @@ class DevSupervisor implements WorkerRuntime {
return;
}

//get relevant versions
//ignore deprecated and the latest worker
const oldWorkerIds = this.#getActiveOldWorkers();

try {
//todo later we should track available resources and machines used, and pass them in here (it supports it)
const result = await this.options.client.dev.dequeue({
currentWorker: this.latestWorkerId,
oldWorkers: oldWorkerIds,
oldWorkers: [], // This isn't even used on the server side, so we can just pass an empty array
});

if (!result.success) {
Expand All @@ -285,10 +281,6 @@ class DevSupervisor implements WorkerRuntime {

//no runs, try again later
if (result.data.dequeuedMessages.length === 0) {
// logger.debug(`No dequeue runs for versions`, {
// oldWorkerIds,
// latestWorkerId: this.latestWorkerId,
// });
setTimeout(() => this.#dequeueRuns(), this.config.dequeueIntervalWithoutRun);
return;
}
Expand Down Expand Up @@ -599,42 +591,9 @@ class DevSupervisor implements WorkerRuntime {
this.socket.emit("run:unsubscribe", { version: "1", runFriendlyIds: [friendlyId] });
}

#getActiveOldWorkers() {
return Array.from(this.workers.values())
.filter((worker) => {
//exclude the latest
if (worker.serverWorker?.id === this.latestWorkerId) {
return false;
}

//if it's deprecated AND there are no executing runs, then filter it out
if (worker.deprecated && worker.serverWorker?.id) {
return this.#workerHasInProgressRuns(worker.serverWorker.id);
}

return true;
})
.map((worker) => worker.serverWorker?.id)
.filter((id): id is string => id !== undefined);
}

#workerHasInProgressRuns(friendlyId: string) {
for (const controller of this.runControllers.values()) {
logger.debug("[DevSupervisor] Checking controller", {
controllerFriendlyId: controller.workerFriendlyId,
friendlyId,
});
if (controller.workerFriendlyId === friendlyId) {
return true;
}
}

return false;
}

/** Deletes the worker if there are no active runs, after a delay */
async #tryDeleteWorker(friendlyId: string) {
await awaitTimeout(1_000);
await awaitTimeout(5_000);
this.#deleteWorker(friendlyId);
}

Expand All @@ -651,13 +610,6 @@ class DevSupervisor implements WorkerRuntime {
if (worker.serverWorker?.version) {
this.taskRunProcessPool?.deprecateVersion(worker.serverWorker?.version);
}

if (this.#workerHasInProgressRuns(friendlyId)) {
return;
}

worker.stop();
this.workers.delete(friendlyId);
}
}

Expand Down