summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/models/note.ts
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2019-02-09 13:01:21 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2019-02-09 13:01:21 +0900
commit757312ba5244ae36e192259e5b58f25b33f7d44f (patch)
tree49e7c4a73c41dacdbc645feb6d8f4e533252b49e /src/remote/activitypub/models/note.ts
parent:art: (diff)
downloadsharkey-757312ba5244ae36e192259e5b58f25b33f7d44f.tar.gz
sharkey-757312ba5244ae36e192259e5b58f25b33f7d44f.tar.bz2
sharkey-757312ba5244ae36e192259e5b58f25b33f7d44f.zip
Limit the parallelism of AP object processing (#4193)
Diffstat (limited to 'src/remote/activitypub/models/note.ts')
-rw-r--r--src/remote/activitypub/models/note.ts8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/remote/activitypub/models/note.ts b/src/remote/activitypub/models/note.ts
index 790f2f9590..32ea13e6f8 100644
--- a/src/remote/activitypub/models/note.ts
+++ b/src/remote/activitypub/models/note.ts
@@ -1,4 +1,5 @@
import * as mongo from 'mongodb';
+import * as promiseLimit from 'promise-limit';
import config from '../../../config';
import Resolver from '../resolver';
@@ -16,6 +17,7 @@ import { unique, concat, difference } from '../../../prelude/array';
import { extractPollFromQuestion } from './question';
import vote from '../../../services/note/polls/vote';
import { apLogger } from '../logger';
+import { IDriveFile } from '../../../models/drive-file';
const logger = apLogger;
@@ -92,9 +94,10 @@ export async function createNote(value: any, resolver?: Resolver, silent = false
// TODO: attachmentは必ずしもImageではない
// TODO: attachmentは必ずしも配列ではない
// Noteがsensitiveなら添付もsensitiveにする
+ const limit = promiseLimit(2);
const files = note.attachment
.map(attach => attach.sensitive = note.sensitive)
- ? await Promise.all(note.attachment.map(x => resolveImage(actor, x)))
+ ? await Promise.all(note.attachment.map(x => limit(() => resolveImage(actor, x)) as Promise<IDriveFile>))
: [];
// リプライ
@@ -233,8 +236,9 @@ async function extractMentionedUsers(actor: IRemoteUser, to: string[], cc: strin
const ignoreUris = ['https://www.w3.org/ns/activitystreams#Public', `${actor.uri}/followers`];
const uris = difference(unique(concat([to || [], cc || []])), ignoreUris);
+ const limit = promiseLimit(2);
const users = await Promise.all(
- uris.map(async uri => await resolvePerson(uri, null, resolver).catch(() => null))
+ uris.map(uri => limit(() => resolvePerson(uri, null, resolver).catch(() => null)) as Promise<IUser>)
);
return users.filter(x => x != null);