summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Sun <tony.sun427@gmail.com>2020-08-28 09:58:49 -0700
committerGitHub <noreply@github.com>2020-08-28 09:58:49 -0700
commitac695208aa6fb2ee6ac6c7d55aa6abd82c16785e (patch)
treeae3ef75d970b4403ce94481f7baf8611e59907bd
parentbdfb129c1242e26cf312d2bc5cf1fe3af2e1e56d (diff)
parent3004513c12592b19b5b77a6edcfdef5f4450716d (diff)
downloadcouchdb-ac695208aa6fb2ee6ac6c7d55aa6abd82c16785e.tar.gz
Merge pull request #3105 from apache/fix-partition-query-limit
bypass partition query limit for mango
-rwxr-xr-xdev/run5
-rw-r--r--src/couch_mrview/src/couch_mrview_util.erl9
-rw-r--r--src/mango/src/mango_cursor_view.erl6
-rw-r--r--test/elixir/test/partition_mango_test.exs53
4 files changed, 68 insertions, 5 deletions
diff --git a/dev/run b/dev/run
index 573c80c9b..6d8bc5201 100755
--- a/dev/run
+++ b/dev/run
@@ -427,7 +427,10 @@ def boot_haproxy(ctx):
def hack_default_ini(ctx, node, contents):
contents = re.sub(
- "^\[httpd\]$", "[httpd]\nenable = true", contents, flags=re.MULTILINE,
+ "^\[httpd\]$",
+ "[httpd]\nenable = true",
+ contents,
+ flags=re.MULTILINE,
)
if ctx["enable_erlang_views"]:
diff --git a/src/couch_mrview/src/couch_mrview_util.erl b/src/couch_mrview/src/couch_mrview_util.erl
index e971720c9..d318a3f4a 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 240ef501d..68d7c3b62 100644
--- a/src/mango/src/mango_cursor_view.erl
+++ b/src/mango/src/mango_cursor_view.erl
@@ -116,7 +116,11 @@ 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 992999fb9..9e4f1e783 100644
--- a/test/elixir/test/partition_mango_test.exs
+++ b/test/elixir/test/partition_mango_test.exs
@@ -547,6 +547,59 @@ defmodule PartitionMangoTest do
end
@tag :with_partitioned_db
+ test "partitioned query with query server config set", context do
+ db_name = context[:db_name]
+ 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 =
+ Couch.post(
+ url,
+ body: %{
+ selector: %{
+ value: %{
+ "$gte": 6,
+ "$lt": 16
+ }
+ },
+ limit: 3
+ }
+ )
+
+ assert resp.status_code == 200
+ partitions = get_partitions(resp)
+ assert length(partitions) == 3
+ assert_correct_partition(partitions, "foo")
+
+ %{:body => %{"bookmark" => bookmark}} = resp
+
+ resp =
+ Couch.post(
+ url,
+ body: %{
+ selector: %{
+ value: %{
+ "$gte": 6,
+ "$lt": 16
+ }
+ },
+ limit: 3,
+ bookmark: bookmark
+ }
+ )
+
+ assert resp.status_code == 200
+ partitions = get_partitions(resp)
+ assert length(partitions) == 2
+ assert_correct_partition(partitions, "foo")
+ end
+
+ @tag :with_partitioned_db
test "global query uses global index", context do
db_name = context[:db_name]
create_partition_docs(db_name)