summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@lshift.net>2008-10-12 11:24:45 +0100
committerMatthias Radestock <matthias@lshift.net>2008-10-12 11:24:45 +0100
commit5e00880eec710825d3a19ba54ab7d6e6057b3a61 (patch)
tree152e891d4ab18527a8f59c3e9e6c9b97796497c8
parent0fd00174c5353998cad2484a12896d2d17c7599c (diff)
downloadrabbitmq-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.erl29
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