Packages
xandra
0.18.1
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.18.0-rc.9
0.18.0-rc.8
0.18.0-rc.7
0.18.0-rc.6
0.18.0-rc.5
0.18.0-rc.4
0.18.0-rc.3
0.18.0-rc.2
0.18.0-rc.1
0.17.0
0.16.0
0.15.0
0.15.0-rc.1
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
Fast, simple, and robust Cassandra driver for Elixir.
Current section
Files
Jump to
Current section
Files
lib/xandra/cluster/connection_pool.ex
defmodule Xandra.Cluster.ConnectionPool do
@moduledoc false
use Supervisor
@spec start_link(keyword()) :: Supervisor.on_start()
def start_link(opts) when is_list(opts) do
connection_opts = Keyword.fetch!(opts, :connection_options)
pool_size = Keyword.fetch!(opts, :pool_size)
Supervisor.start_link(__MODULE__, {connection_opts, pool_size})
end
@spec checkout(pid()) :: pid()
def checkout(sup_pid) when is_pid(sup_pid) do
pids =
for {_id, pid, _type, _modules} when is_pid(pid) <- Supervisor.which_children(sup_pid) do
pid
end
Enum.random(pids)
end
## Callbacks
@impl true
def init({connection_opts, pool_size}) do
children =
for index <- 1..pool_size do
Supervisor.child_spec({Xandra, connection_opts}, id: {Xandra, index})
end
Supervisor.init(children, strategy: :one_for_one)
end
end