diff --git a/packages/backend/src/core/CollapsedQueueService.ts b/packages/backend/src/core/CollapsedQueueService.ts index 1c4e47ffce..d701788383 100644 --- a/packages/backend/src/core/CollapsedQueueService.ts +++ b/packages/backend/src/core/CollapsedQueueService.ts @@ -21,6 +21,7 @@ export type UpdateInstanceJob = { latestRequestReceivedAt?: Date, shouldUnsuspend?: boolean, notesCountDelta?: number, + usersCountDelta?: number, }; export type UpdateUserJob = { @@ -68,12 +69,14 @@ export class CollapsedQueueService implements OnApplicationShutdown { latestRequestReceivedAt: maxDate(oldJob.latestRequestReceivedAt, newJob.latestRequestReceivedAt), shouldUnsuspend: oldJob.shouldUnsuspend || newJob.shouldUnsuspend, notesCountDelta: (oldJob.notesCountDelta ?? 0) + (newJob.notesCountDelta ?? 0), + usersCountDelta: (oldJob.usersCountDelta ?? 0) + (newJob.usersCountDelta ?? 0), }), (id, job) => this.federatedInstanceService.update(id, { latestRequestReceivedAt: job.latestRequestReceivedAt, isNotResponding: job.latestRequestReceivedAt ? false : undefined, suspensionState: job.shouldUnsuspend ? 'none' : undefined, notesCount: job.notesCountDelta ? () => `"notesCount" + ${job.notesCountDelta}` : undefined, + usersCount: job.usersCountDelta ? () => `"usersCount" + ${job.usersCountDelta}` : undefined, }), { onError: this.onQueueError, diff --git a/packages/backend/src/core/activitypub/models/ApPersonService.ts b/packages/backend/src/core/activitypub/models/ApPersonService.ts index a8cfdfe682..e3442f76d1 100644 --- a/packages/backend/src/core/activitypub/models/ApPersonService.ts +++ b/packages/backend/src/core/activitypub/models/ApPersonService.ts @@ -47,6 +47,7 @@ import { isRetryableError } from '@/misc/is-retryable-error.js'; import { renderInlineError } from '@/misc/render-inline-error.js'; import { IdentifiableError } from '@/misc/identifiable-error.js'; import { QueueService } from '@/core/QueueService.js'; +import { CollapsedQueueService } from '@/core/CollapsedQueueService.js'; import { getApId, getApType, isActor, isCollection, isCollectionOrOrderedCollection, isPropertyValue } from '../type.js'; import { ApLoggerService } from '../ApLoggerService.js'; import { extractApHashtags } from './tag.js'; @@ -123,6 +124,7 @@ export class ApPersonService implements OnModuleInit { private readonly idService: IdService, private readonly timeService: TimeService, private readonly queueService: QueueService, + private readonly collapsedQueueService: CollapsedQueueService, apLoggerService: ApLoggerService, ) { @@ -576,7 +578,7 @@ export class ApPersonService implements OnModuleInit { // Register host if (this.meta.enableStatsForFederatedInstances) { this.federatedInstanceService.fetchOrRegister(host).then(i => { - this.instancesRepository.increment({ id: i.id }, 'usersCount', 1); + this.collapsedQueueService.updateInstanceQueue.enqueue(i.id, { usersCountDelta: 1 }); if (this.meta.enableChartsForFederatedInstances) { this.instanceChart.newUser(i.host); }