summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2024-09-04 11:43:43 -0400
committerMark Felder <feld@feld.me>2024-09-04 11:45:05 -0400
commit53744bf146f157ee1ecfc9ba4de9e5d65fa80784 (patch)
tree48f6a06584f06f02a80ef6fc0fb349cb898fd8a3 /lib
parenta1951f3af7e1d5c4d53819962c3e68df5ba4475b (diff)
downloadpleroma-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.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/o_auth/app.ex13
1 files changed, 9 insertions, 4 deletions
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