summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriele Santomaggio <gabriele.santomaggio@erlang-solutions.com>2016-05-27 11:58:32 +0200
committerDiana Corbacho <diana@rabbitmq.com>2016-08-31 09:51:45 +0100
commitc555df59bb9d66fe22d4c97f101b2a2d989eea1c (patch)
tree27ad6fe795859002ac1c59101809c8b0bc346c70
parent45caaaa959f93ce0c061e59fda1e94df9466f8a4 (diff)
downloadrabbitmq-server-git-c555df59bb9d66fe22d4c97f101b2a2d989eea1c.tar.gz
Update policy version on set_policy and use it on update_mirroring
-rw-r--r--src/rabbit_amqqueue_process.erl10
-rw-r--r--src/rabbit_policy.erl4
2 files changed, 10 insertions, 4 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl
index e346df38dc..29f8e53f08 100644
--- a/src/rabbit_amqqueue_process.erl
+++ b/src/rabbit_amqqueue_process.erl
@@ -1378,9 +1378,13 @@ handle_pre_hibernate(State = #q{backing_queue = BQ,
format_message_queue(Opt, MQ) -> rabbit_misc:format_message_queue(Opt, MQ).
-needs_update_mirroring(_Q, _Version) ->
- %% hook here GaS changes on the policy
- true.
+needs_update_mirroring(Q, Version) ->
+ {ok, UpQ} = rabbit_amqqueue:lookup(Q#amqqueue.name),
+ DBVersion = UpQ#amqqueue.policy_version,
+ case DBVersion > Version of
+ true -> {rabbit_policy:get(<<"ha-mode">>, UpQ), DBVersion};
+ false -> false
+ end.
update_mirroring(Policy, State = #q{backing_queue = BQ}) ->
case update_to(Policy, BQ) of
diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl
index eb8cf63327..a9caadf972 100644
--- a/src/rabbit_policy.erl
+++ b/src/rabbit_policy.erl
@@ -276,7 +276,9 @@ update_queue(Q = #amqqueue{name = QName, policy = OldPolicy}, Policies) ->
NewPolicy -> case rabbit_amqqueue:update(
QName, fun(Q1) ->
rabbit_queue_decorator:set(
- Q1#amqqueue{policy = NewPolicy})
+ Q1#amqqueue{policy = NewPolicy,
+ policy_version =
+ Q1#amqqueue.policy_version + 1 })
end) of
#amqqueue{} = Q1 -> {Q, Q1};
not_found -> {Q, Q }