Merge branch 'object-age-fix' into 'develop'
[akkoma] / lib / pleroma / http / http.ex
index afcb4d738efec3e80cf97fac08608a069b5004a7..b37b3fa8927c252a9b357e51d5635ca20f5d2376 100644 (file)
@@ -69,9 +69,16 @@ defmodule Pleroma.HTTP do
         request = build_request(method, headers, options, url, body, params)
 
         adapter = Application.get_env(:tesla, :adapter)
-        client = Tesla.client([Pleroma.HTTP.Middleware.FollowRedirects], adapter)
 
-        request(client, request)
+        client = Tesla.client(adapter_middlewares(adapter), adapter)
+
+        maybe_limit(
+          fn ->
+            request(client, request)
+          end,
+          adapter,
+          adapter_opts
+        )
 
       # Connection release is handled in a custom FollowRedirects middleware
       err ->
@@ -92,4 +99,19 @@ 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
+
+  defp adapter_middlewares(Tesla.Adapter.Gun) do
+    [Pleroma.HTTP.Middleware.FollowRedirects]
+  end
+
+  defp adapter_middlewares(_), do: []
 end