Packages
oban
2.21.0
2.23.0
2.22.1
2.22.0
2.21.1
2.21.0
2.20.3
2.20.2
2.20.1
2.20.0
2.19.4
2.19.3
2.19.2
2.19.1
2.19.0
2.18.3
2.18.2
2.18.1
2.18.0
2.17.12
2.17.11
2.17.10
2.17.9
2.17.8
2.17.7
2.17.6
2.17.5
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.3
2.16.2
2.16.1
2.16.0
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.2
2.14.1
2.14.0
2.13.6
2.13.5
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.1
2.12.0
2.11.3
2.11.2
2.11.1
2.11.0
2.10.1
2.10.0
retired
2.9.2
2.9.1
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.1
2.6.0
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.0
2.0.0
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.2.0
1.1.0
1.0.0
1.0.0-rc.2
1.0.0-rc.1
0.12.1
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Robust job processing, backed by modern PostgreSQL, SQLite3, and MySQL.
Current section
Files
Jump to
Current section
Files
lib/oban/queue/supervisor.ex
defmodule Oban.Queue.Supervisor do
@moduledoc false
use Supervisor
alias Oban.Registry
alias Oban.Queue.{Producer, Watchman}
@spec start_link(Keyword.t()) :: Supervisor.on_start()
def start_link(opts) when is_list(opts) do
Supervisor.start_link(__MODULE__, opts, name: opts[:name])
end
@spec child_spec(Keyword.t()) :: Supervisor.child_spec()
def child_spec(opts) do
name = Keyword.fetch!(opts, :name)
%{super(opts) | id: name}
end
@impl Supervisor
def init(opts) do
conf = Keyword.fetch!(opts, :conf)
queue = Keyword.fetch!(opts, :queue)
fore_name = Registry.via(conf.name, {:foreman, queue})
prod_name = Registry.via(conf.name, {:producer, queue})
watch_name = Registry.via(conf.name, {:watchman, queue})
fore_opts = [name: fore_name]
prod_opts =
opts
|> Keyword.drop([:name])
|> Keyword.merge(foreman: fore_name, name: prod_name)
|> Keyword.put_new(:dispatch_cooldown, conf.dispatch_cooldown)
watch_opts = [
conf: conf,
name: watch_name,
producer: prod_name,
shutdown: conf.shutdown_grace_period
]
prod_mod = Keyword.get(opts, :producer, Producer)
children = [
{Task.Supervisor, fore_opts},
{prod_mod, prod_opts},
{Watchman, watch_opts}
]
Supervisor.init(children, strategy: :one_for_all)
end
end