diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2012-11-29 11:49:28 +0000 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2012-11-29 11:49:28 +0000 |
commit | 9102940de6158c4829156322318aaf33c40c56cb (patch) | |
tree | b5038a96b91086386bc9976ae65ce2b4ba3bfbdc /src/rabbit_mirror_queue_master.erl | |
parent | a1b7f66d6cce9b53356ec0092925dfcc7cc8413d (diff) | |
download | rabbitmq-server-9102940de6158c4829156322318aaf33c40c56cb.tar.gz |
Have slaves determine whether they need sync.
Diffstat (limited to 'src/rabbit_mirror_queue_master.erl')
-rw-r--r-- | src/rabbit_mirror_queue_master.erl | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl index 439d1f4b..0820f3f9 100644 --- a/src/rabbit_mirror_queue_master.erl +++ b/src/rabbit_mirror_queue_master.erl @@ -127,24 +127,16 @@ stop_mirroring(State = #state { coordinator = CPid, stop_all_slaves(shutdown, State), {BQ, BQS}. -sync_mirrors(State = #state{name = QName}) -> - {ok, #amqqueue{slave_pids = SPids, sync_slave_pids = SSPids}} = - rabbit_amqqueue:lookup(QName), - sync_mirrors(SPids -- SSPids, State). - -sync_mirrors([], State = #state{name = QName}) -> - rabbit_log:info("Synchronising ~s: nothing to do~n", - [rabbit_misc:rs(QName)]), - {ok, State}; -sync_mirrors(SPids, State = #state { name = QName, - gm = GM, - backing_queue = BQ, - backing_queue_state = BQS }) -> - rabbit_log:info("Synchronising ~s with slaves ~p: ~p messages to do~n", - [rabbit_misc:rs(QName), SPids, BQ:len(BQS)]), +sync_mirrors(State = #state { name = QName, + gm = GM, + backing_queue = BQ, + backing_queue_state = BQS }) -> + rabbit_log:info("Synchronising ~s: ~p messages to synchronise~n", + [rabbit_misc:rs(QName), BQ:len(BQS)]), + {ok, #amqqueue{slave_pids = SPids}} = rabbit_amqqueue:lookup(QName), Ref = make_ref(), - Syncer = rabbit_mirror_queue_sync:master_prepare(Ref, SPids), - gm:broadcast(GM, {sync_start, Ref, Syncer, SPids}), + Syncer = rabbit_mirror_queue_sync:master_prepare(Ref, QName, SPids), + gm:broadcast(GM, {sync_start, Ref, Syncer}), S = fun(BQSN) -> State#state{backing_queue_state = BQSN} end, case rabbit_mirror_queue_sync:master_go(Syncer, Ref, QName, BQ, BQS) of {shutdown, R, BQS1} -> {stop, R, S(BQS1)}; |