summaryrefslogtreecommitdiff
path: root/src/rabbit_mirror_queue_misc.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-09-13 14:50:23 +0100
committerSimon MacMullen <simon@rabbitmq.com>2013-09-13 14:50:23 +0100
commitfbab844a9f5440ea9344943d1f6b385bbcedb42e (patch)
tree618b8ddc30f48cd09f8d43f106ec31b729ea41fb /src/rabbit_mirror_queue_misc.erl
parent45f1fd2e31667967dd38cf84e32f5c5ace030dfa (diff)
parent3c2b3330467b9e7d6f18281477755fb0c10d06ee (diff)
downloadrabbitmq-server-fbab844a9f5440ea9344943d1f6b385bbcedb42e.tar.gz
Merge bug25749 (again)
Diffstat (limited to 'src/rabbit_mirror_queue_misc.erl')
-rw-r--r--src/rabbit_mirror_queue_misc.erl20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/rabbit_mirror_queue_misc.erl b/src/rabbit_mirror_queue_misc.erl
index 4dd19bd3..c8d04699 100644
--- a/src/rabbit_mirror_queue_misc.erl
+++ b/src/rabbit_mirror_queue_misc.erl
@@ -69,7 +69,7 @@
%% slave (now master) receives messages it's not ready for (for
%% example, new consumers).
%% Returns {ok, NewMPid, DeadPids}
-remove_from_queue(QueueName, Self, DeadGMPids) ->
+remove_from_queue(QueueName, Self, LiveGMPids) ->
rabbit_misc:execute_mnesia_transaction(
fun () ->
%% Someone else could have deleted the queue before we
@@ -79,9 +79,9 @@ remove_from_queue(QueueName, Self, DeadGMPids) ->
[Q = #amqqueue { pid = QPid,
slave_pids = SPids,
gm_pids = GMPids }] ->
- {Dead, GMPids1} = lists:partition(
+ {GMPids1, Dead} = lists:partition(
fun ({GM, _}) ->
- lists:member(GM, DeadGMPids)
+ lists:member(GM, LiveGMPids)
end, GMPids),
DeadPids = [Pid || {_GM, Pid} <- Dead],
Alive = [QPid | SPids] -- DeadPids,
@@ -237,16 +237,20 @@ suggested_queue_nodes(Q) ->
%% This variant exists so we can pull a call to
%% rabbit_mnesia:cluster_nodes(running) out of a loop or
%% transaction or both.
-suggested_queue_nodes(Q, All) ->
+suggested_queue_nodes(Q = #amqqueue{exclusive_owner = Owner}, All) ->
{MNode0, SNodes, SSNodes} = actual_queue_nodes(Q),
MNode = case MNode0 of
none -> node();
_ -> MNode0
end,
- Params = policy(<<"ha-params">>, Q),
- case module(Q) of
- {ok, M} -> M:suggested_queue_nodes(Params, MNode, SNodes, SSNodes, All);
- _ -> {MNode, []}
+ case Owner of
+ none -> Params = policy(<<"ha-params">>, Q),
+ case module(Q) of
+ {ok, M} -> M:suggested_queue_nodes(
+ Params, MNode, SNodes, SSNodes, All);
+ _ -> {MNode, []}
+ end;
+ _ -> {MNode, []}
end.
policy(Policy, Q) ->