diff options
author | Chocobozzz <me@florianbigard.com> | 2018-01-18 15:22:36 +0100 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-01-18 16:43:26 +0100 |
commit | 2c897999fe877c52c8f7458d8bbff6c9367b6587 (patch) | |
tree | 3f66304fcea68a608bfd0f800e991731d910cc3d /server/lib | |
parent | 54e740594bc2eacd8026b5d2d6cfdfc06416a65b (diff) | |
download | PeerTube-2c897999fe877c52c8f7458d8bbff6c9367b6587.tar.gz PeerTube-2c897999fe877c52c8f7458d8bbff6c9367b6587.tar.zst PeerTube-2c897999fe877c52c8f7458d8bbff6c9367b6587.zip |
Optimize SQL query that fetch actor outbox
Diffstat (limited to 'server/lib')
-rw-r--r-- | server/lib/activitypub/actor.ts | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/server/lib/activitypub/actor.ts b/server/lib/activitypub/actor.ts index a39b4e137..7494aadbb 100644 --- a/server/lib/activitypub/actor.ts +++ b/server/lib/activitypub/actor.ts | |||
@@ -212,7 +212,13 @@ function saveActorAndServerAndModelIfNotExist ( | |||
212 | 212 | ||
213 | // Force the actor creation, sometimes Sequelize skips the save() when it thinks the instance already exists | 213 | // Force the actor creation, sometimes Sequelize skips the save() when it thinks the instance already exists |
214 | // (which could be false in a retried query) | 214 | // (which could be false in a retried query) |
215 | const actorCreated = await ActorModel.create(actor.toJSON(), { transaction: t }) | 215 | const [ actorCreated ] = await ActorModel.findOrCreate({ |
216 | defaults: actor.toJSON(), | ||
217 | where: { | ||
218 | url: actor.url | ||
219 | }, | ||
220 | transaction: t | ||
221 | }) | ||
216 | 222 | ||
217 | if (actorCreated.type === 'Person' || actorCreated.type === 'Application') { | 223 | if (actorCreated.type === 'Person' || actorCreated.type === 'Application') { |
218 | const account = await saveAccount(actorCreated, result, t) | 224 | const account = await saveAccount(actorCreated, result, t) |
@@ -284,24 +290,36 @@ async function fetchRemoteActor (actorUrl: string): Promise<FetchRemoteActorResu | |||
284 | } | 290 | } |
285 | } | 291 | } |
286 | 292 | ||
287 | function saveAccount (actor: ActorModel, result: FetchRemoteActorResult, t: Transaction) { | 293 | async function saveAccount (actor: ActorModel, result: FetchRemoteActorResult, t: Transaction) { |
288 | const account = new AccountModel({ | 294 | const [ accountCreated ] = await AccountModel.findOrCreate({ |
289 | name: result.name, | 295 | defaults: { |
290 | actorId: actor.id | 296 | name: result.name, |
297 | actorId: actor.id | ||
298 | }, | ||
299 | where: { | ||
300 | actorId: actor.id | ||
301 | }, | ||
302 | transaction: t | ||
291 | }) | 303 | }) |
292 | 304 | ||
293 | return account.save({ transaction: t }) | 305 | return accountCreated |
294 | } | 306 | } |
295 | 307 | ||
296 | async function saveVideoChannel (actor: ActorModel, result: FetchRemoteActorResult, ownerActor: ActorModel, t: Transaction) { | 308 | async function saveVideoChannel (actor: ActorModel, result: FetchRemoteActorResult, ownerActor: ActorModel, t: Transaction) { |
297 | const videoChannel = new VideoChannelModel({ | 309 | const [ videoChannelCreated ] = await VideoChannelModel.findOrCreate({ |
298 | name: result.name, | 310 | defaults: { |
299 | description: result.summary, | 311 | name: result.name, |
300 | actorId: actor.id, | 312 | description: result.summary, |
301 | accountId: ownerActor.Account.id | 313 | actorId: actor.id, |
314 | accountId: ownerActor.Account.id | ||
315 | }, | ||
316 | where: { | ||
317 | actorId: actor.id | ||
318 | }, | ||
319 | transaction: t | ||
302 | }) | 320 | }) |
303 | 321 | ||
304 | return videoChannel.save({ transaction: t }) | 322 | return videoChannelCreated |
305 | } | 323 | } |
306 | 324 | ||
307 | async function refreshActorIfNeeded (actor: ActorModel) { | 325 | async function refreshActorIfNeeded (actor: ActorModel) { |