Packages
ra
3.1.1
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_log_snapshot_state.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-2026 Broadcom. All Rights Reserved. The term Broadcom
%% refers to Broadcom Inc. and/or its subsidiaries.
-module(ra_log_snapshot_state).
-export([
insert/5,
delete/2,
smallest/2,
live_indexes/2,
snapshot/2,
read/2
]).
-spec insert(ets:table(), ra:uid(), -1 | ra:index(), ra:index(), ra_seq:state()) ->
ok.
insert(Table, UId, SnapIdx, SmallestIdx, LiveIndexes)
when is_binary(UId) andalso
is_integer(SnapIdx) andalso
is_integer(SmallestIdx) andalso
is_list(LiveIndexes) ->
true = ets:insert(Table, {UId, SnapIdx, SmallestIdx, LiveIndexes}),
ok.
delete(Table, UId) ->
true = ets:delete(Table, UId),
ok.
-spec smallest(ets:table(), ra:uid()) ->
ra:index().
smallest(Table, UId) when is_binary(UId) ->
ets:lookup_element(Table, UId, 3, 0).
-spec live_indexes(ets:table(), ra:uid()) ->
ra_seq:state().
live_indexes(Table, UId) when is_binary(UId) ->
ets:lookup_element(Table, UId, 4, []).
-spec snapshot(ets:table(), ra:uid()) ->
ra:index() | -1.
snapshot(Table, UId) when is_binary(UId) ->
ets:lookup_element(Table, UId, 2, -1).
-spec read(ets:table(), ra:uid()) ->
undefined |
{UId :: ra:uid(),
SnapIdx :: -1 | ra:index(),
SmallestIdx :: ra:index(),
LiveIndexes :: ra_seq:state()}.
read(Table, UId) when is_binary(UId) ->
case ets:lookup(Table, UId) of
[] ->
undefined;
[Record] ->
Record
end.
%%% ===================
%%% Internal unit tests
%%% ===================
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
basics_test() ->
UId = atom_to_binary(?FUNCTION_NAME, utf8),
T = ets:new(?FUNCTION_NAME, [set]),
ok = insert(T, UId, 50, 51, []),
?assertEqual(51, smallest(T, UId)),
?assertEqual(50, snapshot(T, UId)),
ok.
-endif.