Packages
ra
2.4.8
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.2
3.0.1
3.0.0
3.0.0-beta.1
2.17.3
2.17.2
2.17.1
2.17.0
2.16.13
2.16.12
2.16.11
2.16.10
2.16.9
2.16.8
2.16.7
2.16.6
2.16.5
2.16.4
2.16.3
2.16.2
2.16.1
2.16.0
2.16.0-pre.12
2.16.0-pre.11
2.16.0-pre.10
2.16.0-pre.9
2.16.0-pre.8
2.16.0-pre.7
2.16.0-pre.6
2.16.0-pre.5
2.16.0-pre.4
2.16.0-pre.3
2.16.0-pre.2
2.16.0-pre.1
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.0
2.13.6
2.13.5
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.13.0-pre.1
2.12.0
2.11.0
2.11.0-pre.1
2.10.2-pre.2
2.10.2-pre.1
2.10.1
2.10.0
2.10.0-pre.3
2.10.0-pre.2
2.10.0-pre.1
2.9.10-pre.1
2.9.1
2.9.1-pre.2
2.9.1-pre.1
2.9.0
2.8.0
retired
2.7.3
2.7.2
2.7.1
2.7.0
2.7.0-pre.3
2.7.0-pre.2
2.7.0-pre.1
2.6.3
2.6.2
2.6.1
2.6.0-pre.1
2.5.1
2.5.1-pre.1
2.5.0
2.4.9
2.4.8
2.4.7
2.4.6
2.4.5
2.4.4
2.4.3
2.4.2
retired
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.13
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.9.6
0.9.5
0.9.4
0.9.2
0.3.3
retired
0.3.2
retired
0.3.1
retired
Raft library
Current section
Files
Jump to
Current section
Files
src/ra_systems_sup.erl
%% This Source Code Form is subject to the terms of the Mozilla Public
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
%% Copyright (c) 2017-2022 VMware, Inc. or its affiliates. All rights reserved.
%%
%% @hidden
-module(ra_systems_sup).
-behaviour(supervisor).
-include("ra.hrl").
%% API functions
-export([start_link/0,
start_system/1,
stop_system/1]).
%% Supervisor callbacks
-export([init/1]).
-spec start_link() ->
{ok, pid()} | ignore | {error, term()}.
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
-spec start_system(ra_system:config()) -> supervisor:startchild_ret().
start_system(#{name := Name,
names := _Names,
data_dir := Dir} = Config) when is_atom(Name) ->
?INFO("starting Ra system: ~ts in directory: ~ts", [Name, Dir]),
%% TODO: validate configuration
ok = ra_system:store(Config),
RaSystemsSup = #{id => Name,
type => supervisor,
start => {ra_system_sup, start_link, [Config]}},
supervisor:start_child(?MODULE, RaSystemsSup).
-spec stop_system(ra_system:config() | atom()) -> ok | {error, any()}.
stop_system(#{name := Name}) when is_atom(Name) ->
stop_system(Name);
stop_system(Name) when is_atom(Name) ->
try
case supervisor:terminate_child(?MODULE, Name) of
ok ->
cleanup(Name);
{error, not_found} ->
cleanup(Name);
{error, _} = Error ->
Error
end
catch
exit:{noproc, _} ->
cleanup(Name)
end.
cleanup(Name) when is_atom(Name) ->
_ = (catch supervisor:delete_child(?MODULE, Name)),
_ = persistent_term:erase({'$ra_system', Name}),
ok.
init([]) ->
%% This is not something we want to expose. It helps test suites
%% that crash Ra systems on purpose and may end up crashing
%% the systems faster than we normally allow.
{Intensity, Period} = application:get_env(ra, ra_systems_sup_intensity, {1, 5}),
SupFlags = #{strategy => one_for_one, intensity => Intensity, period => Period},
{ok, {SupFlags, []}}.