Current section

Files

Jump to
ra src ra_log_pre_init.erl
Raw

src/ra_log_pre_init.erl

-module(ra_log_pre_init).
-behaviour(gen_server).
-include("ra.hrl").
%% API functions
-export([start_link/1]).
%% gen_server callbacks
-export([init/1,
handle_call/3,
handle_cast/2,
handle_info/2,
terminate/2,
code_change/3]).
-record(state, {}).
%%%===================================================================
%%% API functions
%%%===================================================================
start_link(DataDir) ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [DataDir], []).
%%%===================================================================
%%% gen_server callbacks
%%%===================================================================
init([_DataDir]) ->
%% ra_log:pre_init ensures that the ra_log_snapshot_state table is
%% populated before WAL recovery begins to avoid writing unnecessary
%% indexes to segment files.
Regd = ra_directory:list_registered(),
_ = [catch(pre_init(Name)) || {Name, _U} <- Regd],
{ok, #state{} , hibernate}.
handle_call(_Request, _From, State) ->
Reply = ok,
{reply, Reply, State}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
%%%===================================================================
%%% Internal functions
%%%===================================================================
pre_init(Name) ->
{ok, #{log_init_args := Log}} = ra_server_sup_sup:prepare_restart_rpc(Name),
_ = ra_log:pre_init(Log),
ok.