summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2018-12-05 13:43:31 -0600
committerPaul J. Davis <paul.joseph.davis@gmail.com>2018-12-07 16:02:53 -0600
commit0a2e8e8ebd13246a31bda84b1a47b86849fc1a67 (patch)
treeea8252ca9d5e7c588ac5287e424ef5a04c18d29b
parente206d061ebad2853b64af473cdb4d9d0b0e00d73 (diff)
downloadcouchdb-fix-get-minimum-purge-seq.tar.gz
Avoid calls to `fabric:design_docs/1`fix-get-minimum-purge-seq
The underlying clustered _all_docs call can cause significant extra load during compaction.
-rw-r--r--src/couch_mrview/src/couch_mrview_index.erl26
1 files changed, 3 insertions, 23 deletions
diff --git a/src/couch_mrview/src/couch_mrview_index.erl b/src/couch_mrview/src/couch_mrview_index.erl
index 4718b562d..d3bcfe04b 100644
--- a/src/couch_mrview/src/couch_mrview_index.erl
+++ b/src/couch_mrview/src/couch_mrview_index.erl
@@ -226,16 +226,15 @@ verify_index_exists(DbName, Props) ->
if Type =/= <<"mrview">> -> false; true ->
DDocId = couch_util:get_value(<<"ddoc_id">>, Props),
couch_util:with_db(DbName, fun(Db) ->
- {ok, DesignDocs} = couch_db:get_design_docs(Db),
- case get_ddoc(DbName, DesignDocs, DDocId) of
- #doc{} = DDoc ->
+ case couch_db:get_design_doc(Db, DDocId) of
+ {ok, #doc{} = DDoc} ->
{ok, IdxState} = couch_mrview_util:ddoc_to_mrst(
DbName, DDoc),
IdxSig = IdxState#mrst.sig,
SigInLocal = couch_util:get_value(
<<"signature">>, Props),
couch_index_util:hexsig(IdxSig) == SigInLocal;
- not_found ->
+ {not_found, _} ->
false
end
end)
@@ -245,25 +244,6 @@ verify_index_exists(DbName, Props) ->
end.
-get_ddoc(<<"shards/", _/binary>> = _DbName, DesignDocs, DDocId) ->
- DDocs = [couch_doc:from_json_obj(DD) || DD <- DesignDocs],
- case lists:keyfind(DDocId, #doc.id, DDocs) of
- #doc{} = DDoc -> DDoc;
- false -> not_found
- end;
-get_ddoc(DbName, DesignDocs, DDocId) ->
- couch_util:with_db(DbName, fun(Db) ->
- case lists:keyfind(DDocId, #full_doc_info.id, DesignDocs) of
- #full_doc_info{} = DDocInfo ->
- {ok, DDoc} = couch_db:open_doc_int(
- Db, DDocInfo, [ejson_body]),
- DDoc;
- false ->
- not_found
- end
- end).
-
-
ensure_local_purge_docs(DbName, DDocs) ->
couch_util:with_db(DbName, fun(Db) ->
lists:foreach(fun(DDoc) ->