Speed up deletion and related queries.

This commit is contained in:
Roger Braun 2017-10-23 18:30:09 +02:00
parent 5912dd0f5d
commit 9f417fd5e9
3 changed files with 17 additions and 3 deletions

View file

@ -16,17 +16,22 @@ defmodule Pleroma.Activity do
where: fragment("(?)->>'id' = ?", activity.data, ^to_string(ap_id))) where: fragment("(?)->>'id' = ?", activity.data, ^to_string(ap_id)))
end end
# TODO:
# Go through these and fix them everywhere.
# Wrong name, only returns create activities # Wrong name, only returns create activities
def all_by_object_ap_id_q(ap_id) do def all_by_object_ap_id_q(ap_id) do
from activity in Activity, from activity in Activity,
where: fragment("(?)->'object'->>'id' = ?", activity.data, ^to_string(ap_id)) where: fragment("coalesce((?)->'object'->>'id', (?)->>'object') = ?", activity.data, activity.data, ^to_string(ap_id)),
where: fragment("(?)->>'type' = 'Create'", activity.data)
end end
# Wrong name, returns all.
def all_non_create_by_object_ap_id_q(ap_id) do def all_non_create_by_object_ap_id_q(ap_id) do
from activity in Activity, from activity in Activity,
where: fragment("(?)->>'object' = ?", activity.data, ^to_string(ap_id)) where: fragment("coalesce((?)->'object'->>'id', (?)->>'object') = ?", activity.data, activity.data, ^to_string(ap_id))
end end
# Wrong name plz fix thx
def all_by_object_ap_id(ap_id) do def all_by_object_ap_id(ap_id) do
Repo.all(all_by_object_ap_id_q(ap_id)) Repo.all(all_by_object_ap_id_q(ap_id))
end end

View file

@ -87,7 +87,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
} }
with Repo.delete(object), with Repo.delete(object),
Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)), Repo.delete_all(Activity.all_non_create_by_object_ap_id_q(id)),
Repo.delete_all(Activity.all_by_object_ap_id_q(id)),
{:ok, activity} <- insert(data, local), {:ok, activity} <- insert(data, local),
:ok <- maybe_federate(activity) do :ok <- maybe_federate(activity) do
{:ok, activity} {:ok, activity}

View file

@ -0,0 +1,10 @@
defmodule Pleroma.Repo.Migrations.AddSecondObjectIndexToActivty do
use Ecto.Migration
@disable_ddl_transaction true
def change do
drop_if_exists index(:activities, ["(data->'object'->>'id')", "(data->>'type')"], name: :activities_create_objects_index)
create index(:activities, ["(coalesce(data->'object'->>'id', data->>'object'))"], name: :activities_create_objects_index, concurrently: true)
end
end