aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2020-05-27 13:45:14 +0000
committerrinpatch <rinpatch@sdf.org>2020-05-27 13:45:14 +0000
commit91f73a7592049ffe2b1a99e86c6f4ee51218c768 (patch)
tree426d8723021aa80c8c85183b9a443468de205127
parentb9e2678b9e1223f354d3a00a8c31b50807d8da62 (diff)
parent73f222d76a03e7bfad1aae80e0dc9d2777a94f3e (diff)
downloadpleroma-91f73a7592049ffe2b1a99e86c6f4ee51218c768.tar.gz
Merge branch 'notification-fixes' into 'develop'
Notification performance fixes See merge request pleroma/pleroma!2595
-rw-r--r--lib/pleroma/notification.ex15
-rw-r--r--priv/repo/migrations/20200527104138_change_notification_user_index.exs8
-rw-r--r--test/notification_test.exs11
3 files changed, 18 insertions, 16 deletions
diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
index 8aa9ed2d4..fb16ec896 100644
--- a/lib/pleroma/notification.ex
+++ b/lib/pleroma/notification.ex
@@ -92,8 +92,9 @@ defmodule Pleroma.Notification do
|> join(:left, [n, a], object in Object,
on:
fragment(
- "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)",
+ "(?->>'id') = COALESCE(?->'object'->>'id', ?->>'object')",
object.data,
+ a.data,
a.data
)
)
@@ -224,18 +225,8 @@ defmodule Pleroma.Notification do
|> Marker.multi_set_last_read_id(user, "notifications")
|> Repo.transaction()
- Notification
+ for_user_query(user)
|> where([n], n.id in ^notification_ids)
- |> join(:inner, [n], activity in assoc(n, :activity))
- |> join(:left, [n, a], object in Object,
- on:
- fragment(
- "(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)",
- object.data,
- a.data
- )
- )
- |> preload([n, a, o], activity: {a, object: o})
|> Repo.all()
end
diff --git a/priv/repo/migrations/20200527104138_change_notification_user_index.exs b/priv/repo/migrations/20200527104138_change_notification_user_index.exs
new file mode 100644
index 000000000..4dcfe6de9
--- /dev/null
+++ b/priv/repo/migrations/20200527104138_change_notification_user_index.exs
@@ -0,0 +1,8 @@
+defmodule Pleroma.Repo.Migrations.ChangeNotificationUserIndex do
+ use Ecto.Migration
+
+ def change do
+ drop_if_exists(index(:notifications, [:user_id]))
+ create_if_not_exists(index(:notifications, [:user_id, "id desc nulls last"]))
+ end
+end
diff --git a/test/notification_test.exs b/test/notification_test.exs
index 3a96721fa..37c255fee 100644
--- a/test/notification_test.exs
+++ b/test/notification_test.exs
@@ -454,8 +454,7 @@ defmodule Pleroma.NotificationTest do
status: "hey again @#{other_user.nickname}!"
})
- [n2, n1] = notifs = Notification.for_user(other_user)
- assert length(notifs) == 2
+ [n2, n1] = Notification.for_user(other_user)
assert n2.id > n1.id
@@ -464,7 +463,9 @@ defmodule Pleroma.NotificationTest do
status: "hey yet again @#{other_user.nickname}!"
})
- Notification.set_read_up_to(other_user, n2.id)
+ [_, read_notification] = Notification.set_read_up_to(other_user, n2.id)
+
+ assert read_notification.activity.object
[n3, n2, n1] = Notification.for_user(other_user)
@@ -972,7 +973,9 @@ defmodule Pleroma.NotificationTest do
{:ok, _activity} = CommonAPI.post(muted, %{status: "hey @#{user.nickname}"})
- assert length(Notification.for_user(user)) == 1
+ [notification] = Notification.for_user(user)
+
+ assert notification.activity.object
end
test "it doesn't return notifications for muted user with notifications" do