summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-02-13 10:57:31 +0000
committerSimon MacMullen <simon@rabbitmq.com>2013-02-13 10:57:31 +0000
commitc38d0b886c801a4745d45730b4f565c41bd1f9b4 (patch)
tree934e7f695799d134a9c5b7387bb0f5aea0a836d7
parent357701e0ad63c1817e7f7290025ca3aaf5a1385c (diff)
downloadrabbitmq-server-bug25418.tar.gz
Auto sync when policy changes to require it, in case we are already mirrored but have unsynced slaves at that point.bug25418
-rw-r--r--src/rabbit_mirror_queue_misc.erl18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/rabbit_mirror_queue_misc.erl b/src/rabbit_mirror_queue_misc.erl
index 4dd50bce..8192b092 100644
--- a/src/rabbit_mirror_queue_misc.erl
+++ b/src/rabbit_mirror_queue_misc.erl
@@ -179,19 +179,14 @@ add_mirror(QName, MirrorNode) ->
end
end).
-start_child(Name, MirrorNode, Q = #amqqueue{pid = QPid}) ->
+start_child(Name, MirrorNode, Q) ->
case rabbit_misc:with_exit_handler(
rabbit_misc:const({ok, down}),
fun () ->
rabbit_mirror_queue_slave_sup:start_child(MirrorNode, [Q])
end) of
{ok, SPid} when is_pid(SPid) ->
- case rabbit_policy:get(<<"ha-sync-mode">>, Q) of
- {ok,<<"automatic">>} ->
- spawn(fun() -> rabbit_amqqueue:sync_mirrors(QPid) end);
- _ ->
- ok
- end,
+ maybe_auto_sync(Q),
rabbit_log:info("Adding mirror of ~s on node ~p: ~p~n",
[rabbit_misc:rs(Name), MirrorNode, SPid]),
{ok, started};
@@ -310,6 +305,14 @@ is_mirrored(Q) ->
_ -> false
end.
+maybe_auto_sync(Q = #amqqueue{pid = QPid}) ->
+ case policy(<<"ha-sync-mode">>, Q) of
+ <<"automatic">> ->
+ spawn(fun() -> rabbit_amqqueue:sync_mirrors(QPid) end);
+ _ ->
+ ok
+ end.
+
update_mirrors(OldQ = #amqqueue{pid = QPid},
NewQ = #amqqueue{pid = QPid}) ->
case {is_mirrored(OldQ), is_mirrored(NewQ)} of
@@ -326,6 +329,7 @@ update_mirrors0(OldQ = #amqqueue{name = QName},
NewNodes = All(suggested_queue_nodes(NewQ)),
add_mirrors(QName, NewNodes -- OldNodes),
drop_mirrors(QName, OldNodes -- NewNodes),
+ maybe_auto_sync(NewQ),
ok.
%%----------------------------------------------------------------------------