Fix race in enforcer/reclaimer start
[akkoma] / lib / pleroma / http / http.ex
index 8ded76601c19b116e1cbcc6a6ddbffea132a831e..6128bc4cf94d5ac863a72d9dbe5922b9259eba29 100644 (file)
@@ -69,14 +69,17 @@ defmodule Pleroma.HTTP do
         request = build_request(method, headers, options, url, body, params)
 
         adapter = Application.get_env(:tesla, :adapter)
-        client = Tesla.client([Tesla.Middleware.FollowRedirects], adapter)
+        client = Tesla.client([Pleroma.HTTP.Middleware.FollowRedirects], adapter)
 
-        response = request(client, request)
-
-        AdapterHelper.after_request(adapter_opts)
-
-        response
+        maybe_limit(
+          fn ->
+            request(client, request)
+          end,
+          adapter,
+          adapter_opts
+        )
 
+      # Connection release is handled in a custom FollowRedirects middleware
       err ->
         err
     end
@@ -95,4 +98,13 @@ defmodule Pleroma.HTTP do
     |> Builder.add_param(:query, :query, params)
     |> Builder.convert_to_keyword()
   end
+
+  @prefix Pleroma.Gun.ConnectionPool
+  defp maybe_limit(fun, Tesla.Adapter.Gun, opts) do
+    ConcurrentLimiter.limit(:"#{@prefix}.#{opts[:pool] || :default}", fun)
+  end
+
+  defp maybe_limit(fun, _, _) do
+    fun.()
+  end
 end