diff options
author | Eric Avdey <eiri@eiri.ca> | 2019-11-06 15:36:25 -0400 |
---|---|---|
committer | Eric Avdey <eiri@eiri.ca> | 2019-12-03 13:54:40 -0400 |
commit | 2c8966f122943f6aba65bb571dfb50ba6b699fb1 (patch) | |
tree | 399869a578d8b0e18f93bded781c72d3ba09ffb1 /src/couch_mrview | |
parent | d3ff408f9fe37fde48a51ed1843d3d2709b5e265 (diff) | |
download | couchdb-2c8966f122943f6aba65bb571dfb50ba6b699fb1.tar.gz |
Remove view changes interface functions, tests and end-point
Diffstat (limited to 'src/couch_mrview')
-rw-r--r-- | src/couch_mrview/src/couch_mrview.erl | 102 | ||||
-rw-r--r-- | src/couch_mrview/src/couch_mrview_changes.erl | 18 | ||||
-rw-r--r-- | src/couch_mrview/src/couch_mrview_http.erl | 20 | ||||
-rw-r--r-- | src/couch_mrview/src/couch_mrview_test_util.erl | 24 | ||||
-rw-r--r-- | src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl | 209 | ||||
-rw-r--r-- | src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl | 223 |
6 files changed, 2 insertions, 594 deletions
diff --git a/src/couch_mrview/src/couch_mrview.erl b/src/couch_mrview/src/couch_mrview.erl index d549568ec..1cdc91809 100644 --- a/src/couch_mrview/src/couch_mrview.erl +++ b/src/couch_mrview/src/couch_mrview.erl @@ -15,9 +15,6 @@ -export([validate/2]). -export([query_all_docs/2, query_all_docs/4]). -export([query_view/3, query_view/4, query_view/6, get_view_index_pid/4]). --export([view_changes_since/5]). --export([view_changes_since/6, view_changes_since/7]). --export([count_view_changes_since/4, count_view_changes_since/5]). -export([get_info/2]). -export([trigger_update/2, trigger_update/3]). -export([get_view_info/3]). @@ -288,68 +285,6 @@ query_view(Db, {Type, View, Ref}, Args, Callback, Acc) -> erlang:demonitor(Ref, [flush]) end. -view_changes_since(View, StartSeq, Fun, Opts0, Acc) -> - Wrapper = fun(KV, _, Acc1) -> - Fun(KV, Acc1) - end, - Opts = [{start_key, {StartSeq + 1, <<>>}}] ++ Opts0, - {ok, _LastRed, AccOut} = couch_btree:fold(View#mrview.seq_btree, Wrapper, Acc, Opts), - {ok, AccOut}. - -view_changes_since(Db, DDoc, VName, StartSeq, Fun, Acc) -> - view_changes_since(Db, DDoc, VName, StartSeq, Fun, [], Acc). - -view_changes_since(Db, DDoc, VName, StartSeq, Fun, Options, Acc) -> - Args0 = make_view_changes_args(Options), - {ok, {_, View, _}, _, Args} = couch_mrview_util:get_view(Db, DDoc, VName, - Args0), - #mrview{seq_indexed=SIndexed, keyseq_indexed=KSIndexed} = View, - IsKSQuery = is_key_byseq(Options), - if (SIndexed andalso not IsKSQuery) orelse (KSIndexed andalso IsKSQuery) -> - OptList = make_view_changes_opts(StartSeq, Options, Args), - Btree = case IsKSQuery of - true -> View#mrview.key_byseq_btree; - _ -> View#mrview.seq_btree - end, - AccOut = lists:foldl(fun(Opts, Acc0) -> - {ok, _R, A} = couch_mrview_util:fold_changes( - Btree, Fun, Acc0, Opts), - A - end, Acc, OptList), - {ok, AccOut}; - true -> - {error, seqs_not_indexed} - end. - -count_view_changes_since(Db, DDoc, VName, SinceSeq) -> - count_view_changes_since(Db, DDoc, VName, SinceSeq, []). - -count_view_changes_since(Db, DDoc, VName, SinceSeq, Options) -> - Args0 = make_view_changes_args(Options), - {ok, {_Type, View, _Ref}, _, Args} = couch_mrview_util:get_view( - Db, DDoc, VName, Args0), - case View#mrview.seq_indexed of - true -> - OptList = make_view_changes_opts(SinceSeq, Options, Args), - Btree = case is_key_byseq(Options) of - true -> View#mrview.key_byseq_btree; - _ -> View#mrview.seq_btree - end, - RedFun = fun(_SeqStart, PartialReds, 0) -> - {ok, couch_btree:final_reduce(Btree, PartialReds)} - end, - lists:foldl(fun(Opts, Acc0) -> - case couch_btree:fold_reduce(Btree, RedFun, 0, Opts) of - {ok, N} when is_integer(N) -> - Acc0 + N; - {ok, N} when is_tuple(N) -> - Acc0 + element(1, N) - end - end, 0, OptList); - _ -> - {error, seqs_not_indexed} - end. - get_info(Db, DDoc) -> {ok, Pid} = couch_index_server:get_index(couch_mrview_index, Db, DDoc), @@ -371,19 +306,9 @@ get_view_info(Db, DDoc, VName) -> %% get the total number of rows {ok, TotalRows} = couch_mrview_util:get_row_count(View), - %% get the total number of sequence logged in this view - SeqBtree = View#mrview.seq_btree, - {ok, TotalSeqs} = case SeqBtree of - nil -> {ok, 0}; - _ -> - couch_btree:full_reduce(SeqBtree) - end, - - {ok, [{seq_indexed, View#mrview.seq_indexed}, - {update_seq, View#mrview.update_seq}, + {ok, [{update_seq, View#mrview.update_seq}, {purge_seq, View#mrview.purge_seq}, - {total_rows, TotalRows}, - {total_seqs, TotalSeqs}]}. + {total_rows, TotalRows}]}. %% @doc refresh a view index @@ -774,26 +699,3 @@ lookup_index(Key) -> record_info(fields, mrargs), lists:seq(2, record_info(size, mrargs)) ), couch_util:get_value(Key, Index). - - -is_key_byseq(Options) -> - lists:any(fun({K, _}) -> - lists:member(K, [start_key, end_key, start_key_docid, - end_key_docid, keys]) - end, Options). - -make_view_changes_args(Options) -> - case is_key_byseq(Options) of - true -> - to_mrargs(Options); - false -> - #mrargs{} - end. - -make_view_changes_opts(StartSeq, Options, Args) -> - case is_key_byseq(Options) of - true -> - couch_mrview_util:changes_key_opts(StartSeq, Args); - false -> - [[{start_key, {StartSeq+1, <<>>}}] ++ Options] - end. diff --git a/src/couch_mrview/src/couch_mrview_changes.erl b/src/couch_mrview/src/couch_mrview_changes.erl deleted file mode 100644 index ae5aa6e94..000000000 --- a/src/couch_mrview/src/couch_mrview_changes.erl +++ /dev/null @@ -1,18 +0,0 @@ -% Licensed under the Apache License, Version 2.0 (the "License"); you may not -% use this file except in compliance with the License. You may obtain a copy of -% the License at -% -% http://www.apache.org/licenses/LICENSE-2.0 -% -% Unless required by applicable law or agreed to in writing, software -% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -% License for the specific language governing permissions and limitations under -% the License. -% --module(couch_mrview_changes). - --export([handle_view_changes/5]). - -handle_view_changes(Args, Req, Db, DDocId, ViewName) -> - couch_changes:handle_changes(Args, Req, Db, {view, DDocId, ViewName}). diff --git a/src/couch_mrview/src/couch_mrview_http.erl b/src/couch_mrview/src/couch_mrview_http.erl index cdf498e5d..74d5ca274 100644 --- a/src/couch_mrview/src/couch_mrview_http.erl +++ b/src/couch_mrview/src/couch_mrview_http.erl @@ -16,7 +16,6 @@ handle_all_docs_req/2, handle_local_docs_req/2, handle_design_docs_req/2, - handle_view_changes_req/3, handle_reindex_req/3, handle_view_req/3, handle_temp_view_req/2, @@ -81,25 +80,6 @@ handle_reindex_req(Req, _Db, _DDoc) -> chttpd:send_method_not_allowed(Req, "POST"). -handle_view_changes_req(#httpd{path_parts=[_,<<"_design">>,DDocName,<<"_view_changes">>,ViewName]}=Req, Db, DDoc) -> - {DDocBody} = DDoc#doc.body, - case lists:keyfind(<<"options">>, 1, DDocBody) of - {<<"options">>, {Options}} when is_list(Options) -> - case lists:keyfind(<<"seq_indexed">>, 1, Options) of - {<<"seq_indexed">>, true} -> - ok; - _ -> - throw({bad_request, "view changes not enabled"}) - end; - _ -> - throw({bad_request, "view changes not enabled"}) - end, - - ChangesArgs = couch_httpd_db:parse_changes_query(Req, Db), - ChangesFun = couch_mrview_changes:handle_view_changes(ChangesArgs, Req, Db, <<"_design/", DDocName/binary>>, ViewName), - couch_httpd_db:handle_changes_req(Req, Db, ChangesArgs, ChangesFun). - - handle_view_req(#httpd{method='GET', path_parts=[_, _, DDocName, _, VName, <<"_info">>]}=Req, Db, _DDoc) -> diff --git a/src/couch_mrview/src/couch_mrview_test_util.erl b/src/couch_mrview/src/couch_mrview_test_util.erl index a6242cde7..2dfa64e61 100644 --- a/src/couch_mrview/src/couch_mrview_test_util.erl +++ b/src/couch_mrview/src/couch_mrview_test_util.erl @@ -59,30 +59,6 @@ make_docs(_, Since, Count) -> [doc(I) || I <- lists:seq(Since, Count)]. -ddoc({changes, Opts}) -> - ViewOpts = case Opts of - seq_indexed -> - [{<<"seq_indexed">>, true}]; - keyseq_indexed -> - [{<<"keyseq_indexed">>, true}]; - seq_indexed_keyseq_indexed -> - [ - {<<"seq_indexed">>, true}, - {<<"keyseq_indexed">>, true} - ] - end, - couch_doc:from_json_obj({[ - {<<"_id">>, <<"_design/bar">>}, - {<<"options">>, {ViewOpts}}, - {<<"views">>, {[ - {<<"baz">>, {[ - { - <<"map">>, - <<"function(doc) {emit(doc.val.toString(), doc.val);}">> - } - ]}} - ]}} - ]}); ddoc(map) -> couch_doc:from_json_obj({[ {<<"_id">>, <<"_design/bar">>}, diff --git a/src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl deleted file mode 100644 index 67106419f..000000000 --- a/src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl +++ /dev/null @@ -1,209 +0,0 @@ -% Licensed under the Apache License, Version 2.0 (the "License"); you may not -% use this file except in compliance with the License. You may obtain a copy of -% the License at -% -% http://www.apache.org/licenses/LICENSE-2.0 -% -% Unless required by applicable law or agreed to in writing, software -% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -% License for the specific language governing permissions and limitations under -% the License. - --module(couch_mrview_changes_since_tests). - --include_lib("couch/include/couch_eunit.hrl"). --include_lib("couch/include/couch_db.hrl"). - --define(TIMEOUT, 1000). - -teardown(Db) -> - couch_db:close(Db), - couch_server:delete(couch_db:name(Db), [?ADMIN_CTX]), - ok. - -changes_since_basic_test_() -> - { - "changes_since tests", - { - setup, - fun test_util:start_couch/0, fun test_util:stop_couch/1, - { - foreach, - fun() -> - Type = {changes, seq_indexed}, - {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), Type), - Db - end, - fun teardown/1, - [ - fun test_basic/1, - fun test_basic_since/1, - fun test_basic_count/1, - fun test_basic_count_since/1, - fun test_compact/1 - ] - } - } - }. - -changes_since_range_test_() -> - { - "changes_since_range tests", - { - setup, - fun test_util:start_couch/0, fun test_util:stop_couch/1, - { - foreach, - fun() -> - Type = {changes, keyseq_indexed}, - {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), Type), - Db - end, - fun teardown/1, - [ - fun test_range/1, - fun test_range_since/1 - ] - } - } - }. - -changes_since_range_count_test_() -> - { - "changes_since_range_count tests", - { - setup, - fun test_util:start_couch/0, fun test_util:stop_couch/1, - { - foreach, - fun() -> - Type = {changes, seq_indexed_keyseq_indexed}, - {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), Type), - Db - end, - fun teardown/1, - [ - fun test_range_count/1, - fun test_range_count_since/1, - fun test_remove_key/1 - ] - } - } - }. - -test_basic(Db) -> - Result = run_query(Db, 0, []), - Expect = {ok, [ - {{2, <<"1">>, <<"1">>}, 1}, - {{3, <<"10">>, <<"10">>}, 10}, - {{4, <<"2">>, <<"2">>}, 2}, - {{5, <<"3">>, <<"3">>}, 3}, - {{6, <<"4">>, <<"4">>}, 4}, - {{7, <<"5">>, <<"5">>}, 5}, - {{8, <<"6">>, <<"6">>}, 6}, - {{9, <<"7">>, <<"7">>}, 7}, - {{10, <<"8">>, <<"8">>}, 8}, - {{11, <<"9">>, <<"9">>}, 9} - ]}, - ?_assertEqual(Result, Expect). - - -test_range(Db) -> - Range = [{start_key, <<"3">>}, {end_key, <<"5">>}], - Result = run_query(Db, 0, Range), - Expect = {ok, [ - {{5, <<"3">>, <<"3">>}, 3}, - {{6, <<"4">>, <<"4">>}, 4}, - {{7, <<"5">>, <<"5">>}, 5} - ]}, - ?_assertEqual(Result, Expect). - -test_basic_since(Db) -> - Result = run_query(Db, 5, []), - Expect = {ok, [ - {{6, <<"4">>, <<"4">>}, 4}, - {{7, <<"5">>, <<"5">>}, 5}, - {{8, <<"6">>, <<"6">>}, 6}, - {{9, <<"7">>, <<"7">>}, 7}, - {{10, <<"8">>, <<"8">>}, 8}, - {{11, <<"9">>, <<"9">>}, 9} - ]}, - ?_assertEqual(Result, Expect). - -test_range_since(Db) -> - Range = [{start_key, <<"3">>}, {end_key, <<"5">>}], - Result = run_query(Db, 5, Range), - Expect = {ok, [ - {{6, <<"4">>, <<"4">>}, 4}, - {{7, <<"5">>, <<"5">>}, 5} - ]}, - ?_assertEqual(Result, Expect). - -test_basic_count(Db) -> - Result = run_count_query(Db, 0, []), - ?_assertEqual(Result, 10). - -test_range_count(Db) -> - Range = [{start_key, <<"3">>}, {end_key, <<"5">>}], - Result = run_count_query(Db, 0, Range), - ?_assertEqual(Result, 3). - -test_basic_count_since(Db) -> - Result = run_count_query(Db, 5, []), - ?_assertEqual(Result, 6). - -test_range_count_since(Db) -> - Range = [{start_key, <<"3">>}, {end_key, <<"5">>}], - Result = run_count_query(Db, 5, Range), - ?_assertEqual(Result, 2). - -test_compact(Db) -> - Result = couch_mrview:compact(Db, <<"_design/bar">>), - Count = run_count_query(Db, 0, []), - [?_assertEqual(Result, ok), ?_assertEqual(Count, 10)]. - -test_remove_key(Db) -> - %% add new doc - Doc = couch_mrview_test_util:doc(11), - {ok, Rev} = couch_db:update_doc(Db, Doc, []), - RevStr = couch_doc:rev_to_str(Rev), - {ok, Db1} = couch_db:reopen(Db), - Result = run_count_query(Db1, 0, []), - %% check new view key - Range = [{start_key, <<"11">>}, {end_key, <<"11">>}], - Result1 = run_query(Db1, 0, Range), - Expect = {ok, [ - {{12, <<"11">>, <<"11">>}, 11} - ]}, - - %% delete doc - Doc2 = couch_doc:from_json_obj({[ - {<<"_id">>, <<"11">>}, - {<<"_rev">>, RevStr}, - {<<"_deleted">>, true} - ]}), - {ok, _} = couch_db:update_doc(Db1, Doc2, []), - {ok, Db2} = couch_db:reopen(Db1), - Result2 = run_count_query(Db2, 0, []), - %% check new view key - Result3 = run_query(Db2, 0, Range), - Expect2 = {ok, [ - {{13, <<"11">>, <<"11">>}, removed} - ]}, - [ - ?_assertEqual(Result, 11), - ?_assertEqual(Result1, Expect), - ?_assertEqual(Result2, 11), - ?_assertEqual(Result3, Expect2) - ]. - -run_query(Db, Since, Opts) -> - Fun = fun(KV, Acc) -> {ok, [KV | Acc]} end, - {ok, R} = couch_mrview:view_changes_since(Db, <<"_design/bar">>, <<"baz">>, - Since, Fun, Opts, []), - {ok, lists:reverse(R)}. - -run_count_query(Db, Since, Opts) -> - couch_mrview:count_view_changes_since(Db, <<"_design/bar">>, <<"baz">>, - Since, Opts). diff --git a/src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl deleted file mode 100644 index d8dd28773..000000000 --- a/src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl +++ /dev/null @@ -1,223 +0,0 @@ -% Licensed under the Apache License, Version 2.0 (the "License"); you may not -% use this file except in compliance with the License. You may obtain a copy of -% the License at -% -% http://www.apache.org/licenses/LICENSE-2.0 -% -% Unless required by applicable law or agreed to in writing, software -% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -% License for the specific language governing permissions and limitations under -% the License. - --module(couch_mrview_index_changes_tests). - --include_lib("couch/include/couch_eunit.hrl"). --include_lib("couch/include/couch_db.hrl"). - - -setup() -> - {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), map), - Db. - -teardown(Db) -> - couch_db:close(Db), - couch_server:delete(couch_db:name(Db), [?ADMIN_CTX]), - ok. - -changes_index_test() -> - { - "changes index tests", - { - setup, - fun test_util:start_couch/0, fun test_util:stop_couch/1, - { - foreach, - fun setup/0, fun teardown/1, - [ - fun test_normal_changes/1, - fun test_stream_once/1, - fun test_stream_once_since/1, - fun test_stream_once_timeout/1, - fun test_stream_once_heartbeat/1, - fun test_stream/1, - fun test_indexer/1 - ] - } - } - }. - - -test_normal_changes(Db) -> - Result = run_query(Db, []), - Expect = {ok, 11, [ - {{2, 1, <<"1">>}, 1}, - {{3, 10, <<"10">>}, 10}, - {{4, 2, <<"2">>}, 2}, - {{5, 3, <<"3">>}, 3}, - {{6, 4, <<"4">>}, 4}, - {{7, 5, <<"5">>}, 5}, - {{8, 6, <<"6">>}, 6}, - {{9, 7, <<"7">>}, 7}, - {{10, 8, <<"8">>}, 8}, - {{11, 9, <<"9">>}, 9} - ]}, - ?_assertEqual(Result, Expect). - -test_stream_once(Db) -> - Result = run_query(Db, [{stream, once}]), - Expect = {ok, 11, [ - {{2, 1, <<"1">>}, 1}, - {{3, 10, <<"10">>}, 10}, - {{4, 2, <<"2">>}, 2}, - {{5, 3, <<"3">>}, 3}, - {{6, 4, <<"4">>}, 4}, - {{7, 5, <<"5">>}, 5}, - {{8, 6, <<"6">>}, 6}, - {{9, 7, <<"7">>}, 7}, - {{10, 8, <<"8">>}, 8}, - {{11, 9, <<"9">>}, 9} - ]}, - ?_assertEqual(Result, Expect). - - -test_stream_once_since(Db) -> - Self = self(), - spawn(fun() -> - Result = run_query(Db, [{since, 11}, - {stream, once}]), - Self ! {result, Result} - end), - - spawn(fun() -> - timer:sleep(1000), - {ok, Db1} = save_doc(Db, 11), - couch_mrview:refresh(Db1, <<"_design/bar">>) - end), - - Expect = {ok,12,[{{12,11,<<"11">>},11}]}, - - receive - {result, Result} -> - ?_assertEqual(Result, Expect) - after 5000 -> - io:format("never got the change", []) - end. - - -test_stream_once_timeout(Db) -> - Self = self(), - spawn(fun() -> - Result = run_query(Db, [{since, 12}, - {stream, once}, - {timeout, 3000}]), - Self ! {result, Result} - end), - - - - Expect = {ok, 12, []}, - - receive - {result, Result} -> - ?_assertEqual(Result, Expect) - after 5000 -> - io:format("never got the change", []) - end. - -test_stream_once_heartbeat(Db) -> - Self = self(), - spawn(fun() -> - Result = run_query(Db, [{since, 12}, - {stream, once}, - {heartbeat, 1000}]), - Self ! {result, Result} - end), - - spawn(fun() -> - timer:sleep(3000), - {ok, Db1} = save_doc(Db, 12), - couch_mrview:refresh(Db1, <<"_design/bar">>) - end), - - Expect = {ok,13,[heartbeat, - heartbeat, - heartbeat, - {{13,12,<<"12">>},12}]}, - - - - receive - {result, Result} -> - ?_assertEqual(Result, Expect) - after 5000 -> - io:format("never got the change", []) - end. - - -test_stream(Db) -> - Self = self(), - spawn(fun() -> - Result = run_query(Db, [{since, 13}, - stream, - {timeout, 3000}]), - Self ! {result, Result} - end), - - spawn(fun() -> - timer:sleep(1000), - {ok, Db1} = save_doc(Db, 13), - couch_mrview:refresh(Db1, <<"_design/bar">>), - {ok, Db2} = save_doc(Db1, 14), - couch_mrview:refresh(Db2, <<"_design/bar">>) - end), - - Expect = {ok, 15,[{{14,13,<<"13">>},13}, - {{15,14,<<"14">>},14}]}, - - receive - {result, Result} -> - ?_assertEqual(Result, Expect) - after 5000 -> - io:format("never got the change", []) - end. - - -test_indexer(Db) -> - Result = run_query(Db, [{since, 14}, refresh]), - Expect = {ok, 15, [{{15,14,<<"14">>},14}]}, - - {ok, Db1} = save_doc(Db, 15), - timer:sleep(1500), - Result1 = run_query(Db1, [{since, 14}], false), - Expect1 = {ok, 16, [{{15,14,<<"14">>},14}, - {{16,15,<<"15">>},15}]}, - ?_assert(Result == Expect andalso Result1 == Expect1). - - -save_doc(Db, Id) -> - Doc = couch_mrview_test_util:doc(Id), - {ok, _Rev} = couch_db:update_doc(Db, Doc, []), - couch_db:reopen(Db). - -run_query(Db, Opts) -> - run_query(Db, Opts, true). - -run_query(Db, Opts, Refresh) -> - Fun = fun - (stop, {LastSeq, Acc}) -> - {ok, LastSeq, Acc}; - (heartbeat, Acc) -> - {ok, [heartbeat | Acc]}; - (Event, Acc) -> - {ok, [Event | Acc]} - end, - case Refresh of - true -> - couch_mrview:refresh(Db, <<"_design/bar">>); - false -> - ok - end, - {ok, LastSeq, R} = couch_mrview_changes:handle_changes(Db, <<"_design/bar">>, - <<"baz">>, Fun, [], Opts), - {ok, LastSeq, lists:reverse(R)}. |