diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-08-15 17:14:39 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-08-15 17:14:39 +0100 |
commit | 2dab458c133edfbffdf4ea8f2146db79964078d7 (patch) | |
tree | db02a0d12bac619e6f896aad3a99864eed9ba15c /src/rabbit_amqqueue.erl | |
parent | af6eec80bb59b86e644c93f36ac0aa51463d1567 (diff) | |
download | rabbitmq-server-2dab458c133edfbffdf4ea8f2146db79964078d7.tar.gz |
Two modes for delete, one for when the server is running and we need to be quick going via the reverse route, and another when it is down and we need to clean up durable routes. Not entirely happy with the elegance of this but it gets the tests to pass.bug26347
Diffstat (limited to 'src/rabbit_amqqueue.erl')
-rw-r--r-- | src/rabbit_amqqueue.erl | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 1aba7ecb..e45e026e 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -612,7 +612,7 @@ notify_sent_queue_down(QPid) -> resume(QPid, ChPid) -> delegate:cast(QPid, {resume, ChPid}). -internal_delete1(QueueName) -> +internal_delete1(QueueName, OnlyDurable) -> ok = mnesia:delete({rabbit_queue, QueueName}), %% this 'guarded' delete prevents unnecessary writes to the mnesia %% disk log @@ -622,7 +622,7 @@ internal_delete1(QueueName) -> end, %% we want to execute some things, as decided by rabbit_exchange, %% after the transaction. - rabbit_binding:remove_for_destination(QueueName). + rabbit_binding:remove_for_destination(QueueName, OnlyDurable). internal_delete(QueueName) -> rabbit_misc:execute_mnesia_tx_with_tail( @@ -632,7 +632,7 @@ internal_delete(QueueName) -> {[], []} -> rabbit_misc:const({error, not_found}); _ -> - Deletions = internal_delete1(QueueName), + Deletions = internal_delete1(QueueName, false), T = rabbit_binding:process_deletions(Deletions), fun() -> ok = T(), @@ -651,7 +651,7 @@ forget_all_durable(Node) -> Qs = mnesia:match_object(rabbit_durable_queue, #amqqueue{_ = '_'}, write), [rabbit_binding:process_deletions( - internal_delete1(Name)) || + internal_delete1(Name, true)) || #amqqueue{name = Name, pid = Pid} = Q <- Qs, node(Pid) =:= Node, rabbit_policy:get(<<"ha-mode">>, Q) =:= undefined], |