Skip to content

Commit 4d4985f

Browse files
committed
rabbit_peer_discovery: Fix non-tail-recursive query_node_props2()
[Why] This impacts what is reported by the catch because it caught exceptions emitted by code supposedly called later. An example is the assert in `query_node_props2/3` last clause.
1 parent 62f22a7 commit 4d4985f

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

deps/rabbit/src/rabbit_peer_discovery.erl

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -596,30 +596,34 @@ query_node_props1([], [], NodesAndProps, ThisNode) ->
596596
query_node_props2(NodesAndProps1, [], ThisNode).
597597

598598
query_node_props2([{Node, Members} | Rest], NodesAndProps, ThisNode) ->
599-
try
600-
erpc:call(
601-
Node, logger, debug,
602-
["Peer discovery: temporary hidden node '~ts' queries properties "
603-
"from node '~ts'", [node(), Node]]),
604-
StartTime = get_node_start_time(Node, microsecond),
605-
IsReady = is_node_db_ready(Node, ThisNode),
606-
NodeAndProps = {Node, Members, StartTime, IsReady},
607-
NodesAndProps1 = [NodeAndProps | NodesAndProps],
608-
query_node_props2(Rest, NodesAndProps1, ThisNode)
609-
catch
610-
_:Error:_ ->
611-
%% If one of the erpc calls we use to get the start time fails,
612-
%% there is something wrong with the remote node because it
613-
%% doesn't depend on RabbitMQ. We exclude it from the discovered
614-
%% nodes.
615-
?LOG_DEBUG(
616-
"Peer discovery: failed to query start time of node '~ts': "
617-
"~0tp~n"
618-
"Peer discovery: node '~ts' excluded from the discovered nodes",
619-
[Node, Error, Node],
620-
#{domain => ?RMQLOG_DOMAIN_PEER_DISC}),
621-
query_node_props2(Rest, NodesAndProps, ThisNode)
622-
end;
599+
NodesAndProps2 = try
600+
erpc:call(
601+
Node, logger, debug,
602+
["Peer discovery: temporary hidden node '~ts' "
603+
"queries properties from node '~ts'",
604+
[node(), Node]]),
605+
StartTime = get_node_start_time(Node, microsecond),
606+
IsReady = is_node_db_ready(Node, ThisNode),
607+
NodeAndProps = {Node, Members, StartTime, IsReady},
608+
NodesAndProps1 = [NodeAndProps | NodesAndProps],
609+
NodesAndProps1
610+
catch
611+
_:Error:_ ->
612+
%% If one of the erpc calls we use to get the
613+
%% start time fails, there is something wrong with
614+
%% the remote node because it doesn't depend on
615+
%% RabbitMQ. We exclude it from the discovered
616+
%% nodes.
617+
?LOG_DEBUG(
618+
"Peer discovery: failed to query start time "
619+
"+ DB readyness of node '~ts': ~0tp~n"
620+
"Peer discovery: node '~ts' excluded from the "
621+
"discovered nodes",
622+
[Node, Error, Node],
623+
#{domain => ?RMQLOG_DOMAIN_PEER_DISC}),
624+
NodesAndProps
625+
end,
626+
query_node_props2(Rest, NodesAndProps2, ThisNode);
623627
query_node_props2([], NodesAndProps, _ThisNode) ->
624628
NodesAndProps1 = lists:reverse(NodesAndProps),
625629
NodesAndProps2 = sort_nodes_and_props(NodesAndProps1),

0 commit comments

Comments
 (0)