diff --git a/store/tikv/pessimistic.go b/store/tikv/pessimistic.go index 1c51a43d2e..65544f9e80 100644 --- a/store/tikv/pessimistic.go +++ b/store/tikv/pessimistic.go @@ -14,6 +14,7 @@ package tikv import ( + "encoding/hex" "math/rand" "strings" "sync/atomic" @@ -73,12 +74,22 @@ func (action actionPessimisticLock) handleSingleBatch(c *twoPhaseCommitter, bo * mutations[i] = mut } elapsed := uint64(time.Since(c.txn.startTime) / time.Millisecond) + ttl := elapsed + atomic.LoadUint64(&ManagedLockTTL) + failpoint.Inject("shortPessimisticLockTTL", func() { + ttl = 1 + keys := make([]string, 0, len(mutations)) + for _, m := range mutations { + keys = append(keys, hex.EncodeToString(m.Key)) + } + logutil.BgLogger().Info("[failpoint] injected lock ttl = 1 on pessimistic lock", + zap.Uint64("txnStartTS", c.startTS), zap.Strings("keys", keys)) + }) req := tikvrpc.NewRequest(tikvrpc.CmdPessimisticLock, &pb.PessimisticLockRequest{ Mutations: mutations, PrimaryLock: c.primary(), StartVersion: c.startTS, ForUpdateTs: c.forUpdateTS, - LockTtl: elapsed + atomic.LoadUint64(&ManagedLockTTL), + LockTtl: ttl, IsFirstLock: c.isFirstLock, WaitTimeout: action.LockWaitTime, ReturnValues: action.ReturnValues,