summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-08-19 16:48:34 +0100
committerSimon MacMullen <simon@rabbitmq.com>2014-08-19 16:48:34 +0100
commit79c7b604f6714c8dc3fa2d17b4c2d6c439838bdd (patch)
tree8249777b04924c98eb30dd010ef2de4305cbed4b /src
parent78dd756cf2062f7799fc9cf5d0d5628f888f7fa1 (diff)
downloadrabbitmq-server-git-79c7b604f6714c8dc3fa2d17b4c2d6c439838bdd.tar.gz
Log that we recovered. Also store updated pid in Mnesia!
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_prequeue.erl20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/rabbit_prequeue.erl b/src/rabbit_prequeue.erl
index 20808b1ff8..4f5ce244b2 100644
--- a/src/rabbit_prequeue.erl
+++ b/src/rabbit_prequeue.erl
@@ -101,9 +101,17 @@ init_non_recovery(Q = #amqqueue{name = QueueName}, Hint) ->
end;
new_slave ->
rabbit_mirror_queue_slave:init_slave(Q);
- crash_restart ->
+ {crash_restart, Q1} ->
+ rabbit_log:error(
+ "Recovering persistent messages from crashed ~s.~n",
+ [rabbit_misc:rs(QueueName)]),
+ Self = self(),
+ rabbit_misc:execute_mnesia_transaction(
+ fun () ->
+ ok = rabbit_amqqueue:store_queue(Q1#amqqueue{pid = Self})
+ end),
rabbit_amqqueue_process:init_declared(
- {no_barrier, non_clean_shutdown}, none, Q);
+ {no_barrier, non_clean_shutdown}, none, Q1);
sleep_retry ->
timer:sleep(25),
init_non_recovery(Q, Hint);
@@ -127,11 +135,11 @@ init_missing(Q, Hint) ->
init_existing(Q = #amqqueue{pid = QPid, slave_pids = SPids}) ->
Alive = fun rabbit_misc:is_process_alive/1,
case {Alive(QPid), node(QPid) =:= node()} of
- {true, true} -> {declared, {existing, Q}}; %% [1]
- {true, false} -> new_slave; %% [2]
+ {true, true} -> {declared, {existing, Q}}; %% [1]
+ {true, false} -> new_slave; %% [2]
{false, _} -> case [SPid || SPid <- SPids, Alive(SPid)] of
- [] -> crash_restart; %% [3]
- _ -> sleep_retry %% [4]
+ [] -> {crash_restart, Q}; %% [3]
+ _ -> sleep_retry %% [4]
end
end.
%% [1] Lost a race to declare a queue - just return the winner.