diff options
author | Mark Felder <feld@feld.me> | 2023-12-26 16:28:05 -0500 |
---|---|---|
committer | Mark Felder <feld@feld.me> | 2023-12-26 16:28:05 -0500 |
commit | 9c0040124a9ea68cedca4959d32105ee6a6c3ee1 (patch) | |
tree | c4f46929f3d2f345733a43d666a7f6f51e59f6ba | |
parent | 5f6966cd9ff9c728d97a8e4075cba738ceca0aeb (diff) | |
download | pleroma-9c0040124a9ea68cedca4959d32105ee6a6c3ee1.tar.gz pleroma-9c0040124a9ea68cedca4959d32105ee6a6c3ee1.zip |
Skip remote fetch jobs for unreachable instances
-rw-r--r-- | changelog.d/handle_object_fetch_failures.change | 1 | ||||
-rw-r--r-- | lib/pleroma/workers/remote_fetcher_worker.ex | 23 |
2 files changed, 15 insertions, 9 deletions
diff --git a/changelog.d/handle_object_fetch_failures.change b/changelog.d/handle_object_fetch_failures.change index 413084322..410f95efa 100644 --- a/changelog.d/handle_object_fetch_failures.change +++ b/changelog.d/handle_object_fetch_failures.change @@ -1,2 +1,3 @@ Remote object fetch failures will prevent the object fetch job from retrying if the object has been deleted or the fetch was denied with a 403 due to instance block behavior with authorized_fetch enabled. Mark instances as unreachable when object fetch is denied due to instance block and authorized_fetch. +Skip fetching objects from unreachable instances. diff --git a/lib/pleroma/workers/remote_fetcher_worker.ex b/lib/pleroma/workers/remote_fetcher_worker.ex index ff0286e54..d4fae33df 100644 --- a/lib/pleroma/workers/remote_fetcher_worker.ex +++ b/lib/pleroma/workers/remote_fetcher_worker.ex @@ -3,24 +3,29 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.RemoteFetcherWorker do + alias Pleroma.Instances alias Pleroma.Object.Fetcher use Pleroma.Workers.WorkerHelper, queue: "remote_fetcher" @impl Oban.Worker def perform(%Job{args: %{"op" => "fetch_remote", "id" => id} = args}) do - case Fetcher.fetch_object_from_id(id, depth: args["depth"]) do - {:ok, _object} -> - :ok + if Instances.reachable?(id) do + case Fetcher.fetch_object_from_id(id, depth: args["depth"]) do + {:ok, _object} -> + :ok - {:error, reason = "Object fetch has been denied"} -> - {:cancel, reason} + {:error, reason = "Object fetch has been denied"} -> + {:cancel, reason} - {:error, reason = "Object has been deleted"} -> - {:cancel, reason} + {:error, reason = "Object has been deleted"} -> + {:cancel, reason} - _ -> - :error + _ -> + :error + end + else + {:cancel, "Unreachable instance"} end end |