@@ -272,13 +272,13 @@ start_cluster(Q) ->
272272 || Node <- [LeaderNode | FollowerNodes ]]),
273273 NewQ0 = amqqueue :set_pid (Q , LeaderId ),
274274 NewQ1 = case rabbit_feature_flags :is_enabled (track_qq_members_uids ) of
275- false ->
276- amqqueue :set_type_state (NewQ0 ,
277- #{nodes => [LeaderNode | FollowerNodes ]});
278- true ->
279- amqqueue :set_type_state (NewQ0 ,
280- #{nodes => UIDs })
281- end ,
275+ false ->
276+ amqqueue :set_type_state (NewQ0 ,
277+ #{nodes => [LeaderNode | FollowerNodes ]});
278+ true ->
279+ amqqueue :set_type_state (NewQ0 ,
280+ #{nodes => UIDs })
281+ end ,
282282
283283 Versions = [V || {ok , V } <- erpc :multicall (FollowerNodes ,
284284 rabbit_fifo , version , [],
@@ -733,16 +733,14 @@ repair_amqqueue_nodes(Q0) ->
733733 % % update amqqueue record
734734 Fun = fun (Q ) ->
735735 TS0 = amqqueue :get_type_state (Q ),
736- TS = case rabbit_feature_flags :is_enabled (track_qq_members_uids )
737- andalso has_uuid_tracking (TS0 )
738- of
736+ TS = case rabbit_feature_flags :is_enabled (track_qq_members_uids ) of
739737 false ->
740738 TS0 #{nodes => RaNodes };
741739 true ->
742740 RaUids = maps :from_list ([{N , erpc :call (N , ra_directory , uid_of ,
743- [? RA_SYSTEM , Name ],
744- ? RPC_TIMEOUT )}
745- || N <- RaNodes ]),
741+ [? RA_SYSTEM , Name ],
742+ ? RPC_TIMEOUT )}
743+ || N <- RaNodes ]),
746744 TS0 #{nodes => RaUids }
747745 end ,
748746 amqqueue :set_type_state (Q , TS )
@@ -803,28 +801,28 @@ maybe_apply_policies(Q, #{config := CurrentConfig}) ->
803801 {[amqqueue :amqqueue ()], [amqqueue :amqqueue ()]}.
804802recover (_Vhost , Queues ) ->
805803 lists :foldl (
806- fun (Q0 , {R0 , F0 }) ->
807- {Name , _ } = amqqueue :get_pid (Q0 ),
804+ fun (Q , {R0 , F0 }) ->
805+ {Name , _ } = amqqueue :get_pid (Q ),
808806 ServerId = {Name , node ()},
809- QName = amqqueue :get_name (Q0 ),
810- MutConf = make_mutable_config (Q0 ),
807+ QName = amqqueue :get_name (Q ),
808+ MutConf = make_mutable_config (Q ),
811809 RaUId = ra_directory :uid_of (? RA_SYSTEM , Name ),
812- #{nodes := Nodes } = QTypeState0 = amqqueue :get_type_state (Q0 ),
813- QTypeState = case Nodes of
810+ #{nodes := Nodes } = amqqueue :get_type_state (Q ),
811+ case Nodes of
814812 List when is_list (List ) ->
815813 % % Queue is not aware of node to uid mapping, do nothing
816- QTypeState0 ;
814+ ok ;
817815 #{node () := RaUId } ->
818- % % Queue is aware and uid for current node is correct, do nothing
819- QTypeState0 ;
820- _ ->
821- % % Queue is aware but either current node has no UId or it
822- % % does not match the one returned by ra_directory, regen uid
823- maybe_delete_data_dir (RaUId ),
824- NewRaUId = ra :new_uid (ra_lib :to_binary (Name )),
825- QTypeState0 #{nodes := Nodes #{node () => NewRaUId }}
816+ % % Queue is aware and uid for current node is correct, do
817+ % % nothing
818+ ok ;
819+ #{node () := _NewRaUId } ->
820+ % % Queue is aware but it does not match the one returned by
821+ % % ra_directory
822+ rabbit_log :info (" Quorum queue ~ts : detected node uuid change, "
823+ " deleting old data directory" , [rabbit_misc :rs (QName )]),
824+ maybe_delete_data_dir (RaUId )
826825 end ,
827- Q = amqqueue :set_type_state (Q0 , QTypeState ),
828826 Res = case ra :restart_server (? RA_SYSTEM , ServerId , MutConf ) of
829827 ok ->
830828 % queue was restarted, good
@@ -1426,16 +1424,16 @@ do_add_member(Q0, Node, Membership, Timeout)
14261424 QTypeState0 = #{nodes := Nodes } = amqqueue :get_type_state (Q0 ),
14271425 NewRaUId = ra :new_uid (ra_lib :to_binary (RaName )),
14281426 QTypeState = case Nodes of
1429- L when is_list (L ) ->
1430- % % Queue is not aware of node to uid mapping, just add the new node
1431- QTypeState0 #{nodes => lists :usort ([Node | Nodes ])};
1432- #{Node := _ } ->
1433- % % Queue is aware and uid for targeted node exists, do nothing
1434- QTypeState0 ;
1435- _ ->
1436- % % Queue is aware but current node has no UId, regen uid
1437- QTypeState0 #{nodes => Nodes #{Node => NewRaUId }}
1438- end ,
1427+ L when is_list (L ) ->
1428+ % % Queue is not aware of node to uid mapping, just add the new node
1429+ QTypeState0 #{nodes => lists :usort ([Node | Nodes ])};
1430+ #{Node := _ } ->
1431+ % % Queue is aware and uid for targeted node exists, do nothing
1432+ QTypeState0 ;
1433+ _ ->
1434+ % % Queue is aware but current node has no UId, regen uid
1435+ QTypeState0 #{nodes => Nodes #{Node => NewRaUId }}
1436+ end ,
14391437 Q = amqqueue :set_type_state (Q0 , QTypeState ),
14401438 MachineVersion = erpc_call (Node , rabbit_fifo , version , [], infinity ),
14411439 Conf = make_ra_conf (Q , ServerId , Membership , MachineVersion ),
@@ -2049,13 +2047,13 @@ make_ra_conf(Q, ServerId, TickTimeout,
20492047 [{ClusterName , _ } | _ ] = Members = members (Q ),
20502048 {_ , Node } = ServerId ,
20512049 UId = case amqqueue :get_type_state (Q ) of
2052- #{nodes := #{Node := Id }} ->
2053- Id ;
2054- _ ->
2055- % % Queue was declared on an older version of RabbitMQ
2056- % % and does not have the node to uid mappings
2057- ra :new_uid (ra_lib :to_binary (ClusterName ))
2058- end ,
2050+ #{nodes := #{Node := Id }} ->
2051+ Id ;
2052+ _ ->
2053+ % % Queue was declared on an older version of RabbitMQ
2054+ % % or does not have the node to uid mappings
2055+ ra :new_uid (ra_lib :to_binary (ClusterName ))
2056+ end ,
20592057 FName = rabbit_misc :rs (QName ),
20602058 Formatter = {? MODULE , format_ra_event , [QName ]},
20612059 LogCfg = #{uid => UId ,
@@ -2199,7 +2197,7 @@ force_checkpoint_on_queue(QName) ->
21992197 {ok , Q } when ? amqqueue_is_quorum (Q ) ->
22002198 {RaName , _ } = amqqueue :get_pid (Q ),
22012199 ? LOG_DEBUG (" Sending command to force ~ts to take a checkpoint" , [QNameFmt ]),
2202- Nodes = rabbit_amqqueue :get_nodes (Q ),
2200+ Nodes = rabbit_queue_type :get_nodes (Q ),
22032201 _ = [ra :cast_aux_command ({RaName , Node }, force_checkpoint )
22042202 || Node <- Nodes ],
22052203 ok ;
@@ -2472,8 +2470,3 @@ queue_vm_ets() ->
24722470
24732471tick_interval () ->
24742472 application :get_env (rabbit , quorum_tick_interval , ? TICK_INTERVAL ).
2475-
2476- has_uuid_tracking (#{nodes := Nodes }) when is_map (Nodes ) ->
2477- true ;
2478- has_uuid_tracking (_QTypeState ) ->
2479- false .
0 commit comments