This is an automated email from the ASF dual-hosted git repository. davisp pushed a commit to branch optimize-ddoc-cache in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit bb6a651932b801c959c16c907f96f0f27ec4c37f Author: Paul J. Davis <[email protected]> AuthorDate: Thu Jul 6 10:18:36 2017 -0500 FIXUP: Add tests for no VDU behavior --- src/ddoc_cache/src/ddoc_cache_entry.erl | 11 ++++----- src/ddoc_cache/test/ddoc_cache_basic_test.erl | 32 +++++++++++++++++++++++++++ src/ddoc_cache/test/ddoc_cache_tutil.erl | 9 +++++++- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/src/ddoc_cache/src/ddoc_cache_entry.erl b/src/ddoc_cache/src/ddoc_cache_entry.erl index 6213746..2a90077 100644 --- a/src/ddoc_cache/src/ddoc_cache_entry.erl +++ b/src/ddoc_cache/src/ddoc_cache_entry.erl @@ -182,17 +182,18 @@ handle_cast(Msg, St) -> handle_info({'DOWN', _, _, Pid, Resp}, #st{key = Key, opener = Pid} = St) -> case Resp of {open_ok, Key, {ok, Val}} -> - if not is_list(St#st.waiters) -> ok; true -> - respond(St#st.waiters, {open_ok, {ok, Val}}) - end, update_cache(St, Val), Msg = {'$gen_cast', refresh}, Timer = erlang:send_after(?REFRESH_TIMEOUT, self(), Msg), - NewSt = St#st{ + NewSt1 = St#st{ val = {open_ok, {ok, Val}}, opener = Timer }, - {noreply, update_lru(NewSt)}; + NewSt2 = update_lru(NewSt1), + if not is_list(St#st.waiters) -> ok; true -> + respond(St#st.waiters, {open_ok, {ok, Val}}) + end, + {noreply, NewSt2}; {Status, Key, Other} -> NewSt = St#st{ val = {Status, Other}, diff --git a/src/ddoc_cache/test/ddoc_cache_basic_test.erl b/src/ddoc_cache/test/ddoc_cache_basic_test.erl index 227ac54..f908c78 100644 --- a/src/ddoc_cache/test/ddoc_cache_basic_test.erl +++ b/src/ddoc_cache/test/ddoc_cache_basic_test.erl @@ -44,6 +44,18 @@ check_basic_test_() -> }. +check_no_vdu_test_() -> + { + setup, + fun() -> ddoc_cache_tutil:start_couch([{write_ddocs, false}]) end, + fun ddoc_cache_tutil:stop_couch/1, + {with, [ + fun cache_no_vdu_no_ddoc/1, + fun cache_no_vdu_empty_ddoc/1 + ]} + }. + + cache_ddoc({DbName, _}) -> ddoc_cache_tutil:clear(), ?assertEqual(0, ets:info(?CACHE, size)), @@ -120,3 +132,23 @@ deprecated_api_works({DbName, _}) -> {ok, _} = ddoc_cache:open(DbName, ?MODULE), {ok, _} = ddoc_cache:open(DbName, validation_funs). + +cache_no_vdu_no_ddoc({DbName, _}) -> + ddoc_cache_tutil:clear(), + Resp = ddoc_cache:open_validation_funs(DbName), + ?assertEqual({ok, []}, Resp), + ?assertEqual(1, ets:info(?CACHE, size)), + ?assertEqual(1, ets:info(?LRU, size)). + + +cache_no_vdu_empty_ddoc({DbName, _}) -> + ddoc_cache_tutil:clear(), + DDoc = #doc{ + id = <<"_design/no_vdu">>, + body = {[]} + }, + {ok, _} = fabric:update_docs(DbName, [DDoc], [?ADMIN_CTX]), + Resp = ddoc_cache:open_validation_funs(DbName), + ?assertEqual({ok, []}, Resp), + ?assertEqual(1, ets:info(?CACHE, size)), + ?assertEqual(1, ets:info(?LRU, size)). diff --git a/src/ddoc_cache/test/ddoc_cache_tutil.erl b/src/ddoc_cache/test/ddoc_cache_tutil.erl index 6782b9d..acf3db1 100644 --- a/src/ddoc_cache/test/ddoc_cache_tutil.erl +++ b/src/ddoc_cache/test/ddoc_cache_tutil.erl @@ -21,11 +21,18 @@ start_couch() -> + start_couch([{write_ddocs, true}]). + + +start_couch(Options) -> + WriteDDocs = couch_util:get_value(write_ddocs, Options, true), purge_modules(), Ctx = test_util:start_couch(?CONFIG_CHAIN, [chttpd, ddoc_cache]), TmpDb = ?tempdb(), ok = fabric:create_db(TmpDb, [{q, "1"}, {n, "1"}]), - {ok, _} = fabric:update_docs(TmpDb, ddocs(), [?ADMIN_CTX]), + if not WriteDDocs -> ok; true -> + {ok, _} = fabric:update_docs(TmpDb, ddocs(), [?ADMIN_CTX]) + end, {TmpDb, Ctx}. -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
