Create a DeleteWorker and change user and instance deletion jobs to use it
These deletion tasks are slow, but the other background jobs are not. This will allow us to have a lower timeout on the normal background jobs.
This commit is contained in:
parent
52b6dd8bff
commit
30defb1674
@ -10,7 +10,7 @@ defmodule Pleroma.Instances.Instance do
|
|||||||
alias Pleroma.Maps
|
alias Pleroma.Maps
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Workers.BackgroundWorker
|
alias Pleroma.Workers.DeleteWorker
|
||||||
|
|
||||||
use Ecto.Schema
|
use Ecto.Schema
|
||||||
|
|
||||||
@ -297,7 +297,7 @@ defmodule Pleroma.Instances.Instance do
|
|||||||
all of those users' activities and notifications.
|
all of those users' activities and notifications.
|
||||||
"""
|
"""
|
||||||
def delete_users_and_activities(host) when is_binary(host) do
|
def delete_users_and_activities(host) when is_binary(host) do
|
||||||
BackgroundWorker.enqueue("delete_instance", %{"host" => host})
|
DeleteWorker.enqueue("delete_instance", %{"host" => host})
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform(:delete_instance, host) when is_binary(host) do
|
def perform(:delete_instance, host) when is_binary(host) do
|
||||||
|
@ -38,6 +38,7 @@ defmodule Pleroma.User do
|
|||||||
alias Pleroma.Web.OAuth
|
alias Pleroma.Web.OAuth
|
||||||
alias Pleroma.Web.RelMe
|
alias Pleroma.Web.RelMe
|
||||||
alias Pleroma.Workers.BackgroundWorker
|
alias Pleroma.Workers.BackgroundWorker
|
||||||
|
alias Pleroma.Workers.DeleteWorker
|
||||||
alias Pleroma.Workers.UserRefreshWorker
|
alias Pleroma.Workers.UserRefreshWorker
|
||||||
|
|
||||||
require Logger
|
require Logger
|
||||||
@ -1982,7 +1983,7 @@ defmodule Pleroma.User do
|
|||||||
def delete(%User{} = user) do
|
def delete(%User{} = user) do
|
||||||
# Purge the user immediately
|
# Purge the user immediately
|
||||||
purge(user)
|
purge(user)
|
||||||
BackgroundWorker.enqueue("delete_user", %{"user_id" => user.id})
|
DeleteWorker.enqueue("delete_user", %{"user_id" => user.id})
|
||||||
end
|
end
|
||||||
|
|
||||||
# *Actually* delete the user from the DB
|
# *Actually* delete the user from the DB
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-only
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
defmodule Pleroma.Workers.BackgroundWorker do
|
defmodule Pleroma.Workers.BackgroundWorker do
|
||||||
alias Pleroma.Instances.Instance
|
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
|
|
||||||
use Pleroma.Workers.WorkerHelper, queue: "background"
|
use Pleroma.Workers.WorkerHelper, queue: "background"
|
||||||
@ -15,11 +14,6 @@ defmodule Pleroma.Workers.BackgroundWorker do
|
|||||||
User.perform(:set_activation_async, user, status)
|
User.perform(:set_activation_async, user, status)
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform(%Job{args: %{"op" => "delete_user", "user_id" => user_id}}) do
|
|
||||||
user = User.get_cached_by_id(user_id)
|
|
||||||
User.perform(:delete, user)
|
|
||||||
end
|
|
||||||
|
|
||||||
def perform(%Job{args: %{"op" => "force_password_reset", "user_id" => user_id}}) do
|
def perform(%Job{args: %{"op" => "force_password_reset", "user_id" => user_id}}) do
|
||||||
user = User.get_cached_by_id(user_id)
|
user = User.get_cached_by_id(user_id)
|
||||||
User.perform(:force_password_reset, user)
|
User.perform(:force_password_reset, user)
|
||||||
@ -45,10 +39,6 @@ defmodule Pleroma.Workers.BackgroundWorker do
|
|||||||
User.perform(:verify_fields_links, user)
|
User.perform(:verify_fields_links, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform(%Job{args: %{"op" => "delete_instance", "host" => host}}) do
|
|
||||||
Instance.perform(:delete_instance, host)
|
|
||||||
end
|
|
||||||
|
|
||||||
@impl Oban.Worker
|
@impl Oban.Worker
|
||||||
def timeout(_job), do: :timer.seconds(900)
|
def timeout(_job), do: :timer.seconds(5)
|
||||||
end
|
end
|
||||||
|
24
lib/pleroma/workers/delete_worker.ex
Normal file
24
lib/pleroma/workers/delete_worker.ex
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Workers.DeleteWorker do
|
||||||
|
alias Pleroma.Instances.Instance
|
||||||
|
alias Pleroma.User
|
||||||
|
|
||||||
|
use Pleroma.Workers.WorkerHelper, queue: "slow"
|
||||||
|
|
||||||
|
@impl Oban.Worker
|
||||||
|
|
||||||
|
def perform(%Job{args: %{"op" => "delete_user", "user_id" => user_id}}) do
|
||||||
|
user = User.get_cached_by_id(user_id)
|
||||||
|
User.perform(:delete, user)
|
||||||
|
end
|
||||||
|
|
||||||
|
def perform(%Job{args: %{"op" => "delete_instance", "host" => host}}) do
|
||||||
|
Instance.perform(:delete_instance, host)
|
||||||
|
end
|
||||||
|
|
||||||
|
@impl Oban.Worker
|
||||||
|
def timeout(_job), do: :timer.seconds(900)
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user