diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2012-11-28 13:56:50 +0000 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2012-11-28 13:56:50 +0000 |
| commit | fc70be4c312bfffc661840a265730f6faecc11ff (patch) | |
| tree | cd0161db6684c68b6224600810df455fb5890aaa | |
| parent | df6b71313d1cf383a4dca02a619077cbb28e11e4 (diff) | |
| download | rabbitmq-server-git-fc70be4c312bfffc661840a265730f6faecc11ff.tar.gz | |
Diagram.
| -rw-r--r-- | src/rabbit_mirror_queue_master.erl | 2 | ||||
| -rw-r--r-- | src/rabbit_mirror_queue_sync.erl | 26 |
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 |
