Cleanup and ensure we obey custom Repo timeout
authorMark Felder <feld@feld.me>
Thu, 22 Apr 2021 15:11:08 +0000 (10:11 -0500)
committerMark Felder <feld@feld.me>
Thu, 22 Apr 2021 15:15:50 +0000 (10:15 -0500)
lib/pleroma/utils.ex

index 55aecc509f903fd82f0da85c45e4a1be86818f13..a446d3ae6f32a80d73a3780fe69e073f52aaccce 100644 (file)
@@ -11,6 +11,8 @@ defmodule Pleroma.Utils do
     eperm epipe erange erofs espipe esrch estale etxtbsy exdev
   )a
 
+  @repo_timeout Pleroma.Config.get([Pleroma.Repo, :timeout], 15_000)
+
   def compile_dir(dir) when is_binary(dir) do
     dir
     |> File.ls!()
@@ -64,13 +66,20 @@ defmodule Pleroma.Utils do
 
   def posix_error_message(_), do: ""
 
+  @doc """
+  Returns [timeout: integer] suitable for passing as an option to Repo functions.
+
+  This function detects if the execution was triggered from IEx shell, Mix task, or
+  ./bin/pleroma_ctl and sets the timeout to :infinity, else returns the default timeout value.
+  """
+  @spec query_timeout() :: [timeout: integer]
   def query_timeout do
     {parent, _, _, _} = Process.info(self(), :current_stacktrace) |> elem(1) |> Enum.fetch!(2)
 
     cond do
       parent |> to_string |> String.starts_with?("Elixir.Mix.Task") -> [timeout: :infinity]
       parent == :erl_eval -> [timeout: :infinity]
-      true -> [timeout: 15_000]
+      true -> [timeout: @repo_timeout]
     end
   end
 end