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
commit289cdb4fcd5f1e96194dbba16c2b6b3aa65a42a5 (patch)
tree5e919bdc882783ba4a717ea6f8406f2ae5a2306b
parent9a4ecf490da2b5b5519508c5f97a1415811898bc (diff)
downloadrabbitmq-server-git-289cdb4fcd5f1e96194dbba16c2b6b3aa65a42a5.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 24f2edb2f6..73bbb94ddc 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).
+