diff options
author | Tim Watson <watson.timothy@gmail.com> | 2014-01-23 20:39:40 +0000 |
---|---|---|
committer | Tim Watson <watson.timothy@gmail.com> | 2014-01-23 20:39:40 +0000 |
commit | 1fd259fc98e0cdea9c781ab75163a3298ff00005 (patch) | |
tree | 5e919bdc882783ba4a717ea6f8406f2ae5a2306b | |
parent | 7537f73986bed55795a7dbd3783a7ff50b9dad85 (diff) | |
download | rabbitmq-server-1fd259fc98e0cdea9c781ab75163a3298ff00005.tar.gz |
Improve recovery terms upgrade handling
Use a more specific regex to locate the old clean.dot files.
If reading an old clean.dot file fails, simply log the error.
Ensure that we close the dets table after our upgrade step has run.
-rw-r--r-- | src/rabbit_recovery_terms.erl | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/rabbit_recovery_terms.erl b/src/rabbit_recovery_terms.erl index 24f2edb2..73bbb94d 100644 --- a/src/rabbit_recovery_terms.erl +++ b/src/rabbit_recovery_terms.erl @@ -67,11 +67,18 @@ upgrade_recovery_terms() -> open_table(), try QueuesDir = filename:join(rabbit_mnesia:dir(), "queues"), - DotFiles = filelib:fold_files(QueuesDir, "clean.dot", true, + DotFiles = filelib:fold_files(QueuesDir, "^clean\.dot$", false, fun(F, Acc) -> [F|Acc] end, []), [begin - {ok, Terms} = rabbit_file:read_term_file(File), - ok = store(filename:basename(filename:dirname(File)), Terms), + case rabbit_file:read_term_file(File) of + {ok, Terms} -> + rabbit_log:info("Read ~s ok~n", [File]), + ok = store(filename:basename(filename:dirname(File)), + Terms); + Err -> + rabbit_log:warning("Error reading recovery file ~s: ~p~n", + [File, Err]) + end, case file:delete(File) of {error, E} -> rabbit_log:warning("Unable to delete recovery index" @@ -82,7 +89,7 @@ upgrade_recovery_terms() -> end || File <- DotFiles], ok after - flush() + close_table() end. start_link() -> gen_server:start_link(?MODULE, [], []). @@ -101,8 +108,7 @@ handle_cast(Msg, State) -> {stop, {unexpected_cast, Msg}, State}. handle_info(_Info, State) -> {noreply, State}. terminate(_Reason, _State) -> - ok = flush(), - ok = dets:close(?MODULE). + close_table(). code_change(_OldVsn, State, _Extra) -> {ok, State}. @@ -116,3 +122,8 @@ open_table() -> {auto_save, infinity}]). flush() -> dets:sync(?MODULE). + +close_table() -> + ok = flush(), + ok = dets:close(?MODULE). + |