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.