@@ -417,12 +417,34 @@ identity_info(Endpoint) ->
417417 }]
418418 }.
419419
420- has_leader_running_locally (Q ) when is_pid (Q ) ->
421- node (Q ) =:= node () andalso is_process_alive (Q );
422- has_leader_running_locally ({Name , Node }) when Node =:= node () ->
423- is_process_alive (whereis (Name ));
424- has_leader_running_locally (_ ) ->
425- false .
420+ membership (Pid , Members ) when is_pid (Pid ) ->
421+ case node (Pid ) =:= node () of
422+ true ->
423+ case is_process_alive (Pid ) of
424+ true -> leader ;
425+ false -> undefined
426+ end ;
427+ false ->
428+ case lists :member (node (), Members ) of
429+ true -> follower ;
430+ false -> not_a_member
431+ end
432+ end ;
433+ membership ({Name , Node }, Members ) ->
434+ case Node =:= node () of
435+ true ->
436+ case is_process_alive (whereis (Name )) of
437+ true -> leader ;
438+ false -> undefined
439+ end ;
440+ false ->
441+ case lists :member (node (), Members ) of
442+ true -> follower ;
443+ false -> not_a_member
444+ end
445+ end ;
446+ membership (_ , _Members ) ->
447+ undefined .
426448
427449emit_queue_info (Prefix , VHostsFilter , Callback ) ->
428450 Help = <<" A metric with a constant '1' value and labels that provide some queue details" >>,
@@ -434,20 +456,18 @@ emit_queue_info(Prefix, VHostsFilter, Callback) ->
434456 false ->
435457 Type = amqqueue :get_type (Q ),
436458 TypeState = amqqueue :get_type_state (Q ),
437- QInfo0 = [{vhost , VHost }, {queue , Name }, {queue_type , Type }],
438459 Members = maps :get (nodes , TypeState , []),
439- case {has_leader_running_locally (amqqueue :get_pid (Q )),
440- lists :member (node (), Members )} of
441- {true , _ } ->
442- QInfo = [{membership , leader } | QInfo0 ],
443- [{QInfo , 1 }|Acc ];
444- {false , true } ->
445- % % replicated queue with a non-leader member on this node
446- QInfo = [{membership , follower } | QInfo0 ],
447- [{QInfo , 1 }|Acc ];
448- _ ->
449- % % ignore queues with no local members
450- Acc
460+ case membership (amqqueue :get_pid (Q ), Members ) of
461+ not_a_member ->
462+ Acc ;
463+ Membership ->
464+ QInfo = [
465+ {vhost , VHost },
466+ {queue , Name },
467+ {queue_type , Type },
468+ {membership , Membership }
469+ ],
470+ [{QInfo , 1 }|Acc ]
451471 end
452472 end
453473 end , [], rabbit_amqqueue :list ()),
0 commit comments