summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Watson <tim@rabbitmq.com>2014-02-05 12:07:49 +0000
committerTim Watson <tim@rabbitmq.com>2014-02-05 12:07:49 +0000
commit5c3d6d8a3d6c010d8278d836d0eb391d07b9d8aa (patch)
tree5a3ae513f7da7c5c1656e6e5adcc4adbae109c63
parent4f32e9f44c9187aa371a0b6408a8dadf579ebf23 (diff)
downloadrabbitmq-server-5c3d6d8a3d6c010d8278d836d0eb391d07b9d8aa.tar.gz
Simplify durable queue recovery and avoid a dict lookup on the results
-rw-r--r--src/rabbit_amqqueue.erl18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 15928bf3..411ae502 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -232,21 +232,15 @@ find_durable_queues() ->
end).
recover_durable_queues(QueuesAndRecoveryTerms) ->
- {QsInit, QueuesDict} =
- lists:foldl(
- fun({Q, Terms}, {Qs, Dict}) ->
- Q1 = #amqqueue{ pid = Pid } = start_queue_process(node(), Q),
- {[{Pid, Terms}|Qs], dict:store(Pid, Q1, Dict)}
- end, {[], dict:new()}, QueuesAndRecoveryTerms),
-
{Results, Failures} =
- gen_server2:mcall([{Pid, {init, {self(), Terms}}} ||
- {Pid, Terms} <- QsInit]),
-
- %% TODO: get the queue name somehow, without doing *yet another* traversal..
+ gen_server2:mcall([begin
+ #amqqueue{ pid = Pid } =
+ start_queue_process(node(), Q),
+ {Pid, {init, {self(), Terms}}}
+ end || {Q, Terms} <- QueuesAndRecoveryTerms]),
[rabbit_log:error("Queue ~p failed to initialise: ~p~n",
[Pid, Error]) || {Pid, Error} <- Failures],
- [dict:fetch(Pid, QueuesDict) || {Pid, {new, _Q}} <- Results].
+ [Q || {_, {new, Q}} <- Results].
declare(QueueName, Durable, AutoDelete, Args, Owner) ->
ok = check_declare_arguments(QueueName, Args),