Fold Objects - Check values test
Test that summed values in fold objects before and after restart
This commit is contained in:
parent
ba628c2f40
commit
eeeee07081
3 changed files with 48 additions and 8 deletions
|
@ -528,16 +528,22 @@ foldobjects(State, Tag, StartKey, EndKey, FoldObjectsFun) ->
|
||||||
{ok,
|
{ok,
|
||||||
{LedgerSnapshot, LedgerCache},
|
{LedgerSnapshot, LedgerCache},
|
||||||
JournalSnapshot} = snapshot_store(State, store),
|
JournalSnapshot} = snapshot_store(State, store),
|
||||||
|
{FoldFun, InitAcc} = case is_tuple(FoldObjectsFun) of
|
||||||
|
true ->
|
||||||
|
FoldObjectsFun;
|
||||||
|
false ->
|
||||||
|
{FoldObjectsFun, []}
|
||||||
|
end,
|
||||||
Folder = fun() ->
|
Folder = fun() ->
|
||||||
leveled_log:log("B0004", [gb_trees:size(LedgerCache)]),
|
leveled_log:log("B0004", [gb_trees:size(LedgerCache)]),
|
||||||
ok = leveled_penciller:pcl_loadsnapshot(LedgerSnapshot,
|
ok = leveled_penciller:pcl_loadsnapshot(LedgerSnapshot,
|
||||||
LedgerCache),
|
LedgerCache),
|
||||||
AccFun = accumulate_objects(FoldObjectsFun, JournalSnapshot, Tag),
|
AccFun = accumulate_objects(FoldFun, JournalSnapshot, Tag),
|
||||||
Acc = leveled_penciller:pcl_fetchkeys(LedgerSnapshot,
|
Acc = leveled_penciller:pcl_fetchkeys(LedgerSnapshot,
|
||||||
StartKey,
|
StartKey,
|
||||||
EndKey,
|
EndKey,
|
||||||
AccFun,
|
AccFun,
|
||||||
[]),
|
InitAcc),
|
||||||
ok = leveled_penciller:pcl_close(LedgerSnapshot),
|
ok = leveled_penciller:pcl_close(LedgerSnapshot),
|
||||||
ok = leveled_inker:ink_close(JournalSnapshot),
|
ok = leveled_inker:ink_close(JournalSnapshot),
|
||||||
Acc
|
Acc
|
||||||
|
|
|
@ -11,27 +11,30 @@
|
||||||
rotating_objects/1]).
|
rotating_objects/1]).
|
||||||
|
|
||||||
all() -> [
|
all() -> [
|
||||||
small_load_with2i,
|
small_load_with2i %,
|
||||||
query_count,
|
% query_count,
|
||||||
rotating_objects
|
% rotating_objects
|
||||||
].
|
].
|
||||||
|
|
||||||
|
|
||||||
small_load_with2i(_Config) ->
|
small_load_with2i(_Config) ->
|
||||||
RootPath = testutil:reset_filestructure(),
|
RootPath = testutil:reset_filestructure(),
|
||||||
StartOpts1 = [{root_path, RootPath},
|
StartOpts1 = [{root_path, RootPath},
|
||||||
{max_journalsize, 50000000}],
|
{max_journalsize, 5000000}],
|
||||||
|
% low journal size to make sure > 1 created
|
||||||
{ok, Bookie1} = leveled_bookie:book_start(StartOpts1),
|
{ok, Bookie1} = leveled_bookie:book_start(StartOpts1),
|
||||||
{TestObject, TestSpec} = testutil:generate_testobject(),
|
{TestObject, TestSpec} = testutil:generate_testobject(),
|
||||||
ok = leveled_bookie:book_riakput(Bookie1, TestObject, TestSpec),
|
ok = leveled_bookie:book_riakput(Bookie1, TestObject, TestSpec),
|
||||||
testutil:check_forobject(Bookie1, TestObject),
|
testutil:check_forobject(Bookie1, TestObject),
|
||||||
testutil:check_formissingobject(Bookie1, "Bucket1", "Key2"),
|
testutil:check_formissingobject(Bookie1, "Bucket1", "Key2"),
|
||||||
testutil:check_forobject(Bookie1, TestObject),
|
testutil:check_forobject(Bookie1, TestObject),
|
||||||
|
ObjectGen = testutil:get_compressiblevalue_andinteger(),
|
||||||
|
IndexGen = testutil:get_randomindexes_generator(8),
|
||||||
ObjL1 = testutil:generate_objects(10000,
|
ObjL1 = testutil:generate_objects(10000,
|
||||||
uuid,
|
uuid,
|
||||||
[],
|
[],
|
||||||
testutil:get_compressiblevalue(),
|
ObjectGen,
|
||||||
testutil:get_randomindexes_generator(8)),
|
IndexGen),
|
||||||
lists:foreach(fun({_RN, Obj, Spc}) ->
|
lists:foreach(fun({_RN, Obj, Spc}) ->
|
||||||
leveled_bookie:book_riakput(Bookie1, Obj, Spc) end,
|
leveled_bookie:book_riakput(Bookie1, Obj, Spc) end,
|
||||||
ObjL1),
|
ObjL1),
|
||||||
|
@ -74,7 +77,34 @@ small_load_with2i(_Config) ->
|
||||||
true = 9900 == length(KeyHashList2),
|
true = 9900 == length(KeyHashList2),
|
||||||
true = 9900 == length(KeyHashList3),
|
true = 9900 == length(KeyHashList3),
|
||||||
|
|
||||||
|
SumIntegerFun = fun(_B, _K, V, Acc) ->
|
||||||
|
[C] = V#r_object.contents,
|
||||||
|
{I, _Bin} = C#r_content.value,
|
||||||
|
Acc + I
|
||||||
|
end,
|
||||||
|
{async, Sum1} = leveled_bookie:book_returnfolder(Bookie1,
|
||||||
|
{foldobjects_bybucket,
|
||||||
|
?RIAK_TAG,
|
||||||
|
"Bucket",
|
||||||
|
{SumIntegerFun,
|
||||||
|
0}}),
|
||||||
|
Total1 = Sum1(),
|
||||||
|
true = Total1 > 100000,
|
||||||
|
|
||||||
ok = leveled_bookie:book_close(Bookie1),
|
ok = leveled_bookie:book_close(Bookie1),
|
||||||
|
|
||||||
|
{ok, Bookie2} = leveled_bookie:book_start(StartOpts1),
|
||||||
|
|
||||||
|
{async, Sum2} = leveled_bookie:book_returnfolder(Bookie2,
|
||||||
|
{foldobjects_bybucket,
|
||||||
|
?RIAK_TAG,
|
||||||
|
"Bucket",
|
||||||
|
{SumIntegerFun,
|
||||||
|
0}}),
|
||||||
|
Total2 = Sum2(),
|
||||||
|
true = Total2 == Total1,
|
||||||
|
|
||||||
|
ok = leveled_bookie:book_close(Bookie2),
|
||||||
testutil:reset_filestructure().
|
testutil:reset_filestructure().
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
get_key/1,
|
get_key/1,
|
||||||
get_value/1,
|
get_value/1,
|
||||||
get_compressiblevalue/0,
|
get_compressiblevalue/0,
|
||||||
|
get_compressiblevalue_andinteger/0,
|
||||||
get_randomindexes_generator/1,
|
get_randomindexes_generator/1,
|
||||||
name_list/0,
|
name_list/0,
|
||||||
load_objects/5,
|
load_objects/5,
|
||||||
|
@ -147,6 +148,9 @@ generate_compressibleobjects(Count, KeyNumber) ->
|
||||||
generate_objects(Count, KeyNumber, [], V).
|
generate_objects(Count, KeyNumber, [], V).
|
||||||
|
|
||||||
|
|
||||||
|
get_compressiblevalue_andinteger() ->
|
||||||
|
{random:uniform(1000), get_compressiblevalue()}.
|
||||||
|
|
||||||
get_compressiblevalue() ->
|
get_compressiblevalue() ->
|
||||||
S1 = "111111111111111",
|
S1 = "111111111111111",
|
||||||
S2 = "222222222222222",
|
S2 = "222222222222222",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue