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

davisp pushed a commit to branch COUCHDB-3326-clustered-purge-davisp-refactor-2
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 2a741eb407c6e83c3a62432e015f01de9253ea55
Author: Paul J. Davis <paul.joseph.da...@gmail.com>
AuthorDate: Tue Apr 24 15:56:39 2018 -0500

    Add EPI hook for creating purge docs on compaction
---
 src/couch/src/couch_bt_engine_compactor.erl | 18 ++++++++++++++++++
 src/couch/src/couch_db_plugin.erl           |  8 +++++++-
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/couch/src/couch_bt_engine_compactor.erl 
b/src/couch/src/couch_bt_engine_compactor.erl
index 6bb981e..370cae2 100644
--- a/src/couch/src/couch_bt_engine_compactor.erl
+++ b/src/couch/src/couch_bt_engine_compactor.erl
@@ -44,6 +44,12 @@ start(#st{} = St, DbName, Options, Parent) ->
     } = St,
     couch_log:debug("Compaction process spawned for db \"~s\"", [DbName]),
 
+    {ok, DDocs} = design_docs(DbName),
+    lists:map(fun(DDoc) ->
+        JsonDDoc = couch_doc:from_json_obj(DDoc),
+        couch_db_plugin:maybe_init_index_purge_state(DbName, JsonDDoc)
+    end, DDocs),
+
     {ok, NewSt, DName, DFd, MFd, Retry} =
             open_compaction_files(Header, FilePath, Options),
     erlang:monitor(process, MFd),
@@ -582,3 +588,15 @@ update_compact_task(NumChanges) ->
     end,
     couch_task_status:update([{changes_done, Changes2}, {progress, Progress}]).
 
+
+design_docs(DbName) ->
+    try
+        case fabric:design_docs(mem3:dbname(DbName)) of
+            {error, {maintenance_mode, _, _Node}} ->
+                {ok, []};
+            Else ->
+                Else
+        end
+    catch error:database_does_not_exist ->
+        {ok, []}
+    end.
diff --git a/src/couch/src/couch_db_plugin.erl 
b/src/couch/src/couch_db_plugin.erl
index 740b812..0107403 100644
--- a/src/couch/src/couch_db_plugin.erl
+++ b/src/couch/src/couch_db_plugin.erl
@@ -18,7 +18,8 @@
     after_doc_read/2,
     validate_docid/1,
     check_is_admin/1,
-    on_delete/2
+    on_delete/2,
+    maybe_init_index_purge_state/2
 ]).
 
 -define(SERVICE_ID, couch_db).
@@ -60,6 +61,11 @@ on_delete(DbName, Options) ->
     Handle = couch_epi:get_handle(?SERVICE_ID),
     couch_epi:apply(Handle, ?SERVICE_ID, on_delete, [DbName, Options], []).
 
+maybe_init_index_purge_state(DbName, DDoc) ->
+    Handle = couch_epi:get_handle(?SERVICE_ID),
+    couch_epi:apply(Handle, ?SERVICE_ID, maybe_init_index_purge_state,
+        [DbName, DDoc], []).
+
 %% ------------------------------------------------------------------
 %% Internal Function Definitions
 %% ------------------------------------------------------------------

-- 
To stop receiving notification emails like this one, please contact
dav...@apache.org.

Reply via email to