Current section
Files
Jump to
Current section
Files
lib/pools_supervisor.ex
defmodule Retryable.PoolsSupervisor do
use Supervisor
def start_link do
{:ok, pid} = Supervisor.start_link(__MODULE__, [], name: __MODULE__)
create_pool(DefaultPool, 10)
{:ok, pid}
end
def init([]) do
supervise(
[
supervisor(Retryable.PoolSupervisor, [])
],
strategy: :simple_one_for_one
)
end
def create_pool(name, max_concurrent_jobs) do
opts = [
name: name,
max_concurrent_jobs: max_concurrent_jobs
]
Supervisor.start_child(__MODULE__, [opts])
end
def enqueue(pool_name, work) do
pool_manager_name = Module.concat([Retryable.WorkManager, pool_name])
unless Process.whereis(pool_manager_name) do
raise "The pool '#{inspect pool_name}' does not exist"
end
GenServer.cast(pool_manager_name, {:enqueue, work})
end
end