refactoring for gun api modules
[akkoma] / lib / pleroma / gun / conn.ex
index ddb9f30b024153fbe91875020baeb5abba1a5396..31971869049a0981da7fb274b0b87922774f06dc 100644 (file)
@@ -1,12 +1,12 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Gun.Conn do
   @moduledoc """
   Struct for gun connection data
   """
-  alias Pleroma.Gun.API
+  alias Pleroma.Gun
   alias Pleroma.Pool.Connections
 
   require Logger
@@ -42,8 +42,8 @@ defmodule Pleroma.Gun.Conn do
     opts =
       opts
       |> Enum.into(%{})
-      |> Map.put_new(:retry, pool_opts[:retry] || 0)
-      |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 100)
+      |> Map.put_new(:retry, pool_opts[:retry] || 1)
+      |> Map.put_new(:retry_timeout, pool_opts[:retry_timeout] || 1000)
       |> Map.put_new(:await_up_timeout, pool_opts[:await_up_timeout] || 5_000)
 
     key = "#{uri.scheme}:#{uri.host}:#{uri.port}"
@@ -54,7 +54,7 @@ defmodule Pleroma.Gun.Conn do
       if Connections.count(name) < opts[:max_connection] do
         do_open(uri, opts)
       else
-        try_do_open(name, uri, opts)
+        close_least_used_and_do_open(name, uri, opts)
       end
 
     if is_pid(conn_pid) do
@@ -65,7 +65,7 @@ defmodule Pleroma.Gun.Conn do
         last_reference: :os.system_time(:second)
       }
 
-      :ok = API.set_owner(conn_pid, Process.whereis(name))
+      :ok = Gun.set_owner(conn_pid, Process.whereis(name))
       Connections.add_conn(name, key, conn)
     end
   end
@@ -77,10 +77,10 @@ defmodule Pleroma.Gun.Conn do
       |> add_http2_opts(uri.scheme, Map.get(opts, :tls_opts, []))
 
     with open_opts <- Map.delete(opts, :tls_opts),
-         {:ok, conn} <- API.open(proxy_host, proxy_port, open_opts),
-         {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]),
-         stream <- API.connect(conn, connect_opts),
-         {:response, :fin, 200, _} <- API.await(conn, stream) do
+         {:ok, conn} <- Gun.open(proxy_host, proxy_port, open_opts),
+         {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]),
+         stream <- Gun.connect(conn, connect_opts),
+         {:response, :fin, 200, _} <- Gun.await(conn, stream) do
       conn
     else
       error ->
@@ -90,7 +90,7 @@ defmodule Pleroma.Gun.Conn do
           } #{inspect(error)}"
         )
 
-        nil
+        error
     end
   end
 
@@ -115,8 +115,8 @@ defmodule Pleroma.Gun.Conn do
       |> Map.put(:protocols, [:socks])
       |> Map.put(:socks_opts, socks_opts)
 
-    with {:ok, conn} <- API.open(proxy_host, proxy_port, opts),
-         {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do
+    with {:ok, conn} <- Gun.open(proxy_host, proxy_port, opts),
+         {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]) do
       conn
     else
       error ->
@@ -126,15 +126,15 @@ defmodule Pleroma.Gun.Conn do
           } #{inspect(error)}"
         )
 
-        nil
+        error
     end
   end
 
   defp do_open(%URI{host: host, port: port} = uri, opts) do
-    {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host)
+    host = Pleroma.HTTP.Connection.parse_host(host)
 
-    with {:ok, conn} <- API.open(host, port, opts),
-         {:ok, _} <- API.await_up(conn, opts[:await_up_timeout]) do
+    with {:ok, conn} <- Gun.open(host, port, opts),
+         {:ok, _} <- Gun.await_up(conn, opts[:await_up_timeout]) do
       conn
     else
       error ->
@@ -144,12 +144,12 @@ defmodule Pleroma.Gun.Conn do
           }"
         )
 
-        nil
+        error
     end
   end
 
   defp destination_opts(%URI{host: host, port: port}) do
-    {_type, host} = Pleroma.HTTP.Adapter.domain_or_ip(host)
+    host = Pleroma.HTTP.Connection.parse_host(host)
     %{host: host, port: port}
   end
 
@@ -159,17 +159,17 @@ defmodule Pleroma.Gun.Conn do
 
   defp add_http2_opts(opts, _, _), do: opts
 
-  defp try_do_open(name, uri, opts) do
+  defp close_least_used_and_do_open(name, uri, opts) do
     Logger.debug("try to open conn #{Connections.compose_uri_log(uri)}")
 
     with [{close_key, least_used} | _conns] <-
            Connections.get_unused_conns(name),
-         :ok <- Pleroma.Gun.API.close(least_used.conn) do
+         :ok <- Gun.close(least_used.conn) do
       Connections.remove_conn(name, close_key)
 
       do_open(uri, opts)
     else
-      [] -> nil
+      [] -> {:error, :pool_overflowed}
     end
   end
 end