summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkjnilsson <knilsson@pivotal.io>2019-02-20 17:29:29 +0000
committerkjnilsson <knilsson@pivotal.io>2019-02-20 17:29:29 +0000
commit496986d10a27d52718a8b3273e896f98f456d2ad (patch)
tree12274d34960d4941c9d989115e02d52dda6c01dc /src
parent2856a2f921ac5b63a469689881f2da251d472ae2 (diff)
downloadrabbitmq-server-git-496986d10a27d52718a8b3273e896f98f456d2ad.tar.gz
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]
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_quorum_queue.erl16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/rabbit_quorum_queue.erl b/src/rabbit_quorum_queue.erl
index 08b4eaf5b3..5d28ef506a 100644
--- a/src/rabbit_quorum_queue.erl
+++ b/src/rabbit_quorum_queue.erl
@@ -760,23 +760,23 @@ shrink_all(Node) ->
amqqueue:get_type(Q) == quorum,
lists:member(Node, amqqueue:get_quorum_nodes(Q))].
--spec grow(node(), binary(), binary(),
- all | even) ->
+-spec grow(node(), binary(), binary(), all | even) ->
[{rabbit_amqqueue:name(),
{ok, pos_integer()} | {error, pos_integer(), term()}}].
grow(Node, VhostSpec, QueueSpec, Strategy) ->
- ConnectedNodes = [node() | nodes()],
+ Running = rabbit_mnesia:cluster_nodes(running),
[begin
+ Size = length(amqqueue:get_quorum_nodes(Q)),
QName = amqqueue:get_name(Q),
rabbit_log:info("~s: Adding member ~w",
[rabbit_misc:rs(QName), Node]),
- Size = length(amqqueue:get_quorum_nodes(Q)),
case add_member(Q, Node) of
ok ->
{QName, {ok, Size + 1}};
{error, Err} ->
- rabbit_log:warning("~s: Failed to add member ~w, Error ~w",
- [rabbit_misc:rs(QName), Node, Err]),
+ rabbit_log:warning(
+ "~s: Failed to add member ~w, Error ~w",
+ [rabbit_misc:rs(QName), Node, Err]),
{QName, {error, Size, Err}}
end
end
@@ -784,8 +784,8 @@ grow(Node, VhostSpec, QueueSpec, Strategy) ->
amqqueue:get_type(Q) == quorum,
%% don't add a member if there is already one on the node
not lists:member(Node, amqqueue:get_quorum_nodes(Q)),
- %% if the node isn't connected, best not to add it
- lists:member(Node, ConnectedNodes),
+ %% node needs to be running
+ lists:member(Node, Running),
matches_strategy(Strategy, amqqueue:get_quorum_nodes(Q)),
is_match(amqqueue:get_vhost(Q), VhostSpec) andalso
is_match(get_resource_name(amqqueue:get_name(Q)), QueueSpec) ].