Skip to content

Commit a2f8094

Browse files
authored
txn: Fix data race of checking and exiting fair locking concurrently in LockKeys (#42635) (#42638)
close #42615
1 parent 537fece commit a2f8094

File tree

4 files changed

+5
-19
lines changed

4 files changed

+5
-19
lines changed

DEPS.bzl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4101,8 +4101,8 @@ def go_deps():
41014101
name = "com_github_tikv_client_go_v2",
41024102
build_file_proto_mode = "disable_global",
41034103
importpath = "github.com/tikv/client-go/v2",
4104-
sum = "h1:m5Y7tBW5Rq8L1ANxibitBa/DInDy3hA2Qvk1Ys9u1NU=",
4105-
version = "v2.0.7-0.20230317032622-884a634378d4",
4104+
sum = "h1:oVFdu5s0ASRiKYqo2OmYb1e4OhQ6xYpcqqrwwpp1Kss=",
4105+
version = "v2.0.7-0.20230328075239-e72043db9e79",
41064106
)
41074107
go_repository(
41084108
name = "com_github_tikv_pd",

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ require (
9292
github.com/stretchr/testify v1.8.2
9393
github.com/tdakkota/asciicheck v0.1.1
9494
github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2
95-
github.com/tikv/client-go/v2 v2.0.7-0.20230317032622-884a634378d4
95+
github.com/tikv/client-go/v2 v2.0.7-0.20230328075239-e72043db9e79
9696
github.com/tikv/pd/client v0.0.0-20230324043643-8c21dfc56c74
9797
github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e
9898
github.com/twmb/murmur3 v1.1.6

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -941,8 +941,8 @@ github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 h1:mbAskLJ0oJf
941941
github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfKggNGDuadAa0LElHrByyrz4JPZ9fFx6Gs7nx7ZZU=
942942
github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4=
943943
github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM=
944-
github.com/tikv/client-go/v2 v2.0.7-0.20230317032622-884a634378d4 h1:m5Y7tBW5Rq8L1ANxibitBa/DInDy3hA2Qvk1Ys9u1NU=
945-
github.com/tikv/client-go/v2 v2.0.7-0.20230317032622-884a634378d4/go.mod h1:DPL03G+QwLmypNjDIl+B02UltorBMx3WzSh4yJbp+cw=
944+
github.com/tikv/client-go/v2 v2.0.7-0.20230328075239-e72043db9e79 h1:oVFdu5s0ASRiKYqo2OmYb1e4OhQ6xYpcqqrwwpp1Kss=
945+
github.com/tikv/client-go/v2 v2.0.7-0.20230328075239-e72043db9e79/go.mod h1:DPL03G+QwLmypNjDIl+B02UltorBMx3WzSh4yJbp+cw=
946946
github.com/tikv/pd/client v0.0.0-20230324043643-8c21dfc56c74 h1:EfoC5JuDSpMRADZ2TVcv3CKfzGOyKSTui5Db0hd94i4=
947947
github.com/tikv/pd/client v0.0.0-20230324043643-8c21dfc56c74/go.mod h1:3cTcfo8GRA2H/uSttqA3LvMfMSHVBJaXk3IgkFXFVxo=
948948
github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo=

store/driver/txn/txn_driver.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ func (txn *tikvTxn) CacheTableInfo(id int64, info *model.TableInfo) {
7979

8080
func (txn *tikvTxn) LockKeys(ctx context.Context, lockCtx *kv.LockCtx, keysInput ...kv.Key) error {
8181
keys := toTiKVKeys(keysInput)
82-
txn.exitFairLockingIfInapplicable(ctx, keys)
8382
err := txn.KVTxn.LockKeys(ctx, lockCtx, keys...)
8483
if err != nil {
8584
return txn.extractKeyErr(err)
@@ -89,7 +88,6 @@ func (txn *tikvTxn) LockKeys(ctx context.Context, lockCtx *kv.LockCtx, keysInput
8988

9089
func (txn *tikvTxn) LockKeysFunc(ctx context.Context, lockCtx *kv.LockCtx, fn func(), keysInput ...kv.Key) error {
9190
keys := toTiKVKeys(keysInput)
92-
txn.exitFairLockingIfInapplicable(ctx, keys)
9391
err := txn.KVTxn.LockKeysFunc(ctx, lockCtx, fn, keys...)
9492
if err != nil {
9593
return txn.extractKeyErr(err)
@@ -357,18 +355,6 @@ func (txn *tikvTxn) UpdateMemBufferFlags(key []byte, flags ...kv.FlagsOp) {
357355
txn.GetUnionStore().GetMemBuffer().UpdateFlags(key, getTiKVFlagsOps(flags)...)
358356
}
359357

360-
func (txn *tikvTxn) exitFairLockingIfInapplicable(ctx context.Context, keys [][]byte) {
361-
if len(keys) > 1 && txn.IsInAggressiveLockingMode() {
362-
// Only allow fair locking if it only needs to lock one key. Considering that it's possible that a
363-
// statement causes multiple calls to `LockKeys` (which means some keys may have been locked in fair
364-
// locking mode), here we exit fair locking mode by calling DoneFairLocking instead of cancelling.
365-
// Then the previously-locked keys during execution in this statement (if any) will be turned into the state
366-
// as if they were locked in normal way.
367-
// Note that the issue https://github.com/pingcap/tidb/issues/35682 also exists here.
368-
txn.KVTxn.DoneAggressiveLocking(ctx)
369-
}
370-
}
371-
372358
func (txn *tikvTxn) generateWriteConflictForLockedWithConflict(lockCtx *kv.LockCtx) error {
373359
if lockCtx.MaxLockedWithConflictTS != 0 {
374360
failpoint.Inject("lockedWithConflictOccurs", func() {})

0 commit comments

Comments
 (0)