Add support for folding keys on a single bucket

This commit is contained in:
martinsumner 2016-11-17 15:55:29 +00:00
parent 67a9f5bae6
commit e3004faa6e
3 changed files with 21 additions and 9 deletions

View file

@ -349,6 +349,10 @@ handle_call({return_folder, FolderType}, _From, State) ->
{reply, {reply,
allkey_query(State, Tag), allkey_query(State, Tag),
State}; State};
{keylist, Tag, Bucket} ->
{reply,
bucketkey_query(State, Tag, Bucket),
State};
{hashtree_query, Tag, JournalCheck} -> {hashtree_query, Tag, JournalCheck} ->
{reply, {reply,
hashtree_query(State, Tag, JournalCheck), hashtree_query(State, Tag, JournalCheck),
@ -535,7 +539,7 @@ foldobjects(State, Tag, StartKey, EndKey, FoldObjectsFun) ->
{async, Folder}. {async, Folder}.
allkey_query(State, Tag) -> bucketkey_query(State, Tag, Bucket) ->
{ok, {ok,
{LedgerSnapshot, LedgerCache}, {LedgerSnapshot, LedgerCache},
_JournalSnapshot} = snapshot_store(State, ledger), _JournalSnapshot} = snapshot_store(State, ledger),
@ -543,8 +547,8 @@ allkey_query(State, Tag) ->
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),
SK = leveled_codec:to_ledgerkey(null, null, Tag), SK = leveled_codec:to_ledgerkey(Bucket, null, Tag),
EK = leveled_codec:to_ledgerkey(null, null, Tag), EK = leveled_codec:to_ledgerkey(Bucket, null, Tag),
AccFun = accumulate_keys(), AccFun = accumulate_keys(),
Acc = leveled_penciller:pcl_fetchkeys(LedgerSnapshot, Acc = leveled_penciller:pcl_fetchkeys(LedgerSnapshot,
SK, SK,
@ -556,6 +560,9 @@ allkey_query(State, Tag) ->
end, end,
{async, Folder}. {async, Folder}.
allkey_query(State, Tag) ->
bucketkey_query(State, Tag, null).
snapshot_store(State, SnapType) -> snapshot_store(State, SnapType) ->
PCLopts = #penciller_options{start_snapshot=true, PCLopts = #penciller_options{start_snapshot=true,

View file

@ -428,6 +428,11 @@ rotating_object_check(RootPath, B, NumberOfObjects) ->
ok = testutil:check_indexed_objects(Book2, B, KSpcL3, V3), ok = testutil:check_indexed_objects(Book2, B, KSpcL3, V3),
{KSpcL4, V4} = testutil:put_altered_indexed_objects(Book2, B, KSpcL3), {KSpcL4, V4} = testutil:put_altered_indexed_objects(Book2, B, KSpcL3),
ok = testutil:check_indexed_objects(Book2, B, KSpcL4, V4), ok = testutil:check_indexed_objects(Book2, B, KSpcL4, V4),
{async, BList} = leveled_bookie:book_returnfolder(Book2,
{keylist,
?RIAK_TAG,
B}),
true = NumberOfObjects == length(BList()),
ok = leveled_bookie:book_close(Book2), ok = leveled_bookie:book_close(Book2),
ok. ok.

View file

@ -27,7 +27,7 @@
-export([new/1, -export([new/1,
run/4]). run/4]).
-include("basho_bench.hrl"). % -include("basho_bench.hrl").
-record(state, { -record(state, {
instance instance
@ -37,7 +37,7 @@ get_instances() ->
case basho_bench_config:get(eleveleddb_instances, undefined) of case basho_bench_config:get(eleveleddb_instances, undefined) of
undefined -> undefined ->
Instances = start_instances(), Instances = start_instances(),
?INFO("Instances started ~w~n", [Instances]), % ?INFO("Instances started ~w~n", [Instances]),
basho_bench_config:set(eleveleddb_instances, Instances), basho_bench_config:set(eleveleddb_instances, Instances),
Instances; Instances;
Instances -> Instances ->
@ -48,11 +48,11 @@ get_instances() ->
start_instances() -> start_instances() ->
BaseDir = basho_bench_config:get(eleveleddb_dir, "."), BaseDir = basho_bench_config:get(eleveleddb_dir, "."),
Num = basho_bench_config:get(eleveleddb_num_instances, 1), Num = basho_bench_config:get(eleveleddb_num_instances, 1),
?INFO("Starting up ~p eleveleddb instances under ~s .\n", % ?INFO("Starting up ~p eleveleddb instances under ~s .\n",
[Num, BaseDir]), % [Num, BaseDir]),
Refs = [begin Refs = [begin
Dir = filename:join(BaseDir, "instance." ++ integer_to_list(N)), Dir = filename:join(BaseDir, "instance." ++ integer_to_list(N)),
?INFO("Opening eleveleddb instance in ~s\n", [Dir]), % ?INFO("Opening eleveleddb instance in ~s\n", [Dir]),
{ok, Ref} = leveled_bookie:book_start(Dir, 2000, 500000000), {ok, Ref} = leveled_bookie:book_start(Dir, 2000, 500000000),
Ref Ref
end || N <- lists:seq(1, Num)], end || N <- lists:seq(1, Num)],
@ -62,7 +62,7 @@ new(Id) ->
Instances = get_instances(), Instances = get_instances(),
Count = size(Instances), Count = size(Instances),
Idx = ((Id - 1) rem Count) + 1, Idx = ((Id - 1) rem Count) + 1,
?INFO("Worker ~p using instance ~p.\n", [Id, Idx]), % ?INFO("Worker ~p using instance ~p.\n", [Id, Idx]),
State = #state{instance = element(Idx, Instances)}, State = #state{instance = element(Idx, Instances)},
{ok, State}. {ok, State}.