diff --git a/server/package-lock.json b/server/package-lock.json index 836c6c500..241591bc3 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/server", - "version": "0.123.22", + "version": "0.123.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@scrypted/server", - "version": "0.123.22", + "version": "0.123.23", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/server/src/scrypted-cluster-main.ts b/server/src/scrypted-cluster-main.ts index 08e77a84c..ff1992104 100644 --- a/server/src/scrypted-cluster-main.ts +++ b/server/src/scrypted-cluster-main.ts @@ -68,6 +68,7 @@ export interface ClusterWorkerProperties { export interface ClusterWorker extends ClusterWorkerProperties { peer: RpcPeer; + forks: Set; } export class PeerLiveness { @@ -287,6 +288,7 @@ export function createClusterServer(runtime: ScryptedRuntime, certificate: Retur const worker: ClusterWorker = { ...properties, peer, + forks: new Set(), }; runtime.clusterWorkers.add(worker); peer.killed.then(() => { diff --git a/server/src/services/cluster-fork.ts b/server/src/services/cluster-fork.ts index 704c99153..265bee988 100644 --- a/server/src/services/cluster-fork.ts +++ b/server/src/services/cluster-fork.ts @@ -18,7 +18,12 @@ export class ClusterFork { throw new Error(`no worker found for cluster labels ${JSON.stringify(options.labels)}`); const fork: ClusterForkParam = await worker.peer.getParam('fork'); - return fork(peerLiveness, options.runtime, packageJson, zipHash, getZip); + const forkResult = await fork(peerLiveness, options.runtime, packageJson, zipHash, getZip); + worker.forks.add(options); + forkResult.waitKilled().catch(() => {}).finally(() => { + worker.forks.delete(options); + }); + return forkResult; } async getClusterWorkers() { @@ -26,6 +31,7 @@ export class ClusterFork { for (const worker of this.runtime.clusterWorkers) { ret[worker.peer.peerName] = { labels: worker.labels, + forks: [...worker.forks], }; } return ret;