Packages
db_connection
0.2.2
2.10.2
2.10.1
2.10.0
2.9.0
2.8.1
2.8.0
2.7.0
2.6.0
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.1
2.3.0
2.2.2
2.2.1
2.2.0
2.1.1
2.1.0
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc.5
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Database connection behaviour for database transactions and connection pooling
Current section
Files
Jump to
Current section
Files
lib/db_connection/sojourn/starter.ex
defmodule DBConnection.Sojourn.Starter do
@moduledoc false
use Connection
def start_link(broker, opts) do
Connection.start_link(__MODULE__, {self(), broker, opts})
end
def init(args), do: {:connect, :init, args}
def connect(:init, {sup, broker, opts}) do
size = Keyword.get(opts, :pool_size, 10)
conn_sup = conn_sup(sup)
%{workers: conns} = Supervisor.count_children(conn_sup)
start_conns(size - conns, conn_sup, broker)
end
defp start_conns(n, conn_sup, broker) when n > 0 do
case Supervisor.start_child(conn_sup, [broker]) do
{:ok, _} ->
start_conns(n - 1, conn_sup, broker)
{:error, reason} ->
{:stop, {:failed_to_start_connection, reason}, broker}
end
end
defp start_conns(_, _, _), do: {:stop, :normal, nil}
## Helpers
defp conn_sup(sup) do
children = Supervisor.which_children(sup)
{Supervisor, conn_sup, _, _} = List.keyfind(children, Supervisor, 0)
conn_sup
end
end