summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Corbacho <diana@rabbitmq.com>2019-01-08 16:12:40 +0000
committerDiana Corbacho <diana@rabbitmq.com>2019-01-08 16:12:40 +0000
commit6b508336f41b8ec8589165599475b14a80e37482 (patch)
tree6d593fb9184cc506c54f2c021fa84bbd1e1574e3
parent897e7f6a1bdbcf16a4bef37d50ecfa5f5e6ba7bc (diff)
downloadrabbitmq-server-git-6b508336f41b8ec8589165599475b14a80e37482.tar.gz
Consider quorum queues in forget_cluster_node
If there are other members available, quorum queues shouldn't be deleted
-rw-r--r--src/rabbit_amqqueue.erl14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index d938bece8c..7dc343125e 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -1279,6 +1279,9 @@ forget_all_durable(Node) ->
%% Try to promote a slave while down - it should recover as a
%% master. We try to take the oldest slave here for best chance of
%% recovery.
+forget_node_for_queue(DeadNode, Q = #amqqueue{type = quorum,
+ quorum_nodes = QN}) ->
+ forget_node_for_queue(DeadNode, QN, Q);
forget_node_for_queue(DeadNode, Q = #amqqueue{recoverable_slaves = RS}) ->
forget_node_for_queue(DeadNode, RS, Q).
@@ -1292,11 +1295,12 @@ forget_node_for_queue(_DeadNode, [], #amqqueue{name = Name}) ->
forget_node_for_queue(DeadNode, [DeadNode | T], Q) ->
forget_node_for_queue(DeadNode, T, Q);
-forget_node_for_queue(DeadNode, [H|T], Q) ->
- case node_permits_offline_promotion(H) of
- false -> forget_node_for_queue(DeadNode, T, Q);
- true -> Q1 = Q#amqqueue{pid = rabbit_misc:node_to_fake_pid(H)},
- ok = mnesia:write(rabbit_durable_queue, Q1, write)
+forget_node_for_queue(DeadNode, [H|T], #amqqueue{type = Type} = Q) ->
+ case {node_permits_offline_promotion(H), Type} of
+ {false, _} -> forget_node_for_queue(DeadNode, T, Q);
+ {true, classic} -> Q1 = Q#amqqueue{pid = rabbit_misc:node_to_fake_pid(H)},
+ ok = mnesia:write(rabbit_durable_queue, Q1, write);
+ {true, quorum} -> ok
end.
node_permits_offline_promotion(Node) ->