This is an automated email from the ASF dual-hosted git repository. garren pushed a commit to branch fdb-mango-indexes in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 10371bdbcb8ab515e46ddf60527c2c16db2d8046 Author: Garren Smith <[email protected]> AuthorDate: Tue Feb 11 14:33:32 2020 +0200 basic loading of conflicts for docs --- src/fabric/src/fabric2_db.erl | 1 + src/fabric/src/fabric2_fdb.erl | 23 ++++++++++++++++++++++- src/mango/test/19-find-conflicts.py | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/fabric/src/fabric2_db.erl b/src/fabric/src/fabric2_db.erl index 7e08e56..ce3d248 100644 --- a/src/fabric/src/fabric2_db.erl +++ b/src/fabric/src/fabric2_db.erl @@ -75,6 +75,7 @@ open_doc/2, open_doc/3, open_doc_revs/4, + apply_open_doc_opts/3, %% open_doc_int/3, get_doc_info/2, get_full_doc_info/2, diff --git a/src/fabric/src/fabric2_fdb.erl b/src/fabric/src/fabric2_fdb.erl index 0a5bf9b..e28d0b4 100644 --- a/src/fabric/src/fabric2_fdb.erl +++ b/src/fabric/src/fabric2_fdb.erl @@ -787,7 +787,25 @@ write_doc(#{} = Db0, Doc, NewWinner0, OldWinner, ToUpdate, ToRemove) -> incr_stat(Db, <<"doc_del_count">>, 1), mango_indexer:delete_doc(Db, PrevDoc); updated -> - mango_indexer:update_doc(Db, Doc, PrevDoc) + DocRev = extract_rev(Doc#doc.revs), + {WinnerRevPos, _} = WinnerRevId = maps:get(rev_id, NewWinner), + {WinnerDoc, OldWinnerDoc} = case WinnerRevId == DocRev of + true -> {Doc, PrevDoc}; + false -> {PrevDoc, PrevDoc} + end, + + RevConflicts = lists:foldl(fun (UpdateRev, Acc) -> + {RevPos, _} = maps:get(rev_id, UpdateRev), + case RevPos == WinnerRevPos of + true -> + Acc ++ [UpdateRev#{winner := false}]; + false -> + Acc + end + end, [], ToUpdate), + + {ok, WinnerDoc1} = fabric2_db:apply_open_doc_opts(WinnerDoc, RevConflicts, [conflicts]), + mango_indexer:update_doc(Db, WinnerDoc1, OldWinnerDoc) end, % Update database size @@ -797,6 +815,9 @@ write_doc(#{} = Db0, Doc, NewWinner0, OldWinner, ToUpdate, ToRemove) -> ok. +extract_rev({RevPos, [Rev | _]}) -> + {RevPos, Rev}. + write_local_doc(#{} = Db0, Doc) -> #{ diff --git a/src/mango/test/19-find-conflicts.py b/src/mango/test/19-find-conflicts.py index 45a1e31..bf865d6 100644 --- a/src/mango/test/19-find-conflicts.py +++ b/src/mango/test/19-find-conflicts.py @@ -25,7 +25,7 @@ class ChooseCorrectIndexForDocs(mango.DbPerClass): self.db.save_docs_with_conflicts(copy.deepcopy(CONFLICT)) def test_retrieve_conflicts(self): - self.db.create_index(["_conflicts"], wait_for_built_index=False) + self.db.create_index(["_conflicts"]) result = self.db.find({"_conflicts": {"$exists": True}}, conflicts=True) self.assertEqual( result[0]["_conflicts"][0], "1-23202479633c2b380f79507a776743d5"
