summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Bastian <benjamin.bastian@gmail.com>2017-04-13 16:44:28 -0700
committerBenjamin Bastian <benjamin.bastian@gmail.com>2017-04-25 14:04:29 -0700
commit0b9a6b84d90f6e0a5ee342d41fb8e6db2367c5bd (patch)
treec59cdd634a7846cc620f1fa95d9a69494f00489a
parent231f4ba3c28a6b0960e080268ab3d5c8ccb21a90 (diff)
downloadcouchdb-0b9a6b84d90f6e0a5ee342d41fb8e6db2367c5bd.tar.gz
Update couch_mrview to use new index LRU
-rw-r--r--src/couch_mrview/src/couch_mrview.erl32
-rw-r--r--src/couch_mrview/src/couch_mrview_util.erl9
2 files changed, 28 insertions, 13 deletions
diff --git a/src/couch_mrview/src/couch_mrview.erl b/src/couch_mrview/src/couch_mrview.erl
index 037391965..d7165ede4 100644
--- a/src/couch_mrview/src/couch_mrview.erl
+++ b/src/couch_mrview/src/couch_mrview.erl
@@ -325,16 +325,19 @@ count_view_changes_since(Db, DDoc, VName, SinceSeq, Options) ->
get_info(Db, DDoc) ->
- {ok, Pid} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
- couch_index:get_info(Pid).
+ {ok, Pid, Mon} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
+ Info = couch_index:get_info(Pid),
+ ok = couch_index_server:close(Mon),
+ Info.
trigger_update(Db, DDoc) ->
trigger_update(Db, DDoc, couch_db:get_update_seq(Db)).
trigger_update(Db, DDoc, UpdateSeq) ->
- {ok, Pid} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
- couch_index:trigger_update(Pid, UpdateSeq).
+ {ok, Pid, Mon} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
+ couch_index:trigger_update(Pid, UpdateSeq),
+ couch_index_server:close(Mon).
%% get informations on a view
get_view_info(Db, DDoc, VName) ->
@@ -369,10 +372,14 @@ refresh(Db, DDoc) ->
end),
case couch_index_server:get_index(couch_mrview_index, Db, DDoc) of
- {ok, Pid} ->
- case catch couch_index:get_state(Pid, UpdateSeq) of
- {ok, _} -> ok;
- Error -> {error, Error}
+ {ok, Pid, Mon} ->
+ try
+ case catch couch_index:get_state(Pid, UpdateSeq) of
+ {ok, _} -> ok;
+ Error -> {error, Error}
+ end
+ after
+ couch_index_server:close(Mon)
end;
Error ->
{error, Error}
@@ -383,17 +390,20 @@ compact(Db, DDoc) ->
compact(Db, DDoc, Opts) ->
- {ok, Pid} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
- couch_index:compact(Pid, Opts).
+ {ok, Pid, Mon} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
+ Ret = couch_index:compact(Pid, Opts),
+ couch_index_server:close(Mon),
+ Ret.
cancel_compaction(Db, DDoc) ->
- {ok, IPid} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
+ {ok, IPid, Mon} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
{ok, CPid} = couch_index:get_compactor_pid(IPid),
ok = couch_index_compactor:cancel(CPid),
% Cleanup the compaction file if it exists
{ok, #mrst{sig=Sig, db_name=DbName}} = couch_index:get_state(IPid, 0),
+ couch_index_server:close(Mon),
couch_mrview_util:delete_compaction_file(DbName, Sig),
ok.
diff --git a/src/couch_mrview/src/couch_mrview_util.erl b/src/couch_mrview/src/couch_mrview_util.erl
index 27f8737d4..89a6a3670 100644
--- a/src/couch_mrview/src/couch_mrview_util.erl
+++ b/src/couch_mrview/src/couch_mrview_util.erl
@@ -40,7 +40,7 @@
get_view(Db, DDoc, ViewName, Args0) ->
- {ok, Pid, Args2} = get_view_index_pid(Db, DDoc, ViewName, Args0),
+ {ok, Pid, Mon, Args2} = get_view_index_pid(Db, DDoc, ViewName, Args0),
DbUpdateSeq = couch_util:with_db(Db, fun(WDb) ->
couch_db:get_update_seq(WDb)
end),
@@ -51,9 +51,14 @@ get_view(Db, DDoc, ViewName, Args0) ->
{ok, _} = Resp -> Resp;
Error -> throw(Error)
end,
+ ok = couch_index_server:close(Mon),
Ref = erlang:monitor(process, State#mrst.fd),
if Args2#mrargs.update == lazy ->
- spawn(fun() -> catch couch_index:get_state(Pid, DbUpdateSeq) end);
+ spawn(fun() ->
+ {ok, Pid2, Mon2} = couch_index_server:get_index(?MOD, Db, DDoc),
+ catch couch_index:get_state(Pid2, DbUpdateSeq),
+ ok = couch_index_server:close(Mon2)
+ end);
true -> ok
end,
#mrst{language=Lang, views=Views} = State,