Packages
electric
1.0.4
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
def reset(stack_id) do
set_last_processed_lsn(Lsn.from_integer(0), stack_id)
end
defp create_table(stack_id) do
stack_id
|> table()
|> :ets.new([:protected, :named_table])
end
defp table(stack_id) do
:"#{stack_id}:lsn_tracker"
end
end