Packages
electric
1.1.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/connection/manager/connection_backoff.ex
defmodule Electric.Connection.Manager.ConnectionBackoff do
@type connection_backoff :: %{
backoff: :backoff.backoff(),
retries_started_at: nil | integer()
}
@spec init(pos_integer(), :infinity | pos_integer()) :: connection_backoff()
def init(start, max),
do: %{backoff: :backoff.init(start, max), retries_started_at: nil}
@spec succeed(connection_backoff()) :: {pos_integer(), connection_backoff()}
def succeed(%{backoff: backoff} = conn_backoff) do
{_, backoff} = :backoff.succeed(backoff)
{total_retry_time(conn_backoff), %{backoff: backoff, retries_started_at: nil}}
end
@spec fail(connection_backoff()) :: {pos_integer(), connection_backoff()}
def fail(%{backoff: backoff, retries_started_at: retries_started_at}) do
{time, backoff} = :backoff.fail(backoff)
{time,
%{
backoff: backoff,
retries_started_at: retries_started_at || System.monotonic_time(:millisecond)
}}
end
@spec total_retry_time(connection_backoff()) :: pos_integer()
def total_retry_time(%{retries_started_at: nil}),
do: 0
def total_retry_time(%{retries_started_at: retries_started_at}),
do: System.monotonic_time(:millisecond) - retries_started_at
end