Skip to content

Commit 68c3eb5

Browse files
authored
update deps (#889)
- メンテナンスされないredis-lockを自前実装に変更 - 既にロックされている場合のリトライ間隔を調整
1 parent 5f6cbe0 commit 68c3eb5

35 files changed

+550
-521
lines changed

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"type": "git",
77
"url": "https://github.com/MisskeyIO/misskey.git"
88
},
9-
"packageManager": "pnpm@9.15.3",
9+
"packageManager": "pnpm@9.15.4",
1010
"workspaces": [
1111
"packages/frontend",
1212
"packages/backend",
@@ -63,19 +63,19 @@
6363
"cssnano": "7.0.6",
6464
"execa": "9.5.2",
6565
"js-yaml": "4.1.0",
66-
"postcss": "8.4.49",
66+
"postcss": "8.5.1",
6767
"terser": "5.37.0",
6868
"typescript": "5.7.3"
6969
},
7070
"devDependencies": {
71-
"@types/node": "22.10.5",
71+
"@types/node": "22.10.6",
7272
"@typescript-eslint/eslint-plugin": "7.10.0",
7373
"@typescript-eslint/parser": "7.10.0",
7474
"cross-env": "7.0.3",
7575
"cypress": "13.17.0",
7676
"eslint": "8.57.1",
7777
"ncp": "2.0.0",
78-
"start-server-and-test": "2.0.9"
78+
"start-server-and-test": "2.0.10"
7979
},
8080
"optionalDependencies": {
8181
"@tensorflow/tfjs-core": "4.22.0"

packages/backend/package.json

+3-4
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999
"bcryptjs": "2.4.3",
100100
"blurhash": "2.0.5",
101101
"body-parser": "1.20.3",
102-
"bullmq": "5.34.9",
102+
"bullmq": "5.34.10",
103103
"cacheable-lookup": "7.0.0",
104104
"cbor": "10.0.3",
105105
"chalk": "5.4.1",
@@ -131,7 +131,7 @@
131131
"json5": "2.2.3",
132132
"jsonld": "8.3.3",
133133
"jsrsasign": "11.1.0",
134-
"meilisearch": "0.47.0",
134+
"meilisearch": "0.48.0",
135135
"mfm-js": "0.24.0",
136136
"microformats-parser": "2.0.2",
137137
"mime-types": "2.1.35",
@@ -163,7 +163,6 @@
163163
"random-seed": "0.3.0",
164164
"ratelimiter": "3.4.1",
165165
"re2": "1.21.4",
166-
"redis-lock": "0.1.4",
167166
"reflect-metadata": "0.2.2",
168167
"rename": "1.0.4",
169168
"rss-parser": "3.13.0",
@@ -210,7 +209,7 @@
210209
"@types/jsrsasign": "10.5.15",
211210
"@types/mime-types": "2.1.4",
212211
"@types/ms": "0.7.34",
213-
"@types/node": "22.10.5",
212+
"@types/node": "22.10.6",
214213
"@types/node-forge": "1.3.11",
215214
"@types/nodemailer": "6.4.17",
216215
"@types/oauth": "0.9.6",

packages/backend/src/@types/redis-lock.d.ts

-13
This file was deleted.

packages/backend/src/core/AppLockService.ts

-44
This file was deleted.

packages/backend/src/core/CoreModule.ts

-6
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { AccountUpdateService } from './AccountUpdateService.js';
1010
import { AiService } from './AiService.js';
1111
import { AnnouncementService } from './AnnouncementService.js';
1212
import { AntennaService } from './AntennaService.js';
13-
import { AppLockService } from './AppLockService.js';
1413
import { AchievementService } from './AchievementService.js';
1514
import { AvatarDecorationService } from './AvatarDecorationService.js';
1615
import { CaptchaService } from './CaptchaService.js';
@@ -149,7 +148,6 @@ const $AccountUpdateService: Provider = { provide: 'AccountUpdateService', useEx
149148
const $AiService: Provider = { provide: 'AiService', useExisting: AiService };
150149
const $AnnouncementService: Provider = { provide: 'AnnouncementService', useExisting: AnnouncementService };
151150
const $AntennaService: Provider = { provide: 'AntennaService', useExisting: AntennaService };
152-
const $AppLockService: Provider = { provide: 'AppLockService', useExisting: AppLockService };
153151
const $AchievementService: Provider = { provide: 'AchievementService', useExisting: AchievementService };
154152
const $AvatarDecorationService: Provider = { provide: 'AvatarDecorationService', useExisting: AvatarDecorationService };
155153
const $CaptchaService: Provider = { provide: 'CaptchaService', useExisting: CaptchaService };
@@ -292,7 +290,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
292290
AiService,
293291
AnnouncementService,
294292
AntennaService,
295-
AppLockService,
296293
AchievementService,
297294
AvatarDecorationService,
298295
CaptchaService,
@@ -429,7 +426,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
429426
$AiService,
430427
$AnnouncementService,
431428
$AntennaService,
432-
$AppLockService,
433429
$AchievementService,
434430
$AvatarDecorationService,
435431
$CaptchaService,
@@ -567,7 +563,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
567563
AiService,
568564
AnnouncementService,
569565
AntennaService,
570-
AppLockService,
571566
AchievementService,
572567
AvatarDecorationService,
573568
CaptchaService,
@@ -703,7 +698,6 @@ const $ApQuestionService: Provider = { provide: 'ApQuestionService', useExisting
703698
$AiService,
704699
$AnnouncementService,
705700
$AntennaService,
706-
$AppLockService,
707701
$AchievementService,
708702
$AvatarDecorationService,
709703
$CaptchaService,

packages/backend/src/core/QueueService.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,10 @@ export class QueueService {
376376

377377
@bindThis
378378
public createReportAbuseJob(report: MiAbuseUserReport) {
379-
return this.dbQueue.add('reportAbuse', report);
379+
return this.dbQueue.add('reportAbuse', report, {
380+
removeOnComplete: true,
381+
removeOnFail: true,
382+
});
380383
}
381384

382385
@bindThis

packages/backend/src/core/activitypub/ApInboxService.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import { Inject, Injectable } from '@nestjs/common';
77
import { In } from 'typeorm';
8+
import * as Redis from 'ioredis';
89
import { DI } from '@/di-symbols.js';
910
import type { Config } from '@/config.js';
1011
import { UserFollowingService } from '@/core/UserFollowingService.js';
@@ -14,8 +15,8 @@ import { NotePiningService } from '@/core/NotePiningService.js';
1415
import { UserBlockingService } from '@/core/UserBlockingService.js';
1516
import { NoteDeleteService } from '@/core/NoteDeleteService.js';
1617
import { NoteCreateService } from '@/core/NoteCreateService.js';
18+
import { acquireApObjectLock } from '@/misc/distributed-lock.js';
1719
import { concat, toArray, toSingle, unique } from '@/misc/prelude/array.js';
18-
import { AppLockService } from '@/core/AppLockService.js';
1920
import type Logger from '@/logger.js';
2021
import { MetaService } from '@/core/MetaService.js';
2122
import { IdService } from '@/core/IdService.js';
@@ -49,6 +50,9 @@ export class ApInboxService {
4950
@Inject(DI.config)
5051
private config: Config,
5152

53+
@Inject(DI.redisForTimelines)
54+
private redisForTimelines: Redis.Redis,
55+
5256
@Inject(DI.usersRepository)
5357
private usersRepository: UsersRepository,
5458

@@ -77,7 +81,6 @@ export class ApInboxService {
7781
private userBlockingService: UserBlockingService,
7882
private noteCreateService: NoteCreateService,
7983
private noteDeleteService: NoteDeleteService,
80-
private appLockService: AppLockService,
8184
private apResolverService: ApResolverService,
8285
private apDbResolverService: ApDbResolverService,
8386
private apLoggerService: ApLoggerService,
@@ -312,7 +315,7 @@ export class ApInboxService {
312315
const meta = await this.metaService.fetch();
313316
if (this.utilityService.isItemListedIn(this.utilityService.extractHost(uri), meta.blockedHosts)) return 'skip: blocked host';
314317

315-
const unlock = await this.appLockService.getApLock(uri);
318+
const unlock = await acquireApObjectLock(this.redisForTimelines, uri);
316319

317320
try {
318321
// 既に同じURIを持つものが登録されていないかチェック
@@ -440,7 +443,7 @@ export class ApInboxService {
440443
}
441444
}
442445

443-
const unlock = await this.appLockService.getApLock(uri);
446+
const unlock = await acquireApObjectLock(this.redisForTimelines, uri);
444447

445448
try {
446449
const exist = await this.apNoteService.fetchNote(note);
@@ -543,7 +546,7 @@ export class ApInboxService {
543546
private async deleteNote(actor: MiRemoteUser, uri: string): Promise<string> {
544547
this.logger.info(`Deleting the Note: ${uri}`);
545548

546-
const unlock = await this.appLockService.getApLock(uri);
549+
const unlock = await acquireApObjectLock(this.redisForTimelines, uri);
547550

548551
try {
549552
const note = await this.apDbResolverService.getNoteFromApId(uri);
@@ -813,7 +816,7 @@ export class ApInboxService {
813816
return 'ok: Question updated';
814817
} else if (additionalCc && isPost(object)) {
815818
const uri = getApId(object);
816-
const unlock = await this.appLockService.getApLock(uri);
819+
const unlock = await acquireApObjectLock(this.redisForTimelines, uri);
817820

818821
try {
819822
const exist = await this.apNoteService.fetchNote(object);

packages/backend/src/core/activitypub/models/ApNoteService.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55

66
import { forwardRef, Inject, Injectable } from '@nestjs/common';
77
import { In } from 'typeorm';
8+
import * as Redis from 'ioredis';
89
import { DI } from '@/di-symbols.js';
910
import type { UsersRepository, PollsRepository, EmojisRepository } from '@/models/_.js';
1011
import type { Config } from '@/config.js';
1112
import type { MiRemoteUser } from '@/models/User.js';
1213
import type { MiNote } from '@/models/Note.js';
14+
import { acquireApObjectLock } from '@/misc/distributed-lock.js';
1315
import { toArray, toSingle, unique } from '@/misc/prelude/array.js';
1416
import type { MiEmoji } from '@/models/Emoji.js';
1517
import { MetaService } from '@/core/MetaService.js';
16-
import { AppLockService } from '@/core/AppLockService.js';
1718
import type { MiDriveFile } from '@/models/DriveFile.js';
1819
import { NoteCreateService } from '@/core/NoteCreateService.js';
1920
import type Logger from '@/logger.js';
@@ -47,6 +48,9 @@ export class ApNoteService {
4748
@Inject(DI.config)
4849
private config: Config,
4950

51+
@Inject(DI.redisForTimelines)
52+
private redisForTimelines: Redis.Redis,
53+
5054
@Inject(DI.usersRepository)
5155
private usersRepository: UsersRepository,
5256

@@ -70,7 +74,6 @@ export class ApNoteService {
7074
private apImageService: ApImageService,
7175
private apQuestionService: ApQuestionService,
7276
private metaService: MetaService,
73-
private appLockService: AppLockService,
7477
private pollService: PollService,
7578
private noteCreateService: NoteCreateService,
7679
private apDbResolverService: ApDbResolverService,
@@ -379,7 +382,7 @@ export class ApNoteService {
379382
throw new StatusError('blocked host', 451);
380383
}
381384

382-
const unlock = await this.appLockService.getApLock(uri);
385+
const unlock = await acquireApObjectLock(this.redisForTimelines, uri);
383386

384387
try {
385388
//#region このサーバーに既に登録されていたらそれを返す

packages/backend/src/core/chart/charts/active-users.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55

66
import { Injectable, Inject } from '@nestjs/common';
77
import { DataSource } from 'typeorm';
8-
import { AppLockService } from '@/core/AppLockService.js';
8+
import * as Redis from 'ioredis';
99
import type { MiUser } from '@/models/User.js';
1010
import { DI } from '@/di-symbols.js';
1111
import { bindThis } from '@/decorators.js';
1212
import { IdService } from '@/core/IdService.js';
13+
import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
1314
import Chart from '../core.js';
1415
import { ChartLoggerService } from '../ChartLoggerService.js';
1516
import { name, schema } from './entities/active-users.js';
@@ -28,11 +29,13 @@ export default class ActiveUsersChart extends Chart<typeof schema> { // eslint-d
2829
@Inject(DI.db)
2930
private db: DataSource,
3031

31-
private appLockService: AppLockService,
32+
@Inject(DI.redisForTimelines)
33+
private redisForTimelines: Redis.Redis,
34+
3235
private chartLoggerService: ChartLoggerService,
3336
private idService: IdService,
3437
) {
35-
super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
38+
super(db, (k) => acquireChartInsertLock(redisForTimelines, k), chartLoggerService.logger, name, schema);
3639
}
3740

3841
protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {

packages/backend/src/core/chart/charts/ap-request.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55

66
import { Injectable, Inject } from '@nestjs/common';
77
import { DataSource } from 'typeorm';
8-
import { AppLockService } from '@/core/AppLockService.js';
8+
import * as Redis from 'ioredis';
99
import { DI } from '@/di-symbols.js';
1010
import { bindThis } from '@/decorators.js';
11+
import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
1112
import Chart from '../core.js';
1213
import { ChartLoggerService } from '../ChartLoggerService.js';
1314
import { name, schema } from './entities/ap-request.js';
@@ -22,10 +23,12 @@ export default class ApRequestChart extends Chart<typeof schema> { // eslint-dis
2223
@Inject(DI.db)
2324
private db: DataSource,
2425

25-
private appLockService: AppLockService,
26+
@Inject(DI.redisForTimelines)
27+
private redisForTimelines: Redis.Redis,
28+
2629
private chartLoggerService: ChartLoggerService,
2730
) {
28-
super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
31+
super(db, (k) => acquireChartInsertLock(redisForTimelines, k), chartLoggerService.logger, name, schema);
2932
}
3033

3134
protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {

packages/backend/src/core/chart/charts/drive.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55

66
import { Injectable, Inject } from '@nestjs/common';
77
import { DataSource } from 'typeorm';
8+
import * as Redis from 'ioredis';
89
import type { MiDriveFile } from '@/models/DriveFile.js';
9-
import { AppLockService } from '@/core/AppLockService.js';
1010
import { DI } from '@/di-symbols.js';
1111
import { bindThis } from '@/decorators.js';
12+
import { acquireChartInsertLock } from '@/misc/distributed-lock.js';
1213
import Chart from '../core.js';
1314
import { ChartLoggerService } from '../ChartLoggerService.js';
1415
import { name, schema } from './entities/drive.js';
@@ -23,10 +24,12 @@ export default class DriveChart extends Chart<typeof schema> { // eslint-disable
2324
@Inject(DI.db)
2425
private db: DataSource,
2526

26-
private appLockService: AppLockService,
27+
@Inject(DI.redisForTimelines)
28+
private redisForTimelines: Redis.Redis,
29+
2730
private chartLoggerService: ChartLoggerService,
2831
) {
29-
super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema);
32+
super(db, (k) => acquireChartInsertLock(redisForTimelines, k), chartLoggerService.logger, name, schema);
3033
}
3134

3235
protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {

0 commit comments

Comments
 (0)