mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #11860 from tedyu/range-tx-lock
mvcc: Obtain tx Lock once in readTx#UnsafeRange
This commit is contained in:
commit
485e1409ac
@ -77,18 +77,25 @@ func (rt *readTx) UnsafeRange(bucketName, key, endKey []byte, limit int64) ([][]
|
||||
rt.txMu.RLock()
|
||||
bucket, ok := rt.buckets[bn]
|
||||
rt.txMu.RUnlock()
|
||||
lockHeld := false
|
||||
if !ok {
|
||||
rt.txMu.Lock()
|
||||
lockHeld = true
|
||||
bucket = rt.tx.Bucket(bucketName)
|
||||
rt.buckets[bn] = bucket
|
||||
rt.txMu.Unlock()
|
||||
}
|
||||
|
||||
// ignore missing bucket since may have been created in this batch
|
||||
if bucket == nil {
|
||||
if lockHeld {
|
||||
rt.txMu.Unlock()
|
||||
}
|
||||
return keys, vals
|
||||
}
|
||||
rt.txMu.Lock()
|
||||
if !lockHeld {
|
||||
rt.txMu.Lock()
|
||||
lockHeld = true
|
||||
}
|
||||
c := bucket.Cursor()
|
||||
rt.txMu.Unlock()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user