You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by bb...@apache.org on 2017/04/14 22:49:58 UTC

[couchdb] 02/02: Update couch_mrview to use new index LRU

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

bbastian pushed a commit to branch 8409-view-lru
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 444ad5c6141dfafdc557e095b3e6153eba8d36ea
Author: Benjamin Bastian <be...@gmail.com>
AuthorDate: Thu Apr 13 16:44:28 2017 -0700

    Update couch_mrview to use new index LRU
---
 src/couch_mrview/src/couch_mrview.erl      | 32 ++++++++++++++++++++----------
 src/couch_mrview/src/couch_mrview_util.erl |  9 +++++++--
 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 088327c..1e49579 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 3830b96..be29cb3 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,

-- 
To stop receiving notification emails like this one, please contact
"commits@couchdb.apache.org" <co...@couchdb.apache.org>.