Packages
electric
0.9.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/shape_cache/crashing_file_storage.ex
defmodule Electric.ShapeCache.CrashingFileStorage do
@moduledoc """
A thing wrapper module around FileStorage that can be configured to raise an error after a
certain number of writes.
"""
alias Electric.ShapeCache.FileStorage
@behaviour Electric.ShapeCache.Storage
@num_calls_until_crash_key :num_calls_until_crash
defdelegate for_shape(shape_handle, opts), to: FileStorage
defdelegate start_link(opts), to: FileStorage
defdelegate set_shape_definition(shape, opts), to: FileStorage
defdelegate get_all_stored_shapes(opts), to: FileStorage
defdelegate get_total_disk_usage(opts), to: FileStorage
defdelegate get_current_position(opts), to: FileStorage
defdelegate set_snapshot_xmin(xmin, opts), to: FileStorage
defdelegate snapshot_started?(opts), to: FileStorage
defdelegate get_snapshot(opts), to: FileStorage
defdelegate make_new_snapshot!(data_stream, opts), to: FileStorage
defdelegate mark_snapshot_as_started(opts), to: FileStorage
defdelegate get_log_stream(offset, max_offset, opts), to: FileStorage
defdelegate get_chunk_end_log_offset(offset, opts), to: FileStorage
defdelegate cleanup!(opts), to: FileStorage
defdelegate unsafe_cleanup!(opts), to: FileStorage
def shared_opts(opts) do
opts
|> FileStorage.shared_opts()
|> Map.put(:extra_opts, %{num_calls_until_crash: Keyword.fetch!(opts, :num_calls_until_crash)})
end
def initialise(opts) do
CubDB.put(opts.db, @num_calls_until_crash_key, opts.extra_opts.num_calls_until_crash)
FileStorage.initialise(opts)
end
def append_to_log!(log_items, opts) do
num_calls_until_crash = CubDB.get(opts.db, @num_calls_until_crash_key)
action =
if num_calls_until_crash == 0 do
CubDB.put(opts.db, @num_calls_until_crash_key, opts.extra_opts.num_calls_until_crash)
:crash!
else
CubDB.put(opts.db, @num_calls_until_crash_key, num_calls_until_crash - 1)
nil
end
if action == :crash! do
raise "Simulated storage failure"
end
FileStorage.append_to_log!(log_items, opts)
end
end