From 752f9f5b628cc792955a541baf5f4df6dea1d7fc Mon Sep 17 00:00:00 2001 From: Kresten Krab Thorup Date: Wed, 26 Nov 2014 12:51:01 +0100 Subject: [PATCH] Fix min/max level for recovery Previous commit f0d24894c5f9aa14e58ab3e18b6e2ef2a88024cf introduced a bug in recovery code. --- src/hanoidb_nursery.erl | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/hanoidb_nursery.erl b/src/hanoidb_nursery.erl index 27a14b6..11b1b6a 100644 --- a/src/hanoidb_nursery.erl +++ b/src/hanoidb_nursery.erl @@ -50,20 +50,21 @@ new(Directory, MinLevel, MaxLevel, Config) -> min_level=MinLevel, max_level=MaxLevel, config=Config }}. -recover(Directory, TopLevel, MinLevel, MaxLevel, Config) -> +recover(Directory, TopLevel, MinLevel, MaxLevel, Config) + when MinLevel < MaxLevel, is_integer(MinLevel), is_integer(MaxLevel) -> hanoidb_util:ensure_expiry(Config), case file:read_file_info(?LOGFILENAME(Directory)) of {ok, _} -> - ok = do_recover(Directory, TopLevel, MaxLevel, Config), + ok = do_recover(Directory, TopLevel, MinLevel, MaxLevel, Config), new(Directory, MinLevel, MaxLevel, Config); {error, enoent} -> new(Directory, MinLevel, MaxLevel, Config) end. -do_recover(Directory, TopLevel, MaxLevel, Config) -> +do_recover(Directory, TopLevel, MinLevel, MaxLevel, Config) -> %% repair the log file; storing it in nursery2 LogFileName = ?LOGFILENAME(Directory), - {ok, Nursery} = read_nursery_from_log(Directory, MaxLevel, Config), + {ok, Nursery} = read_nursery_from_log(Directory, MinLevel, MaxLevel, Config), ok = finish(Nursery, TopLevel), %% assert log file is gone {error, enoent} = file:read_file_info(LogFileName), @@ -81,7 +82,7 @@ fill_cache(Transactions, Cache) when is_list(Transactions) -> lists:foldl(fun fill_cache/2, Cache, Transactions). -read_nursery_from_log(Directory, MaxLevel, Config) -> +read_nursery_from_log(Directory, MinLevel, MaxLevel, Config) -> {ok, LogBinary} = file:read_file(?LOGFILENAME(Directory)), Cache = case hanoidb_util:decode_crc_data(LogBinary, [], []) of @@ -91,7 +92,7 @@ read_nursery_from_log(Directory, MaxLevel, Config) -> error_logger:info_msg("ignoring undecypherable bytes in ~p~n", [?LOGFILENAME(Directory)]), fill_cache(KVs, gb_trees:empty()) end, - {ok, #nursery{ dir=Directory, cache=Cache, count=gb_trees:size(Cache), max_level=MaxLevel, config=Config }}. + {ok, #nursery{ dir=Directory, cache=Cache, count=gb_trees:size(Cache), min_level=MinLevel, max_level=MaxLevel, config=Config }}. %% @doc Add a Key/Value to the nursery %% @end