Packages
electric
1.6.9
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/stack_config.ex
defmodule Electric.StackConfig do
use GenServer
def put(stack_id, key, val) do
:ets.insert(table(stack_id), {key, val})
end
def lookup(stack_id, key, default \\ nil) do
:ets.lookup_element(table(stack_id), key, 2, default)
end
def spawn_opts(stack_id, process_name) do
stack_id
|> lookup(:process_spawn_opts, %{})
|> Map.get(process_name, [])
end
def lookup!(stack_id, key) do
:ets.lookup_element(table(stack_id), key, 2)
rescue
ArgumentError ->
raise RuntimeError,
message: "stack config value #{inspect(key)} is missing for stack #{stack_id}"
end
@doc false
# Should provide all required values not defined dynamically at stack init
def default_seed_config do
[
snapshot_timeout_to_first_data: :timer.seconds(30),
shape_hibernate_after: Electric.Config.default(:shape_hibernate_after),
shape_enable_suspend?: Electric.Config.default(:shape_enable_suspend?),
chunk_bytes_threshold: Electric.ShapeCache.LogChunker.default_chunk_size_threshold(),
feature_flags: [],
process_spawn_opts: %{}
]
end
###
def name(stack_ref) do
Electric.ProcessRegistry.name(stack_ref, __MODULE__)
end
def table(stack_id) do
:"#{inspect(__MODULE__)}:#{stack_id}"
end
###
def start_link(opts) do
GenServer.start_link(__MODULE__, opts, name: name(opts))
end
@impl GenServer
def init(opts) do
stack_id = Keyword.fetch!(opts, :stack_id)
seed_config = Keyword.merge(default_seed_config(), Keyword.get(opts, :seed_config, []))
tab = table(stack_id)
:ets.new(tab, [:public, :named_table, :set, read_concurrency: true])
:ets.insert(tab, seed_config)
{:ok, nil}
end
end