summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/handle_object_fetch_failures.change2
-rw-r--r--lib/pleroma/object/fetcher.ex2
-rw-r--r--lib/pleroma/workers/remote_fetcher_worker.ex3
-rw-r--r--test/pleroma/object/fetcher_test.exs3
-rw-r--r--test/pleroma/workers/remote_fetcher_worker_test.exs15
5 files changed, 21 insertions, 4 deletions
diff --git a/changelog.d/handle_object_fetch_failures.change b/changelog.d/handle_object_fetch_failures.change
index 03fbd4b9e..e115c8012 100644
--- a/changelog.d/handle_object_fetch_failures.change
+++ b/changelog.d/handle_object_fetch_failures.change
@@ -1 +1 @@
-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.
+Remote object fetch failures will prevent the object fetch job from retrying if the object request returns 403, 404, 410, or exceeds the maximum thread depth.
diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex
index 0c90e0eaa..972dfaf28 100644
--- a/lib/pleroma/object/fetcher.ex
+++ b/lib/pleroma/object/fetcher.ex
@@ -74,7 +74,7 @@ defmodule Pleroma.Object.Fetcher do
else
{:allowed_depth, false} = e ->
log_fetch_error(id, e)
- {:error, "Max thread distance exceeded."}
+ {:error, :allowed_depth}
{:containment, reason} = e ->
log_fetch_error(id, e)
diff --git a/lib/pleroma/workers/remote_fetcher_worker.ex b/lib/pleroma/workers/remote_fetcher_worker.ex
index dca4530d7..fef8a26b2 100644
--- a/lib/pleroma/workers/remote_fetcher_worker.ex
+++ b/lib/pleroma/workers/remote_fetcher_worker.ex
@@ -21,6 +21,9 @@ defmodule Pleroma.Workers.RemoteFetcherWorker do
{:error, :not_found} ->
{:cancel, :not_found}
+ {:error, :allowed_depth} ->
+ {:cancel, :allowed_depth}
+
_ ->
:error
end
diff --git a/test/pleroma/object/fetcher_test.exs b/test/pleroma/object/fetcher_test.exs
index 24f114c00..6f21452a7 100644
--- a/test/pleroma/object/fetcher_test.exs
+++ b/test/pleroma/object/fetcher_test.exs
@@ -101,8 +101,7 @@ defmodule Pleroma.Object.FetcherTest do
test "it returns thread depth exceeded error if thread depth is exceeded" do
clear_config([:instance, :federation_incoming_replies_max_depth], 0)
- assert {:error, "Max thread distance exceeded."} =
- Fetcher.fetch_object_from_id(@ap_id, depth: 1)
+ assert {:error, :allowed_depth} = Fetcher.fetch_object_from_id(@ap_id, depth: 1)
end
test "it fetches object if max thread depth is restricted to 0 and depth is not specified" do
diff --git a/test/pleroma/workers/remote_fetcher_worker_test.exs b/test/pleroma/workers/remote_fetcher_worker_test.exs
index d8cb52f52..df7d77ea0 100644
--- a/test/pleroma/workers/remote_fetcher_worker_test.exs
+++ b/test/pleroma/workers/remote_fetcher_worker_test.exs
@@ -13,6 +13,7 @@ defmodule Pleroma.Workers.RemoteFetcherWorkerTest do
@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 "it does not" do
setup do
@@ -31,6 +32,11 @@ defmodule Pleroma.Workers.RemoteFetcherWorkerTest do
%Tesla.Env{
status: 403
}
+
+ %{method: :get, url: @depth_object} ->
+ %Tesla.Env{
+ status: 200
+ }
end)
end
@@ -63,5 +69,14 @@ defmodule Pleroma.Workers.RemoteFetcherWorkerTest do
args: %{"op" => "fetch_remote", "id" => @unreachable_object}
})
end
+
+ test "requeue an object that exceeded depth" do
+ clear_config([:instance, :federation_incoming_replies_max_depth], 0)
+
+ assert {:cancel, _} =
+ RemoteFetcherWorker.perform(%Oban.Job{
+ args: %{"op" => "fetch_remote", "id" => @depth_object, "depth" => 1}
+ })
+ end
end
end