Packages
ex_esdb
0.2.5
0.11.0
0.10.0
0.9.0
0.8.0
0.7.8
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.1
0.6.0
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14-alpha
0.0.13-alpha
0.0.12-alpha
0.0.11-alpha
0.0.10-alpha
0.0.9-alpha
0.0.8-alpha
0.0.6-alpha
0.0.5-alpha
0.0.4-alpha
0.0.3-alpha
0.0.2-alfa
0.0.1-alfa
ExESDB is a reincarnation of rabbitmq/khepri, specialized for use as a BEAM-native event store.
Current section
Files
Jump to
Current section
Files
lib/ex_esdb/snapshots.ex
defmodule ExESDB.Snapshots do
@moduledoc """
The ExESDB Snapshots SubSystem.
"""
use Supervisor
require Logger
alias ExESDB.Themes, as: Themes
alias ExESDB.StoreNaming
def start_link(opts) do
store_id = StoreNaming.extract_store_id(opts)
name = StoreNaming.genserver_name(__MODULE__, store_id)
Supervisor.start_link(
__MODULE__,
opts,
name: name
)
end
@impl true
def init(_) do
children = [
{PartitionSupervisor, child_spec: DynamicSupervisor, name: ExESDB.SnapshotsWriters},
{PartitionSupervisor, child_spec: DynamicSupervisor, name: ExESDB.SnapshotsReaders}
]
ret = Supervisor.init(children, strategy: :one_for_one)
IO.puts("#{Themes.snapshots_system(self(), "is UP.")}")
ret
end
def child_spec(opts) do
store_id = StoreNaming.extract_store_id(opts)
%{
id: StoreNaming.child_spec_id(__MODULE__, store_id),
start: {__MODULE__, :start_link, [opts]},
type: :supervisor,
restart: :permanent,
shutdown: 10_000
}
end
@doc """
## Description
Returns the key for a snapshot as a Khepri Path.
## Examples
iex> ExESDB.Snapshots.path("source_uuid", "stream_uuid", 1)
[:snapshots, "source_uuid", "stream_uuid", "000000001"]
"""
@spec path(
source_uuid :: String.t(),
stream_uuid :: String.t(),
version :: non_neg_integer()
) :: list()
def path(source_uuid, stream_uuid, version)
when is_binary(source_uuid) and
is_binary(stream_uuid) and
is_integer(version) and
version >= 0 do
padded_version =
version
|> Integer.to_string()
|> String.pad_leading(10, "0")
[:snapshots, source_uuid, stream_uuid, padded_version]
end
end