summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2010-07-08 14:02:17 +0100
committerSimon MacMullen <simon@rabbitmq.com>2010-07-08 14:02:17 +0100
commit41a389624bade9bde94d7ebc16acaf646591b7b1 (patch)
treebdcc8f3a741d76cbf37fc51cd2e6c27327936767
parent361fad7a766541dc607a49b5730be6a01c4bcd00 (diff)
downloadrabbitmq-server-41a389624bade9bde94d7ebc16acaf646591b7b1.tar.gz
Make add and delete more symmetrical, tidy up a bit.
-rw-r--r--src/rabbit_exchange.erl28
1 files changed, 15 insertions, 13 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index bfe31c13..ab06045c 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -428,25 +428,25 @@ add_binding(ExchangeName, QueueName, RoutingKey, Arguments, InnerFun) ->
%% in general, we want to fail on that in preference to
%% anything else
case InnerFun(X, Q) of
- {error, _} = E -> E;
- _ ->
+ ok ->
case mnesia:read({rabbit_route, B}) of
[] ->
- sync_binding(B,
- X#exchange.durable andalso
- Q#amqqueue.durable,
- fun mnesia:write/3),
+ ok = sync_binding(B,
+ X#exchange.durable andalso
+ Q#amqqueue.durable,
+ fun mnesia:write/3),
{new, X, B};
[_R] ->
{existing, X, B}
- end
+ end;
+ {error, _} = E -> E
end
end) of
{new, Exchange = #exchange{ type = Type }, Binding} ->
(type_to_module(Type)):add_binding(Exchange, Binding);
{existing, _, _} ->
ok;
- Err = {error, _} ->
+ {error, _} = Err ->
Err
end.
@@ -459,16 +459,18 @@ delete_binding(ExchangeName, QueueName, RoutingKey, Arguments, InnerFun) ->
[] -> {error, binding_not_found};
_ ->
case InnerFun(X, Q) of
- {error, _} = E -> E;
- _ ->
+ ok ->
ok =
- sync_binding(B, Q#amqqueue.durable,
+ sync_binding(B,
+ X#exchange.durable andalso
+ Q#amqqueue.durable,
fun mnesia:delete_object/3),
- {maybe_auto_delete(X), B}
+ {maybe_auto_delete(X), B};
+ {error, _} = E -> E
end
end
end) of
- Err = {error, _} ->
+ {error, _} = Err ->
Err;
{{IsDeleted, X = #exchange{ type = Type }}, B} ->
Module = type_to_module(Type),