diff options
author | Chocobozzz <me@florianbigard.com> | 2018-09-19 14:44:20 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-09-19 15:22:55 +0200 |
commit | e587e0ecee5bec43a225995948faaa4bc97f080a (patch) | |
tree | 6348e28eb06086d0c8586ceb91230b4a4af67053 /server/lib/activitypub/process/process-undo.ts | |
parent | d4defe07d26013a75577b30608841fe3f8334308 (diff) | |
download | PeerTube-e587e0ecee5bec43a225995948faaa4bc97f080a.tar.gz PeerTube-e587e0ecee5bec43a225995948faaa4bc97f080a.tar.zst PeerTube-e587e0ecee5bec43a225995948faaa4bc97f080a.zip |
Optimize activity actor load in AP processors
Diffstat (limited to 'server/lib/activitypub/process/process-undo.ts')
-rw-r--r-- | server/lib/activitypub/process/process-undo.ts | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/server/lib/activitypub/process/process-undo.ts b/server/lib/activitypub/process/process-undo.ts index b78de6697..c091d9678 100644 --- a/server/lib/activitypub/process/process-undo.ts +++ b/server/lib/activitypub/process/process-undo.ts | |||
@@ -13,7 +13,7 @@ import { getOrCreateVideoAndAccountAndChannel } from '../videos' | |||
13 | import { VideoShareModel } from '../../../models/video/video-share' | 13 | import { VideoShareModel } from '../../../models/video/video-share' |
14 | import { VideoRedundancyModel } from '../../../models/redundancy/video-redundancy' | 14 | import { VideoRedundancyModel } from '../../../models/redundancy/video-redundancy' |
15 | 15 | ||
16 | async function processUndoActivity (activity: ActivityUndo) { | 16 | async function processUndoActivity (activity: ActivityUndo, byActor: ActorModel) { |
17 | const activityToUndo = activity.object | 17 | const activityToUndo = activity.object |
18 | 18 | ||
19 | const actorUrl = getActorUrl(activity.actor) | 19 | const actorUrl = getActorUrl(activity.actor) |
@@ -26,16 +26,16 @@ async function processUndoActivity (activity: ActivityUndo) { | |||
26 | if (activityToUndo.object.type === 'Dislike') { | 26 | if (activityToUndo.object.type === 'Dislike') { |
27 | return retryTransactionWrapper(processUndoDislike, actorUrl, activity) | 27 | return retryTransactionWrapper(processUndoDislike, actorUrl, activity) |
28 | } else if (activityToUndo.object.type === 'CacheFile') { | 28 | } else if (activityToUndo.object.type === 'CacheFile') { |
29 | return retryTransactionWrapper(processUndoCacheFile, actorUrl, activity) | 29 | return retryTransactionWrapper(processUndoCacheFile, byActor, activity) |
30 | } | 30 | } |
31 | } | 31 | } |
32 | 32 | ||
33 | if (activityToUndo.type === 'Follow') { | 33 | if (activityToUndo.type === 'Follow') { |
34 | return retryTransactionWrapper(processUndoFollow, actorUrl, activityToUndo) | 34 | return retryTransactionWrapper(processUndoFollow, byActor, activityToUndo) |
35 | } | 35 | } |
36 | 36 | ||
37 | if (activityToUndo.type === 'Announce') { | 37 | if (activityToUndo.type === 'Announce') { |
38 | return retryTransactionWrapper(processUndoAnnounce, actorUrl, activityToUndo) | 38 | return retryTransactionWrapper(processUndoAnnounce, byActor, activityToUndo) |
39 | } | 39 | } |
40 | 40 | ||
41 | logger.warn('Unknown activity object type %s -> %s when undo activity.', activityToUndo.type, { activity: activity.id }) | 41 | logger.warn('Unknown activity object type %s -> %s when undo activity.', activityToUndo.type, { activity: activity.id }) |
@@ -99,15 +99,12 @@ async function processUndoDislike (actorUrl: string, activity: ActivityUndo) { | |||
99 | }) | 99 | }) |
100 | } | 100 | } |
101 | 101 | ||
102 | async function processUndoCacheFile (actorUrl: string, activity: ActivityUndo) { | 102 | async function processUndoCacheFile (byActor: ActorModel, activity: ActivityUndo) { |
103 | const cacheFileObject = activity.object.object as CacheFileObject | 103 | const cacheFileObject = activity.object.object as CacheFileObject |
104 | 104 | ||
105 | const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: cacheFileObject.object }) | 105 | const { video } = await getOrCreateVideoAndAccountAndChannel({ videoObject: cacheFileObject.object }) |
106 | 106 | ||
107 | return sequelizeTypescript.transaction(async t => { | 107 | return sequelizeTypescript.transaction(async t => { |
108 | const byActor = await ActorModel.loadByUrl(actorUrl) | ||
109 | if (!byActor) throw new Error('Unknown actor ' + actorUrl) | ||
110 | |||
111 | const cacheFile = await VideoRedundancyModel.loadByUrl(cacheFileObject.id) | 108 | const cacheFile = await VideoRedundancyModel.loadByUrl(cacheFileObject.id) |
112 | if (!cacheFile) throw new Error('Unknown video cache ' + cacheFile.url) | 109 | if (!cacheFile) throw new Error('Unknown video cache ' + cacheFile.url) |
113 | 110 | ||
@@ -122,10 +119,9 @@ async function processUndoCacheFile (actorUrl: string, activity: ActivityUndo) { | |||
122 | }) | 119 | }) |
123 | } | 120 | } |
124 | 121 | ||
125 | function processUndoFollow (actorUrl: string, followActivity: ActivityFollow) { | 122 | function processUndoFollow (follower: ActorModel, followActivity: ActivityFollow) { |
126 | return sequelizeTypescript.transaction(async t => { | 123 | return sequelizeTypescript.transaction(async t => { |
127 | const follower = await ActorModel.loadByUrl(actorUrl, t) | 124 | const following = await ActorModel.loadByUrlAndPopulateAccountAndChannel(followActivity.object, t) |
128 | const following = await ActorModel.loadByUrl(followActivity.object, t) | ||
129 | const actorFollow = await ActorFollowModel.loadByActorAndTarget(follower.id, following.id, t) | 125 | const actorFollow = await ActorFollowModel.loadByActorAndTarget(follower.id, following.id, t) |
130 | 126 | ||
131 | if (!actorFollow) throw new Error(`'Unknown actor follow ${follower.id} -> ${following.id}.`) | 127 | if (!actorFollow) throw new Error(`'Unknown actor follow ${follower.id} -> ${following.id}.`) |
@@ -136,11 +132,8 @@ function processUndoFollow (actorUrl: string, followActivity: ActivityFollow) { | |||
136 | }) | 132 | }) |
137 | } | 133 | } |
138 | 134 | ||
139 | function processUndoAnnounce (actorUrl: string, announceActivity: ActivityAnnounce) { | 135 | function processUndoAnnounce (byActor: ActorModel, announceActivity: ActivityAnnounce) { |
140 | return sequelizeTypescript.transaction(async t => { | 136 | return sequelizeTypescript.transaction(async t => { |
141 | const byActor = await ActorModel.loadByUrl(actorUrl, t) | ||
142 | if (!byActor) throw new Error('Unknown actor ' + actorUrl) | ||
143 | |||
144 | const share = await VideoShareModel.loadByUrl(announceActivity.id, t) | 137 | const share = await VideoShareModel.loadByUrl(announceActivity.id, t) |
145 | if (!share) throw new Error(`Unknown video share ${announceActivity.id}.`) | 138 | if (!share) throw new Error(`Unknown video share ${announceActivity.id}.`) |
146 | 139 | ||