Skip to content

Commit 167934e

Browse files
committed
rabbit_peer_discovery: Don't use temporary hidden to query local node
1 parent ef51251 commit 167934e

File tree

1 file changed

+25
-24
lines changed

1 file changed

+25
-24
lines changed

deps/rabbit/src/rabbit_peer_discovery.erl

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
normalize/1,
2727
append_node_prefix/1,
2828
node_prefix/0]).
29-
-export([do_query_node_props/2]).
29+
-export([do_query_node_props/1]).
3030

3131
-ifdef(TEST).
3232
-export([query_node_props/1,
@@ -444,7 +444,12 @@ query_node_props(Nodes) when Nodes =/= [] ->
444444
[Peer],
445445
#{domain => ?RMQLOG_DOMAIN_PEER_DISC}),
446446
try
447-
peer:call(Pid, ?MODULE, do_query_node_props, [Nodes, ThisNode], 180000)
447+
NodesAndProps1 = (
448+
do_query_node_props([ThisNode]) ++
449+
peer:call(
450+
Pid, ?MODULE, do_query_node_props, [Nodes], 180000)),
451+
NodesAndProps2 = sort_nodes_and_props(NodesAndProps1),
452+
NodesAndProps2
448453
after
449454
peer:stop(Pid)
450455
end;
@@ -567,25 +572,23 @@ maybe_add_tls_arguments(VMArgs) ->
567572
end,
568573
VMArgs2.
569574

570-
do_query_node_props(Nodes, ThisNode) when Nodes =/= [] ->
575+
do_query_node_props(Nodes) when Nodes =/= [] ->
571576
%% Make sure all log messages are forwarded from this temporary hidden
572577
%% node to the upstream node, regardless of their level.
573578
_ = logger:set_primary_config(level, debug),
574579

575580
%% TODO: Replace with `rabbit_nodes:list_members/0' when the oldest
576581
%% supported version has it.
577582
MembersPerNode = erpc:multicall(Nodes, rabbit_nodes, all, []),
578-
query_node_props1(Nodes, MembersPerNode, [], ThisNode).
583+
query_node_props1(Nodes, MembersPerNode, []).
579584

580585
query_node_props1(
581-
[Node | Nodes], [{ok, Members} | MembersPerNode], NodesAndProps,
582-
ThisNode) ->
586+
[Node | Nodes], [{ok, Members} | MembersPerNode], NodesAndProps) ->
583587
NodeAndProps = {Node, Members},
584588
NodesAndProps1 = [NodeAndProps | NodesAndProps],
585-
query_node_props1(Nodes, MembersPerNode, NodesAndProps1, ThisNode);
589+
query_node_props1(Nodes, MembersPerNode, NodesAndProps1);
586590
query_node_props1(
587-
[Node | Nodes], [{error, _} = Error | MembersPerNode], NodesAndProps,
588-
ThisNode) ->
591+
[Node | Nodes], [{error, _} = Error | MembersPerNode], NodesAndProps) ->
589592
%% We consider that an error means the remote node is unreachable or not
590593
%% ready. Therefore, we exclude it from the list of discovered nodes as we
591594
%% won't be able to join it anyway.
@@ -594,22 +597,22 @@ query_node_props1(
594597
"Peer discovery: node '~ts' excluded from the discovered nodes",
595598
[Node, Error, Node],
596599
#{domain => ?RMQLOG_DOMAIN_PEER_DISC}),
597-
query_node_props1(Nodes, MembersPerNode, NodesAndProps, ThisNode);
598-
query_node_props1([], [], NodesAndProps, ThisNode) ->
600+
query_node_props1(Nodes, MembersPerNode, NodesAndProps);
601+
query_node_props1([], [], NodesAndProps) ->
599602
NodesAndProps1 = lists:reverse(NodesAndProps),
600-
query_node_props2(NodesAndProps1, [], ThisNode).
603+
query_node_props2(NodesAndProps1, []).
601604

602-
query_node_props2([{Node, Members} | Rest], NodesAndProps, ThisNode) ->
605+
query_node_props2([{Node, Members} | Rest], NodesAndProps) ->
603606
try
604607
erpc:call(
605608
Node, logger, debug,
606609
["Peer discovery: temporary hidden node '~ts' queries properties "
607610
"from node '~ts'", [node(), Node]]),
608611
StartTime = get_node_start_time(Node, microsecond),
609-
IsReady = is_node_db_ready(Node, ThisNode),
612+
IsReady = is_node_db_ready(Node),
610613
NodeAndProps = {Node, Members, StartTime, IsReady},
611614
NodesAndProps1 = [NodeAndProps | NodesAndProps],
612-
query_node_props2(Rest, NodesAndProps1, ThisNode)
615+
query_node_props2(Rest, NodesAndProps1)
613616
catch
614617
_:Error:_ ->
615618
%% If one of the erpc calls we use to get the start time fails,
@@ -622,14 +625,13 @@ query_node_props2([{Node, Members} | Rest], NodesAndProps, ThisNode) ->
622625
"Peer discovery: node '~ts' excluded from the discovered nodes",
623626
[Node, Error, Node],
624627
#{domain => ?RMQLOG_DOMAIN_PEER_DISC}),
625-
query_node_props2(Rest, NodesAndProps, ThisNode)
628+
query_node_props2(Rest, NodesAndProps)
626629
end;
627-
query_node_props2([], NodesAndProps, _ThisNode) ->
630+
query_node_props2([], NodesAndProps) ->
628631
NodesAndProps1 = lists:reverse(NodesAndProps),
629-
NodesAndProps2 = sort_nodes_and_props(NodesAndProps1),
630632
?assertEqual([], nodes()),
631-
?assert(length(NodesAndProps2) =< length(nodes(hidden))),
632-
NodesAndProps2.
633+
?assert(length(NodesAndProps1) =< length(nodes(hidden))),
634+
NodesAndProps1.
633635

634636
-spec get_node_start_time(Node, Unit) -> StartTime when
635637
Node :: node(),
@@ -662,21 +664,20 @@ get_node_start_time(Node, Unit) ->
662664
[SystemStartTime, native, Unit]),
663665
StartTime.
664666

665-
-spec is_node_db_ready(Node, ThisNode) -> IsReady when
667+
-spec is_node_db_ready(Node) -> IsReady when
666668
Node :: node(),
667-
ThisNode :: node(),
668669
IsReady :: boolean() | undefined.
669670
%% @doc Returns if the node's DB layer is ready or not.
670671
%%
671672
%% @private
672673

673-
is_node_db_ready(ThisNode, ThisNode) ->
674+
is_node_db_ready(Node) when Node =:= node() ->
674675
%% The current node is running peer discovery, thus way before we mark the
675676
%% DB layer as ready. Consider it ready in this case, otherwise if the
676677
%% current node is selected, it will loop forever waiting for itself to be
677678
%% ready.
678679
true;
679-
is_node_db_ready(Node, _ThisNode) ->
680+
is_node_db_ready(Node) ->
680681
try
681682
erpc:call(Node, rabbit_db, is_init_finished, [])
682683
catch

0 commit comments

Comments
 (0)