Packages
quantum
3.5.2
3.5.3
3.5.2
retired
3.5.1
retired
3.5.0
3.4.0
3.3.0
3.2.0
3.1.0
3.0.2
3.0.1
3.0.0
3.0.0-rc.3
3.0.0-rc.2
3.0.0-rc.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
retired
2.3.0
retired
2.2.7
2.2.6
2.2.5
retired
2.2.4
retired
2.2.3
retired
2.2.2
retired
2.2.1
retired
2.2.0
retired
2.1.3
retired
2.1.2
retired
2.1.1
retired
2.1.0
retired
2.1.0-beta.1
retired
2.0.4
retired
2.0.3
retired
2.0.2
retired
2.0.1
retired
2.0.0
retired
2.0.0-beta.2
retired
2.0.0-beta.1
retired
1.9.3
retired
1.9.2
retired
1.9.1
retired
1.9.0
retired
1.8.1
retired
1.8.0
retired
1.7.1
retired
1.7.0
retired
1.6.1
retired
1.6.0
retired
1.5.0
retired
1.4.0
retired
1.3.2
retired
1.3.1
retired
1.3.0
retired
1.2.4
retired
1.2.3
retired
1.2.2
retired
1.2.1
retired
1.2.0
retired
1.1.0
retired
1.0.4
retired
1.0.3
retired
1.0.2
retired
1.0.1
retired
1.0.0
retired
Cron-like job scheduler for Elixir.
Retired package: Valid jobs are removed because of a flawed condition, update to 3.5.3
Current section
Files
Jump to
Current section
Files
lib/quantum/executor_supervisor.ex
defmodule Quantum.ExecutorSupervisor do
@moduledoc false
# This `ConsumerSupervisor` is responsible to start a job for every execute event.
use ConsumerSupervisor
alias Quantum.Executor.StartOpts, as: ExecutorStartOpts
alias __MODULE__.{InitOpts, StartOpts}
@spec start_link(StartOpts.t()) :: GenServer.on_start()
def start_link(%StartOpts{name: name} = opts) do
__MODULE__
|> ConsumerSupervisor.start_link(
struct!(
InitOpts,
Map.take(opts, [
:node_selector_broadcaster_reference,
:task_supervisor_reference,
:task_registry_reference,
:debug_logging,
:scheduler
])
),
name: name
)
|> case do
{:ok, pid} ->
{:ok, pid}
{:error, {:already_started, pid}} ->
Process.monitor(pid)
{:ok, pid}
{:error, _reason} = error ->
error
end
end
@impl ConsumerSupervisor
def init(
%InitOpts{
node_selector_broadcaster_reference: node_selector_broadcaster
} = opts
) do
executor_opts =
struct!(
ExecutorStartOpts,
Map.take(opts, [
:task_supervisor_reference,
:task_registry_reference,
:debug_logging,
:scheduler
])
)
ConsumerSupervisor.init(
[{Quantum.Executor, executor_opts}],
strategy: :one_for_one,
subscribe_to: [{node_selector_broadcaster, max_demand: 50}]
)
end
end