fix(retention): see local reactions of the legacy EmojiReaction type
Older data stores emoji reactions as EmojiReaction. The per-thread check only looked at EmojiReact, so a thread whose only local interaction was such a reaction was evicted.
This commit is contained in:
parent
5d1e331589
commit
5e425ce9f5
2 changed files with 33 additions and 5 deletions
|
|
@ -81,11 +81,12 @@ defmodule Pleroma.Retention do
|
||||||
# Invariant: every type that *adopts* another activity's context must be
|
# Invariant: every type that *adopts* another activity's context must be
|
||||||
# listed, or its thread's local pins become invisible to the walk and the
|
# listed, or its thread's local pins become invisible to the walk and the
|
||||||
# thread gets evicted. Today only Create, Announce, Like and EmojiReact do
|
# thread gets evicted. Today only Create, Announce, Like and EmojiReact do
|
||||||
# (see Pleroma.Web.ActivityPub.Builder). The others carry a context of
|
# (see Pleroma.Web.ActivityPub.Builder), and EmojiReaction, the name
|
||||||
# their own (or did in older data) and are listed so they get evicted
|
# EmojiReact had in older data. The others carry a context of their own (or
|
||||||
# rather than left behind. The regression test "keeps threads pinned by
|
# did in older data) and are listed so they get evicted rather than left
|
||||||
# each local interaction type" guards this.
|
# behind. The regression test "keeps threads pinned by each local
|
||||||
@context_types ~w(Create Announce Like EmojiReact Update Delete Undo Flag Listen Move)
|
# interaction type" guards this.
|
||||||
|
@context_types ~w(Create Announce Like EmojiReact EmojiReaction Update Delete Undo Flag Listen Move)
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Runs one eviction batch using the `:retention` config and returns what was removed.
|
Runs one eviction batch using the `:retention` config and returns what was removed.
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,33 @@ defmodule Pleroma.RetentionTest do
|
||||||
assert Activity.get_by_id(post.id)
|
assert Activity.get_by_id(post.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "keeps threads pinned by a local reaction of the legacy EmojiReaction type", %{
|
||||||
|
old_date: old_date
|
||||||
|
} do
|
||||||
|
remote_user = insert(:user, local: false)
|
||||||
|
local_user = insert(:user)
|
||||||
|
|
||||||
|
post = old_remote_post(remote_user, old_date)
|
||||||
|
|
||||||
|
Repo.insert!(%Activity{
|
||||||
|
data: %{
|
||||||
|
"id" => "#{Pleroma.Web.Endpoint.url()}/activities/#{Ecto.UUID.generate()}",
|
||||||
|
"type" => "EmojiReaction",
|
||||||
|
"actor" => local_user.ap_id,
|
||||||
|
"object" => post.data["object"],
|
||||||
|
"content" => "👍",
|
||||||
|
"context" => post.data["context"]
|
||||||
|
},
|
||||||
|
local: true,
|
||||||
|
actor: local_user.ap_id,
|
||||||
|
recipients: [remote_user.ap_id]
|
||||||
|
})
|
||||||
|
|> make_old(old_date)
|
||||||
|
|
||||||
|
assert %{contexts: 0} = Retention.run()
|
||||||
|
assert Object.get_by_ap_id(post.data["object"])
|
||||||
|
end
|
||||||
|
|
||||||
test "keeps an old remote post that was reported", %{old_date: old_date} do
|
test "keeps an old remote post that was reported", %{old_date: old_date} do
|
||||||
remote_user = insert(:user, local: false)
|
remote_user = insert(:user, local: false)
|
||||||
local_user = insert(:user)
|
local_user = insert(:user)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue