commit: df0880d8d12e557ca79161bc9a942bc8b3655d4e
parent f06f0bedd305706ba8dd7cc38d421e2831f43d0b
Author: Mark Felder <feld@feld.me>
Date: Sat, 28 Jun 2025 13:23:37 -0700
Add Instances.delete_all_unreachable/0
Diffstat:
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/lib/pleroma/instances.ex b/lib/pleroma/instances.ex
@@ -33,4 +33,12 @@ defmodule Pleroma.Instances do
|> Oban.insert()
end)
end
+
+ @doc "Deletes all users and activities for unreachable instances"
+ def delete_all_unreachable do
+ get_unreachable()
+ |> Enum.each(fn {domain, _} ->
+ Instance.delete_users_and_activities(domain)
+ end)
+ end
end
diff --git a/test/pleroma/instances_test.exs b/test/pleroma/instances_test.exs
@@ -109,4 +109,30 @@ defmodule Pleroma.InstancesTest do
assert job.args["domain"] == unreachable_domain
end
end
+
+ test "delete_all_unreachable/0 schedules DeleteWorker jobs for all unreachable instances" do
+ domain1 = "unreachable1.example.com"
+ domain2 = "unreachable2.example.com"
+ domain3 = "unreachable3.example.com"
+
+ Instances.set_unreachable(domain1)
+ Instances.set_unreachable(domain2)
+ Instances.set_unreachable(domain3)
+
+ Instances.delete_all_unreachable()
+
+ # Verify that DeleteWorker jobs were scheduled for all unreachable domains
+ jobs = all_enqueued(worker: Pleroma.Workers.DeleteWorker)
+ assert length(jobs) == 3
+
+ domains = Enum.map(jobs, & &1.args["host"])
+ assert domain1 in domains
+ assert domain2 in domains
+ assert domain3 in domains
+
+ # Verify all jobs are delete_instance operations
+ Enum.each(jobs, fn job ->
+ assert job.args["op"] == "delete_instance"
+ end)
+ end
end