You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by to...@apache.org on 2020/08/26 20:59:03 UTC

[couchdb] branch fix-partition-query-limit created (now c2670f9)

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

tonysun83 pushed a change to branch fix-partition-query-limit
in repository https://gitbox.apache.org/repos/asf/couchdb.git.


      at c2670f9  bypass partition query limit for mango

This branch includes the following new commits:

     new c2670f9  bypass partition query limit for mango

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: bypass partition query limit for mango

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

tonysun83 pushed a commit to branch fix-partition-query-limit
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit c2670f9c80b55f958d305369eacce392c977b05e
Author: Tony Sun <to...@gmail.com>
AuthorDate: Wed Aug 26 13:56:14 2020 -0700

    bypass partition query limit for mango
    
    When partition_query_limit is set for couch_mrview, it limits how many
    docs can be scanned when executing partitioned queries. But this limits
    mango's doc scans internally. This leads to documents not being scanned
    to fulfill a query. This fixes:
    https://github.com/apache/couchdb/issues/2795
---
 src/couch_mrview/src/couch_mrview_util.erl | 9 ++++++---
 src/mango/src/mango_cursor_view.erl        | 3 ++-
 test/elixir/test/partition_mango_test.exs  | 3 +++
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/couch_mrview/src/couch_mrview_util.erl b/src/couch_mrview/src/couch_mrview_util.erl
index e971720..d318a3f 100644
--- a/src/couch_mrview/src/couch_mrview_util.erl
+++ b/src/couch_mrview/src/couch_mrview_util.erl
@@ -425,9 +425,12 @@ validate_args(#mrst{} = State, Args0) ->
 
 
 apply_limit(ViewPartitioned, Args) ->
-    LimitType = case ViewPartitioned of
-        true -> "partition_query_limit";
-        false -> "query_limit"
+    Options = Args#mrargs.extra,
+    IgnorePQLimit = lists:keyfind(ignore_partition_query_limit, 1, Options),
+    LimitType = case {ViewPartitioned, IgnorePQLimit} of
+        {true, false} -> "partition_query_limit";
+        {true, _} -> "query_limit";
+        {false, _} -> "query_limit"
     end,
 
     MaxLimit = config:get_integer("query_server_config",
diff --git a/src/mango/src/mango_cursor_view.erl b/src/mango/src/mango_cursor_view.erl
index 240ef50..eebece3 100644
--- a/src/mango/src/mango_cursor_view.erl
+++ b/src/mango/src/mango_cursor_view.erl
@@ -116,7 +116,8 @@ base_args(#cursor{index = Idx, selector = Selector} = Cursor) ->
         start_key = StartKey,
         end_key = EndKey,
         include_docs = true,
-        extra = [{callback, {?MODULE, view_cb}}, {selector, Selector}]
+        extra = [{callback, {?MODULE, view_cb}}, {selector, Selector},
+            {ignore_partition_query_limit, true}]
     }.
 
 
diff --git a/test/elixir/test/partition_mango_test.exs b/test/elixir/test/partition_mango_test.exs
index 992999f..7ccf5cd 100644
--- a/test/elixir/test/partition_mango_test.exs
+++ b/test/elixir/test/partition_mango_test.exs
@@ -502,6 +502,9 @@ defmodule PartitionMangoTest do
     create_partition_docs(db_name)
     create_index(db_name, ["value"])
 
+    # this is to test that we bypass partition_query_limit for mango
+    set_config({"query_server_config", "partition_query_limit", "1"})
+
     url = "/#{db_name}/_partition/foo/_find"
 
     resp =