Use a custom pool-aware FollowRedirects middleware

This commit is contained in:
rinpatch 2020-05-16 11:49:19 +03:00
commit 94c8f3cfaf
6 changed files with 109 additions and 24 deletions

View file

@ -24,7 +24,6 @@ defmodule Pleroma.HTTP.AdapterHelper do
| {Connection.proxy_type(), Connection.host(), pos_integer()}
@callback options(keyword(), URI.t()) :: keyword()
@callback after_request(keyword()) :: :ok
@callback get_conn(URI.t(), keyword()) :: {:ok, term()} | {:error, term()}
@spec format_proxy(String.t() | tuple() | nil) :: proxy() | nil
@ -67,9 +66,6 @@ defmodule Pleroma.HTTP.AdapterHelper do
Keyword.merge(opts, timeout: timeout)
end
@spec after_request(keyword()) :: :ok
def after_request(opts), do: adapter_helper().after_request(opts)
def get_conn(uri, opts), do: adapter_helper().get_conn(uri, opts)
defp adapter, do: Application.get_env(:tesla, :adapter)

View file

@ -9,9 +9,6 @@ defmodule Pleroma.HTTP.AdapterHelper.Default do
AdapterHelper.maybe_add_proxy(opts, AdapterHelper.format_proxy(proxy))
end
@spec after_request(keyword()) :: :ok
def after_request(_opts), do: :ok
@spec get_conn(URI.t(), keyword()) :: {:ok, keyword()}
def get_conn(_uri, opts), do: {:ok, opts}
end

View file

@ -34,15 +34,6 @@ defmodule Pleroma.HTTP.AdapterHelper.Gun do
|> Keyword.merge(incoming_opts)
end
@spec after_request(keyword()) :: :ok
def after_request(opts) do
if opts[:conn] && opts[:body_as] != :chunks do
ConnectionPool.release_conn(opts[:conn])
end
:ok
end
defp add_scheme_opts(opts, %{scheme: "http"}), do: opts
defp add_scheme_opts(opts, %{scheme: "https"}) do

View file

@ -24,8 +24,6 @@ defmodule Pleroma.HTTP.AdapterHelper.Hackney do
defp add_scheme_opts(opts, _), do: opts
def after_request(_), do: :ok
@spec get_conn(URI.t(), keyword()) :: {:ok, keyword()}
def get_conn(_uri, opts), do: {:ok, opts}
end

View file

@ -69,14 +69,11 @@ 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
request(client, request)
# Connection release is handled in a custom FollowRedirects middleware
err ->
err
end