ConnectionPool: fix gun open errors being returned without an error tuple
authorrinpatch <rinpatch@sdf.org>
Sat, 1 Aug 2020 14:59:50 +0000 (17:59 +0300)
committerrinpatch <rinpatch@sdf.org>
Sat, 1 Aug 2020 15:02:26 +0000 (18:02 +0300)
When gun shuts down due to the host being unreachable, the worker
process shuts down with the same shutdown reason since they are linked.
Gun doesn't have error tuples in it's shutdown reason though, so we need
to handle it in get_conn.

Closes #2008

lib/pleroma/gun/connection_pool.ex

index 49e9885bbac3b82d224c901c458a7c41d5225901..f34602b73cd513239c956ca62174534159e84194 100644 (file)
@@ -10,6 +10,7 @@ defmodule Pleroma.Gun.ConnectionPool do
     ]
   end
 
+  @spec get_conn(URI.t(), keyword()) :: {:ok, pid()} | {:error, term()}
   def get_conn(uri, opts) do
     key = "#{uri.scheme}:#{uri.host}:#{uri.port}"
 
@@ -54,12 +55,14 @@ defmodule Pleroma.Gun.ConnectionPool do
 
       {:DOWN, ^ref, :process, ^worker_pid, reason} ->
         case reason do
-          {:shutdown, error} -> error
+          {:shutdown, {:error, _} = error} -> error
+          {:shutdown, error} -> {:error, error}
           _ -> {:error, reason}
         end
     end
   end
 
+  @spec release_conn(pid()) :: :ok
   def release_conn(conn_pid) do
     # :ets.fun2ms(fn {_, {worker_pid, {gun_pid, _, _, _}}} when gun_pid == conn_pid ->
     #    worker_pid end)