Skip to content

Commit 496986d

Browse files
committed
Change rabbit_quorum_queue:grow/3
To filter non-running nodes instead of by connection as it should not be possible to add a quorum queue server running on an erlang node without RabbitMQ. [#162782801]
1 parent 2856a2f commit 496986d

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

src/rabbit_quorum_queue.erl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -760,32 +760,32 @@ shrink_all(Node) ->
760760
amqqueue:get_type(Q) == quorum,
761761
lists:member(Node, amqqueue:get_quorum_nodes(Q))].
762762

763-
-spec grow(node(), binary(), binary(),
764-
all | even) ->
763+
-spec grow(node(), binary(), binary(), all | even) ->
765764
[{rabbit_amqqueue:name(),
766765
{ok, pos_integer()} | {error, pos_integer(), term()}}].
767766
grow(Node, VhostSpec, QueueSpec, Strategy) ->
768-
ConnectedNodes = [node() | nodes()],
767+
Running = rabbit_mnesia:cluster_nodes(running),
769768
[begin
769+
Size = length(amqqueue:get_quorum_nodes(Q)),
770770
QName = amqqueue:get_name(Q),
771771
rabbit_log:info("~s: Adding member ~w",
772772
[rabbit_misc:rs(QName), Node]),
773-
Size = length(amqqueue:get_quorum_nodes(Q)),
774773
case add_member(Q, Node) of
775774
ok ->
776775
{QName, {ok, Size + 1}};
777776
{error, Err} ->
778-
rabbit_log:warning("~s: Failed to add member ~w, Error ~w",
779-
[rabbit_misc:rs(QName), Node, Err]),
777+
rabbit_log:warning(
778+
"~s: Failed to add member ~w, Error ~w",
779+
[rabbit_misc:rs(QName), Node, Err]),
780780
{QName, {error, Size, Err}}
781781
end
782782
end
783783
|| Q <- rabbit_amqqueue:list(),
784784
amqqueue:get_type(Q) == quorum,
785785
%% don't add a member if there is already one on the node
786786
not lists:member(Node, amqqueue:get_quorum_nodes(Q)),
787-
%% if the node isn't connected, best not to add it
788-
lists:member(Node, ConnectedNodes),
787+
%% node needs to be running
788+
lists:member(Node, Running),
789789
matches_strategy(Strategy, amqqueue:get_quorum_nodes(Q)),
790790
is_match(amqqueue:get_vhost(Q), VhostSpec) andalso
791791
is_match(get_resource_name(amqqueue:get_name(Q)), QueueSpec) ].

test/rabbitmq_queues_cli_integration_SUITE.erl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ groups() ->
3030
[
3131
{tests, [], [
3232
shrink,
33-
grow
33+
grow,
34+
grow_invalid_node_filtered
3435
]}
3536
].
3637

@@ -99,6 +100,19 @@ grow(Config) ->
99100
?assertNotMatch(#{{"/", "grow1"} := _}, parse_result(Out3)),
100101
ok.
101102

103+
grow_invalid_node_filtered(Config) ->
104+
NodeConfig = rabbit_ct_broker_helpers:get_node_config(Config, 2),
105+
Nodename2 = ?config(nodename, NodeConfig),
106+
Ch = rabbit_ct_client_helpers:open_channel(Config, Nodename2),
107+
%% declare a quorum queue
108+
QName = "grow-err",
109+
Args = [{<<"x-quorum-initial-group-size">>, long, 1}],
110+
#'queue.declare_ok'{} = declare_qq(Ch, QName, Args),
111+
DummyNode = not_really_a_node@nothing,
112+
{ok, Out1} = rabbitmq_queues(Config, 0, ["grow", DummyNode, "all"]),
113+
?assertNotMatch(#{{"/", "grow-err"} := _}, parse_result(Out1)),
114+
ok.
115+
102116
parse_result(S) ->
103117
Lines = string:split(S, "\n", all),
104118
maps:from_list(

0 commit comments

Comments
 (0)