diff options
author | Emile Joubert <emile@rabbitmq.com> | 2013-04-16 17:36:34 +0100 |
---|---|---|
committer | Emile Joubert <emile@rabbitmq.com> | 2013-04-16 17:36:34 +0100 |
commit | 074fdf03ac7b9245d150cc03aa89c403001d8526 (patch) | |
tree | 6cbaaf3f7ccd5fe6ff67755f80e40b4fe2ff23cf | |
parent | 8089c02708b9e19725f9ed68b335c0d1cbeb1bca (diff) | |
download | rabbitmq-server-074fdf03ac7b9245d150cc03aa89c403001d8526.tar.gz |
Further modifications implementing feedback
-rw-r--r-- | src/rabbit_exchange.erl | 13 | ||||
-rw-r--r-- | src/rabbit_exchange_decorator.erl | 2 | ||||
-rw-r--r-- | src/rabbit_policy.erl | 5 |
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. |