diff options
author | Matthias Radestock <matthias@lshift.net> | 2008-10-12 11:24:45 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@lshift.net> | 2008-10-12 11:24:45 +0100 |
commit | 5e00880eec710825d3a19ba54ab7d6e6057b3a61 (patch) | |
tree | 152e891d4ab18527a8f59c3e9e6c9b97796497c8 | |
parent | 0fd00174c5353998cad2484a12896d2d17c7599c (diff) | |
download | rabbitmq-server-5e00880eec710825d3a19ba54ab7d6e6057b3a61.tar.gz |
rejig call_with_exchange
We don't really need two flavours of call_with_exchange.
In delete_bindings/1 we can assume the exchange exists - this code is
called as part of queue deletion and we don't care about exchanges
that have gone missing.
Also, it is sufficient to use an ordinary read rather than wread.
-rw-r--r-- | src/rabbit_exchange.erl | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index c8b0ff6d..643b1bb4 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -229,10 +229,11 @@ delete_bindings(Binding = #binding{exchange_name = X, Exchanges = exchanges_for_queue(QueueName), indexed_delete(reverse_route(#route{binding = Binding}), fun mnesia:delete_object/1, fun delete_forward_routes/1), - lists:foreach( - fun(ExchangeName) -> - call_with_exchange(ExchangeName, fun maybe_auto_delete/1) - end, Exchanges); + [begin + [Exchange] = mnesia:read({exchange, ExchangeName}), + ok = maybe_auto_delete(Exchange) + end || ExchangeName <- Exchanges], + ok; %% This uses the forward routes as the primary index. delete_bindings(Binding = #binding{exchange_name = ExchangeName, @@ -280,19 +281,17 @@ continue(_) -> true. call_with_exchange(Exchange, Fun) -> - case mnesia:wread({exchange, Exchange}) of - [] -> {error, exchange_not_found}; - [X] -> Fun(X) - end. - -call_with_exchange_in_tx(Exchange, Fun) -> rabbit_misc:execute_mnesia_transaction( - fun() -> call_with_exchange(Exchange, Fun) end). + fun() -> case mnesia:read({exchange, Exchange}) of + [] -> {error, exchange_not_found}; + [X] -> Fun(X) + end + end). call_with_exchange_and_queue(Exchange, Queue, Fun) -> - call_with_exchange_in_tx(Exchange, + call_with_exchange(Exchange, fun(X) -> - case mnesia:wread({amqqueue, Queue}) of + case mnesia:read({amqqueue, Queue}) of [] -> {error, queue_not_found}; [Q] -> Fun(X, Q) end @@ -390,9 +389,9 @@ last_topic_match(P, R, [BacktrackNext | BacktrackList]) -> % These functions deal with removing exchanges and any bindings attached to % them depending on whether if-unused flag is set. delete(ExchangeName, _IfUnused = true) -> - call_with_exchange_in_tx(ExchangeName, fun conditional_delete/1); + call_with_exchange(ExchangeName, fun conditional_delete/1); delete(ExchangeName, _IfUnused = false) -> - call_with_exchange_in_tx(ExchangeName, fun unconditional_delete/1). + call_with_exchange(ExchangeName, fun unconditional_delete/1). %---------------------------------------------------------------------------- % The following functions must run within a transaction and assume that the |