Skip to content

Commit 7f4bbb6

Browse files
hsun324facebook-github-bot
authored andcommitted
Add helpers for full and witness config membership
Summary: Add helpers to fetch the currently active full and witness replicas from a RAFT config. Reviewed By: jaher Differential Revision: D74756130 fbshipit-source-id: 1af8062ea36617013fe140ec25e162ebcce7576f
1 parent fa2251b commit 7f4bbb6

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/wa_raft_server.erl

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
-export([
3535
get_config_version/1,
3636
get_config_members/1,
37+
get_config_full_members/1,
38+
get_config_witness_members/1,
3739
get_config_witnesses/1,
3840
is_data_replica/2,
3941
is_witness/2
@@ -296,6 +298,19 @@ get_config_members(#{version := 1, membership := Members}) ->
296298
get_config_members(_Config) ->
297299
[].
298300

301+
-spec get_config_full_members(Config :: config() | config_all()) -> [#raft_identity{}].
302+
get_config_full_members(#{version := 1, membership := Members, witness := Witnesses}) ->
303+
[#raft_identity{name = Name, node = Node} || {Name, Node} <- Members -- Witnesses];
304+
get_config_full_members(Config) ->
305+
get_config_members(Config).
306+
307+
-spec get_config_witness_members(Config :: config() | config_all()) -> [#raft_identity{}].
308+
get_config_witness_members(#{version := 1, membership := Members, witness := Witnesses}) ->
309+
MembersMap = maps:from_keys(Members, []),
310+
[#raft_identity{name = Name, node = Node} || {Name, Node} = Witness <- Witnesses, maps:is_key(Witness, MembersMap)];
311+
get_config_witness_members(_Config) ->
312+
[].
313+
299314
-spec get_config_witnesses(Config :: config() | config_all()) -> [#raft_identity{}].
300315
get_config_witnesses(#{version := 1, witness := Witnesses}) ->
301316
[#raft_identity{name = Name, node = Node} || {Name, Node} <- Witnesses];
@@ -363,7 +378,9 @@ normalize_config(#{version := 1} = Config) ->
363378
normalize_config(#{version := Version}) ->
364379
% All valid configurations will contain at least their own version; however,
365380
% we do not know how to handle configurations with newer versions.
366-
error({unsupported_version, Version}).
381+
error({unsupported_version, Version});
382+
normalize_config(#{}) ->
383+
error(no_version).
367384

368385
%%------------------------------------------------------------------------------
369386
%% RAFT Server - Public APIs

0 commit comments

Comments
 (0)