You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2021/12/20 17:08:16 UTC

[couchdb] 02/02: Apply partition_query_limit and query_limit to _find

This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch enforce_rowlimit_mango
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit d81d59822ffc739a5f9d48ec6e4e1a643cbac785
Author: Robert Newson <rn...@apache.org>
AuthorDate: Mon Dec 20 17:07:37 2021 +0000

    Apply partition_query_limit and query_limit to _find
---
 src/mango/src/mango_cursor_special.erl |  3 ++-
 src/mango/src/mango_cursor_view.erl    |  3 ++-
 src/mango/src/mango_opts.erl           | 10 +++++++++-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/mango/src/mango_cursor_special.erl b/src/mango/src/mango_cursor_special.erl
index f20edeb..6453e95 100644
--- a/src/mango/src/mango_cursor_special.erl
+++ b/src/mango/src/mango_cursor_special.erl
@@ -36,7 +36,8 @@ create(Db, Indexes, Selector, Opts) ->
     Composited = mango_cursor_view:composite_indexes(Indexes, FieldRanges),
     {Index, IndexRanges} = mango_cursor_view:choose_best_index(Db, Composited),
 
-    Limit = couch_util:get_value(limit, Opts, mango_opts:default_limit()),
+    MRLimit = mango_opts:mr_limit(couch_db:is_partitioned(Db)),
+    Limit = erlang:min(MRLimit, couch_util:get_value(limit, Opts, mango_opts:default_limit())),
     Skip = couch_util:get_value(skip, Opts, 0),
     Fields = couch_util:get_value(fields, Opts, all_fields),
     Bookmark = couch_util:get_value(bookmark, Opts),
diff --git a/src/mango/src/mango_cursor_view.erl b/src/mango/src/mango_cursor_view.erl
index eb2271b..0142d36 100644
--- a/src/mango/src/mango_cursor_view.erl
+++ b/src/mango/src/mango_cursor_view.erl
@@ -40,7 +40,8 @@ create(Db, Indexes, Selector, Opts) ->
     Composited = composite_indexes(Indexes, FieldRanges),
     {Index, IndexRanges} = choose_best_index(Db, Composited),
 
-    Limit = couch_util:get_value(limit, Opts, mango_opts:default_limit()),
+    MRLimit = mango_opts:mr_limit(couch_db:is_partitioned(Db)),
+    Limit = erlang:min(MRLimit, couch_util:get_value(limit, Opts, mango_opts:default_limit())),
     Skip = couch_util:get_value(skip, Opts, 0),
     Fields = couch_util:get_value(fields, Opts, all_fields),
     Bookmark = couch_util:get_value(bookmark, Opts),
diff --git a/src/mango/src/mango_opts.erl b/src/mango/src/mango_opts.erl
index 04fe5bb..2bf76fa 100644
--- a/src/mango/src/mango_opts.erl
+++ b/src/mango/src/mango_opts.erl
@@ -36,10 +36,12 @@
     validate_bulk_delete/1,
     validate_partitioned/1,
 
-    default_limit/0
+    default_limit/0,
+    mr_limit/1
 ]).
 
 -include("mango.hrl").
+-include_lib("couch_mrview/include/couch_mrview.hrl").
 
 validate_idx_create({Props}) ->
     Opts = [
@@ -356,3 +358,9 @@ validate_opt(Name, [{validator, Fun} | Rest], Value) ->
 
 default_limit() ->
     config:get_integer("mango", "default_limit", 25).
+
+
+mr_limit(true) ->
+    config:get_integer("query_server_config", "partition_query_limit", ?MAX_VIEW_LIMIT);
+mr_limit(false) ->
+    config:get_integer("query_server_config", "query_limit", ?MAX_VIEW_LIMIT).