summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMark Felder <feld@feld.me>2024-06-17 10:08:54 -0400
committerMark Felder <feld@feld.me>2024-06-17 10:41:14 -0400
commit9c6763725547e4927d09cf3cd8d33949a28c4824 (patch)
tree2769b9280d802eff2e8b49e0ef3ed89f446ff8b1 /lib
parent825541b27c71d3a9b6f597a9934151831c52f6e5 (diff)
downloadpleroma-9c6763725547e4927d09cf3cd8d33949a28c4824.tar.gz
pleroma-9c6763725547e4927d09cf3cd8d33949a28c4824.zip
Refactor the async user refreshing to use Oban
Previous implementation could cause duplicate simultaneous profile fetches which is not polite.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex10
-rw-r--r--lib/pleroma/workers/user_refresh_worker.ex14
2 files changed, 18 insertions, 6 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 440dc9210..7a8a68931 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -38,6 +38,7 @@ defmodule Pleroma.User do
alias Pleroma.Web.OAuth
alias Pleroma.Web.RelMe
alias Pleroma.Workers.BackgroundWorker
+ alias Pleroma.Workers.UserRefreshWorker
require Logger
require Pleroma.Constants
@@ -2165,12 +2166,9 @@ defmodule Pleroma.User do
end
defp maybe_refresh(user) do
- fun = fn -> needs_update?(user) && fetch_by_ap_id(user.ap_id) end
-
- if Config.get([__MODULE__, :sync_refreshing], false) do
- fun.()
- else
- Task.start(fun)
+ if needs_update?(user) do
+ UserRefreshWorker.new(%{"ap_id" => user.ap_id})
+ |> Oban.insert()
end
end
diff --git a/lib/pleroma/workers/user_refresh_worker.ex b/lib/pleroma/workers/user_refresh_worker.ex
new file mode 100644
index 000000000..5842143f8
--- /dev/null
+++ b/lib/pleroma/workers/user_refresh_worker.ex
@@ -0,0 +1,14 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Workers.UserRefreshWorker do
+ use Pleroma.Workers.WorkerHelper, queue: "background", max_attempts: 1, unique: [period: 300]
+
+ alias Pleroma.User
+
+ @impl Oban.Worker
+ def perform(%Job{args: %{"ap_id" => ap_id}}) do
+ User.fetch_by_ap_id(ap_id)
+ end
+end