summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-11-12 15:58:40 +0000
committerSimon MacMullen <simon@rabbitmq.com>2014-11-12 15:58:40 +0000
commitabb89db322e5a11102722ded765bf00ae268f6a9 (patch)
tree7bfd3e2ec61a7dd2c7d737431d15ee3ba73648a1
parent8b6540a31d4130f1b05e2aa346c0a3e68e174757 (diff)
downloadrabbitmq-server-bug26468.tar.gz
Fix forgetting queue when deleting offline.bug26468
-rw-r--r--src/rabbit_amqqueue.erl6
-rw-r--r--src/rabbit_binding.erl5
2 files changed, 8 insertions, 3 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 68e96742..2e5a5e8c 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -726,8 +726,10 @@ forget_all_durable(Node) ->
forget_node_for_queue(#amqqueue{name = Name,
down_slave_nodes = []}) ->
- %% No slaves to recover from, queue is gone
- rabbit_binding:process_deletions(internal_delete1(Name, true));
+ %% No slaves to recover from, queue is gone.
+ %% Don't process_deletions since that just calls callbacks and we
+ %% are not really up.
+ internal_delete1(Name, true);
forget_node_for_queue(Q = #amqqueue{down_slave_nodes = [H|T]}) ->
%% Promote a slave while down - it'll happily recover as a master
diff --git a/src/rabbit_binding.erl b/src/rabbit_binding.erl
index 12d4df99..53af2f20 100644
--- a/src/rabbit_binding.erl
+++ b/src/rabbit_binding.erl
@@ -469,7 +469,10 @@ group_bindings_fold(Fun, SrcName, Acc, Removed, Bindings, OnlyDurable) ->
maybe_auto_delete(XName, Bindings, Deletions, OnlyDurable) ->
{Entry, Deletions1} =
- case mnesia:read({rabbit_exchange, XName}) of
+ case mnesia:read({case OnlyDurable of
+ true -> rabbit_durable_exchange;
+ false -> rabbit_exchange
+ end, XName}) of
[] -> {{undefined, not_deleted, Bindings}, Deletions};
[X] -> case rabbit_exchange:maybe_auto_delete(X, OnlyDurable) of
not_deleted ->