summaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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).
+