diff options
| author | おさむのひと <46447427+samunohito@users.noreply.github.com> | 2025-01-07 21:19:59 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-07 12:19:59 +0000 |
| commit | 8ad97e5ede6b1cdfe9472073352ede46e585e7c9 (patch) | |
| tree | bd7fa6ded8a71d12dfc48c87e02b06d08db748c1 /packages | |
| parent | [ci skip] Update CHANGELOG.md (書き方を揃える) (diff) | |
| download | misskey-8ad97e5ede6b1cdfe9472073352ede46e585e7c9.tar.gz misskey-8ad97e5ede6b1cdfe9472073352ede46e585e7c9.tar.bz2 misskey-8ad97e5ede6b1cdfe9472073352ede46e585e7c9.zip | |
fix(backend): disableClustering設定時の初期化ロジックを調整 (#15224)
* fix(backend): disableClustering設定時の初期化ロジックを調整
* onlyServer かつ enableCluster な場合、メインプロセスでlistenするとワーカープロセス側のlistenと衝突するため、メインプロセスはforkのみに制限する(listenしない)
* ログの追加
* fix CHANGELOG.md
* fix comment
Diffstat (limited to '')
| -rw-r--r-- | packages/backend/src/boot/entry.ts | 20 | ||||
| -rw-r--r-- | packages/backend/src/boot/master.ts | 24 |
2 files changed, 31 insertions, 13 deletions
diff --git a/packages/backend/src/boot/entry.ts b/packages/backend/src/boot/entry.ts index 25375c3015..da585ad68d 100644 --- a/packages/backend/src/boot/entry.ts +++ b/packages/backend/src/boot/entry.ts @@ -68,16 +68,22 @@ process.on('exit', code => { //#endregion -if (cluster.isPrimary || envOption.disableClustering) { - await masterMain(); - +if (!envOption.disableClustering) { if (cluster.isPrimary) { + logger.info(`Start main process... pid: ${process.pid}`); + await masterMain(); ev.mount(); + } else if (cluster.isWorker) { + logger.info(`Start worker process... pid: ${process.pid}`); + await workerMain(); + } else { + throw new Error('Unknown process type'); } -} - -if (cluster.isWorker || envOption.disableClustering) { - await workerMain(); +} else { + // 非clusterの場合はMasterのみが起動するため、Workerの処理は行わない(cluster.isWorker === trueの状態でこのブロックに来ることはない) + logger.info(`Start main process... pid: ${process.pid}`); + await masterMain(); + ev.mount(); } readyRef.value = true; diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts index 4bc5c799cf..2b181af675 100644 --- a/packages/backend/src/boot/master.ts +++ b/packages/backend/src/boot/master.ts @@ -91,25 +91,37 @@ export async function masterMain() { }); } - if (envOption.disableClustering) { + bootLogger.info( + `mode: [disableClustering: ${envOption.disableClustering}, onlyServer: ${envOption.onlyServer}, onlyQueue: ${envOption.onlyQueue}]` + ); + + if (!envOption.disableClustering) { + // clusterモジュール有効時 + if (envOption.onlyServer) { - await server(); + // onlyServer かつ enableCluster な場合、メインプロセスはforkのみに制限する(listenしない)。 + // ワーカープロセス側でlistenすると、メインプロセスでポートへの着信を受け入れてワーカープロセスへの分配を行う動作をする。 + // そのため、メインプロセスでも直接listenするとポートの競合が発生して起動に失敗してしまう。 + // see: https://nodejs.org/api/cluster.html#cluster } else if (envOption.onlyQueue) { await jobQueue(); } else { await server(); await jobQueue(); } + + await spawnWorkers(config.clusterLimit); } else { + // clusterモジュール無効時 + if (envOption.onlyServer) { - // nop + await server(); } else if (envOption.onlyQueue) { - // nop + await jobQueue(); } else { await server(); + await jobQueue(); } - - await spawnWorkers(config.clusterLimit); } if (envOption.onlyQueue) { |