summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorおさむのひと <46447427+samunohito@users.noreply.github.com>2025-01-07 21:19:59 +0900
committerGitHub <noreply@github.com>2025-01-07 12:19:59 +0000
commit8ad97e5ede6b1cdfe9472073352ede46e585e7c9 (patch)
treebd7fa6ded8a71d12dfc48c87e02b06d08db748c1 /packages
parent[ci skip] Update CHANGELOG.md (書き方を揃える) (diff)
downloadmisskey-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.ts20
-rw-r--r--packages/backend/src/boot/master.ts24
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) {