Check presence in Journal on hashtree query
Basic happy day unit test added to demonstrate checking presence (with a set probability) of the item in the hashtree query within the Journal.
This commit is contained in:
parent
7d3a04428b
commit
b18f7fd1c1
1 changed files with 41 additions and 7 deletions
|
@ -159,7 +159,8 @@
|
||||||
-define(SHUTDOWN_WAITS, 60).
|
-define(SHUTDOWN_WAITS, 60).
|
||||||
-define(SHUTDOWN_PAUSE, 10000).
|
-define(SHUTDOWN_PAUSE, 10000).
|
||||||
-define(SNAPSHOT_TIMEOUT, 300000).
|
-define(SNAPSHOT_TIMEOUT, 300000).
|
||||||
-define(JITTER_PROBABILITY, 0.01).
|
-define(JITTER_PROB, 0.01).
|
||||||
|
-define(CHECKJOURNAL_PROB, 0.2).
|
||||||
|
|
||||||
-record(state, {inker :: pid(),
|
-record(state, {inker :: pid(),
|
||||||
penciller :: pid(),
|
penciller :: pid(),
|
||||||
|
@ -484,6 +485,12 @@ hashtree_query(State, Tag, JournalCheck) ->
|
||||||
AccFun,
|
AccFun,
|
||||||
[]),
|
[]),
|
||||||
ok = leveled_penciller:pcl_close(LedgerSnapshot),
|
ok = leveled_penciller:pcl_close(LedgerSnapshot),
|
||||||
|
case JournalCheck of
|
||||||
|
false ->
|
||||||
|
ok;
|
||||||
|
check_presence ->
|
||||||
|
leveled_inker:ink_close(JournalSnapshot)
|
||||||
|
end,
|
||||||
Acc
|
Acc
|
||||||
end,
|
end,
|
||||||
{async, Folder}.
|
{async, Folder}.
|
||||||
|
@ -615,16 +622,17 @@ accumulate_hashes(JournalCheck, InkerClone) ->
|
||||||
case leveled_codec:is_active(LK, V, Now) of
|
case leveled_codec:is_active(LK, V, Now) of
|
||||||
true ->
|
true ->
|
||||||
{B, K, H} = leveled_codec:get_keyandhash(LK, V),
|
{B, K, H} = leveled_codec:get_keyandhash(LK, V),
|
||||||
case JournalCheck of
|
Check = random:uniform() < ?CHECKJOURNAL_PROB,
|
||||||
false ->
|
case {JournalCheck, Check} of
|
||||||
[{B, K, H}|KHList];
|
{check_presence, true} ->
|
||||||
check_presence ->
|
|
||||||
case check_presence(LK, V, InkerClone) of
|
case check_presence(LK, V, InkerClone) of
|
||||||
true ->
|
true ->
|
||||||
[{B, K, H}|KHList];
|
[{B, K, H}|KHList];
|
||||||
false ->
|
false ->
|
||||||
KHList
|
KHList
|
||||||
end
|
end;
|
||||||
|
_ ->
|
||||||
|
[{B, K, H}|KHList]
|
||||||
end;
|
end;
|
||||||
false ->
|
false ->
|
||||||
KHList
|
KHList
|
||||||
|
@ -737,7 +745,7 @@ maybe_withjitter(CacheSize, MaxCacheSize) ->
|
||||||
CacheSize > MaxCacheSize ->
|
CacheSize > MaxCacheSize ->
|
||||||
R = random:uniform(),
|
R = random:uniform(),
|
||||||
if
|
if
|
||||||
R < ?JITTER_PROBABILITY ->
|
R < ?JITTER_PROB ->
|
||||||
true;
|
true;
|
||||||
true ->
|
true ->
|
||||||
false
|
false
|
||||||
|
@ -1020,4 +1028,30 @@ hashtree_query_test() ->
|
||||||
ok = book_close(Bookie2),
|
ok = book_close(Bookie2),
|
||||||
reset_filestructure().
|
reset_filestructure().
|
||||||
|
|
||||||
|
hashtree_query_withjournalcheck_test() ->
|
||||||
|
RootPath = reset_filestructure(),
|
||||||
|
{ok, Bookie1} = book_start(#bookie_options{root_path=RootPath,
|
||||||
|
max_journalsize=1000000,
|
||||||
|
cache_size=500}),
|
||||||
|
ObjL1 = generate_multiple_objects(800, 1),
|
||||||
|
% Put in all the objects with a TTL in the future
|
||||||
|
Future = leveled_codec:integer_now() + 300,
|
||||||
|
lists:foreach(fun({K, V, S}) -> ok = book_tempput(Bookie1,
|
||||||
|
"Bucket", K, V, S,
|
||||||
|
?STD_TAG,
|
||||||
|
Future) end,
|
||||||
|
ObjL1),
|
||||||
|
{async, HTFolder1} = book_returnfolder(Bookie1,
|
||||||
|
{hashtree_query,
|
||||||
|
?STD_TAG,
|
||||||
|
false}),
|
||||||
|
KeyHashList = HTFolder1(),
|
||||||
|
{async, HTFolder2} = book_returnfolder(Bookie1,
|
||||||
|
{hashtree_query,
|
||||||
|
?STD_TAG,
|
||||||
|
check_presence}),
|
||||||
|
?assertMatch(KeyHashList, HTFolder2()),
|
||||||
|
ok = book_close(Bookie1),
|
||||||
|
reset_filestructure().
|
||||||
|
|
||||||
-endif.
|
-endif.
|
Loading…
Add table
Add a link
Reference in a new issue