From be2c857845bc2fdfe10d4217136fea9cfed7f4e1 Mon Sep 17 00:00:00 2001 From: Oneric Date: Sat, 23 Nov 2024 22:50:20 +0100 Subject: [PATCH] receiver_worker: don't reattempt invalid documents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ideally we’d like to split this up more and count most invalid documents as an error, but silently drop e.g. Deletes for unknown objects. However, this is hard to extract from the changeset and jobs canceled with :discard don’t count as exceptions and I’m not aware of a idiomatic way to cancel further retries while retaining the exception status. Thus at least keep a log, but since superfluous "Delete"s seem kinda frequent, don't log at error, only info level. --- lib/pleroma/workers/receiver_worker.ex | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex index b28442042..193b500f4 100644 --- a/lib/pleroma/workers/receiver_worker.ex +++ b/lib/pleroma/workers/receiver_worker.ex @@ -3,6 +3,8 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Workers.ReceiverWorker do + require Logger + alias Pleroma.Web.Federator use Pleroma.Workers.WorkerHelper, queue: "federator_incoming" @@ -21,6 +23,16 @@ def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do {:error, :already_present} -> {:discard, :already_present} + # invalid data or e.g. deleting an object we don't know about anyway + {:error, {:error, {:validate, issue}}} -> + Logger.info("Received invalid AP document: #{inspect(issue)}") + {:discard, :invalid} + + # rarer, but sometimes there’s an additional :error in front + {:error, {:error, {:error, {:validate, issue}}}} -> + Logger.info("Received invalid AP document: (3e) #{inspect(issue)}") + {:discard, :invalid} + {:error, _} = e -> e