From d283ac52c34ec0d75ac344dca60f689298cce9cd Mon Sep 17 00:00:00 2001 From: Oneric Date: Tue, 29 Oct 2024 01:41:27 +0100 Subject: [PATCH] Don't create noop SearchIndexingWorker jobs for passive index --- lib/pleroma/search/database_search.ex | 6 ---- lib/pleroma/search/search_backend.ex | 2 ++ lib/pleroma/workers/search_indexing_worker.ex | 29 ++++++++++++++----- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/lib/pleroma/search/database_search.ex b/lib/pleroma/search/database_search.ex index 3dc6245e8..0ded3cb17 100644 --- a/lib/pleroma/search/database_search.ex +++ b/lib/pleroma/search/database_search.ex @@ -40,12 +40,6 @@ def search(user, search_query, options \\ []) do end end - @impl true - def add_to_index(_activity), do: nil - - @impl true - def remove_from_index(_object), do: nil - def maybe_restrict_author(query, %User{} = author) do Activity.Queries.by_author(query, author) end diff --git a/lib/pleroma/search/search_backend.ex b/lib/pleroma/search/search_backend.ex index 56e3b7de5..f7a1b55b9 100644 --- a/lib/pleroma/search/search_backend.ex +++ b/lib/pleroma/search/search_backend.ex @@ -14,4 +14,6 @@ defmodule Pleroma.Search.SearchBackend do from index. """ @callback remove_from_index(object :: Pleroma.Object.t()) :: {:ok, any()} | {:error, any()} + + @optional_callbacks add_to_index: 1, remove_from_index: 1 end diff --git a/lib/pleroma/workers/search_indexing_worker.ex b/lib/pleroma/workers/search_indexing_worker.ex index 518a44c0a..cd6bee1b5 100644 --- a/lib/pleroma/workers/search_indexing_worker.ex +++ b/lib/pleroma/workers/search_indexing_worker.ex @@ -1,23 +1,38 @@ defmodule Pleroma.Workers.SearchIndexingWorker do use Pleroma.Workers.WorkerHelper, queue: "search_indexing" - @impl Oban.Worker + defp search_module(), do: Pleroma.Config.get!([Pleroma.Search, :module]) + def enqueue("add_to_index", params, worker_args) do + if Kernel.function_exported?(search_module(), :add_to_index, 1) do + do_enqueue("add_to_index", params, worker_args) + else + # XXX: or {:ok, nil} to more closely match Oban.inset()'s {:ok, job}? + # or similar to unique coflict: %Oban.Job{conflict?: true} (but omitting all other fileds...) + :ok + end + end + + def enqueue("remove_from_index", params, worker_args) do + if Kernel.function_exported?(search_module(), :remove_from_index, 1) do + do_enqueue("remove_from_index", params, worker_args) + else + :ok + end + end + + @impl Oban.Worker def perform(%Job{args: %{"op" => "add_to_index", "activity" => activity_id}}) do activity = Pleroma.Activity.get_by_id_with_object(activity_id) - search_module = Pleroma.Config.get([Pleroma.Search, :module]) - - search_module.add_to_index(activity) + search_module().add_to_index(activity) :ok end def perform(%Job{args: %{"op" => "remove_from_index", "object" => object_id}}) do - search_module = Pleroma.Config.get([Pleroma.Search, :module]) - # Fake the object so we can remove it from the index without having to keep it in the DB - search_module.remove_from_index(%Pleroma.Object{id: object_id}) + search_module().remove_from_index(%Pleroma.Object{id: object_id}) :ok end