diff options
author | Emile Joubert <emile@rabbitmq.com> | 2013-04-16 11:59:44 +0100 |
---|---|---|
committer | Emile Joubert <emile@rabbitmq.com> | 2013-04-16 11:59:44 +0100 |
commit | 8089c02708b9e19725f9ed68b335c0d1cbeb1bca (patch) | |
tree | 05105ffa0f7728cc863642ba4c869c41d9df881c | |
parent | e4cfae04a643a3a960dbd53272649c32cd2b13cb (diff) | |
download | rabbitmq-server-8089c02708b9e19725f9ed68b335c0d1cbeb1bca.tar.gz |
Updates
-rw-r--r-- | src/rabbit_exchange.erl | 18 | ||||
-rw-r--r-- | src/rabbit_policy.erl | 14 |
2 files changed, 19 insertions, 13 deletions
diff --git a/src/rabbit_exchange.erl b/src/rabbit_exchange.erl index e7847673..891caea2 100644 --- a/src/rabbit_exchange.erl +++ b/src/rabbit_exchange.erl @@ -134,11 +134,13 @@ callback(X = #exchange{type = XType, Module = type_to_module(XType), apply(Module, Fun, [Serial(Module:serialise_events()) | Args]). -policy_changed(X = #exchange{type = XType, - decorators = Decorators}, X1) -> - [ok = M:policy_changed(X, X1) || - M <- [type_to_module(XType) | - rabbit_exchange_decorator:select(all, Decorators)]], +policy_changed(X = #exchange{type = XType, + decorators = Decorators}, + 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]], ok. serialise_events(X = #exchange{type = Type, decorators = Decorators}) -> @@ -275,7 +277,8 @@ update_scratch(Name, App, Fun) -> Scratches2 = orddict:store( App, Fun(Scratch), Scratches1), X#exchange{scratches = Scratches2} - end) + end), + ok end). update(Name, Fun) -> @@ -286,7 +289,8 @@ update(Name, Fun) -> case Durable of true -> ok = mnesia:write(rabbit_durable_exchange, X1, write); _ -> ok - end; + end, + X1; [] -> ok end. diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl index ad2949b8..ae8d21b5 100644 --- a/src/rabbit_policy.erl +++ b/src/rabbit_policy.erl @@ -171,12 +171,14 @@ update_policies(VHost) -> update_exchange(X = #exchange{name = XName, policy = OldPolicy}, Policies) -> case match(XName, Policies) of OldPolicy -> no_change; - NewPolicy -> rabbit_exchange:update( - XName, fun(X1) -> - rabbit_exchange_decorator:set( - X1#exchange{policy = NewPolicy}) - end), - {X, X#exchange{policy = NewPolicy}} + NewPolicy -> case rabbit_exchange:update( + XName, fun (X0) -> + rabbit_exchange_decorator:set( + X0 #exchange{policy = NewPolicy}) + end) of + #exchange{} = X1 -> {X, X1}; + ok -> {X, X } + end end. update_queue(Q = #amqqueue{name = QName, policy = OldPolicy}, Policies) -> |