Browse Source

Merge pull request #10526 from jingyih/improve_mvcc_index_concurrency

mvcc: release lock early when traversing index
Xiang Li 6 years ago
parent
commit
949bcbddbe
1 changed files with 3 additions and 2 deletions
  1. 3 2
      mvcc/index.go

+ 3 - 2
mvcc/index.go

@@ -92,9 +92,10 @@ func (ti *treeIndex) visit(key, end []byte, f func(ki *keyIndex)) {
 	keyi, endi := &keyIndex{key: key}, &keyIndex{key: end}
 	keyi, endi := &keyIndex{key: key}, &keyIndex{key: end}
 
 
 	ti.RLock()
 	ti.RLock()
-	defer ti.RUnlock()
+	clone := ti.tree.Clone()
+	ti.RUnlock()
 
 
-	ti.tree.AscendGreaterOrEqual(keyi, func(item btree.Item) bool {
+	clone.AscendGreaterOrEqual(keyi, func(item btree.Item) bool {
 		if len(endi.key) > 0 && !item.Less(endi) {
 		if len(endi.key) > 0 && !item.Less(endi) {
 			return false
 			return false
 		}
 		}