summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2013-04-16 11:59:44 +0100
committerEmile Joubert <emile@rabbitmq.com>2013-04-16 11:59:44 +0100
commit8089c02708b9e19725f9ed68b335c0d1cbeb1bca (patch)
tree05105ffa0f7728cc863642ba4c869c41d9df881c
parente4cfae04a643a3a960dbd53272649c32cd2b13cb (diff)
downloadrabbitmq-server-8089c02708b9e19725f9ed68b335c0d1cbeb1bca.tar.gz
Updates
-rw-r--r--src/rabbit_exchange.erl18
-rw-r--r--src/rabbit_policy.erl14
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) ->