summaryrefslogtreecommitdiff
path: root/packages/backend/src/boot
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2025-02-03 14:31:26 -0500
committerHazelnoot <acomputerdog@gmail.com>2025-02-03 14:36:09 -0500
commita4e86758c1c53f4e623b6e8f613d4a6e34e96156 (patch)
treed09bf325b7f52512a1fe2a9d35f1953d2b310309 /packages/backend/src/boot
parentmerge: Use package manager version from package.json (!883) (diff)
parentfix(build): corepackのバグの回避 (#15387) (diff)
downloadsharkey-a4e86758c1c53f4e623b6e8f613d4a6e34e96156.tar.gz
sharkey-a4e86758c1c53f4e623b6e8f613d4a6e34e96156.tar.bz2
sharkey-a4e86758c1c53f4e623b6e8f613d4a6e34e96156.zip
merge upstream 2025-02-03
Diffstat (limited to 'packages/backend/src/boot')
-rw-r--r--packages/backend/src/boot/entry.ts18
-rw-r--r--packages/backend/src/boot/master.ts33
2 files changed, 35 insertions, 16 deletions
diff --git a/packages/backend/src/boot/entry.ts b/packages/backend/src/boot/entry.ts
index 56128a7ab9..735a0f4666 100644
--- a/packages/backend/src/boot/entry.ts
+++ b/packages/backend/src/boot/entry.ts
@@ -70,14 +70,22 @@ async function main() {
});
//#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) {
- 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 355e095c12..7b3f3395e6 100644
--- a/packages/backend/src/boot/master.ts
+++ b/packages/backend/src/boot/master.ts
@@ -97,22 +97,22 @@ 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();
- }
- } else {
- if (envOption.onlyServer) {
- // nop
- } else if (envOption.onlyQueue) {
- // nop
- } else {
- await server();
}
if (config.clusterLimit === 0) {
@@ -121,6 +121,17 @@ export async function masterMain() {
}
await spawnWorkers(config.clusterLimit);
+ } else {
+ // clusterモジュール無効時
+
+ if (envOption.onlyServer) {
+ await server();
+ } else if (envOption.onlyQueue) {
+ await jobQueue();
+ } else {
+ await server();
+ await jobQueue();
+ }
}
if (envOption.onlyQueue) {