Iterator support
Add iterator support, used initially only for retrieving bucket statistics. The iterator is supported by exporting a function, and when the function is claled it will take a snapshot of the ledger, run the iterator and hten close the snapshot. This required a numbe rof underlying changes, in particular to get key comparison to work as "expected". The code had previously misunderstood how comparison worked between Erlang terms, and in particular did not account for tuple length being compared first by size of the tuple (and not just by each element in order).
This commit is contained in:
parent
d2cc07a9eb
commit
0a08867280
6 changed files with 762 additions and 202 deletions
|
@ -7,9 +7,9 @@
|
|||
journal_compaction/1,
|
||||
fetchput_snapshot/1]).
|
||||
|
||||
all() -> [simple_put_fetch_head,
|
||||
many_put_fetch_head,
|
||||
journal_compaction,
|
||||
all() -> [% simple_put_fetch_head,
|
||||
% many_put_fetch_head,
|
||||
% journal_compaction,
|
||||
fetchput_snapshot].
|
||||
|
||||
|
||||
|
@ -203,6 +203,15 @@ fetchput_snapshot(_Config) ->
|
|||
{ok, FNsC} = file:list_dir(RootPath ++ "/ledger/ledger_files"),
|
||||
true = length(FNsB) > length(FNsA),
|
||||
true = length(FNsB) > length(FNsC),
|
||||
|
||||
{B1Size, B1Count} = check_bucket_stats(Bookie2, "Bucket1"),
|
||||
true = B1Size > 0,
|
||||
true = B1Count == 1,
|
||||
{B1Size, B1Count} = check_bucket_stats(Bookie2, "Bucket1"),
|
||||
{BSize, BCount} = check_bucket_stats(Bookie2, "Bucket"),
|
||||
true = BSize > 0,
|
||||
true = BCount == 140000,
|
||||
|
||||
ok = leveled_bookie:book_close(Bookie2),
|
||||
reset_filestructure().
|
||||
|
||||
|
@ -217,6 +226,21 @@ reset_filestructure() ->
|
|||
RootPath.
|
||||
|
||||
|
||||
|
||||
check_bucket_stats(Bookie, Bucket) ->
|
||||
FoldSW1 = os:timestamp(),
|
||||
io:format("Checking bucket size~n"),
|
||||
{async, Folder1} = leveled_bookie:book_returnfolder(Bookie,
|
||||
{bucket_stats,
|
||||
Bucket}),
|
||||
{B1Size, B1Count} = Folder1(),
|
||||
io:format("Bucket fold completed in ~w microseconds~n",
|
||||
[timer:now_diff(os:timestamp(), FoldSW1)]),
|
||||
io:format("Bucket ~w has size ~w and count ~w~n",
|
||||
[Bucket, B1Size, B1Count]),
|
||||
{B1Size, B1Count}.
|
||||
|
||||
|
||||
check_bookie_forlist(Bookie, ChkList) ->
|
||||
check_bookie_forlist(Bookie, ChkList, false).
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue