From c38d0b886c801a4745d45730b4f565c41bd1f9b4 Mon Sep 17 00:00:00 2001 From: Simon MacMullen Date: Wed, 13 Feb 2013 10:57:31 +0000 Subject: Auto sync when policy changes to require it, in case we are already mirrored but have unsynced slaves at that point. --- src/rabbit_mirror_queue_misc.erl | 18 +++++++++++------- 1 file 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. %%---------------------------------------------------------------------------- -- cgit v1.2.1