From 835955adb92deeb78a9e18e05855aff1f58c728c Mon Sep 17 00:00:00 2001 From: Martin Sumner Date: Wed, 5 Dec 2018 20:46:17 +0000 Subject: [PATCH] Deprecate use of Bucket as a constraint in indexfold Must also give a StartKey. Otherwise there may be conflict when tuplebuckets are used --- src/leveled_bookie.erl | 18 +++++++++++++----- src/leveled_log.erl | 3 +++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/leveled_bookie.erl b/src/leveled_bookie.erl index 14d0090..3b1b56c 100644 --- a/src/leveled_bookie.erl +++ b/src/leveled_bookie.erl @@ -610,13 +610,13 @@ book_returnfolder(Pid, RunnerType) -> %% still closing down the snapshot). This may be used, for example, to %% curtail a fold in the application at max_results -spec book_indexfold(pid(), - Constraint:: {Bucket, Key} | Bucket, + Constraint:: {Bucket, StartKey}, FoldAccT :: {FoldFun, Acc}, Range :: {IndexField, Start, End}, TermHandling :: {ReturnTerms, TermRegex}) -> {async, Runner::fun()} when Bucket::term(), - Key::term(), + StartKey::term(), FoldFun::fun((Bucket, Key | {IndexVal, Key}, Acc) -> Acc), Acc::term(), IndexField::term(), @@ -626,10 +626,19 @@ book_returnfolder(Pid, RunnerType) -> ReturnTerms::boolean(), TermRegex :: leveled_codec:regular_expression(). -book_indexfold(Pid, Constraint, FoldAccT, Range, TermHandling) -> +book_indexfold(Pid, Constraint, FoldAccT, Range, TermHandling) + when is_tuple(Constraint) -> RunnerType = {index_query, Constraint, FoldAccT, Range, TermHandling}, - book_returnfolder(Pid, RunnerType). + book_returnfolder(Pid, RunnerType); +book_indexfold(Pid, Bucket, FoldAccT, Range, TermHandling) -> + % StartKey must be specified to avoid confusion when bucket is a tuple. + % Use an empty StartKey if no StartKey is required (e.g. <<>>). In a + % future release this code branch may be removed, and such queries may + % instead return `error`. For now null is assumed to be lower than any + % key + leveled_log:log("B0019", [Bucket]), + book_indexfold(Pid, {Bucket, null}, FoldAccT, Range, TermHandling). %% @doc list buckets. Folds over the ledger only. Given a `Tag' folds @@ -2914,5 +2923,4 @@ check_notfound_test() -> ?assertMatch({false, 0}, check_notfound(0, MissingFun)). - -endif. diff --git a/src/leveled_log.erl b/src/leveled_log.erl index 59d5202..4d60d5b 100644 --- a/src/leveled_log.erl +++ b/src/leveled_log.erl @@ -57,6 +57,9 @@ {"B0018", {info, "Positive HEAD responses timed with sample_count=~w and " ++ " pcl_time=~w rsp_time=~w"}}, + {"B0019", + {warn, "Use of book_indexfold with constraint of Bucket ~w with " + ++ "no StartKey is deprecated"}}, {"R0001", {debug, "Object fold to process batch of ~w objects"}},