summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2012-11-08 12:41:39 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2012-11-08 12:41:39 +0000
commitf419596afaa8229a82560577f4a43f68b95e88d7 (patch)
tree095a90a040ffc4a7bd41b9b9c6d16a195b484691 /src
parent370a0d16297e9926c08df7b0e75322c771dc2d54 (diff)
downloadrabbitmq-server-git-f419596afaa8229a82560577f4a43f68b95e88d7.tar.gz
pass q records instead of names between recovery phases
That way we can guarantee that the qpids we are talking to in the start phase are the same as in the recovery phase
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl7
-rw-r--r--src/rabbit_amqqueue.erl12
2 files changed, 10 insertions, 9 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index d156d57069..ef9f5f56ce 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -570,9 +570,10 @@ boot_delegate() ->
rabbit_sup:start_supervisor_child(delegate_sup, [Count]).
recover() ->
- RecoveredQNames = rabbit_amqqueue:recover(),
- ok = rabbit_binding:recover(rabbit_exchange:recover(), RecoveredQNames),
- rabbit_amqqueue:start(RecoveredQNames).
+ Qs = rabbit_amqqueue:recover(),
+ ok = rabbit_binding:recover(rabbit_exchange:recover(),
+ [QName || #amqqueue{name = QName} <- Qs]),
+ rabbit_amqqueue:start(Qs).
maybe_insert_default_data() ->
case rabbit_table:is_empty() of
diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl
index 16cd2bfd15..9fb453c12f 100644
--- a/src/rabbit_amqqueue.erl
+++ b/src/rabbit_amqqueue.erl
@@ -65,9 +65,9 @@
{'absent', rabbit_types:amqqueue()}).
-type(not_found_or_absent() :: 'not_found' |
{'absent', rabbit_types:amqqueue()}).
--spec(recover/0 :: () -> [name()]).
+-spec(recover/0 :: () -> [rabbit_types:amqqueue()]).
-spec(stop/0 :: () -> 'ok').
--spec(start/1 :: ([name()]) -> 'ok').
+-spec(start/1 :: ([rabbit_types:amqqueue()]) -> 'ok').
-spec(declare/5 ::
(name(), boolean(), boolean(),
rabbit_framing:amqp_table(), rabbit_types:maybe(pid()))
@@ -201,12 +201,12 @@ stop() ->
{ok, BQ} = application:get_env(rabbit, backing_queue_module),
ok = BQ:stop().
-start(QNames) ->
+start(Qs) ->
%% At this point all recovered queues and their bindings are
%% visible to routing, so now it is safe for them to complete
%% their initialisation (which may involve interacting with other
%% queues).
- [Pid ! {self(), go} || #amqqueue{pid = Pid} <- lookup(QNames)],
+ [Pid ! {self(), go} || #amqqueue{pid = Pid} <- Qs],
ok.
find_durable_queues() ->
@@ -221,8 +221,8 @@ find_durable_queues() ->
recover_durable_queues(DurableQueues) ->
Qs = [start_queue_process(node(), Q) || Q <- DurableQueues],
- [QName || Q = #amqqueue{name = QName, pid = Pid} <- Qs,
- gen_server2:call(Pid, {init, self()}, infinity) == {new, Q}].
+ [Q || Q = #amqqueue{pid = Pid} <- Qs,
+ gen_server2:call(Pid, {init, self()}, infinity) == {new, Q}].
declare(QueueName, Durable, AutoDelete, Args, Owner) ->
ok = check_declare_arguments(QueueName, Args),