summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2013-04-16 17:36:34 +0100
committerEmile Joubert <emile@rabbitmq.com>2013-04-16 17:36:34 +0100
commit074fdf03ac7b9245d150cc03aa89c403001d8526 (patch)
tree6cbaaf3f7ccd5fe6ff67755f80e40b4fe2ff23cf
parent8089c02708b9e19725f9ed68b335c0d1cbeb1bca (diff)
downloadrabbitmq-server-074fdf03ac7b9245d150cc03aa89c403001d8526.tar.gz
Further modifications implementing feedback
-rw-r--r--src/rabbit_exchange.erl13
-rw-r--r--src/rabbit_exchange_decorator.erl2
-rw-r--r--src/rabbit_policy.erl5
3 files changed, 12 insertions, 8 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl
index 891caea2..a1759c08 100644
--- a/src/rabbit_exchange.erl
+++ b/src/rabbit_exchange.erl
@@ -68,7 +68,10 @@
-spec(update_scratch/3 :: (name(), atom(), fun((any()) -> any())) -> 'ok').
-spec(update/2 ::
(name(),
- fun((rabbit_types:exchange()) -> rabbit_types:exchange())) -> 'ok').
+ fun((rabbit_types:exchange()) -> rabbit_types:exchange()))
+ -> {exchange_not_found, rabbit_exchange:name()} |
+ {exchange_not_durable, rabbit_exchange:name()} |
+ rabbit_types:exchange()).
-spec(info_keys/0 :: () -> rabbit_types:info_keys()).
-spec(info/1 :: (rabbit_types:exchange()) -> rabbit_types:infos()).
-spec(info/2 ::
@@ -139,8 +142,8 @@ policy_changed(X = #exchange{type = XType,
X1 = #exchange{decorators = Decorators1}) ->
D = rabbit_exchange_decorator:select(all, Decorators),
D1 = rabbit_exchange_decorator:select(all, Decorators1),
- Diff = (D -- D1) ++ (D1 -- D),
- [ok = M:policy_changed(X, X1) || M <- [type_to_module(XType) | Diff]],
+ DAll = lists:usort(D ++ D1),
+ [ok = M:policy_changed(X, X1) || M <- [type_to_module(XType) | DAll]],
ok.
serialise_events(X = #exchange{type = Type, decorators = Decorators}) ->
@@ -288,11 +291,11 @@ update(Name, Fun) ->
ok = mnesia:write(rabbit_exchange, X1, write),
case Durable of
true -> ok = mnesia:write(rabbit_durable_exchange, X1, write);
- _ -> ok
+ _ -> {exchange_not_durable, Name}
end,
X1;
[] ->
- ok
+ {exchange_not_found, Name}
end.
info_keys() -> ?INFO_KEYS.
diff --git a/src/rabbit_exchange_decorator.erl b/src/rabbit_exchange_decorator.erl
index 19cbf92f..79ea212f 100644
--- a/src/rabbit_exchange_decorator.erl
+++ b/src/rabbit_exchange_decorator.erl
@@ -63,7 +63,7 @@
%% Allows additional destinations to be added to the routing decision.
-callback route(rabbit_types:exchange(), rabbit_types:delivery()) ->
- [rabbit_amqqueue:name() | rabbit_exchange:name()] | ok.
+ [rabbit_amqqueue:name() | rabbit_exchange:name()].
%% Whether the decorator wishes to receive callbacks for the exchange
%% none:no callbacks, noroute:all callbacks except route, all:all callbacks
diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl
index ae8d21b5..184e1c33 100644
--- a/src/rabbit_policy.erl
+++ b/src/rabbit_policy.erl
@@ -176,8 +176,9 @@ update_exchange(X = #exchange{name = XName, policy = OldPolicy}, Policies) ->
rabbit_exchange_decorator:set(
X0 #exchange{policy = NewPolicy})
end) of
- #exchange{} = X1 -> {X, X1};
- ok -> {X, X }
+ #exchange{} = X1 -> {X, X1};
+ {exchange_not_found, _} -> {X, X };
+ {exchange_not_durable, _} -> {X, X }
end
end.