diff --git a/server.ts b/server.ts index 5323bae2b..8024655a3 100644 --- a/server.ts +++ b/server.ts @@ -215,7 +215,8 @@ async function startApplication () { Redis.Instance.init() // Make server listening - server.listen(port, hostname) - logger.info('Server listening on %s:%d', hostname, port) - logger.info('Web server: %s', CONFIG.WEBSERVER.URL) + server.listen(port, hostname, () => { + logger.info('Server listening on %s:%d', hostname, port) + logger.info('Web server: %s', CONFIG.WEBSERVER.URL) + }) } diff --git a/server/initializers/constants.ts b/server/initializers/constants.ts index ffcbe69b8..5ee13389d 100644 --- a/server/initializers/constants.ts +++ b/server/initializers/constants.ts @@ -77,6 +77,7 @@ const JOB_CONCURRENCY: { [ id in JobType ]: number } = { 'video-file': 1, 'email': 5 } +const BROADCAST_CONCURRENCY = 5 // How many requests in parallel we do in activitypub-http-broadcast job // 2 days const JOB_COMPLETED_LIFETIME = 60000 * 60 * 24 * 2 @@ -463,6 +464,7 @@ export { LAST_MIGRATION_VERSION, OAUTH_LIFETIME, OPENGRAPH_AND_OEMBED_COMMENT, + BROADCAST_CONCURRENCY, PAGINATION_COUNT_DEFAULT, ACTOR_FOLLOW_SCORE, PREVIEWS_SIZE, diff --git a/server/lib/job-queue/handlers/activitypub-http-broadcast.ts b/server/lib/job-queue/handlers/activitypub-http-broadcast.ts index 78878fc01..38b8393f4 100644 --- a/server/lib/job-queue/handlers/activitypub-http-broadcast.ts +++ b/server/lib/job-queue/handlers/activitypub-http-broadcast.ts @@ -1,8 +1,10 @@ import * as kue from 'kue' +import * as Bluebird from 'bluebird' import { logger } from '../../../helpers/logger' import { doRequest } from '../../../helpers/requests' import { ActorFollowModel } from '../../../models/activitypub/actor-follow' import { buildSignedRequestOptions, computeBody } from './utils/activitypub-http-utils' +import { BROADCAST_CONCURRENCY } from '../../../initializers' export type ActivitypubHttpBroadcastPayload = { uris: string[] @@ -28,16 +30,11 @@ async function processActivityPubHttpBroadcast (job: kue.Job) { const badUrls: string[] = [] const goodUrls: string[] = [] - for (const uri of payload.uris) { - options.uri = uri - - try { - await doRequest(options) - goodUrls.push(uri) - } catch (err) { - badUrls.push(uri) - } - } + await Bluebird.map(payload.uris, uri => { + return doRequest(Object.assign({}, options, { uri })) + .then(() => goodUrls.push(uri)) + .catch(() => badUrls.push(uri)) + }, { concurrency: BROADCAST_CONCURRENCY }) return ActorFollowModel.updateActorFollowsScore(goodUrls, badUrls, undefined) }