Current section

Files

Jump to
ra src ra_metrics_ets.erl
Raw

src/ra_metrics_ets.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-2023 Broadcom. All Rights Reserved. The term Broadcom refers to Broadcom Inc. and/or its subsidiaries.
%%
%% @hidden
-module(ra_metrics_ets).
-behaviour(gen_server).
-export([start_link/0]).
-export([init/1,
handle_call/3,
handle_cast/2,
handle_info/2,
terminate/2,
code_change/3]).
-record(state, {}).
%%% here to own metrics ETS tables
%%%===================================================================
%%% API functions
%%%===================================================================
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
%%%===================================================================
%%% gen_server callbacks
%%%===================================================================
init([]) ->
TableFlags = [named_table,
{read_concurrency, true},
{write_concurrency, true},
public],
_ = ets:new(ra_log_metrics, [set | TableFlags]),
_ = ra_counters:init(),
_ = ra_leaderboard:init(),
%% Table for ra processes to record their current snapshot index so that
%% other processes such as the segment writer can use this value to skip
%% stale records and avoid flushing unnecessary data to disk.
%% This is written from the ra process so will need write_concurrency.
%% {RaUId, ra_index()}
_ = ets:new(ra_log_snapshot_state, [set | TableFlags]),
{ok, #state{}}.
handle_call(_, _From, State) ->
{reply, ok, 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
%%%===================================================================