couchdb-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Benoit Chesneau <bchesn...@gmail.com>
Subject Re: couchdb commit: updated refs/heads/1994-merge-rcouch to 2bf88e3
Date Tue, 11 Feb 2014 19:42:08 GMT
On Tue, Feb 11, 2014 at 8:13 PM, Adam Kocoloski <kocolosk@apache.org> wrote:
> What's the rationale for this option?  When would I want to avoid using the index?
>
> Adam
>
Well on small db you probably don't need it. You can manage to fold
over all results the first time. At least it was added for such
reason, but we can eventually removed it.

- benoit

> On Feb 7, 2014, at 10:00 AM, benoitc@apache.org wrote:
>
>> Updated Branches:
>>  refs/heads/1994-merge-rcouch 38a18abbc -> 2bf88e3ff
>>
>>
>> add the option use_index={no,yes} (yes by default)
>>
>> If use_index=no even if the view is indexed by sequence, the index won't
>> be use. Instead it will fold the btree and return the changes each time
>> the view map function can emit a value. (default behaviour).
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/2bf88e3f
>> Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/2bf88e3f
>> Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/2bf88e3f
>>
>> Branch: refs/heads/1994-merge-rcouch
>> Commit: 2bf88e3ff03cc674f3001ec93240378cada5bde5
>> Parents: 38a18ab
>> Author: Benoit Chesneau <bchesneau@gmail.com>
>> Authored: Fri Feb 7 15:57:25 2014 +0100
>> Committer: Benoit Chesneau <bchesneau@gmail.com>
>> Committed: Fri Feb 7 15:57:25 2014 +0100
>>
>> ----------------------------------------------------------------------
>> apps/couch_httpd/src/couch_httpd_changes.erl | 21 +++++++++++++++------
>> share/www/script/test/changes.js             |  9 +++++++++
>> 2 files changed, 24 insertions(+), 6 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/2bf88e3f/apps/couch_httpd/src/couch_httpd_changes.erl
>> ----------------------------------------------------------------------
>> diff --git a/apps/couch_httpd/src/couch_httpd_changes.erl b/apps/couch_httpd/src/couch_httpd_changes.erl
>> index 56ce559..82d9fe0 100644
>> --- a/apps/couch_httpd/src/couch_httpd_changes.erl
>> +++ b/apps/couch_httpd/src/couch_httpd_changes.erl
>> @@ -118,6 +118,7 @@ handle_changes_req1(Req, #db{name=DbName}=Db) ->
>>
>>
>> handle_changes(ChangesArgs, Req, Db) ->
>> +
>>     case ChangesArgs#changes_args.filter of
>>         "_view" ->
>>             handle_view_changes(ChangesArgs, Req, Db);
>> @@ -146,18 +147,26 @@ handle_view_changes(ChangesArgs, Req, Db) ->
>>     ViewOptions = parse_view_options(Query, []),
>>
>>     {ok, Infos} = couch_mrview:get_info(Db, DDocId),
>> -    case lists:member(<<"seq_indexed">>,
>> -                      proplists:get_value(update_options, Infos, [])) of
>> -        true ->
>> +    IsIndexed = lists:member(<<"seq_indexed">>,
>> +                             proplists:get_value(update_options, Infos,
>> +                                                 [])),
>> +
>> +    NoIndex = couch_httpd:qs_value(Req, "use_index", "yes") =:= "no",
>> +
>> +    case {IsIndexed, NoIndex} of
>> +        {true, false} ->
>>             handle_view_changes(Db, DDocId, VName, ViewOptions, ChangesArgs,
>>                                 Req);
>> -        false when ViewOptions /= [] ->
>> +        {true, true} when ViewOptions /= [] ->
>>             ?LOG_ERROR("Tried to filter a non sequence indexed view~n",[]),
>>             throw({bad_request, seqs_not_indexed});
>> -        false ->
>> +        {false, _} when ViewOptions /= [] ->
>> +            ?LOG_ERROR("Tried to filter a non sequence indexed view~n",[]),
>> +            throw({bad_request, seqs_not_indexed});
>> +        {_, _} ->
>>             %% old method we are getting changes using the btree instead
>>             %% which is not efficient, log it
>> -            ?LOG_WARN("Get view changes with seq_indexed=false.~n", []),
>> +            ?LOG_WARN("Filter without using a seq_indexed view.~n", []),
>>             couch_changes:handle_changes(ChangesArgs, Req, Db)
>>     end.
>>
>>
>> http://git-wip-us.apache.org/repos/asf/couchdb/blob/2bf88e3f/share/www/script/test/changes.js
>> ----------------------------------------------------------------------
>> diff --git a/share/www/script/test/changes.js b/share/www/script/test/changes.js
>> index 5c543f1..3419eb6 100644
>> --- a/share/www/script/test/changes.js
>> +++ b/share/www/script/test/changes.js
>> @@ -444,6 +444,15 @@ couchTests.changes = function(debug) {
>>   T(resp.results.length === 1);
>>   T(resp.results[0].id === "blah");
>>
>> +   var req = CouchDB.request("GET", "/test_suite_db/_changes?filter=_view&view=changes_seq_indexed/blah&use_index=no");
>> +  var resp = JSON.parse(req.responseText);
>> +  T(resp.results.length === 1);
>> +  T(resp.results[0].id === "blah");
>> +
>> +  var req = CouchDB.request("GET", '/test_suite_db/_changes?filter=_view&view=changes_seq_indexed/blah&key="test"&use_index=no');
>> +  TEquals(400, req.status, "should return 400 for when use_index=no");
>> +
>> +
>>   // test for userCtx
>>   run_on_modified_server(
>>     [{section: "httpd",
>>
>

Mime
View raw message