diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-08-19 16:48:34 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-08-19 16:48:34 +0100 |
commit | 33544e9bacdbe59ffdf6515a32abad29882aae78 (patch) | |
tree | 8249777b04924c98eb30dd010ef2de4305cbed4b | |
parent | 08ed6e8c220693d8dfe94f28de84debe8aa4383d (diff) | |
download | rabbitmq-server-33544e9bacdbe59ffdf6515a32abad29882aae78.tar.gz |
Log that we recovered. Also store updated pid in Mnesia!
-rw-r--r-- | src/rabbit_prequeue.erl | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/rabbit_prequeue.erl b/src/rabbit_prequeue.erl index 20808b1f..4f5ce244 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. |