summaryrefslogtreecommitdiff
path: root/src/rabbit_mirror_queue_master.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-11-29 11:49:28 +0000
committerSimon MacMullen <simon@rabbitmq.com>2012-11-29 11:49:28 +0000
commit9102940de6158c4829156322318aaf33c40c56cb (patch)
treeb5038a96b91086386bc9976ae65ce2b4ba3bfbdc /src/rabbit_mirror_queue_master.erl
parenta1b7f66d6cce9b53356ec0092925dfcc7cc8413d (diff)
downloadrabbitmq-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.erl26
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)};