diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2018-04-24 15:56:39 -0500 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2018-04-26 13:58:36 -0500 |
commit | 2a741eb407c6e83c3a62432e015f01de9253ea55 (patch) | |
tree | 25a5e027a8764885667532ac378a8e8a1514ad09 | |
parent | 4782ab5caecd229a0fc2443b8b87ac981d2458f9 (diff) | |
download | couchdb-2a741eb407c6e83c3a62432e015f01de9253ea55.tar.gz |
Add EPI hook for creating purge docs on compaction
-rw-r--r-- | src/couch/src/couch_bt_engine_compactor.erl | 18 | ||||
-rw-r--r-- | src/couch/src/couch_db_plugin.erl | 8 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/couch/src/couch_bt_engine_compactor.erl b/src/couch/src/couch_bt_engine_compactor.erl index 6bb981ee7..370cae26b 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 740b8121b..01074031b 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 %% ------------------------------------------------------------------ |