Packages
electric
1.0.21
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/lsn_tracker.ex
defmodule Electric.LsnTracker do
alias Electric.Postgres.Lsn
def init(last_processed_lsn, stack_id) do
create_table(stack_id)
set_last_processed_lsn(last_processed_lsn, stack_id)
end
@spec set_last_processed_lsn(Lsn.t() | non_neg_integer(), String.t()) :: :ok
def set_last_processed_lsn(lsn, stack_id) when is_struct(lsn, Lsn) do
stack_id
|> table()
|> :ets.insert({:last_processed_lsn, lsn})
end
def set_last_processed_lsn(lsn, stack_id) when is_integer(lsn) do
set_last_processed_lsn(Lsn.from_integer(lsn), stack_id)
end
@spec get_last_processed_lsn(String.t()) :: Lsn.t()
def get_last_processed_lsn(stack_id) do
[last_processed_lsn: lsn] =
stack_id
|> table()
|> :ets.lookup(:last_processed_lsn)
lsn
end
# make this idempotent to avoid problems in tests
defp create_table(stack_id) do
table = table(stack_id)
case :ets.info(table, :id) do
:undefined ->
:ets.new(table, [:protected, :named_table])
ref when is_reference(ref) ->
:ok
end
end
defp table(stack_id) do
:"#{stack_id}:lsn_tracker"
end
end