5
5
6
6
import { Inject , Injectable } from '@nestjs/common' ;
7
7
import { In } from 'typeorm' ;
8
+ import * as Redis from 'ioredis' ;
8
9
import { DI } from '@/di-symbols.js' ;
9
10
import type { Config } from '@/config.js' ;
10
11
import { UserFollowingService } from '@/core/UserFollowingService.js' ;
@@ -14,8 +15,8 @@ import { NotePiningService } from '@/core/NotePiningService.js';
14
15
import { UserBlockingService } from '@/core/UserBlockingService.js' ;
15
16
import { NoteDeleteService } from '@/core/NoteDeleteService.js' ;
16
17
import { NoteCreateService } from '@/core/NoteCreateService.js' ;
18
+ import { acquireApObjectLock } from '@/misc/distributed-lock.js' ;
17
19
import { concat , toArray , toSingle , unique } from '@/misc/prelude/array.js' ;
18
- import { AppLockService } from '@/core/AppLockService.js' ;
19
20
import type Logger from '@/logger.js' ;
20
21
import { MetaService } from '@/core/MetaService.js' ;
21
22
import { IdService } from '@/core/IdService.js' ;
@@ -49,6 +50,9 @@ export class ApInboxService {
49
50
@Inject ( DI . config )
50
51
private config : Config ,
51
52
53
+ @Inject ( DI . redisForTimelines )
54
+ private redisForTimelines : Redis . Redis ,
55
+
52
56
@Inject ( DI . usersRepository )
53
57
private usersRepository : UsersRepository ,
54
58
@@ -77,7 +81,6 @@ export class ApInboxService {
77
81
private userBlockingService : UserBlockingService ,
78
82
private noteCreateService : NoteCreateService ,
79
83
private noteDeleteService : NoteDeleteService ,
80
- private appLockService : AppLockService ,
81
84
private apResolverService : ApResolverService ,
82
85
private apDbResolverService : ApDbResolverService ,
83
86
private apLoggerService : ApLoggerService ,
@@ -312,7 +315,7 @@ export class ApInboxService {
312
315
const meta = await this . metaService . fetch ( ) ;
313
316
if ( this . utilityService . isItemListedIn ( this . utilityService . extractHost ( uri ) , meta . blockedHosts ) ) return 'skip: blocked host' ;
314
317
315
- const unlock = await this . appLockService . getApLock ( uri ) ;
318
+ const unlock = await acquireApObjectLock ( this . redisForTimelines , uri ) ;
316
319
317
320
try {
318
321
// 既に同じURIを持つものが登録されていないかチェック
@@ -440,7 +443,7 @@ export class ApInboxService {
440
443
}
441
444
}
442
445
443
- const unlock = await this . appLockService . getApLock ( uri ) ;
446
+ const unlock = await acquireApObjectLock ( this . redisForTimelines , uri ) ;
444
447
445
448
try {
446
449
const exist = await this . apNoteService . fetchNote ( note ) ;
@@ -543,7 +546,7 @@ export class ApInboxService {
543
546
private async deleteNote ( actor : MiRemoteUser , uri : string ) : Promise < string > {
544
547
this . logger . info ( `Deleting the Note: ${ uri } ` ) ;
545
548
546
- const unlock = await this . appLockService . getApLock ( uri ) ;
549
+ const unlock = await acquireApObjectLock ( this . redisForTimelines , uri ) ;
547
550
548
551
try {
549
552
const note = await this . apDbResolverService . getNoteFromApId ( uri ) ;
@@ -813,7 +816,7 @@ export class ApInboxService {
813
816
return 'ok: Question updated' ;
814
817
} else if ( additionalCc && isPost ( object ) ) {
815
818
const uri = getApId ( object ) ;
816
- const unlock = await this . appLockService . getApLock ( uri ) ;
819
+ const unlock = await acquireApObjectLock ( this . redisForTimelines , uri ) ;
817
820
818
821
try {
819
822
const exist = await this . apNoteService . fetchNote ( object ) ;
0 commit comments