diff options
| -rw-r--r-- | src/rabbit_mirror_queue_master.erl | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/rabbit_mirror_queue_master.erl b/src/rabbit_mirror_queue_master.erl index 96c79b8f34..d2490581ee 100644 --- a/src/rabbit_mirror_queue_master.erl +++ b/src/rabbit_mirror_queue_master.erl @@ -120,7 +120,6 @@ stop_mirroring(State = #state { coordinator = CPid, backing_queue = BQ, backing_queue_state = BQS }) -> unlink(CPid), - %% TODO remove GM from mnesia stop_all_slaves(shutdown, State), {BQ, BQS}. @@ -155,7 +154,16 @@ 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)). + QName = proplists:get_value(group_name, Info), + ok = gm:forget_group(QName), + ok = rabbit_misc:execute_mnesia_transaction( + fun () -> + [Q] = mnesia:read({rabbit_queue, QName}), + rabbit_mirror_queue_misc:store_updated_slaves( + Q#amqqueue{gm_pids = [], + slave_pids = []}), + ok. + end). purge(State = #state { gm = GM, backing_queue = BQ, |
