From 50967438d37f9e123bda70ce48ab722d3ee5caf5 Mon Sep 17 00:00:00 2001 From: Martin Sumner Date: Sat, 1 Sep 2018 10:39:23 +0100 Subject: [PATCH] Switch from binary_bucketlist Allow for bucket listing of non-binary buckets (integer buckets, buckets with ascii strings) --- src/leveled_bookie.erl | 8 ++++---- src/leveled_runner.erl | 17 +++++++++-------- test/end_to_end/basic_SUITE.erl | 2 +- test/end_to_end/iterator_SUITE.erl | 10 +++++----- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/leveled_bookie.erl b/src/leveled_bookie.erl index 4c41893..9da7647 100644 --- a/src/leveled_bookie.erl +++ b/src/leveled_bookie.erl @@ -503,7 +503,7 @@ book_head(Pid, Bucket, Key) -> %% {bucket_stats, Bucket} -> return a key count and total object size within %% a bucket %% {riakbucket_stats, Bucket} -> as above, but for buckets with the Riak Tag -%% {binary_bucketlist, Tag, {FoldKeysFun, Acc}} -> if we assume buckets and +%% {bucket_list, Tag, {FoldKeysFun, Acc}} -> if we assume buckets and %% keys are binaries, provides a fast bucket list function %% {index_query, %% Constraint, @@ -1200,14 +1200,14 @@ get_runner(State, leveled_runner:foldobjects_byindex(SnapFun, {Tag, Bucket, Field, FromTerm, ToTerm}, FoldObjectsFun); -get_runner(State, {binary_bucketlist, Tag, FoldAccT}) -> +get_runner(State, {bucket_list, Tag, FoldAccT}) -> {FoldBucketsFun, Acc} = FoldAccT, SnapFun = return_snapfun(State, ledger, no_lookup, false, false), - leveled_runner:binary_bucketlist(SnapFun, Tag, FoldBucketsFun, Acc); + leveled_runner:bucket_list(SnapFun, Tag, FoldBucketsFun, Acc); get_runner(State, {first_bucket, Tag, FoldAccT}) -> {FoldBucketsFun, Acc} = FoldAccT, SnapFun = return_snapfun(State, ledger, no_lookup, false, false), - leveled_runner:binary_bucketlist(SnapFun, Tag, FoldBucketsFun, Acc, 1); + leveled_runner:bucket_list(SnapFun, Tag, FoldBucketsFun, Acc, 1); %% Set of specific runners, primarily used as exmaples for tests get_runner(State, DeprecatedQuery) -> get_deprecatedrunner(State, DeprecatedQuery). diff --git a/src/leveled_runner.erl b/src/leveled_runner.erl index 499e3ec..4ea08ac 100644 --- a/src/leveled_runner.erl +++ b/src/leveled_runner.erl @@ -23,8 +23,8 @@ -export([ bucket_sizestats/3, - binary_bucketlist/4, - binary_bucketlist/5, + bucket_list/4, + bucket_list/5, index_query/3, bucketkey_query/4, bucketkey_query/5, @@ -73,19 +73,20 @@ bucket_sizestats(SnapFun, Bucket, Tag) -> end, {async, Runner}. --spec binary_bucketlist(fun(), leveled_codec:tag(), fun(), any()) +-spec bucket_list(fun(), leveled_codec:tag(), fun(), any()) -> {async, fun()}. %% @doc -%% List buckets for tag, assuming bucket names are all binary type -binary_bucketlist(SnapFun, Tag, FoldBucketsFun, InitAcc) -> - binary_bucketlist(SnapFun, Tag, FoldBucketsFun, InitAcc, -1). +%% List buckets for tag, assuming bucket names are all either binary, ascii +%% strings or integers +bucket_list(SnapFun, Tag, FoldBucketsFun, InitAcc) -> + bucket_list(SnapFun, Tag, FoldBucketsFun, InitAcc, -1). --spec binary_bucketlist(fun(), leveled_codec:tag(), fun(), any(), integer()) +-spec bucket_list(fun(), leveled_codec:tag(), fun(), any(), integer()) -> {async, fun()}. %% @doc %% set Max Buckets to -1 to list all buckets, otherwise will only return %% MaxBuckets (use 1 to confirm that there exists any bucket for a given Tag) -binary_bucketlist(SnapFun, Tag, FoldBucketsFun, InitAcc, MaxBuckets) -> +bucket_list(SnapFun, Tag, FoldBucketsFun, InitAcc, MaxBuckets) -> Runner = fun() -> {ok, LedgerSnapshot, _JournalSnapshot} = SnapFun(), diff --git a/test/end_to_end/basic_SUITE.erl b/test/end_to_end/basic_SUITE.erl index 14aca22..72028be 100644 --- a/test/end_to_end/basic_SUITE.erl +++ b/test/end_to_end/basic_SUITE.erl @@ -778,7 +778,7 @@ is_empty_test(_Config) -> ok = testutil:book_riakput(Bookie1, TestObject3, TestSpec3), FoldBucketsFun = fun(B, Acc) -> sets:add_element(B, Acc) end, - BucketListQuery = {binary_bucketlist, + BucketListQuery = {bucket_list, ?RIAK_TAG, {FoldBucketsFun, sets:new()}}, {async, BL} = leveled_bookie:book_returnfolder(Bookie1, BucketListQuery), diff --git a/test/end_to_end/iterator_SUITE.erl b/test/end_to_end/iterator_SUITE.erl index 3a235c7..4a78ed6 100644 --- a/test/end_to_end/iterator_SUITE.erl +++ b/test/end_to_end/iterator_SUITE.erl @@ -173,13 +173,13 @@ small_load_with2i(_Config) -> true = Total2 == Total1, FoldBucketsFun = fun(B, Acc) -> sets:add_element(B, Acc) end, - % Should not find any buckets - as there is a non-binary bucket, and no - % binary ones - BucketListQuery = {binary_bucketlist, + % this should find Bucket and Bucket1 - as we can now find string-based + % buckets using bucket_list - i.e. it isn't just binary buckets now + BucketListQuery = {bucket_list, ?RIAK_TAG, {FoldBucketsFun, sets:new()}}, {async, BL} = leveled_bookie:book_returnfolder(Bookie2, BucketListQuery), - true = sets:size(BL()) == 0, + true = sets:size(BL()) == 2, ok = leveled_bookie:book_close(Bookie2), testutil:reset_filestructure(). @@ -394,7 +394,7 @@ query_count(_Config) -> testutil:check_forobject(Book4, TestObject), FoldBucketsFun = fun(B, Acc) -> sets:add_element(B, Acc) end, - BucketListQuery = {binary_bucketlist, + BucketListQuery = {bucket_list, ?RIAK_TAG, {FoldBucketsFun, sets:new()}}, {async, BLF1} = leveled_bookie:book_returnfolder(Book4, BucketListQuery),