Packages
ra
2.16.5
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_aux.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.
-module(ra_aux).
-export([
machine_state/1,
effective_machine_version/1,
leader_id/1,
last_applied/1,
current_term/1,
members_info/1,
overview/1,
log_last_index_term/1,
log_fetch/2,
log_stats/1
]).
-include("ra.hrl").
-include("ra_server.hrl").
-opaque internal_state() :: ra_server:state().
-export_type([internal_state/0]).
-spec machine_state(ra_aux:internal_state()) -> term().
machine_state(State) ->
maps:get(?FUNCTION_NAME, State).
-spec effective_machine_version(ra_aux:internal_state()) ->
ra_machine:version().
effective_machine_version(#{cfg := Cfg}) ->
Cfg#cfg.effective_machine_version.
-spec leader_id(ra_aux:internal_state()) -> undefined | ra_server_id().
leader_id(State) ->
maps:get(?FUNCTION_NAME, State).
-spec last_applied(ra_aux:internal_state()) -> ra_index().
last_applied(State) ->
maps:get(?FUNCTION_NAME, State).
-spec current_term(ra_aux:internal_state()) -> ra_term().
current_term(State) ->
maps:get(?FUNCTION_NAME, State).
-spec members_info(ra_aux:internal_state()) -> ra_cluster().
members_info(State) ->
ra_server:state_query(?FUNCTION_NAME, State).
-spec overview(ra_aux:internal_state()) -> map().
overview(State) ->
ra_server:state_query(?FUNCTION_NAME, State).
-spec log_last_index_term(ra_aux:internal_state()) -> ra_idxterm().
log_last_index_term(#{log := Log}) ->
ra_log:last_index_term(Log).
-spec log_fetch(ra_index(), ra_aux:internal_state()) ->
{undefined |
{ra_term(),
CmdMetadata :: ra_server:command_meta(),
Command :: term()}, ra_aux:internal_state()}.
log_fetch(Idx, #{log := Log0} = State)
when is_integer(Idx) ->
case ra_log:fetch(Idx, Log0) of
{{Idx, Term, {'$usr', Meta, Cmd, _ReplyMode}}, Log} ->
{{Term, Meta, Cmd}, State#{log => Log}};
{_, Log} ->
%% we only allow user commands to be read
{undefined, State#{log => Log}}
end.
-spec log_stats(ra_aux:internal_state()) -> ra_log:overview().
log_stats(#{log := Log}) ->
ra_log:overview(Log).