diff options
author | Mark Felder <feld@feld.me> | 2024-09-04 11:43:43 -0400 |
---|---|---|
committer | Mark Felder <feld@feld.me> | 2024-09-04 11:45:05 -0400 |
commit | 53744bf146f157ee1ecfc9ba4de9e5d65fa80784 (patch) | |
tree | 48f6a06584f06f02a80ef6fc0fb349cb898fd8a3 | |
parent | a1951f3af7e1d5c4d53819962c3e68df5ba4475b (diff) | |
download | pleroma-53744bf146f157ee1ecfc9ba4de9e5d65fa80784.tar.gz pleroma-53744bf146f157ee1ecfc9ba4de9e5d65fa80784.zip |
Limit the number of orphaned to delete at 100 every 10 mins due to the cascading queries that have to check oauth_authorizations and oauth_tokens tables.
This should keep ahead of most app registration spam and not overwhelm lower powered servers.
-rw-r--r-- | config/config.exs | 2 | ||||
-rw-r--r-- | lib/pleroma/web/o_auth/app.ex | 13 |
2 files changed, 10 insertions, 5 deletions
diff --git a/config/config.exs b/config/config.exs index 2bc28b256..80a3b8d57 100644 --- a/config/config.exs +++ b/config/config.exs @@ -598,7 +598,7 @@ config :pleroma, Oban, crontab: [ {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker}, {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker}, - {"0 0 * * *", Pleroma.Workers.Cron.AppCleanupWorker} + {"*/10 * * * *", Pleroma.Workers.Cron.AppCleanupWorker} ] config :pleroma, Pleroma.Formatter, diff --git a/lib/pleroma/web/o_auth/app.ex b/lib/pleroma/web/o_auth/app.ex index 6ae419d09..032011433 100644 --- a/lib/pleroma/web/o_auth/app.ex +++ b/lib/pleroma/web/o_auth/app.ex @@ -166,9 +166,14 @@ defmodule Pleroma.Web.OAuth.App do def maybe_update_owner(_), do: :ok - @spec remove_orphans() :: :ok - def remove_orphans() do - from(a in __MODULE__, where: is_nil(a.user_id)) - |> Repo.delete_all() + @spec remove_orphans(pos_integer()) :: :ok + def remove_orphans(limit \\ 100) do + Repo.transaction(fn -> + from(a in __MODULE__, where: is_nil(a.user_id), limit: ^limit) + |> Repo.all() + |> Enum.each(&Repo.delete(&1)) + end) + + :ok end end |