Skip to content

Commit 55411e6

Browse files
Peer discovery cleanup: be more defensive
See discussion #12807 for details. rabbit_peer_discovery:normalize/1 can be changed to only return lists of nodes but then there is a number of core code paths that treat a single node as a special "preselected" value. So let's keep that part and convert both sets of nodes to lists before computing the difference.
1 parent 60b074a commit 55411e6

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

deps/rabbitmq_peer_discovery_common/src/rabbit_peer_discovery_cleanup.erl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ maybe_cleanup(State, UnreachableNodes) ->
241241
"Peer discovery: cleanup discovered unreachable nodes: ~tp",
242242
[UnreachableNodes],
243243
#{domain => ?RMQLOG_DOMAIN_PEER_DIS}),
244-
case lists:subtract(UnreachableNodes, service_discovery_nodes()) of
244+
case lists:subtract(as_list(UnreachableNodes), as_list(service_discovery_nodes())) of
245245
[] ->
246246
?LOG_DEBUG(
247247
"Peer discovery: all unreachable nodes are still "
@@ -304,7 +304,8 @@ unreachable_nodes() ->
304304
service_discovery_nodes() ->
305305
Module = rabbit_peer_discovery:backend(),
306306
case rabbit_peer_discovery:normalize(Module:list_nodes()) of
307-
{ok, {Nodes, _Type}} ->
307+
{ok, {OneOrMultipleNodes, _Type}} ->
308+
Nodes = as_list(OneOrMultipleNodes),
308309
?LOG_DEBUG(
309310
"Peer discovery cleanup: ~tp returned ~tp",
310311
[Module, Nodes],
@@ -317,3 +318,9 @@ service_discovery_nodes() ->
317318
#{domain => ?RMQLOG_DOMAIN_PEER_DIS}),
318319
[]
319320
end.
321+
322+
-spec as_list(list() | any()) -> [any()].
323+
as_list(Nodes) when is_list(Nodes) ->
324+
Nodes;
325+
as_list(Other) ->
326+
[Other].

0 commit comments

Comments
 (0)