This commit is contained in:
pen 2024-12-16 14:04:22 +00:00 committed by GitHub
commit 3dac8def54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 3 deletions

View File

@ -14,9 +14,9 @@ export type FanoutTimelineName =
| `homeTimeline:${string}`
| `homeTimelineWithFiles:${string}` // only notes with files are included
// local timeline
| `localTimeline` // replies are not included
| `localTimelineWithFiles` // only non-reply notes with files are included
| `localTimelineWithReplies` // only replies are included
| 'localTimeline' // replies are not included
| 'localTimelineWithFiles' // only non-reply notes with files are included
| 'localTimelineWithReplies' // only replies are included
| `localTimelineWithReplyTo:${string}` // Only replies to specific local user are included. Parameter is reply user id.
// antenna
@ -111,4 +111,33 @@ export class FanoutTimelineService {
public purge(name: FanoutTimelineName) {
return this.redisForTimelines.del('list:' + name);
}
@bindThis
public async purgeAllcache() {
const timeLinePatterns = [
'*list:homeTimeline*',
'*list:localTimeline*',
'*list:antennaTimeline*',
'*list:userTimeline*',
'*list:userListTimeline*',
'*list:channelTimeline*',
'*list:roleTimeline*',
];
let timeLines = [] as string[];
for (const timeline of timeLinePatterns) {
let cursor = '0';
do {
const scanResult = await this.redisForTimelines.scan(cursor, 'MATCH', timeline, 'COUNT', 300);
cursor = scanResult[0];
timeLines = timeLines.concat(scanResult[1]);
} while (cursor !== '0');
}
const pipeline = this.redisForTimelines.pipeline();
for (const timeLine of timeLines) {
pipeline.del(`list:${timeLine.split('list:')[1]}`);
}
await pipeline.exec();
}
}

View File

@ -12,6 +12,7 @@ import { GlobalEventService } from '@/core/GlobalEventService.js';
import { bindThis } from '@/decorators.js';
import type { GlobalEvents } from '@/core/GlobalEventService.js';
import { FeaturedService } from '@/core/FeaturedService.js';
import { FanoutTimelineService } from './FanoutTimelineService.js';
import type { OnApplicationShutdown } from '@nestjs/common';
@Injectable()
@ -28,6 +29,7 @@ export class MetaService implements OnApplicationShutdown {
private featuredService: FeaturedService,
private globalEventService: GlobalEventService,
private fanoutTimelineService: FanoutTimelineService,
) {
//this.onMessage = this.onMessage.bind(this);
@ -112,6 +114,7 @@ export class MetaService implements OnApplicationShutdown {
before = metas[0];
if (before) {
if (before.enableFanoutTimeline === true && data.enableFanoutTimeline === false) this.fanoutTimelineService.purgeAllcache();
await transactionalEntityManager.update(MiMeta, before.id, data);
const metas = await transactionalEntityManager.find(MiMeta, {