@@ -274,13 +274,13 @@ start_cluster(Q) ->
274274 || Node <- [LeaderNode | FollowerNodes ]]),
275275 NewQ0 = amqqueue :set_pid (Q , LeaderId ),
276276 NewQ1 = case rabbit_feature_flags :is_enabled (track_qq_members_uids ) of
277- false ->
278- amqqueue :set_type_state (NewQ0 ,
279- #{nodes => [LeaderNode | FollowerNodes ]});
280- true ->
281- amqqueue :set_type_state (NewQ0 ,
282- #{nodes => UIDs })
283- end ,
277+ false ->
278+ amqqueue :set_type_state (NewQ0 ,
279+ #{nodes => [LeaderNode | FollowerNodes ]});
280+ true ->
281+ amqqueue :set_type_state (NewQ0 ,
282+ #{nodes => UIDs })
283+ end ,
284284
285285 Versions = [V || {ok , V } <- erpc :multicall (FollowerNodes ,
286286 rabbit_fifo , version , [],
@@ -734,16 +734,14 @@ repair_amqqueue_nodes(Q0) ->
734734 % % update amqqueue record
735735 Fun = fun (Q ) ->
736736 TS0 = amqqueue :get_type_state (Q ),
737- TS = case rabbit_feature_flags :is_enabled (track_qq_members_uids )
738- andalso has_uuid_tracking (TS0 )
739- of
737+ TS = case rabbit_feature_flags :is_enabled (track_qq_members_uids ) of
740738 false ->
741739 TS0 #{nodes => RaNodes };
742740 true ->
743741 RaUids = maps :from_list ([{N , erpc :call (N , ra_directory , uid_of ,
744- [? RA_SYSTEM , Name ],
745- ? RPC_TIMEOUT )}
746- || N <- RaNodes ]),
742+ [? RA_SYSTEM , Name ],
743+ ? RPC_TIMEOUT )}
744+ || N <- RaNodes ]),
747745 TS0 #{nodes => RaUids }
748746 end ,
749747 amqqueue :set_type_state (Q , TS )
@@ -804,28 +802,28 @@ maybe_apply_policies(Q, #{config := CurrentConfig}) ->
804802 {[amqqueue :amqqueue ()], [amqqueue :amqqueue ()]}.
805803recover (_Vhost , Queues ) ->
806804 lists :foldl (
807- fun (Q0 , {R0 , F0 }) ->
808- {Name , _ } = amqqueue :get_pid (Q0 ),
805+ fun (Q , {R0 , F0 }) ->
806+ {Name , _ } = amqqueue :get_pid (Q ),
809807 ServerId = {Name , node ()},
810- QName = amqqueue :get_name (Q0 ),
811- MutConf = make_mutable_config (Q0 ),
808+ QName = amqqueue :get_name (Q ),
809+ MutConf = make_mutable_config (Q ),
812810 RaUId = ra_directory :uid_of (? RA_SYSTEM , Name ),
813- #{nodes := Nodes } = QTypeState0 = amqqueue :get_type_state (Q0 ),
814- QTypeState = case Nodes of
811+ #{nodes := Nodes } = amqqueue :get_type_state (Q ),
812+ case Nodes of
815813 List when is_list (List ) ->
816814 % % Queue is not aware of node to uid mapping, do nothing
817- QTypeState0 ;
815+ ok ;
818816 #{node () := RaUId } ->
819- % % Queue is aware and uid for current node is correct, do nothing
820- QTypeState0 ;
821- _ ->
822- % % Queue is aware but either current node has no UId or it
823- % % does not match the one returned by ra_directory, regen uid
824- maybe_delete_data_dir (RaUId ),
825- NewRaUId = ra :new_uid (ra_lib :to_binary (Name )),
826- QTypeState0 #{nodes := Nodes #{node () => NewRaUId }}
817+ % % Queue is aware and uid for current node is correct, do
818+ % % nothing
819+ ok ;
820+ #{node () := _NewRaUId } ->
821+ % % Queue is aware but it does not match the one returned by
822+ % % ra_directory
823+ rabbit_log :info (" Quorum queue ~ts : detected node uuid change, "
824+ " deleting old data directory" , [rabbit_misc :rs (QName )]),
825+ maybe_delete_data_dir (RaUId )
827826 end ,
828- Q = amqqueue :set_type_state (Q0 , QTypeState ),
829827 Res = case ra :restart_server (? RA_SYSTEM , ServerId , MutConf ) of
830828 ok ->
831829 % queue was restarted, good
@@ -1430,16 +1428,16 @@ do_add_member(Q0, Node, Membership, Timeout)
14301428 QTypeState0 = #{nodes := Nodes } = amqqueue :get_type_state (Q0 ),
14311429 NewRaUId = ra :new_uid (ra_lib :to_binary (RaName )),
14321430 QTypeState = case Nodes of
1433- L when is_list (L ) ->
1434- % % Queue is not aware of node to uid mapping, just add the new node
1435- QTypeState0 #{nodes => lists :usort ([Node | Nodes ])};
1436- #{Node := _ } ->
1437- % % Queue is aware and uid for targeted node exists, do nothing
1438- QTypeState0 ;
1439- _ ->
1440- % % Queue is aware but current node has no UId, regen uid
1441- QTypeState0 #{nodes => Nodes #{Node => NewRaUId }}
1442- end ,
1431+ L when is_list (L ) ->
1432+ % % Queue is not aware of node to uid mapping, just add the new node
1433+ QTypeState0 #{nodes => lists :usort ([Node | Nodes ])};
1434+ #{Node := _ } ->
1435+ % % Queue is aware and uid for targeted node exists, do nothing
1436+ QTypeState0 ;
1437+ _ ->
1438+ % % Queue is aware but current node has no UId, regen uid
1439+ QTypeState0 #{nodes => Nodes #{Node => NewRaUId }}
1440+ end ,
14431441 Q = amqqueue :set_type_state (Q0 , QTypeState ),
14441442 MachineVersion = erpc_call (Node , rabbit_fifo , version , [], infinity ),
14451443 Conf = make_ra_conf (Q , ServerId , Membership , MachineVersion ),
@@ -2060,13 +2058,13 @@ make_ra_conf(Q, ServerId, TickTimeout,
20602058 [{ClusterName , _ } | _ ] = Members = members (Q ),
20612059 {_ , Node } = ServerId ,
20622060 UId = case amqqueue :get_type_state (Q ) of
2063- #{nodes := #{Node := Id }} ->
2064- Id ;
2065- _ ->
2066- % % Queue was declared on an older version of RabbitMQ
2067- % % and does not have the node to uid mappings
2068- ra :new_uid (ra_lib :to_binary (ClusterName ))
2069- end ,
2061+ #{nodes := #{Node := Id }} ->
2062+ Id ;
2063+ _ ->
2064+ % % Queue was declared on an older version of RabbitMQ
2065+ % % or does not have the node to uid mappings
2066+ ra :new_uid (ra_lib :to_binary (ClusterName ))
2067+ end ,
20702068 FName = rabbit_misc :rs (QName ),
20712069 Formatter = {? MODULE , format_ra_event , [QName ]},
20722070 LogCfg = #{uid => UId ,
@@ -2210,7 +2208,7 @@ force_checkpoint_on_queue(QName) ->
22102208 {ok , Q } when ? amqqueue_is_quorum (Q ) ->
22112209 {RaName , _ } = amqqueue :get_pid (Q ),
22122210 ? LOG_DEBUG (" Sending command to force ~ts to take a checkpoint" , [QNameFmt ]),
2213- Nodes = rabbit_amqqueue :get_nodes (Q ),
2211+ Nodes = rabbit_queue_type :get_nodes (Q ),
22142212 _ = [ra :cast_aux_command ({RaName , Node }, force_checkpoint )
22152213 || Node <- Nodes ],
22162214 ok ;
@@ -2480,8 +2478,3 @@ queue_vm_stats_sups() ->
24802478queue_vm_ets () ->
24812479 {[quorum_ets ],
24822480 [[ra_log_ets ]]}.
2483-
2484- has_uuid_tracking (#{nodes := Nodes }) when is_map (Nodes ) ->
2485- true ;
2486- has_uuid_tracking (_QTypeState ) ->
2487- false .
0 commit comments