Packages
verk
0.11.1
1.7.3
1.7.2
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.0
1.4.1
1.4.0
1.3.0
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.2
1.0.1
1.0.0
0.14.1
0.14.0
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
Verk is a job processing system backed by Redis.
Current section
Files
Jump to
Current section
Files
lib/verk/queue_supervisor.ex
defmodule Verk.Queue.Supervisor do
@moduledoc """
Supervisor definition for a queue. It consists of:
* A `Verk.QueueManager`
* A poolboy pool of workers
* A `Verk.WorkersManager`
"""
use Supervisor
alias Verk.WorkersManager
alias Verk.QueueManager
@doc false
def start_link(name, size) do
supervisor_name = String.to_atom("#{name}.supervisor")
Supervisor.start_link(__MODULE__, [name, size], name: supervisor_name)
end
@doc false
def init([name, size]) do
pool_name = String.to_atom("#{name}.pool")
workers_manager = WorkersManager.name(name)
queue_manager = QueueManager.name(name)
children = [worker(QueueManager, [queue_manager, name], id: queue_manager),
poolboy_spec(pool_name, size),
worker(WorkersManager, [workers_manager, name, queue_manager, pool_name, size], id: workers_manager)]
supervise(children, strategy: :one_for_one)
end
defp poolboy_spec(pool_name, pool_size) do
args = [[name: {:local, pool_name}, worker_module: Verk.Worker, size: pool_size, max_overflow: 0], []]
worker(:poolboy, args, restart: :permanent, shutdown: 5000, id: pool_name)
end
end