diff options
author | Tim Watson <tim@rabbitmq.com> | 2013-12-11 15:49:50 +0000 |
---|---|---|
committer | Tim Watson <tim@rabbitmq.com> | 2013-12-11 15:49:50 +0000 |
commit | df965f7c32a9fefde6fd564ae72ee1e2d63f9f99 (patch) | |
tree | 7c923016f65c3e513b9d775c8842c8a7d8fc5356 | |
parent | 99fc8c2196dabe90dc6849cec8cca0237df6eb39 (diff) | |
download | rabbitmq-server-df965f7c32a9fefde6fd564ae72ee1e2d63f9f99.tar.gz |
Add upgrade path for recovery indexes
-rw-r--r-- | src/rabbit_recovery_indexes.erl | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/rabbit_recovery_indexes.erl b/src/rabbit_recovery_indexes.erl index 67d46a32..907f914d 100644 --- a/src/rabbit_recovery_indexes.erl +++ b/src/rabbit_recovery_indexes.erl @@ -22,6 +22,7 @@ -behaviour(gen_server). -export([recover/0, + upgrade_recovery_indexes/0, start_link/0, store_recovery_terms/2, read_recovery_terms/1, @@ -35,9 +36,12 @@ terminate/2, code_change/3]). +-rabbit_upgrade({upgrade_recovery_indexes, local, []}). + -ifdef(use_specs). -spec(recover() -> 'ok'). +-spec(upgrade_recovery_indexes() -> 'ok'). -spec(start_link() -> rabbit_types:ok_pid_or_error()). -spec(store_recovery_terms( Name :: file:filename(), @@ -48,6 +52,7 @@ -spec(remove_recovery_terms( file:filename()) -> rabbit_types:ok_or_error(not_found)). + -endif. % use_specs -include("rabbit.hrl"). @@ -64,6 +69,21 @@ recover() -> {error, _}=Err -> Err end. +upgrade_recovery_indexes() -> + create_table(), + try + QueuesDir = filename:join(rabbit_mnesia:dir(), "queues"), + DotFiles = filelib:fold_files(QueuesDir, ?CLEAN_FILENAME, true, + fun(F, Acc) -> [F|Acc] end, []), + [begin + {ok, Terms} = rabbit_file:read_term_file(File), + ok = store_recovery_terms(File, Terms) + end || File <- lists:delete(dets_filename(), DotFiles)], + ok + after + flush() + end. + start_link() -> gen_server:start_link(?MODULE, [], []). @@ -87,10 +107,7 @@ flush() -> ok. init(_) -> - File = filename:join([rabbit_mnesia:dir(), "queues", ?CLEAN_FILENAME]), - {ok, _} = dets:open_file(?MODULE, [{file, File}, - {ram_file, true}, - {auto_save, infinity}]), + create_table(), {ok, undefined}. handle_call(Msg, _, State) -> @@ -108,3 +125,11 @@ terminate(_Reason, _State) -> code_change(_OldVsn, State, _Extra) -> {ok, State}. +create_table() -> + File = dets_filename(), + {ok, _} = dets:open_file(?MODULE, [{file, File}, + {ram_file, true}, + {auto_save, infinity}]). + +dets_filename() -> + filename:join([rabbit_mnesia:dir(), "queues", ?CLEAN_FILENAME]). |