summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-11-28 13:56:50 +0000
committerSimon MacMullen <simon@rabbitmq.com>2012-11-28 13:56:50 +0000
commitfc70be4c312bfffc661840a265730f6faecc11ff (patch)
treecd0161db6684c68b6224600810df455fb5890aaa
parentdf6b71313d1cf383a4dca02a619077cbb28e11e4 (diff)
downloadrabbitmq-server-git-fc70be4c312bfffc661840a265730f6faecc11ff.tar.gz
Diagram.
-rw-r--r--src/rabbit_mirror_queue_master.erl2
-rw-r--r--src/rabbit_mirror_queue_sync.erl26
2 files changed, 26 insertions, 2 deletions
diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl
index 04e868bcd2..e8734a8cbf 100644
--- a/src/rabbit_mirror_queue_master.erl
+++ b/src/rabbit_mirror_queue_master.erl
@@ -143,8 +143,6 @@ sync_mirrors(SPids, State = #state { name = Name,
rabbit_log:info("Synchronising ~s with slaves ~p: ~p messages to do~n",
[rabbit_misc:rs(Name), SPids, BQ:len(BQS)]),
Ref = make_ref(),
- %% We send the start over GM to flush out any other messages that
- %% we might have sent that way already.
Syncer = rabbit_mirror_queue_sync:master_prepare(Ref, SPids),
gm:broadcast(GM, {sync_start, Ref, Syncer, SPids}),
BQS1 = rabbit_mirror_queue_sync:master_go(Syncer, Ref, Name, BQ, BQS),
diff --git a/src/rabbit_mirror_queue_sync.erl b/src/rabbit_mirror_queue_sync.erl
index 560e0d43c5..f7901d9cdd 100644
--- a/src/rabbit_mirror_queue_sync.erl
+++ b/src/rabbit_mirror_queue_sync.erl
@@ -22,6 +22,32 @@
-define(SYNC_PROGRESS_INTERVAL, 1000000).
+%% There are three processes around, the master, the syncer and the
+%% slave(s). The syncer is an intermediary, linked to the master in
+%% order to make sure we do not mess with the master's credit flow or
+%% set of monitors.
+%%
+%% Interactions
+%% ------------
+%%
+%% '*' indicates repeating messages. All are standard Erlang messages
+%% except sync_start which is sent over GM to flush out any other
+%% messages that we might have sent that way already. (credit) is the
+%% usual credit_flow bump message every so often.
+%%
+%% Master Syncer Slave(s)
+%% sync_mirrors -> || ||
+%% (from channel) || -- (spawns) --> || ||
+%% || --------- sync_start (over GM) -------> ||
+%% || || <--- sync_ready ---- ||
+%% || ----- msg* ---> || || }
+%% || <-- msg_ok* --- || || } loop
+%% || || ----- sync_msg* ---> || }
+%% || || <---- (credit)* ---- || }
+%% || ---- done ----> || ||
+%% || || -- sync_complete --> ||
+%% || (Dies) ||
+
%% ---------------------------------------------------------------------------
%% Master