diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2017-11-02 12:25:09 -0500 |
---|---|---|
committer | Nick Vatamaniuc <vatamane@apache.org> | 2018-01-15 17:37:46 -0500 |
commit | 08476f7028e7fa13ea0f98f924b059fcdb9dd67a (patch) | |
tree | dee89b33046bf8411b1a47c08942c9eccf901ed2 | |
parent | 567a16e51f4b1c41462eb10bc22f3f7ad7051a51 (diff) | |
download | couchdb-08476f7028e7fa13ea0f98f924b059fcdb9dd67a.tar.gz |
Optimize validating replicated updates
-rw-r--r-- | src/couch/src/couch_db.erl | 9 |
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} = |