summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2018-04-24 15:56:39 -0500
committerPaul J. Davis <paul.joseph.davis@gmail.com>2018-04-26 13:58:36 -0500
commit2a741eb407c6e83c3a62432e015f01de9253ea55 (patch)
tree25a5e027a8764885667532ac378a8e8a1514ad09
parent4782ab5caecd229a0fc2443b8b87ac981d2458f9 (diff)
downloadcouchdb-2a741eb407c6e83c3a62432e015f01de9253ea55.tar.gz
Add EPI hook for creating purge docs on compaction
-rw-r--r--src/couch/src/couch_bt_engine_compactor.erl18
-rw-r--r--src/couch/src/couch_db_plugin.erl8
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
%% ------------------------------------------------------------------