Speed up deletion and related queries.
authorRoger Braun <rbraun@Bobble.local>
Mon, 23 Oct 2017 16:30:09 +0000 (18:30 +0200)
committerRoger Braun <rbraun@Bobble.local>
Mon, 23 Oct 2017 16:30:09 +0000 (18:30 +0200)
lib/pleroma/activity.ex
lib/pleroma/web/activity_pub/activity_pub.ex
priv/repo/migrations/20171023155035_add_second_object_index_to_activty.exs [new file with mode: 0644]

index 9a5e6fc787c5035dcb5d5e5a7a1f5af058fbdfed..d7e31b6b4cdfe92a42ff59abe1ee30bf7b77888d 100644 (file)
@@ -16,17 +16,22 @@ defmodule Pleroma.Activity do
       where: fragment("(?)->>'id' = ?", activity.data, ^to_string(ap_id)))
   end
 
+  # TODO:
+  # Go through these and fix them everywhere.
   # Wrong name, only returns create activities
   def all_by_object_ap_id_q(ap_id) do
     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
 
+  # Wrong name, returns all.
   def all_non_create_by_object_ap_id_q(ap_id) do
     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
 
+  # Wrong name plz fix thx
   def all_by_object_ap_id(ap_id) do
     Repo.all(all_by_object_ap_id_q(ap_id))
   end
index 31aa2c4f127798be671ffc9c4ba4ce204c2afdcb..dcd27d04ab2ddd865be1c6ef24aac5e5237ae521 100644 (file)
@@ -87,7 +87,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
     }
     with Repo.delete(object),
          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 <- maybe_federate(activity) do
       {:ok, activity}
diff --git a/priv/repo/migrations/20171023155035_add_second_object_index_to_activty.exs b/priv/repo/migrations/20171023155035_add_second_object_index_to_activty.exs
new file mode 100644 (file)
index 0000000..c6df53e
--- /dev/null
@@ -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