@@ -44,6 +44,8 @@ all_tests() ->
4444 local_query_boom ,
4545 local_query_stale ,
4646 members ,
47+ voters_promotable ,
48+ voters_non_voter ,
4749 consistent_query ,
4850 consistent_query_after_restart ,
4951 consistent_query_minority ,
@@ -537,6 +539,29 @@ members(Config) ->
537539 {ok , Cluster , Leader } = ra :members (Leader ),
538540 terminate_cluster (Cluster ).
539541
542+ voters_promotable (Config ) ->
543+ Name = ? config (test_name , Config ),
544+ [A , B ] = Cluster = start_local_cluster (2 , Name , add_machine ()),
545+ {ok , _ , Leader } = ra :process_command (A , 9 ),
546+ C = {ra_server :name (Name , " 3" ), node ()},
547+ ok = ra :start_server (default , Name , C , add_machine (), Cluster ),
548+ {ok , _ , _ } = ra :add_member (Leader , #{id => C , uid => <<" 4" >>, membership => promotable }),
549+ {ok , [A , B , C ], Leader } = ra :members (Leader ),
550+ {ok , [A , B ], Leader } = ra :voters (Leader ),
551+ terminate_cluster ([C | Cluster ]).
552+
553+ voters_non_voter (Config ) ->
554+ Name = ? config (test_name , Config ),
555+ [A , B ] = Cluster = start_local_cluster (2 , Name , add_machine ()),
556+ {ok , _ , Leader } = ra :process_command (A , 9 ),
557+ C = {ra_server :name (Name , " 3" ), node ()},
558+ ok = ra :start_server (default , Name , C , add_machine (), Cluster ),
559+ {ok , _ , _ } = ra :add_member (Leader , #{id => C , uid => <<" 4" >>, membership => non_voter }),
560+ {ok , [A , B , C ], Leader } = ra :members (Leader ),
561+ {ok , [A , B ], Leader } = ra :voters (Leader ),
562+ terminate_cluster ([C | Cluster ]).
563+
564+
540565consistent_query (Config ) ->
541566 [A , _ , _ ] = Cluster = start_local_cluster (3 , ? config (test_name , Config ),
542567 add_machine ()),
@@ -1073,7 +1098,7 @@ voter_gets_promoted_consistent_leader(Config) ->
10731098 timer :sleep (100 ),
10741099 All = [N1 , N2 , N3 ],
10751100 % in server state
1076- lists :map (fun (O ) -> ? assertEqual (All , voters (O )) end , overviews (N1 )),
1101+ lists :map (fun (O ) -> ? assertEqual (All , filter_voters (O )) end , overviews (N1 )),
10771102 % in ets
10781103 #{servers := Servers } = ra :overview (? SYS ),
10791104 lists :map (fun ({Name , _ }) -> #{Name := #{membership := voter }} = Servers end , All ),
@@ -1098,7 +1123,7 @@ voter_gets_promoted_new_leader(Config) ->
10981123 timer :sleep (100 ),
10991124 All = [N1 , N2 , N3 ],
11001125 % in server state
1101- lists :map (fun (O ) -> ? assertEqual (All , voters (O )) end , overviews (N1 )),
1126+ lists :map (fun (O ) -> ? assertEqual (All , filter_voters (O )) end , overviews (N1 )),
11021127 % in ets
11031128 #{servers := Servers } = ra :overview (? SYS ),
11041129 lists :map (fun ({Name , _ }) -> #{Name := #{membership := voter }} = Servers end , All ),
@@ -1217,7 +1242,7 @@ overviews(Node) ->
12171242 {ok , Members , _From } = ra :members (Node ),
12181243 [ra :member_overview (P ) || {_ , _ } = P <- Members ].
12191244
1220- voters ({ok , #{cluster := Peers }, _ } = _Overview ) ->
1245+ filter_voters ({ok , #{cluster := Peers }, _ } = _Overview ) ->
12211246 [Id || {Id , Status } <- maps :to_list (Peers ), maps :get (membership , Status , voter ) == voter ].
12221247
12231248% % machine impl
0 commit comments