From 5444ca9aca45e2201199ef56e1fac67b4381dc42 Mon Sep 17 00:00:00 2001 From: Johann150 Date: Mon, 1 Apr 2024 17:55:13 +0200 Subject: [PATCH] server: fix restarted job retaining the right mode When a web or queue worker exited unexpectedly, the new restarted worker would not have any mode set and so would try to do web and queue worker stuff at the same time, which was not the intended behaviour. Changelog: Fixed --- packages/backend/src/boot/index.ts | 9 --------- packages/backend/src/boot/master.ts | 4 ++++ 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/backend/src/boot/index.ts b/packages/backend/src/boot/index.ts index 2580920f1..7026775a8 100644 --- a/packages/backend/src/boot/index.ts +++ b/packages/backend/src/boot/index.ts @@ -1,5 +1,4 @@ import cluster from 'node:cluster'; -import chalk from 'chalk'; import Xev from 'xev'; import Logger from '@/services/logger.js'; @@ -57,14 +56,6 @@ cluster.on('online', worker => { clusterLogger.debug(`Process is now online: [${worker.id}]`); }); -// Listen for dying workers -cluster.on('exit', worker => { - // Replace the dead worker, - // we're not sentimental - clusterLogger.error(chalk.red(`[${worker.id}] died :(`)); - cluster.fork(); -}); - // Display detail of unhandled promise rejection if (envOption.logLevel !== LOG_LEVELS.quiet) { process.on('unhandledRejection', console.dir); diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts index c53dc12b1..f3643c3b9 100644 --- a/packages/backend/src/boot/master.ts +++ b/packages/backend/src/boot/master.ts @@ -168,6 +168,10 @@ async function spawnWorkers(clusterLimits: Required): P function spawnWorker(mode: 'web' | 'queue'): Promise { return new Promise(res => { const worker = cluster.fork({ mode }); + worker.on('exit', async (code, signal) => { + logger.error(mode + ' worker died, restarting...'); + await spawnWorker(mode); + }); worker.on('message', message => { switch (message) { case 'listenFailed':