Allow the Remote Fetcher to attempt fetching an unreachable instance
This commit is contained in:
parent
fed7a78c77
commit
2e369aef71
2 changed files with 11 additions and 29 deletions
|
@ -3,32 +3,27 @@
|
|||
# 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
|
||||
if Instances.reachable?(id) do
|
||||
case Fetcher.fetch_object_from_id(id, depth: args["depth"]) do
|
||||
{:ok, _object} ->
|
||||
:ok
|
||||
case Fetcher.fetch_object_from_id(id, depth: args["depth"]) do
|
||||
{:ok, _object} ->
|
||||
:ok
|
||||
|
||||
{:error, :forbidden} ->
|
||||
{:discard, :forbidden}
|
||||
{:error, :forbidden} ->
|
||||
{:discard, :forbidden}
|
||||
|
||||
{:error, :not_found} ->
|
||||
{:discard, :not_found}
|
||||
{:error, :not_found} ->
|
||||
{:discard, :not_found}
|
||||
|
||||
{:error, :allowed_depth} ->
|
||||
{:discard, :allowed_depth}
|
||||
{:error, :allowed_depth} ->
|
||||
{:discard, :allowed_depth}
|
||||
|
||||
_ ->
|
||||
:error
|
||||
end
|
||||
else
|
||||
{:discard, "Unreachable instance"}
|
||||
_ ->
|
||||
:error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,13 +6,11 @@ defmodule Pleroma.Workers.RemoteFetcherWorkerTest do
|
|||
use Pleroma.DataCase
|
||||
use Oban.Testing, repo: Pleroma.Repo
|
||||
|
||||
alias Pleroma.Instances
|
||||
alias Pleroma.Workers.RemoteFetcherWorker
|
||||
|
||||
@deleted_object_one "https://deleted-404.example.com/"
|
||||
@deleted_object_two "https://deleted-410.example.com/"
|
||||
@unauthorized_object "https://unauthorized.example.com/"
|
||||
@unreachable_object "https://unreachable.example.com/"
|
||||
@depth_object "https://depth.example.com/"
|
||||
|
||||
describe "RemoteFetcherWorker" do
|
||||
|
@ -59,17 +57,6 @@ test "does not requeue an unauthorized object" do
|
|||
})
|
||||
end
|
||||
|
||||
test "does not fetch an unreachable instance" do
|
||||
Instances.set_consistently_unreachable(@unreachable_object)
|
||||
|
||||
refute Instances.reachable?(@unreachable_object)
|
||||
|
||||
assert {:discard, _} =
|
||||
RemoteFetcherWorker.perform(%Oban.Job{
|
||||
args: %{"op" => "fetch_remote", "id" => @unreachable_object}
|
||||
})
|
||||
end
|
||||
|
||||
test "does not requeue an object that exceeded depth" do
|
||||
clear_config([:instance, :federation_incoming_replies_max_depth], 0)
|
||||
|
||||
|
|
Loading…
Reference in a new issue