diff --git a/lib/pleroma/workers/publisher_worker.ex b/lib/pleroma/workers/publisher_worker.ex index be94134b9..a83f035b0 100644 --- a/lib/pleroma/workers/publisher_worker.ex +++ b/lib/pleroma/workers/publisher_worker.ex @@ -9,7 +9,11 @@ defmodule Pleroma.Workers.PublisherWorker do use Pleroma.Workers.WorkerHelper, queue: "federator_outgoing" def backoff(%Job{attempt: attempt}) when is_integer(attempt) do - Pleroma.Workers.WorkerHelper.sidekiq_backoff(attempt, 5) + if attempt > 3 do + Pleroma.Workers.WorkerHelper.exponential_backoff(attempt, 9.5) + else + Pleroma.Workers.WorkerHelper.sidekiq_backoff(attempt, 6) + end end @impl Oban.Worker diff --git a/lib/pleroma/workers/worker_helper.ex b/lib/pleroma/workers/worker_helper.ex index ea9ce9d3b..9a95e7fc7 100644 --- a/lib/pleroma/workers/worker_helper.ex +++ b/lib/pleroma/workers/worker_helper.ex @@ -22,6 +22,15 @@ def sidekiq_backoff(attempt, pow \\ 4, base_backoff \\ 15) do trunc(backoff) end + def exponential_backoff(attempt, base, base_backoff \\ 15) do + backoff = + :math.pow(base, attempt) + + base_backoff + + :rand.uniform(2 * base_backoff) * attempt + + trunc(backoff) + end + defmacro __using__(opts) do caller_module = __CALLER__.module queue = Keyword.fetch!(opts, :queue)