commit: 2267ace10687d9289750932a7809fb7e5c4cc496
parent ff5f88aae314a61f4c766762056094216e00b89d
Author: Mark Felder <feld@feld.me>
Date: Fri, 27 Jun 2025 18:12:18 -0700
Ensure ReachabilityWorker jobs can be scheduled without needing awareness of the phase design
Diffstat:
2 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/lib/pleroma/workers/reachability_worker.ex b/lib/pleroma/workers/reachability_worker.ex
@@ -24,6 +24,22 @@ defmodule Pleroma.Workers.ReachabilityWorker do
end
end
+ # New jobs enter here and are immediately re-scheduled for the first phase
+ @impl true
+ def perform(%Oban.Job{args: %{"domain" => domain}}) do
+ scheduled_at = DateTime.add(DateTime.utc_now(), 60, :second)
+
+ %{
+ "domain" => domain,
+ "phase" => "phase_1min",
+ "attempt" => 1
+ }
+ |> new(scheduled_at: scheduled_at, replace: true)
+ |> Oban.insert()
+
+ :ok
+ end
+
@impl true
def timeout(_job), do: :timer.seconds(5)
diff --git a/test/pleroma/workers/reachability_worker_test.exs b/test/pleroma/workers/reachability_worker_test.exs
@@ -191,6 +191,30 @@ defmodule Pleroma.Workers.ReachabilityWorkerTest do
assert existing_job.args["domain"] == domain
assert existing_job.args["phase"] == "phase_1min"
end
+
+ test "handles new jobs with only domain argument and transitions them to the first phase" do
+ domain = "legacy.example.com"
+
+ with_mocks([
+ {Pleroma.Instances, [], [set_reachable: fn _ -> :ok end]}
+ ]) do
+ # Create a job with only domain (legacy format)
+ job = %Oban.Job{
+ args: %{"domain" => domain}
+ }
+
+ # Should reschedule with phase_1min and attempt 1
+ assert :ok = ReachabilityWorker.perform(job)
+
+ # Check that a new job was scheduled with the correct format
+ scheduled_jobs = all_enqueued(worker: ReachabilityWorker)
+ assert length(scheduled_jobs) == 1
+ [scheduled_job] = scheduled_jobs
+ assert scheduled_job.args["domain"] == domain
+ assert scheduled_job.args["phase"] == "phase_1min"
+ assert scheduled_job.args["attempt"] == 1
+ end
+ end
end
defp get_phase_config("phase_1min"), do: {1, 4, "phase_15min"}