diff options
author | Matthias Radestock <matthias@lshift.net> | 2008-10-12 11:35:34 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@lshift.net> | 2008-10-12 11:35:34 +0100 |
commit | 52ec4ead30b00e9de9b2b07e8d8e2308ef5d523d (patch) | |
tree | 0a6a2dae17d268a419c01170591daaa227cbc9d8 /src/rabbit_exchange.erl | |
parent | 5e00880eec710825d3a19ba54ab7d6e6057b3a61 (diff) | |
download | rabbitmq-server-52ec4ead30b00e9de9b2b07e8d8e2308ef5d523d.tar.gz |
inline delete_bindings/1
and also refactor indexed_delete to use a list comprehension instead
of lists:foreach and return 'ok'.
Diffstat (limited to 'src/rabbit_exchange.erl')
-rw-r--r-- | src/rabbit_exchange.erl | 52 |
1 files changed, 22 insertions, 30 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index 643b1bb4..bad0686e 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -222,38 +222,32 @@ lookup_qpids(Queues) -> %% refactored to its own module, especially seeing as unbind will have %% to be implemented for 0.91 ? -%% This uses the reverse routes as the primary index. -delete_bindings(Binding = #binding{exchange_name = X, - queue_name = QueueName}) - when QueueName /= '_' andalso X == '_' -> +delete_bindings_for_exchange(ExchangeName) -> + indexed_delete( + #route{binding = #binding{exchange_name = ExchangeName, + queue_name = '_', + key = '_'}}, + fun delete_forward_routes/1, fun mnesia:delete_object/1). + +delete_bindings_for_queue(QueueName) -> Exchanges = exchanges_for_queue(QueueName), - indexed_delete(reverse_route(#route{binding = Binding}), - fun mnesia:delete_object/1, fun delete_forward_routes/1), + indexed_delete( + reverse_route(#route{binding = #binding{exchange_name = '_', + queue_name = QueueName, + key = '_'}}), + fun mnesia:delete_object/1, fun delete_forward_routes/1), [begin - [Exchange] = mnesia:read({exchange, ExchangeName}), - ok = maybe_auto_delete(Exchange) + [X] = mnesia:read({exchange, ExchangeName}), + ok = maybe_auto_delete(X) end || ExchangeName <- Exchanges], - ok; - -%% This uses the forward routes as the primary index. -delete_bindings(Binding = #binding{exchange_name = ExchangeName, - queue_name = QueueName}) - when QueueName == '_' - andalso ExchangeName /= '_' -> - indexed_delete(#route{binding = Binding}, - fun delete_forward_routes/1, fun mnesia:delete_object/1). - -% Must be called in a transaction -delete_bindings_for_queue(QueueName) -> - delete_bindings(#binding{exchange_name = '_', - queue_name = QueueName, - key = '_'}). + ok. indexed_delete(Match, ForwardsDeleteFun, ReverseDeleteFun) -> - lists:foreach(fun(Route) -> - ok = ReverseDeleteFun(reverse_route(Route)), - ok = ForwardsDeleteFun(Route) - end, mnesia:match_object(Match)). + [begin + ok = ReverseDeleteFun(reverse_route(Route)), + ok = ForwardsDeleteFun(Route) + end || Route <- mnesia:match_object(Match)], + ok. delete_forward_routes(Route) -> ok = mnesia:delete_object(Route), @@ -412,9 +406,7 @@ conditional_delete(Exchange = #exchange{name = ExchangeName}) -> % This will unconditionally delete an exchange together with any route % that may have been bound to it unconditional_delete(#exchange{name = ExchangeName}) -> - delete_bindings(#binding{exchange_name = ExchangeName, - queue_name = '_', - key = '_'}), + ok = delete_bindings_for_exchange(ExchangeName), ok = mnesia:delete({durable_exchanges, ExchangeName}), ok = mnesia:delete({exchange, ExchangeName}). |