ConnectionPool: fix gun open errors being returned without an error tuple
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
This commit is contained in:
parent
3a6a4dd77a
commit
45be1fe00e
1 changed files with 4 additions and 1 deletions
|
@ -10,6 +10,7 @@ def children do
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec get_conn(URI.t(), keyword()) :: {:ok, pid()} | {:error, term()}
|
||||||
def get_conn(uri, opts) do
|
def get_conn(uri, opts) do
|
||||||
key = "#{uri.scheme}:#{uri.host}:#{uri.port}"
|
key = "#{uri.scheme}:#{uri.host}:#{uri.port}"
|
||||||
|
|
||||||
|
@ -54,12 +55,14 @@ defp get_gun_pid_from_worker(worker_pid, register) do
|
||||||
|
|
||||||
{:DOWN, ^ref, :process, ^worker_pid, reason} ->
|
{:DOWN, ^ref, :process, ^worker_pid, reason} ->
|
||||||
case reason do
|
case reason do
|
||||||
{:shutdown, error} -> error
|
{:shutdown, {:error, _} = error} -> error
|
||||||
|
{:shutdown, error} -> {:error, error}
|
||||||
_ -> {:error, reason}
|
_ -> {:error, reason}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@spec release_conn(pid()) :: :ok
|
||||||
def release_conn(conn_pid) do
|
def release_conn(conn_pid) do
|
||||||
# :ets.fun2ms(fn {_, {worker_pid, {gun_pid, _, _, _}}} when gun_pid == conn_pid ->
|
# :ets.fun2ms(fn {_, {worker_pid, {gun_pid, _, _, _}}} when gun_pid == conn_pid ->
|
||||||
# worker_pid end)
|
# worker_pid end)
|
||||||
|
|
Loading…
Reference in a new issue