Create activities persisting in the database after the objects have been deleted
Was discovered by @absturztaube when trying to delete a user.
Error:
18:01:35.002 [debug] QUERY OK source="objects" db=0.6ms queue=0.5ms
SELECT o0."id", o0."data", o0."inserted_at", o0."updated_at" FROM "objects" AS o0 WHERE ((o0."data")->>'id' = $1) ["https://fedi.absturztau.be/objects/78b8b0c3-924f-4dc1-9b59-e57ea9a23f7b"]
** (FunctionClauseError) no function clause matching in Pleroma.Web.ActivityPub.ActivityPub.delete/2
The following arguments were given to Pleroma.Web.ActivityPub.ActivityPub.delete/2:
# 1
%Pleroma.Object{__meta__: #Ecto.Schema.Metadata<:loaded, "objects">, data: %{"deleted" => "2019-11-20T07:29:00.544286Z", "formerType" => "Note", "id" => "https://fedi.absturztau.be/objects/78b8b0c3-924f-4dc1-9b59-e57ea9a23f7b", "repliesCount" => 0, "type" => "Tombstone"}, id: 6418154, inserted_at: ~N[2019-09-23 23:24:08], updated_at: ~N[2019-11-20 07:29:00]}
# 2
[]
Attempted function clauses (showing 1 out of 1):
def delete(%Pleroma.Object{data: %{"id" => id, "actor" => actor}} = object, options)
(pleroma) lib/pleroma/web/activity_pub/activity_pub.ex:451: Pleroma.Web.ActivityPub.ActivityPub.delete/2
(elixir) lib/enum.ex:769: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:769: Enum.each/2
(elixir) lib/stream.ex:435: anonymous fn/4 in Stream.each/2
(elixir) lib/stream.ex:1499: Stream.do_unfold/4
(elixir) lib/stream.ex:1568: Enumerable.Stream.do_each/4
(elixir) lib/stream.ex:640: Stream.run/1
(pleroma) lib/pleroma/user.ex:1145: Pleroma.User.perform/2
select * from activities where data->>'object' = 'https://fedi.absturztau.be/objects/78b8b0c3-924f-4dc1-9b59-e57ea9a23f7b';
:
id | data | inserted_at | updated_at | local | actor | recipients
--------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------+---------------------+-------+---------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0000016d-6070-7f82-cae0-e38827f20000 | {"cc": ["https://www.w3.org/ns/activitystreams#Public"], "id": "https://fedi.absturztau.be/activities/d7000918-ff91-4e1e-a384-c3d1d7cad1aa", "to": ["https://fedi.absturztau.be/users/sun", "https://fedi.absturztau.be/users/moon/followers"], "type": "Create", "actor": "https://fedi.absturztau.be/users/moon", "object": "https://fedi.absturztau.be/objects/78b8b0c3-924f-4dc1-9b59-e57ea9a23f7b", "context": "https://fedi.absturztau.be/contexts/e8ebcc24-c95d-4133-89b1-2bac076d2376", "published": "2019-09-23T23:24:08.443222Z", "context_id": 6418083, "directMessage": false} | 2019-09-23 23:24:08 | 2019-09-23 23:24:08 | t | https://fedi.absturztau.be/users/moon | {https://fedi.absturztau.be/users/sun,https://fedi.absturztau.be/users/moon/followers,https://www.w3.org/ns/activitystreams#Public,https://fedi.absturztau.be/users/moon}
0000016d-6070-7fc3-cae0-e38827f20000 | {"cc": [], "id": "https://fedi.absturztau.be/activities/03e57d00-1230-4d17-a975-922fc428c50d", "to": ["https://fedi.absturztau.be/relay/followers"], "type": "Announce", "actor": "https://fedi.absturztau.be/relay", "object": "https://fedi.absturztau.be/objects/78b8b0c3-924f-4dc1-9b59-e57ea9a23f7b", "context": "https://fedi.absturztau.be/contexts/e8ebcc24-c95d-4133-89b1-2bac076d2376", "published": "2019-09-23T23:24:08.514704Z", "context_id": 6418083} | 2019-09-23 23:24:08 | 2019-09-23 23:24:08 | t | https://fedi.absturztau.be/relay | {https://fedi.absturztau.be/relay/followers}
We should wrap object swap and activity deletion in a transaction to avoid that.
Edited by rinpatch