diff options
author | Robert Newson <rnewson@apache.org> | 2020-07-24 16:11:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-24 16:11:49 +0100 |
commit | f811f3f56cef4527e75ae591fcb4dbfeb69636f5 (patch) | |
tree | 26ff240560cb9cab693d85555e55a511c381fe60 | |
parent | 6875e7bf710cd2ffdf6d115af2bcd877012626c3 (diff) | |
parent | ebe62b281f9ba30bd3643181ec0b6674bedd7c03 (diff) | |
download | couchdb-f811f3f56cef4527e75ae591fcb4dbfeb69636f5.tar.gz |
Merge pull request #3033 from apache/prototype/fdb-layer-ebtree-spurious-conflicts
Only call erlfdb:set if the node changes
-rw-r--r-- | src/ebtree/src/ebtree.erl | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/ebtree/src/ebtree.erl b/src/ebtree/src/ebtree.erl index cb5e80541..38a328947 100644 --- a/src/ebtree/src/ebtree.erl +++ b/src/ebtree/src/ebtree.erl @@ -534,7 +534,7 @@ insert_nonfull(Tx, #tree{} = Tree, #node{level = 0} = Node0, Key, Value) -> Node1 = Node0#node{ members = umerge(Tree, [{Key, Value}], Node0#node.members) }, - set_node(Tx, Tree, Node1), + set_node(Tx, Tree, Node0, Node1), reduce_node(Tree, Node1); insert_nonfull(Tx, #tree{} = Tree, #node{} = Node0, Key, Value) -> @@ -563,7 +563,7 @@ insert_nonfull(Tx, #tree{} = Tree, #node{} = Node0, Key, Value) -> members = lists:keyreplace(ChildId1, 3, Node1#node.members, {NewFirstKey, NewLastKey, ChildId1, NewReduction}) }, - set_node(Tx, Tree, Node2), + set_node(Tx, Tree, Node0, Node2), reduce_node(Tree, Node2). @@ -584,7 +584,7 @@ delete(Db, #tree{} = Tree, Key) -> clear_node(Tx, Tree, Root2), set_node(Tx, Tree, Root2#node{id = ?NODE_ROOT_ID}); Root1 -> - set_node(Tx, Tree, Root1) + set_node(Tx, Tree, Root0, Root1) end end), Tree. @@ -633,7 +633,7 @@ delete(Tx, #tree{} = Tree, #node{} = Parent0, Key) -> set_nodes(Tx, Tree, NewNodes), Parent1; false -> - set_node(Tx, Tree, Child1), + set_node(Tx, Tree, Child0, Child1), {_OldFirstKey, _OldLastKey, ChildId0, _OldReduction} = lists:keyfind(ChildId0, 3, Parent0#node.members), Parent0#node{ members = lists:keyreplace(ChildId0, 3, Parent0#node.members, @@ -756,6 +756,13 @@ set_nodes(Tx, #tree{} = Tree, Nodes) -> end, Nodes). +set_node(_Tx, #tree{} = _Tree, #node{} = Same, #node{} = Same) -> + ok; + +set_node(Tx, #tree{} = Tree, #node{} = _From, #node{} = To) -> + set_node(Tx, Tree, To). + + set_node(Tx, #tree{} = Tree, #node{} = Node) -> validate_node(Tree, Node), Key = node_key(Tree#tree.prefix, Node#node.id), |