summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-10-08 18:02:16 +0100
committerSimon MacMullen <simon@rabbitmq.com>2012-10-08 18:02:16 +0100
commit195dde877975aeccccfd8ead7a295d6f7ffcd321 (patch)
treef91aa05951893a8edd2dae1b59a151a667e7a26c
parentab854f5cc03c6b8fe032ff91bc3c34d069405efc (diff)
downloadrabbitmq-server-git-195dde877975aeccccfd8ead7a295d6f7ffcd321.tar.gz
Removing the ExtraNodes stuff unmasked another bug: we weren't cleaning up slave_pids when stopping mirroring.
-rw-r--r--src/rabbit_mirror_queue_master.erl12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl
index ea98430cbb..d865d6751b 100644
--- a/src/rabbit_mirror_queue_master.erl
+++ b/src/rabbit_mirror_queue_master.erl
@@ -149,7 +149,17 @@ stop_all_slaves(Reason, #state{gm = GM}) ->
MRefs = [erlang:monitor(process, S) || S <- Slaves],
ok = gm:broadcast(GM, {delete_and_terminate, Reason}),
[receive {'DOWN', MRef, process, _Pid, _Info} -> ok end || MRef <- MRefs],
- ok = gm:forget_group(proplists:get_value(group_name, Info)).
+ %% Normally when we remove a slave another slave or master will
+ %% notice and update Mnesia. But we just removed them all, and
+ %% have stopped listening ourselves. So manually clean up.
+ QName = proplists:get_value(group_name, Info),
+ rabbit_misc:execute_mnesia_transaction(
+ fun () ->
+ [Q] = mnesia:read({rabbit_queue, QName}),
+ rabbit_mirror_queue_misc:store_updated_slaves(
+ Q #amqqueue { slave_pids = [] })
+ end),
+ ok = gm:forget_group(QName).
purge(State = #state { gm = GM,
backing_queue = BQ,