diff options
| author | lain <lain@soykaf.club> | 2021-03-02 19:54:30 +0000 |
|---|---|---|
| committer | lain <lain@soykaf.club> | 2021-03-02 19:54:30 +0000 |
| commit | b221d77a6da07c684bdbc63ddf4500e0d7ffeae8 (patch) | |
| tree | 0015c7c3ea57f7340fbf80fd230a5f5e1c548148 /priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs | |
| parent | c2186a62d54043ea9638d33f80c7576aba9783e8 (diff) | |
| parent | 0a589c887bd4215e7d443a34c194fd0a3bde8f72 (diff) | |
| download | pleroma-b221d77a6da07c684bdbc63ddf4500e0d7ffeae8.tar.gz pleroma-b221d77a6da07c684bdbc63ddf4500e0d7ffeae8.zip | |
Merge branch 'release/2.3.0' into 'stable'
Release/2.3.0
See merge request pleroma/pleroma!3354
Diffstat (limited to 'priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs')
| -rw-r--r-- | priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs b/priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs new file mode 100644 index 000000000..309009205 --- /dev/null +++ b/priv/repo/migrations/20210128092834_remove_duplicates_from_activity_expiration_queue.exs @@ -0,0 +1,29 @@ +defmodule Pleroma.Repo.Migrations.RemoveDuplicatesFromActivityExpirationQueue do + use Ecto.Migration + + import Ecto.Query, only: [from: 2] + + def up do + duplicate_ids = + from(j in Oban.Job, + where: j.queue == "activity_expiration", + where: j.worker == "Pleroma.Workers.PurgeExpiredActivity", + where: j.state == "scheduled", + select: + {fragment("(?)->>'activity_id'", j.args), fragment("array_agg(?)", j.id), count(j.id)}, + group_by: fragment("(?)->>'activity_id'", j.args), + having: count(j.id) > 1 + ) + |> Pleroma.Repo.all() + |> Enum.map(fn {_, ids, _} -> + max_id = Enum.max(ids) + List.delete(ids, max_id) + end) + |> List.flatten() + + from(j in Oban.Job, where: j.id in ^duplicate_ids) + |> Pleroma.Repo.delete_all() + end + + def down, do: :noop +end |
