Packages
reckon_db
2.3.0
5.11.0
5.10.4
5.10.3
5.10.1
5.10.0
5.9.1
5.9.0
5.8.3
5.8.2
5.8.1
5.8.0
5.7.0
5.6.1
5.6.0
5.5.5
5.5.4
5.5.3
5.5.2
5.5.1
5.5.0
5.4.0
5.2.2
5.2.1
5.2.0
5.1.0
5.0.0
4.0.0
3.1.2
3.1.1
3.0.0
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.2
2.2.0
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
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.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
BEAM-native Event Store built on Khepri/Ra with Raft consensus. Event sourcing, persistent subscriptions, snapshots, and automatic cluster formation via UDP multicast discovery. Ships embedded Rust NIFs for 3-15x acceleration of crypto, hashing, compression, aggregation, filter matching, and grap...
Current section
Files
Jump to
Current section
Files
src/reckon_db_core_sup.erl
%% @doc Core supervisor for reckon-db
%%
%% Manages tightly-coupled core components using one_for_all strategy:
%% - PersistenceSystem (Khepri store, streams, snapshots, subscriptions)
%% - NotificationSystem (leader, emitters)
%% - StoreMgr (store lifecycle coordination)
%%
%% If any child fails, all children are restarted to ensure consistency.
%%
%% @author rgfaber
-module(reckon_db_core_sup).
-behaviour(supervisor).
-include("reckon_db.hrl").
%% API
-export([start_link/1]).
%% Supervisor callbacks
-export([init/1]).
%%====================================================================
%% API
%%====================================================================
%% @doc Start the core supervisor
-spec start_link(store_config()) -> {ok, pid()} | {error, term()}.
start_link(#store_config{store_id = StoreId} = Config) ->
Name = reckon_db_naming:core_sup_name(StoreId),
supervisor:start_link({local, Name}, ?MODULE, Config).
%%====================================================================
%% Supervisor callbacks
%%====================================================================
%% @private
-spec init(store_config()) -> {ok, {supervisor:sup_flags(), [supervisor:child_spec()]}}.
init(#store_config{store_id = StoreId} = Config) ->
%% CRITICAL: one_for_all ensures all core components restart together
%% This maintains consistency between persistence, notification, and store management
SupFlags = #{
strategy => one_for_all,
intensity => 5,
period => 30
},
Children = [
persistence_sup_spec(Config),
notification_sup_spec(Config),
store_mgr_spec(Config)
],
logger:debug("Starting core supervisor for store ~p", [StoreId]),
{ok, {SupFlags, Children}}.
%%====================================================================
%% Internal functions
%%====================================================================
%% @private
-spec persistence_sup_spec(store_config()) -> supervisor:child_spec().
persistence_sup_spec(#store_config{store_id = StoreId} = Config) ->
#{
id => reckon_db_naming:persistence_sup_name(StoreId),
start => {reckon_db_persistence_sup, start_link, [Config]},
restart => permanent,
shutdown => infinity,
type => supervisor,
modules => [reckon_db_persistence_sup]
}.
%% @private
-spec notification_sup_spec(store_config()) -> supervisor:child_spec().
notification_sup_spec(#store_config{store_id = StoreId} = Config) ->
#{
id => reckon_db_naming:notification_sup_name(StoreId),
start => {reckon_db_notification_sup, start_link, [Config]},
restart => permanent,
shutdown => infinity,
type => supervisor,
modules => [reckon_db_notification_sup]
}.
%% @private
-spec store_mgr_spec(store_config()) -> supervisor:child_spec().
store_mgr_spec(#store_config{store_id = StoreId} = Config) ->
#{
id => reckon_db_naming:store_mgr_name(StoreId),
start => {reckon_db_store_mgr, start_link, [Config]},
restart => permanent,
shutdown => 5000,
type => worker,
modules => [reckon_db_store_mgr]
}.