diff options
author | Alex Gleason <alex@alexgleason.me> | 2022-01-01 19:07:32 -0600 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2022-01-01 19:07:32 -0600 |
commit | bf85d69ad9a369346408fb7242a6829c4c50af4a (patch) | |
tree | 5e51ca1364fa3bbccb3413915dbb80c056708ab1 | |
parent | cec9c4e0b5f0f29f2a095c52f7c4388d68c6482d (diff) | |
download | pleroma-bf85d69ad9a369346408fb7242a6829c4c50af4a.tar.gz |
ResolveActivityObjectConflicts: lock tables, disable fkey constraints for transaction
-rw-r--r-- | priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs | 16 | ||||
-rw-r--r-- | priv/repo/migrations/20211218181647_combine_activities_and_objects.exs | 2 |
2 files changed, 17 insertions, 1 deletions
diff --git a/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs b/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs index 2c24c32f3..28700d3d8 100644 --- a/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs +++ b/priv/repo/migrations/20211218181640_resolve_activity_object_conflicts.exs @@ -12,6 +12,17 @@ defmodule Pleroma.Repo.Migrations.ResolveActivityObjectConflicts do import Ecto.Query def up do + # Lock relevant tables + execute("LOCK TABLE objects") + execute("LOCK TABLE chat_message_references") + execute("LOCK TABLE deliveries") + execute("LOCK TABLE hashtags_objects") + + # Temporarily disable fkey constraints + disable_constraint("chat_message_references", "chat_message_references_object_id_fkey") + disable_constraint("deliveries", "deliveries_object_id_fkey") + disable_constraint("hashtags_objects", "hashtags_objects_object_id_fkey") + activity_conflict_query() |> Repo.stream() |> Stream.each(&update_object/1) @@ -32,4 +43,9 @@ defmodule Pleroma.Repo.Migrations.ResolveActivityObjectConflicts do def down do :ok end + + # https://stackoverflow.com/a/48335239 + defp disable_constraint(table, constraint) do + execute("ALTER TABLE #{table} ALTER CONSTRAINT #{constraint} DEFERRABLE INITIALLY DEFERRED") + end end diff --git a/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs b/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs index bc692d99d..09eb10a58 100644 --- a/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs +++ b/priv/repo/migrations/20211218181647_combine_activities_and_objects.exs @@ -7,7 +7,7 @@ defmodule Pleroma.Repo.Migrations.CombineActivitiesAndObjects do def up do # Lock both tables to avoid a running server meddling with our transaction execute("LOCK TABLE activities") - execute("LOCK TABLE users") + execute("LOCK TABLE objects") # Add missing fields to objects table alter table(:objects) do |