Packages
db_connection
1.1.3
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/ownership/pool.ex
defmodule DBConnection.Ownership.Pool do
@moduledoc false
import Supervisor.Spec
def start_link(owner, mod, opts) do
children = [watcher(owner),
DBConnection.child_spec(mod, opts, [id: :pool]),
supervisor(DBConnection.Ownership.ProxySupervisor, [],
[id: :owner_sup])]
sup_opts = [strategy: :rest_for_one, max_restarts: 0]
Supervisor.start_link(children, sup_opts)
end
def pool_pid(pool) do
fetch_pid(pool, :pool)
end
def owner_sup_pid(pool) do
fetch_pid(pool, :owner_sup)
end
## Helpers
defp fetch_pid(pool, key) do
children = Supervisor.which_children(pool)
case List.keyfind(children, key, 0) do
{_, pool, _, _} when is_pid(pool) ->
pool
_ ->
raise "#{key} is not running"
end
end
defp watcher(owner) do
worker(DBConnection.Watcher, [owner])
end
end