From: William Pitcock Date: Fri, 25 May 2018 05:19:11 +0000 (+0000) Subject: activitypub utils: optimize block and follow activity lookup X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=47dc52a75882497d00338d07a24ce978cc0f8300;p=akkoma activitypub utils: optimize block and follow activity lookup multi-field @> comparison is very expensive, so only use @> for the field where it matters this makes the query take only a few usec to execute verses many msec on a busy instance --- diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 831e13b7e..cb2e1e078 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -238,13 +238,18 @@ defmodule Pleroma.Web.ActivityPub.Utils do query = from( activity in Activity, + where: + fragment( + "? ->> 'type' = 'Follow'", + activity.data + ), + where: activity.actor == ^follower_id, where: fragment( "? @> ?", activity.data, - ^%{type: "Follow", object: followed_id} + ^%{object: followed_id} ), - where: activity.actor == ^follower_id, order_by: [desc: :id], limit: 1 ) @@ -363,13 +368,18 @@ defmodule Pleroma.Web.ActivityPub.Utils do query = from( activity in Activity, + where: + fragment( + "? ->> 'type' = 'Block'", + activity.data + ), + where: activity.actor == ^blocker_id, where: fragment( "? @> ?", activity.data, - ^%{type: "Block", object: blocked_id} + ^%{object: blocked_id} ), - where: activity.actor == ^blocker_id, order_by: [desc: :id], limit: 1 )