Packages
electric
1.0.13
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.16
1.4.16-beta-1
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
retired
1.1.5
retired
1.1.4
retired
1.1.3
retired
1.1.2
1.1.1
1.1.0
1.0.24
1.0.23
1.0.22
1.0.21
1.0.20
1.0.19
1.0.18
1.0.17
1.0.15
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-beta.23
1.0.0-beta.22
1.0.0-beta.20
1.0.0-beta.19
1.0.0-beta.18
1.0.0-beta.17
1.0.0-beta.16
1.0.0-beta.15
1.0.0-beta.14
1.0.0-beta.13
1.0.0-beta.12
1.0.0-beta.11
1.0.0-beta.10
1.0.0-beta.9
1.0.0-beta.8
1.0.0-beta.7
1.0.0-beta.6
1.0.0-beta.5
1.0.0-beta.4
1.0.0-beta.3
1.0.0-beta.2
1.0.0-beta.1
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.5.2
0.4.4
Postgres sync engine. Sync little subsets of your Postgres data into local apps and services.
Current section
Files
Jump to
Current section
Files
lib/electric/shapes/dynamic_consumer_supervisor.ex
defmodule Electric.Shapes.DynamicConsumerSupervisor do
@moduledoc """
Responsible for managing shape consumer processes
"""
use DynamicSupervisor
alias Electric.Shapes.ConsumerSupervisor
require Logger
def name(stack_id) do
Electric.ProcessRegistry.name(stack_id, __MODULE__)
end
def start_link(opts) do
stack_id = Keyword.fetch!(opts, :stack_id)
DynamicSupervisor.start_link(__MODULE__, [stack_id: stack_id],
name: Keyword.get(opts, :name, name(stack_id))
)
end
def start_shape_consumer(name, config) do
Logger.debug(fn -> "Starting consumer for #{Access.fetch!(config, :shape_handle)}" end)
DynamicSupervisor.start_child(name, {ConsumerSupervisor, config})
end
def stop_shape_consumer(_name, stack_id, shape_handle) do
case GenServer.whereis(ConsumerSupervisor.name(stack_id, shape_handle)) do
nil ->
{:error, "no consumer for shape handle #{inspect(shape_handle)}"}
pid when is_pid(pid) ->
ConsumerSupervisor.clean_and_stop(%{
stack_id: stack_id,
shape_handle: shape_handle
})
:ok
end
end
@doc false
def stop_all_consumers(name) do
for {:undefined, pid, _type, _} when is_pid(pid) <- DynamicSupervisor.which_children(name) do
DynamicSupervisor.terminate_child(name, pid)
end
:ok
end
@impl true
def init(stack_id: stack_id) do
Process.set_label({:dynamic_consumer_supervisor, stack_id})
Logger.metadata(stack_id: stack_id)
Electric.Telemetry.Sentry.set_tags_context(stack_id: stack_id)
Logger.debug(fn -> "Starting #{__MODULE__}" end)
DynamicSupervisor.init(strategy: :one_for_one)
end
end