
:discard marks jobs as "discarded", i.e. jobs which permanently failed due to e.g. exhausting all retries or explicitly being discared due to a fatal error. :cancel marks jobs as "cancelled" which does not imply failure. While neither method counts as a job "exception" in the set of telemetries we currently export via Prometheus, the different state is visible in the (not-exported) metadata of oban job telemetry. We can use handlers of those events to build bespoke statistics. Ideally we'd like to distinguish in the receiver worker between "invalid" and "already present or delete of unknown" documents, but this is cumbersome to get get right with a list of free-form, human-readable descriptions oof the violated constraints. For now, just count both as an fatal error. # but that is cumbersome to get right with a list of string error descriptions
46 lines
1.1 KiB
Elixir
46 lines
1.1 KiB
Elixir
# Pleroma: A lightweight social networking server
|
|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
defmodule Pleroma.Workers.RemoteFetcherWorker do
|
|
alias Pleroma.Object.Fetcher
|
|
|
|
use Pleroma.Workers.WorkerHelper,
|
|
queue: "remote_fetcher",
|
|
unique: [period: 300, states: Oban.Job.states(), keys: [:op, :id]]
|
|
|
|
@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
|
|
|
|
{:error, :forbidden} ->
|
|
{:cancel, :forbidden}
|
|
|
|
{:error, :not_found} ->
|
|
{:cancel, :not_found}
|
|
|
|
{:error, :allowed_depth} ->
|
|
{:cancel, :allowed_depth}
|
|
|
|
{:error, :invalid_uri_scheme} ->
|
|
{:cancel, :invalid_uri_scheme}
|
|
|
|
{:error, :local_resource} ->
|
|
{:cancel, :local_resource}
|
|
|
|
{:reject, _} ->
|
|
{:cancel, :reject}
|
|
|
|
{:error, :id_mismatch} ->
|
|
{:discard, :id_mismatch}
|
|
|
|
{:error, _} = e ->
|
|
e
|
|
|
|
e ->
|
|
{:error, e}
|
|
end
|
|
end
|
|
end
|