You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ga...@apache.org on 2020/04/02 12:39:38 UTC

[couchdb] 10/18: remove partition opts from mango

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

garren pushed a commit to branch fdb-mango-indexes
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 0df103b46807f95aebe0b0955115a19842678159
Author: Garren Smith <ga...@gmail.com>
AuthorDate: Tue Mar 24 14:23:09 2020 +0200

    remove partition opts from mango
---
 src/mango/src/mango_cursor.erl      |   1 -
 src/mango/src/mango_cursor_text.erl |   9 ---
 src/mango/src/mango_cursor_view.erl |   6 --
 src/mango/src/mango_error.erl       |  14 ----
 src/mango/src/mango_httpd.erl       |  21 +-----
 src/mango/src/mango_idx.erl         | 126 +++---------------------------------
 src/mango/src/mango_idx.hrl         |   1 -
 src/mango/src/mango_idx_text.erl    |   1 -
 src/mango/src/mango_idx_view.erl    |   1 -
 src/mango/src/mango_opts.erl        |  30 ---------
 10 files changed, 10 insertions(+), 200 deletions(-)

diff --git a/src/mango/src/mango_cursor.erl b/src/mango/src/mango_cursor.erl
index b1cb414..f16765b 100644
--- a/src/mango/src/mango_cursor.erl
+++ b/src/mango/src/mango_cursor.erl
@@ -72,7 +72,6 @@ explain(#cursor{}=Cursor) ->
     {[
         {dbname, mango_idx:dbname(Idx)},
         {index, mango_idx:to_json(Idx)},
-        {partitioned, mango_idx:partitioned(Idx)},
         {selector, Selector},
         {opts, {Opts}},
         {limit, Limit},
diff --git a/src/mango/src/mango_cursor_text.erl b/src/mango/src/mango_cursor_text.erl
index 43ef84e..ccf58ad 100644
--- a/src/mango/src/mango_cursor_text.erl
+++ b/src/mango/src/mango_cursor_text.erl
@@ -77,7 +77,6 @@ explain(Cursor) ->
     } = Cursor,
     [
         {'query', mango_selector_text:convert(Selector)},
-        {partition, get_partition(Opts, null)},
         {sort, sort_query(Opts, Selector)}
     ].
 
@@ -95,7 +94,6 @@ execute(Cursor, UserFun, UserAcc) ->
     Query = mango_selector_text:convert(Selector),
     QueryArgs = #index_query_args{
         q = Query,
-        partition = get_partition(Opts, nil),
         sort = sort_query(Opts, Selector),
         raw_bookmark = true
     },
@@ -250,13 +248,6 @@ sort_query(Opts, Selector) ->
     end.
 
 
-get_partition(Opts, Default) ->
-    case couch_util:get_value(partition, Opts) of
-        <<>> -> Default;
-        Else -> Else
-    end.
-
-
 get_bookmark(Opts) ->
     case lists:keyfind(bookmark, 1, Opts) of
         {_, BM} when is_list(BM), BM /= [] ->
diff --git a/src/mango/src/mango_cursor_view.erl b/src/mango/src/mango_cursor_view.erl
index 240ef50..bced842 100644
--- a/src/mango/src/mango_cursor_view.erl
+++ b/src/mango/src/mango_cursor_view.erl
@@ -73,7 +73,6 @@ explain(Cursor) ->
         {include_docs, Args#mrargs.include_docs},
         {view_type, Args#mrargs.view_type},
         {reduce, Args#mrargs.reduce},
-        {partition, couch_mrview_util:get_extra(Args, partition, null)},
         {start_key, maybe_replace_max_json(Args#mrargs.start_key)},
         {end_key, maybe_replace_max_json(Args#mrargs.end_key)},
         {direction, Args#mrargs.direction},
@@ -410,11 +409,6 @@ apply_opts([{update, false} | Rest], Args) ->
         update = false
     },
     apply_opts(Rest, NewArgs);
-apply_opts([{partition, <<>>} | Rest], Args) ->
-    apply_opts(Rest, Args);
-apply_opts([{partition, Partition} | Rest], Args) when is_binary(Partition) ->
-    NewArgs = couch_mrview_util:set_extra(Args, partition, Partition),
-    apply_opts(Rest, NewArgs);
 apply_opts([{_, _} | Rest], Args) ->
     % Ignore unknown options
     apply_opts(Rest, Args).
diff --git a/src/mango/src/mango_error.erl b/src/mango/src/mango_error.erl
index bb545ad..9ac8f63 100644
--- a/src/mango/src/mango_error.erl
+++ b/src/mango/src/mango_error.erl
@@ -28,13 +28,6 @@ info(mango_idx, {no_usable_index, missing_sort_index}) ->
         <<"No index exists for this sort, "
             "try indexing by the sort fields.">>
     };
-info(mango_idx, {no_usable_index, missing_sort_index_partitioned}) ->
-    {
-        400,
-        <<"no_usable_index">>,
-        <<"No partitioned index exists for this sort, "
-            "try indexing by the sort fields.">>
-    };
 info(mango_idx, {no_usable_index, missing_sort_index_global}) ->
     {
         400,
@@ -118,13 +111,6 @@ info(mango_idx, {invalid_index_type, BadType}) ->
         <<"invalid_index">>,
         fmt("Invalid type for index: ~s", [BadType])
     };
-info(mango_idx, {partitioned_option_mismatch, BadDDoc}) ->
-    {
-        400,
-        <<"invalid_partitioned_option">>,
-        fmt("Requested partitioned option does not match existing value on"
-            " design document ~s", [BadDDoc])
-    };
 info(mango_idx, invalid_query_ddoc_language) ->
     {
         400,
diff --git a/src/mango/src/mango_httpd.erl b/src/mango/src/mango_httpd.erl
index 379d2e1..946d7e4 100644
--- a/src/mango/src/mango_httpd.erl
+++ b/src/mango/src/mango_httpd.erl
@@ -170,7 +170,7 @@ handle_index_req(#httpd{path_parts=[_, _, _DDocId0, _Type, _Name]}=Req, _Db) ->
 
 handle_explain_req(#httpd{method='POST'}=Req, Db) ->
     chttpd:validate_ctype(Req, "application/json"),
-    Body = maybe_set_partition(Req),
+    Body = chttpd:json_body_obj(Req),
     {ok, Opts0} = mango_opts:validate_find(Body),
     {value, {selector, Sel}, Opts} = lists:keytake(selector, 1, Opts0),
     Resp = mango_crud:explain(Db, Sel, Opts),
@@ -182,7 +182,7 @@ handle_explain_req(Req, _Db) ->
 
 handle_find_req(#httpd{method='POST'}=Req, Db) ->
     chttpd:validate_ctype(Req, "application/json"),
-    Body = maybe_set_partition(Req),
+    Body = chttpd:json_body_obj(Req),
     {ok, Opts0} = mango_opts:validate_find(Body),
     {value, {selector, Sel}, Opts} = lists:keytake(selector, 1, Opts0),
     {ok, Resp0} = start_find_resp(Req),
@@ -231,23 +231,6 @@ get_idx_del_opts(Req) ->
     end.
 
 
-maybe_set_partition(Req) ->
-    {Props} = chttpd:json_body_obj(Req),
-    case chttpd:qs_value(Req, "partition", undefined) of
-        undefined ->
-            {Props};
-        Partition ->
-            case couch_util:get_value(<<"partition">>, Props) of
-                undefined ->
-                    {[{<<"partition">>, ?l2b(Partition)} | Props]};
-                Partition ->
-                    {Props};
-                OtherPartition ->
-                    ?MANGO_ERROR({bad_partition, OtherPartition})
-            end
-    end.
-
-
 convert_to_design_id(DDocId) ->
     case DDocId of
         <<"_design/", _/binary>> -> DDocId;
diff --git a/src/mango/src/mango_idx.erl b/src/mango/src/mango_idx.erl
index 5d06a8f..0f79bdb 100644
--- a/src/mango/src/mango_idx.erl
+++ b/src/mango/src/mango_idx.erl
@@ -33,7 +33,6 @@
     name/1,
     type/1,
     def/1,
-    partitioned/1,
     opts/1,
     columns/1,
     is_usable/3,
@@ -64,13 +63,12 @@ get_usable_indexes(Db, Selector, Opts) ->
             ExistingIndexes
         ),
     UserSpecifiedIndex = mango_cursor:maybe_filter_indexes_by_ddoc(ExistingIndexes, Opts),
-    UsableIndexes0 = lists:usort(GlobalIndexes ++ UserSpecifiedIndex),
-    UsableIndexes1 = filter_partition_indexes(UsableIndexes0, Opts),
+    UsableIndexes = lists:usort(GlobalIndexes ++ UserSpecifiedIndex),
 
     SortFields = get_sort_fields(Opts),
     UsableFilter = fun(I) -> is_usable(I, Selector, SortFields) end,
 
-    case lists:filter(UsableFilter, UsableIndexes1) of
+    case lists:filter(UsableFilter, UsableIndexes) of
         [] ->
             mango_sort_error(Db, Opts);
         UsableIndexes ->
@@ -78,15 +76,8 @@ get_usable_indexes(Db, Selector, Opts) ->
     end.
 
 
-mango_sort_error(Db, Opts) ->
-    case {fabric_util:is_partitioned(Db), is_opts_partitioned(Opts)} of
-        {false, _} ->
-            ?MANGO_ERROR({no_usable_index, missing_sort_index});
-        {true, true} ->
-            ?MANGO_ERROR({no_usable_index, missing_sort_index_partitioned});
-        {true, false} ->
-            ?MANGO_ERROR({no_usable_index, missing_sort_index_global})
-    end.
+mango_sort_error(_Db, _Opts) ->
+    ?MANGO_ERROR({no_usable_index, missing_sort_index}).
 
 
 recover(Db) ->
@@ -124,7 +115,6 @@ new(Db, Opts) ->
         name = IdxName,
         type = Type,
         def = Def,
-        partitioned = get_idx_partitioned(Opts),
         opts = filter_opts(Opts)
     }}.
 
@@ -136,11 +126,10 @@ validate_new(Idx, Db) ->
 
 add(DDoc, Idx) ->
     Mod = idx_mod(Idx),
-    {ok, NewDDoc1} = Mod:add(DDoc, Idx),
-    NewDDoc2 = set_ddoc_partitioned(NewDDoc1, Idx),
+    {ok, NewDDoc} = Mod:add(DDoc, Idx),
     % Round trip through JSON for normalization
-    Body = ?JSON_DECODE(?JSON_ENCODE(NewDDoc2#doc.body)),
-    {ok, NewDDoc2#doc{body = Body}}.
+    Body = ?JSON_DECODE(?JSON_ENCODE(NewDDoc#doc.body)),
+    {ok, NewDDoc#doc{body = Body}}.
 
 
 remove(DDoc, Idx) ->
@@ -192,8 +181,7 @@ from_ddoc(Db, {Props}) ->
     lists:map(fun(Idx) ->
         Idx#idx{
             dbname = DbName,
-            ddoc = DDoc,
-            partitioned = get_idx_partitioned(Db, Props)
+            ddoc = DDoc
         }
     end, Idxs).
 
@@ -230,10 +218,6 @@ def(#idx{def=Def}) ->
     Def.
 
 
-partitioned(#idx{partitioned=Partitioned}) ->
-    Partitioned.
-
-
 opts(#idx{opts=Opts}) ->
     Opts.
 
@@ -350,97 +334,6 @@ gen_name(Idx, Opts0) ->
     mango_util:enc_hex(Sha).
 
 
-get_idx_partitioned(Opts) ->
-    case proplists:get_value(partitioned, Opts) of
-        B when is_boolean(B) ->
-            B;
-        db_default ->
-            % Default to the partitioned setting on
-            % the database.
-            undefined
-    end.
-
-
-set_ddoc_partitioned(DDoc, Idx) ->
-    % We have to verify that the new index being added
-    % to this design document either matches the current
-    % ddoc's design options *or* this is a new design doc
-    #doc{
-        id = DDocId,
-        revs = Revs,
-        body = {BodyProps}
-    } = DDoc,
-    OldDOpts = couch_util:get_value(<<"options">>, BodyProps),
-    OldOpt = case OldDOpts of
-        {OldDOptProps} when is_list(OldDOptProps) ->
-            couch_util:get_value(<<"partitioned">>, OldDOptProps);
-        _ ->
-            undefined
-    end,
-    % If new matches old we're done
-    if Idx#idx.partitioned == OldOpt -> DDoc; true ->
-        % If we're creating a ddoc then we can set the options
-        case Revs == {0, []} of
-            true when Idx#idx.partitioned /= undefined ->
-                set_ddoc_partitioned_option(DDoc, Idx#idx.partitioned);
-            true when Idx#idx.partitioned == undefined ->
-                DDoc;
-            false ->
-                ?MANGO_ERROR({partitioned_option_mismatch, DDocId})
-        end
-    end.
-
-
-set_ddoc_partitioned_option(DDoc, Partitioned) ->
-    #doc{
-        body = {BodyProps}
-    } = DDoc,
-    NewProps = case couch_util:get_value(<<"options">>, BodyProps) of
-        {Existing} when is_list(Existing) ->
-            Opt = {<<"partitioned">>, Partitioned},
-            New = lists:keystore(<<"partitioned">>, 1, Existing, Opt),
-            lists:keystore(<<"options">>, 1, BodyProps, {<<"options">>, New});
-        undefined ->
-            New = {<<"options">>, {[{<<"partitioned">>, Partitioned}]}},
-            lists:keystore(<<"options">>, 1, BodyProps, New)
-    end,
-    DDoc#doc{body = {NewProps}}.
-
-
-get_idx_partitioned(Db, DDocProps) ->
-    Default = fabric_util:is_partitioned(Db),
-    case couch_util:get_value(<<"options">>, DDocProps) of
-        {DesignOpts} ->
-            case couch_util:get_value(<<"partitioned">>, DesignOpts) of
-                P when is_boolean(P) ->
-                    P;
-                undefined ->
-                    Default
-            end;
-        undefined ->
-            Default
-    end.
-
-is_opts_partitioned(Opts) ->
-    case couch_util:get_value(partition, Opts, <<>>) of
-        <<>> ->
-            false;
-        Partition when is_binary(Partition) ->
-            true
-    end.
-
-
-filter_partition_indexes(Indexes, Opts) ->
-    PFilt = case is_opts_partitioned(Opts) of
-        false ->
-            fun(#idx{partitioned = P}) -> not P end;
-        true ->
-            fun(#idx{partitioned = P}) -> P end
-    end,
-    Filt = fun(Idx) -> type(Idx) == <<"special">> orelse PFilt(Idx) end,
-    lists:filter(Filt, Indexes).
-
-
 filter_opts([]) ->
     [];
 filter_opts([{user_ctx, _} | Rest]) ->
@@ -453,8 +346,6 @@ filter_opts([{type, _} | Rest]) ->
     filter_opts(Rest);
 filter_opts([{w, _} | Rest]) ->
     filter_opts(Rest);
-filter_opts([{partitioned, _} | Rest]) ->
-    filter_opts(Rest);
 filter_opts([Opt | Rest]) ->
     [Opt | filter_opts(Rest)].
 
@@ -488,7 +379,6 @@ index(SelectorName, Selector) ->
            <<"Selected">>,<<"json">>,
            {[{<<"fields">>,{[{<<"location">>,<<"asc">>}]}},
              {SelectorName,{Selector}}]},
-           false,
            [{<<"def">>,{[{<<"fields">>,[<<"location">>]}]}}]
     }.
 
diff --git a/src/mango/src/mango_idx.hrl b/src/mango/src/mango_idx.hrl
index 9725950..712031b 100644
--- a/src/mango/src/mango_idx.hrl
+++ b/src/mango/src/mango_idx.hrl
@@ -16,6 +16,5 @@
     name,
     type,
     def,
-    partitioned,
     opts
 }).
diff --git a/src/mango/src/mango_idx_text.erl b/src/mango/src/mango_idx_text.erl
index 1d4becf..71eaf11 100644
--- a/src/mango/src/mango_idx_text.erl
+++ b/src/mango/src/mango_idx_text.erl
@@ -100,7 +100,6 @@ to_json(Idx) ->
         {ddoc, Idx#idx.ddoc},
         {name, Idx#idx.name},
         {type, Idx#idx.type},
-        {partitioned, Idx#idx.partitioned},
         {def, {def_to_json(Idx#idx.def)}}
     ]}.
 
diff --git a/src/mango/src/mango_idx_view.erl b/src/mango/src/mango_idx_view.erl
index 3791149..2d784b6 100644
--- a/src/mango/src/mango_idx_view.erl
+++ b/src/mango/src/mango_idx_view.erl
@@ -104,7 +104,6 @@ to_json(Idx) ->
         {ddoc, Idx#idx.ddoc},
         {name, Idx#idx.name},
         {type, Idx#idx.type},
-        {partitioned, Idx#idx.partitioned},
         {def, {def_to_json(Idx#idx.def)}}
     ]}.
 
diff --git a/src/mango/src/mango_opts.erl b/src/mango/src/mango_opts.erl
index 92c07f7..7bae9c9 100644
--- a/src/mango/src/mango_opts.erl
+++ b/src/mango/src/mango_opts.erl
@@ -34,7 +34,6 @@
     validate_sort/1,
     validate_fields/1,
     validate_bulk_delete/1,
-    validate_partitioned/1,
 
     default_limit/0
 ]).
@@ -71,12 +70,6 @@ validate_idx_create({Props}) ->
             {optional, true},
             {default, 2},
             {validator, fun is_pos_integer/1}
-        ]},
-        {<<"partitioned">>, [
-            {tag, partitioned},
-            {optional, true},
-            {default, db_default},
-            {validator, fun validate_partitioned/1}
         ]}
     ],
     validate(Props, Opts).
@@ -124,12 +117,6 @@ validate_find({Props}) ->
             {default, []},
             {validator, fun validate_fields/1}
         ]},
-        {<<"partition">>, [
-            {tag, partition},
-            {optional, true},
-            {default, <<>>},
-            {validator, fun validate_partition/1}
-        ]},
         {<<"r">>, [
             {tag, r},
             {optional, true},
@@ -309,23 +296,6 @@ validate_fields(Value) ->
     mango_fields:new(Value).
 
 
-validate_partitioned(true) ->
-    {ok, true};
-validate_partitioned(false) ->
-    {ok, false};
-validate_partitioned(db_default) ->
-    {ok, db_default};
-validate_partitioned(Else) ->
-    ?MANGO_ERROR({invalid_partitioned_value, Else}).
-
-
-validate_partition(<<>>) ->
-    {ok, <<>>};
-validate_partition(Partition) ->
-    couch_partition:validate_partition(Partition),
-    {ok, Partition}.
-
-
 validate_opts([], Props, Acc) ->
     {Props, lists:reverse(Acc)};
 validate_opts([{Name, Desc} | Rest], Props, Acc) ->