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 | 79c7b604f6714c8dc3fa2d17b4c2d6c439838bdd (patch) | |
| tree | 8249777b04924c98eb30dd010ef2de4305cbed4b /src | |
| parent | 78dd756cf2062f7799fc9cf5d0d5628f888f7fa1 (diff) | |
| download | rabbitmq-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.erl | 20 |
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. |
