summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Watson <watson.timothy@gmail.com>2014-01-23 20:39:40 +0000
committerTim Watson <watson.timothy@gmail.com>2014-01-23 20:39:40 +0000
commit1fd259fc98e0cdea9c781ab75163a3298ff00005 (patch)
tree5e919bdc882783ba4a717ea6f8406f2ae5a2306b
parent7537f73986bed55795a7dbd3783a7ff50b9dad85 (diff)
downloadrabbitmq-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.erl23
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).
+