logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/
commit: f06f0bedd305706ba8dd7cc38d421e2831f43d0b
parent 29f76079107f12e14b87e58c804ff10550381478
Author: Mark Felder <feld@feld.me>
Date:   Sat, 28 Jun 2025 13:14:01 -0700

Clean up ReachabilityWorker jobs and delete from Instances table when deleting all users and activities for an instance

Diffstat:

Mlib/pleroma/instances/instance.ex6+-----
Mlib/pleroma/workers/delete_worker.ex12++++++++++++
Mlib/pleroma/workers/reachability_worker.ex10++++++++++
3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/instances/instance.ex b/lib/pleroma/instances/instance.ex @@ -99,11 +99,7 @@ defmodule Pleroma.Instances.Instance do |> changeset(%{unreachable_since: nil}) |> Repo.insert(on_conflict: {:replace, [:unreachable_since]}, conflict_target: :host) - # Delete any existing reachability testing jobs for this instance - Oban.Job - |> Ecto.Query.where(worker: "Pleroma.Workers.ReachabilityWorker") - |> Ecto.Query.where([j], j.args["domain"] == ^host) - |> Oban.delete_all_jobs() + Pleroma.Workers.ReachabilityWorker.delete_jobs_for_host(host) result end diff --git a/lib/pleroma/workers/delete_worker.ex b/lib/pleroma/workers/delete_worker.ex @@ -14,6 +14,7 @@ defmodule Pleroma.Workers.DeleteWorker do end def perform(%Job{args: %{"op" => "delete_instance", "host" => host}}) do + # Schedule the per-user deletion jobs Pleroma.Repo.transaction(fn -> User.Query.build(%{nickname: "@#{host}"}) |> Pleroma.Repo.all() @@ -22,6 +23,17 @@ defmodule Pleroma.Workers.DeleteWorker do |> __MODULE__.new() |> Oban.insert() end) + + # Delete the instance from the Instances table + case Pleroma.Repo.get_by(Pleroma.Instances.Instance, host: host) do + nil -> :ok + instance -> Pleroma.Repo.delete(instance) + end + + # Delete any pending ReachabilityWorker jobs for this domain + Pleroma.Workers.ReachabilityWorker.delete_jobs_for_host(host) + + :ok end) end diff --git a/lib/pleroma/workers/reachability_worker.ex b/lib/pleroma/workers/reachability_worker.ex @@ -11,6 +11,8 @@ defmodule Pleroma.Workers.ReachabilityWorker do alias Pleroma.HTTP alias Pleroma.Instances + import Ecto.Query + @impl true def perform(%Oban.Job{args: %{"domain" => domain, "phase" => phase, "attempt" => attempt}}) do case check_reachability(domain) do @@ -43,6 +45,14 @@ defmodule Pleroma.Workers.ReachabilityWorker do @impl true def timeout(_job), do: :timer.seconds(5) + @doc "Deletes scheduled jobs to check reachability for specified instance" + def delete_jobs_for_host(host) do + Oban.Job + |> where(worker: "Pleroma.Workers.ReachabilityWorker") + |> where([j], j.args["domain"] == ^host) + |> Oban.delete_all_jobs() + end + defp check_reachability(domain) do case HTTP.get("https://#{domain}/") do {:ok, %{status: status}} when status in 200..299 ->