diff options
| author | Matthias Radestock <matthias@rabbitmq.com> | 2012-11-08 12:41:39 +0000 |
|---|---|---|
| committer | Matthias Radestock <matthias@rabbitmq.com> | 2012-11-08 12:41:39 +0000 |
| commit | f419596afaa8229a82560577f4a43f68b95e88d7 (patch) | |
| tree | 095a90a040ffc4a7bd41b9b9c6d16a195b484691 /src | |
| parent | 370a0d16297e9926c08df7b0e75322c771dc2d54 (diff) | |
| download | rabbitmq-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.erl | 7 | ||||
| -rw-r--r-- | src/rabbit_amqqueue.erl | 12 |
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), |
