* stop deleting the first dev version files on the first change, prevents system failures * prevent dev runs getting stuck in dequeued status by deleting workers * add changeset
This commit is contained in:
@@ -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.
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user