Skip to content

Commit dca7e87

Browse files
committed
Merge remote-tracking branch 'upstream/develop' into develop
2 parents 8b206fd + 8711507 commit dca7e87

File tree

8 files changed

+27
-54
lines changed

8 files changed

+27
-54
lines changed

CHANGELOG_CHERRYPICK.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ Misskey의 전체 변경 사항을 확인하려면, [CHANGELOG.md#2025xx](CHANGE
6666

6767
### Server
6868
- Fix: `노트 게시 예약`을 사용해 노트를 게시할 때 `연합에 보내지 않음` 설정이 반영되지 않을 수 있음 (kokonect-link/cherrypick#601)
69+
- Revert: Graceful Shutdown (MisskeyIO/misskey#156)
70+
- Revert: Enhance: 종료 시 DB 연결이 끊어지면 확실하게 종료 (MisskeyIO/misskey#159)
6971

7072
---
7173

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,4 @@ ENV MALLOC_CONF=background_thread:true,metadata_thp:auto,dirty_decay_ms:30000,mu
101101
ENV NODE_ENV=production
102102
HEALTHCHECK --interval=5s --retries=20 CMD ["/bin/bash", "/cherrypick/healthcheck.sh"]
103103
ENTRYPOINT ["/usr/bin/tini", "--"]
104-
CMD ["pnpm", "run", "migrateandstart:docker"]
104+
CMD ["pnpm", "run", "migrateandstart"]

locales/ko-KR.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1091,7 +1091,7 @@ overridedDeviceKind: "장치 유형"
10911091
smartphone: "스마트폰"
10921092
tablet: "태블릿"
10931093
auto: "자동"
1094-
themeColor: "테마 컬러"
1094+
themeColor: "테마 색상"
10951095
size: "크기"
10961096
numberOfColumn: "한 줄에 보일 리액션의 수"
10971097
searchByGoogle: "검색"

package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,12 @@
2525
"build-storybook": "pnpm --filter frontend build-storybook",
2626
"build-cherrypick-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!cherrypick-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/cherrypick-js/generator/api.json && pnpm --filter cherrypick-js update-autogen-code && pnpm --filter cherrypick-js build && pnpm --filter cherrypick-js api",
2727
"start": "pnpm check:connect && cd packages/backend && node ./built/boot/entry.js",
28-
"start:docker": "pnpm check:connect && cd packages/backend && exec node ./built/boot/entry.js",
2928
"start:test": "ncp ./.github/cherrypick/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test node ./built/boot/entry.js",
3029
"init": "pnpm migrate",
3130
"migrate": "cd packages/backend && pnpm migrate",
3231
"revert": "cd packages/backend && pnpm revert",
3332
"check:connect": "cd packages/backend && pnpm check:connect",
3433
"migrateandstart": "pnpm migrate && pnpm start",
35-
"migrateandstart:docker": "pnpm migrate && exec pnpm start:docker",
3634
"watch": "pnpm dev",
3735
"dev": "node scripts/dev.mjs",
3836
"lint": "pnpm -r lint",

packages/backend/src/GlobalModule.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
* SPDX-License-Identifier: AGPL-3.0-only
44
*/
55

6-
import process from 'node:process';
76
import { Global, Inject, Module } from '@nestjs/common';
87
import * as Redis from 'ioredis';
98
import { DataSource } from 'typeorm';
@@ -242,9 +241,5 @@ export class GlobalModule implements OnApplicationShutdown {
242241

243242
async onApplicationShutdown(signal: string): Promise<void> {
244243
await this.dispose();
245-
process.emitWarning('CherryPick is shutting down', {
246-
code: 'CHERRYPICK_SHUTDOWN',
247-
detail: `Application received ${signal} signal`,
248-
});
249244
}
250245
}

packages/backend/src/boot/entry.ts

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import cluster from 'node:cluster';
1111
import { EventEmitter } from 'node:events';
12-
import process from 'node:process';
1312
import chalk from 'chalk';
1413
import Xev from 'xev';
1514
import Logger from '@/logger.js';
@@ -31,38 +30,23 @@ const ev = new Xev();
3130

3231
//#region Events
3332

34-
let isShuttingDown = false;
35-
36-
if (cluster.isPrimary && !envOption.disableClustering) {
37-
// Listen new workers
38-
cluster.on('fork', worker => {
39-
clusterLogger.debug(`Process forked: [${worker.id}]`);
40-
});
41-
42-
// Listen online workers
43-
cluster.on('online', worker => {
44-
clusterLogger.debug(`Process is now online: [${worker.id}]`);
45-
});
46-
47-
// Listen for dying workers
48-
cluster.on('exit', (worker, code, signal) => {
49-
// Replace the dead worker,
50-
// we're not sentimental
51-
clusterLogger.error(chalk.red(`[${worker.id}] died (${signal || code})`));
52-
if (!isShuttingDown) cluster.fork();
53-
else clusterLogger.info(chalk.yellow('Worker respawn disabled because of shutdown'));
54-
});
55-
56-
process.on('SIGINT', () => {
57-
logger.warn(chalk.yellow('Process received SIGINT'));
58-
isShuttingDown = true;
59-
});
60-
61-
process.on('SIGTERM', () => {
62-
logger.warn(chalk.yellow('Process received SIGTERM'));
63-
isShuttingDown = true;
64-
});
65-
}
33+
// Listen new workers
34+
cluster.on('fork', worker => {
35+
clusterLogger.debug(`Process forked: [${worker.id}]`);
36+
});
37+
38+
// Listen online workers
39+
cluster.on('online', worker => {
40+
clusterLogger.debug(`Process is now online: [${worker.id}]`);
41+
});
42+
43+
// Listen for dying workers
44+
cluster.on('exit', worker => {
45+
// Replace the dead worker,
46+
// we're not sentimental
47+
clusterLogger.error(chalk.red(`[${worker.id}] died :(`));
48+
cluster.fork();
49+
});
6650

6751
// Display detail of unhandled promise rejection
6852
if (!envOption.quiet) {
@@ -79,14 +63,7 @@ process.on('uncaughtException', err => {
7963

8064
// Dying away...
8165
process.on('exit', code => {
82-
logger.warn(chalk.yellow(`The process is going to exit with code ${code}`));
83-
});
84-
85-
process.on('warning', warning => {
86-
if ((warning as never)['code'] !== 'CHERRYPICK_SHUTDOWN') return;
87-
logger.warn(chalk.yellow(`${warning.message}: ${(warning as never)['detail']}`));
88-
for (const id in cluster.workers) cluster.workers[id]?.process.kill('SIGTERM');
89-
process.exit();
66+
logger.info(`The process is going to exit with code ${code}`);
9067
});
9168

9269
//#endregion

packages/backend/src/server/ServerService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ export class ServerService implements OnApplicationShutdown {
306306

307307
@bindThis
308308
public async dispose(): Promise<void> {
309-
this.streamingApiServerService.detach();
309+
await this.streamingApiServerService.detach();
310310
await this.#fastify.close();
311311
}
312312

packages/backend/src/server/api/StreamingApiServerService.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,13 @@ export class StreamingApiServerService {
170170
}
171171

172172
@bindThis
173-
public detach(): void {
173+
public detach(): Promise<void> {
174174
if (this.#cleanConnectionsIntervalId) {
175175
clearInterval(this.#cleanConnectionsIntervalId);
176176
this.#cleanConnectionsIntervalId = null;
177177
}
178-
this.#wss.close();
179-
this.#wss.clients.forEach(client => client.terminate());
178+
return new Promise((resolve) => {
179+
this.#wss.close(() => resolve());
180+
});
180181
}
181182
}

0 commit comments

Comments
 (0)