summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2017-11-02 12:25:09 -0500
committerNick Vatamaniuc <vatamane@apache.org>2018-01-15 17:37:46 -0500
commit08476f7028e7fa13ea0f98f924b059fcdb9dd67a (patch)
treedee89b33046bf8411b1a47c08942c9eccf901ed2
parent567a16e51f4b1c41462eb10bc22f3f7ad7051a51 (diff)
downloadcouchdb-08476f7028e7fa13ea0f98f924b059fcdb9dd67a.tar.gz
Optimize validating replicated updates
-rw-r--r--src/couch/src/couch_db.erl9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 5e720c284..eb39c56ea 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -945,13 +945,14 @@ prep_and_validate_replicated_updates(Db, [Bucket|RestBuckets], [OldInfo|RestOldI
{ok, #full_doc_info{rev_tree=OldTree}} ->
OldLeafs = couch_key_tree:get_all_leafs_full(OldTree),
OldLeafsLU = [{Start, RevId} || {Start, [{RevId, _}|_]} <- OldLeafs],
+ NewPaths = lists:map(fun couch_doc:to_path/1, Bucket),
+ SortedPaths = lists:sort(NewPaths),
NewRevTree = lists:foldl(
- fun(NewDoc, AccTree) ->
- {NewTree, _} = couch_key_tree:merge(AccTree,
- couch_doc:to_path(NewDoc), Db#db.revs_limit),
+ fun(NewPath, AccTree) ->
+ {NewTree, _} = couch_key_tree:merge(AccTree, NewPath),
NewTree
end,
- OldTree, Bucket),
+ OldTree, SortedPaths),
Leafs = couch_key_tree:get_all_leafs_full(NewRevTree),
LeafRevsFullDict = dict:from_list( [{{Start, RevId}, FullPath} || {Start, [{RevId, _}|_]}=FullPath <- Leafs]),
{ValidatedBucket, AccErrors3} =