From 295b744db124024926f0fd53e9203a6a67061941 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Mon, 15 Sep 2025 12:18:40 -0400 Subject: [PATCH] await or track more background delivery --- packages/backend/src/core/NoteDeleteService.ts | 5 +++-- packages/backend/src/core/NotePiningService.ts | 6 +++--- .../backend/src/core/activitypub/models/ApNoteService.ts | 5 +++-- packages/backend/src/server/api/endpoints/i/update.ts | 5 +++-- .../backend/src/server/api/endpoints/notes/polls/vote.ts | 4 ++-- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/backend/src/core/NoteDeleteService.ts b/packages/backend/src/core/NoteDeleteService.ts index 95bdf85308..c20b20c7ca 100644 --- a/packages/backend/src/core/NoteDeleteService.ts +++ b/packages/backend/src/core/NoteDeleteService.ts @@ -27,6 +27,7 @@ import { LatestNoteService } from '@/core/LatestNoteService.js'; import { ApLogService } from '@/core/ApLogService.js'; import type Logger from '@/logger.js'; import { TimeService } from '@/global/TimeService.js'; +import { trackPromise } from '@/misc/promise-tracker.js'; import { LoggerService } from '@/core/LoggerService.js'; @Injectable() @@ -108,7 +109,7 @@ export class NoteDeleteService { ? this.apRendererService.renderUndo(this.apRendererService.renderAnnounce(renote.uri ?? `${this.config.url}/notes/${renote.id}`, note), user) : this.apRendererService.renderDelete(this.apRendererService.renderTombstone(`${this.config.url}/notes/${note.id}`), user)); - this.deliverToConcerned(user, note, content); + trackPromise(this.deliverToConcerned(user, note, content)); } // also deliver delete activity to cascaded notes @@ -117,7 +118,7 @@ export class NoteDeleteService { if (!cascadingNote.user) continue; if (!isLocalUser(cascadingNote.user)) continue; const content = this.apRendererService.addContext(this.apRendererService.renderDelete(this.apRendererService.renderTombstone(`${this.config.url}/notes/${cascadingNote.id}`), cascadingNote.user)); - this.deliverToConcerned(cascadingNote.user, cascadingNote, content); + trackPromise(this.deliverToConcerned(cascadingNote.user, cascadingNote, content)); } //#endregion diff --git a/packages/backend/src/core/NotePiningService.ts b/packages/backend/src/core/NotePiningService.ts index a678108189..836db52e48 100644 --- a/packages/backend/src/core/NotePiningService.ts +++ b/packages/backend/src/core/NotePiningService.ts @@ -84,7 +84,7 @@ export class NotePiningService { // Deliver to remote followers if (this.userEntityService.isLocalUser(user) && !note.localOnly && ['public', 'home'].includes(note.visibility)) { - this.deliverPinnedChange(user, note.id, true); + await this.deliverPinnedChange(user, note.id, true); } } @@ -105,14 +105,14 @@ export class NotePiningService { throw new IdentifiableError('b302d4cf-c050-400a-bbb3-be208681f40c', `Note ${noteId} does not exist`); } - this.userNotePiningsRepository.delete({ + await this.userNotePiningsRepository.delete({ userId: user.id, noteId: note.id, }); // Deliver to remote followers if (this.userEntityService.isLocalUser(user) && !note.localOnly && ['public', 'home'].includes(note.visibility)) { - this.deliverPinnedChange(user, noteId, false); + await this.deliverPinnedChange(user, noteId, false); } } diff --git a/packages/backend/src/core/activitypub/models/ApNoteService.ts b/packages/backend/src/core/activitypub/models/ApNoteService.ts index 2c40a6e408..0eaf26de54 100644 --- a/packages/backend/src/core/activitypub/models/ApNoteService.ts +++ b/packages/backend/src/core/activitypub/models/ApNoteService.ts @@ -32,6 +32,7 @@ import { renderInlineError } from '@/misc/render-inline-error.js'; import { extractMediaFromHtml } from '@/core/activitypub/misc/extract-media-from-html.js'; import { extractMediaFromMfm } from '@/core/activitypub/misc/extract-media-from-mfm.js'; import { getContentByType } from '@/core/activitypub/misc/get-content-by-type.js'; +import { trackPromise } from '@/misc/promise-tracker.js'; import { CustomEmojiService, encodeEmojiKey, isValidEmojiName } from '@/core/CustomEmojiService.js'; import { TimeService } from '@/global/TimeService.js'; import { getOneApId, getApId, validPost, isEmoji, getApType, isApObject, isDocument, IApDocument, isLink } from '../type.js'; @@ -300,7 +301,7 @@ export class ApNoteService implements OnModuleInit { await this.pollService.vote(actor, reply, index); // リモートフォロワーにUpdate配信 - this.pollService.deliverQuestionUpdate(reply); + trackPromise(this.pollService.deliverQuestionUpdate(reply)); } return null; }; @@ -479,7 +480,7 @@ export class ApNoteService implements OnModuleInit { await this.pollService.vote(actor, reply, index); // リモートフォロワーにUpdate配信 - this.pollService.deliverQuestionUpdate(reply); + trackPromise(this.pollService.deliverQuestionUpdate(reply)); } return null; }; diff --git a/packages/backend/src/server/api/endpoints/i/update.ts b/packages/backend/src/server/api/endpoints/i/update.ts index ba61d19300..b2396d93eb 100644 --- a/packages/backend/src/server/api/endpoints/i/update.ts +++ b/packages/backend/src/server/api/endpoints/i/update.ts @@ -35,6 +35,7 @@ import { AvatarDecorationService } from '@/core/AvatarDecorationService.js'; import { notificationRecieveConfig } from '@/models/json-schema/user.js'; import { userUnsignedFetchOptions } from '@/const.js'; import { renderInlineError } from '@/misc/render-inline-error.js'; +import { trackPromise } from '@/misc/promise-tracker.js'; import { ApiLoggerService } from '../../ApiLoggerService.js'; import { ApiError } from '../../error.js'; @@ -640,12 +641,12 @@ export default class extends Endpoint { // eslint- // 鍵垢を解除したとき、溜まっていたフォローリクエストがあるならすべて承認 if (user.isLocked && ps.isLocked === false) { - this.userFollowingService.acceptAllFollowRequests(user); + await this.userFollowingService.acceptAllFollowRequests(user); } // フォロワーにUpdateを配信 if (this.userNeedsPublishing(user, updates) || this.profileNeedsPublishing(profile, updatedProfile)) { - this.accountUpdateService.publishToFollowers(user); + trackPromise(this.accountUpdateService.publishToFollowers(user)); } return iObj; diff --git a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts index a842347060..f7a5db8739 100644 --- a/packages/backend/src/server/api/endpoints/notes/polls/vote.ts +++ b/packages/backend/src/server/api/endpoints/notes/polls/vote.ts @@ -172,11 +172,11 @@ export default class extends Endpoint { // eslint- if (note.userHost != null) { const pollOwner = await this.usersRepository.findOneByOrFail({ id: note.userId }) as MiRemoteUser; - this.queueService.deliver(me, this.apRendererService.addContext(await this.apRendererService.renderVote(me, vote, note, poll, pollOwner)), pollOwner.inbox, false); + this.queueService.deliver(me, this.apRendererService.addContext(this.apRendererService.renderVote(me, vote, note, poll, pollOwner)), pollOwner.inbox, false); } // リモートフォロワーにUpdate配信 - this.pollService.deliverQuestionUpdate(note); + await this.pollService.deliverQuestionUpdate(note); }); } }