summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-05-09 14:56:26 +0100
committerSimon MacMullen <simon@rabbitmq.com>2014-05-09 14:56:26 +0100
commit16056f2702cc1d4a251148e4bfaf2f154c13e07b (patch)
tree712634b949d39c7aa27d959b79cc701c53993dae
parentc242e129e53f9964628915b713caee9fbf73ff2a (diff)
downloadrabbitmq-server-16056f2702cc1d4a251148e4bfaf2f154c13e07b.tar.gz
Actually, slaves should always delete_and_terminate; when shutting them donw in this case we still don't trust their contents.
-rw-r--r--src/rabbit_mirror_queue_coordinator.erl4
-rw-r--r--src/rabbit_mirror_queue_master.erl9
-rw-r--r--src/rabbit_mirror_queue_slave.erl9
3 files changed, 9 insertions, 13 deletions
diff --git a/src/rabbit_mirror_queue_coordinator.erl b/src/rabbit_mirror_queue_coordinator.erl
index 6a67a759..74c03e64 100644
--- a/src/rabbit_mirror_queue_coordinator.erl
+++ b/src/rabbit_mirror_queue_coordinator.erl
@@ -368,7 +368,7 @@ handle_cast(request_depth, State = #state { depth_fun = DepthFun }) ->
handle_cast({ensure_monitoring, Pids}, State = #state { monitors = Mons }) ->
noreply(State #state { monitors = pmon:monitor_all(Pids, Mons) });
-handle_cast({terminate, _Delete, Reason}, State) ->
+handle_cast({delete_and_terminate, Reason}, State) ->
{stop, Reason, State}.
handle_info({'DOWN', _MonitorRef, process, Pid, _Reason},
@@ -410,7 +410,7 @@ handle_msg([CPid], _From, request_depth = Msg) ->
ok = gen_server2:cast(CPid, Msg);
handle_msg([CPid], _From, {ensure_monitoring, _Pids} = Msg) ->
ok = gen_server2:cast(CPid, Msg);
-handle_msg([CPid], _From, {terminate, _Delete, _Reason} = Msg) ->
+handle_msg([CPid], _From, {delete_and_terminate, _Reason} = Msg) ->
ok = gen_server2:cast(CPid, Msg),
{stop, {shutdown, ring_shutdown}};
handle_msg([_CPid], _From, _Msg) ->
diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl
index c6e5a7d8..e8819bfa 100644
--- a/src/rabbit_mirror_queue_master.erl
+++ b/src/rabbit_mirror_queue_master.erl
@@ -130,8 +130,7 @@ stop_mirroring(State = #state { coordinator = CPid,
backing_queue = BQ,
backing_queue_state = BQS }) ->
unlink(CPid),
- %% delete = *slaves* should delete
- stop_all_slaves(shutdown, delete, State),
+ stop_all_slaves(shutdown, State),
{BQ, BQS}.
sync_mirrors(HandleInfo, EmitStats,
@@ -189,13 +188,13 @@ terminate(Reason,
delete_and_terminate(Reason, State = #state { backing_queue = BQ,
backing_queue_state = BQS }) ->
- stop_all_slaves(Reason, delete, State),
+ stop_all_slaves(Reason, State),
State#state{backing_queue_state = BQ:delete_and_terminate(Reason, BQS)}.
-stop_all_slaves(Reason, Delete, #state{name = QName, gm = GM}) ->
+stop_all_slaves(Reason, #state{name = QName, gm = GM}) ->
{ok, #amqqueue{slave_pids = SPids}} = rabbit_amqqueue:lookup(QName),
MRefs = [erlang:monitor(process, Pid) || Pid <- [GM | SPids]],
- ok = gm:broadcast(GM, {terminate, Delete, Reason}),
+ ok = gm:broadcast(GM, {delete_and_terminate, Reason}),
[receive {'DOWN', MRef, process, _Pid, _Info} -> ok end || MRef <- MRefs],
%% Normally when we remove a slave another slave or master will
%% notice and update Mnesia. But we just removed them all, and
diff --git a/src/rabbit_mirror_queue_slave.erl b/src/rabbit_mirror_queue_slave.erl
index e30b941d..ee889f84 100644
--- a/src/rabbit_mirror_queue_slave.erl
+++ b/src/rabbit_mirror_queue_slave.erl
@@ -420,7 +420,7 @@ handle_msg([_SPid], _From, process_death) ->
%% messages from the master we have yet to receive. When we get
%% members_changed, then there will be no more messages.
ok;
-handle_msg([CPid], _From, {terminate, _Delete, _Reason} = Msg) ->
+handle_msg([CPid], _From, {delete_and_terminate, _Reason} = Msg) ->
ok = gen_server2:cast(CPid, {gm, Msg}),
{stop, {shutdown, ring_shutdown}};
handle_msg([SPid], _From, {sync_start, Ref, Syncer, SPids}) ->
@@ -876,13 +876,10 @@ process_instruction({depth, Depth},
backing_queue_state = BQS }) ->
{ok, set_delta(Depth - BQ:depth(BQS), State)};
-process_instruction({terminate, Delete, Reason},
+process_instruction({delete_and_terminate, Reason},
State = #state { backing_queue = BQ,
backing_queue_state = BQS }) ->
- case Delete of
- delete -> BQ:delete_and_terminate(Reason, BQS);
- nodelete -> BQ:terminate(Reason, BQS)
- end,
+ BQ:delete_and_terminate(Reason, BQS),
{stop, State #state { backing_queue_state = undefined }}.
msg_ids_to_acktags(MsgIds, MA) ->