diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2013-02-13 10:57:31 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2013-02-13 10:57:31 +0000 |
commit | c38d0b886c801a4745d45730b4f565c41bd1f9b4 (patch) | |
tree | 934e7f695799d134a9c5b7387bb0f5aea0a836d7 | |
parent | 357701e0ad63c1817e7f7290025ca3aaf5a1385c (diff) | |
download | rabbitmq-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.erl | 18 |
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. %%---------------------------------------------------------------------------- |