Skip to content

Commit

Permalink
store/tikv: make tikv.ErrLockWaitTimeout as a normal error instead of… (
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreMouche authored May 11, 2021
1 parent daf133c commit 9b86513
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 11 deletions.
19 changes: 10 additions & 9 deletions session/pessimistic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import (
plannercore "github.com/pingcap/tidb/planner/core"
"github.com/pingcap/tidb/session"
"github.com/pingcap/tidb/sessionctx/variable"
txndriver "github.com/pingcap/tidb/store/driver/txn"
"github.com/pingcap/tidb/store/tikv"
tikverr "github.com/pingcap/tidb/store/tikv/error"
"github.com/pingcap/tidb/store/tikv/oracle"
Expand Down Expand Up @@ -733,10 +734,10 @@ func (s *testPessimisticSuite) TestInnodbLockWaitTimeout(c *C) {

timeoutErr := <-timeoutErrCh
c.Assert(timeoutErr, NotNil)
c.Assert(timeoutErr.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Assert(timeoutErr.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())
timeoutErr = <-timeoutErrCh
c.Assert(timeoutErr, NotNil)
c.Assert(timeoutErr.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Assert(timeoutErr.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())

// tk4 lock c1 = 2
tk4.MustExec("begin pessimistic")
Expand All @@ -749,7 +750,7 @@ func (s *testPessimisticSuite) TestInnodbLockWaitTimeout(c *C) {
_, err := tk2.Exec("delete from tk where c1 = 2")
c.Check(time.Since(start), GreaterEqual, 1000*time.Millisecond)
c.Check(time.Since(start), Less, 3000*time.Millisecond) // unit test diff should not be too big
c.Check(err.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Check(err.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())

tk4.MustExec("commit")

Expand All @@ -767,7 +768,7 @@ func (s *testPessimisticSuite) TestInnodbLockWaitTimeout(c *C) {
_, err = tk2.Exec("delete from tk where c1 = 3") // tk2 tries to lock c1 = 3 fail, this delete should be rollback, but previous update should be keeped
c.Check(time.Since(start), GreaterEqual, 1000*time.Millisecond)
c.Check(time.Since(start), Less, 3000*time.Millisecond) // unit test diff should not be too big
c.Check(err.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Check(err.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())

tk2.MustExec("commit")
tk3.MustExec("commit")
Expand Down Expand Up @@ -841,7 +842,7 @@ func (s *testPessimisticSuite) TestInnodbLockWaitTimeoutWaitStart(c *C) {
c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/tikv/PessimisticLockErrWriteConflict"), IsNil)
waitErr := <-done
c.Assert(waitErr, NotNil)
c.Check(waitErr.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Check(waitErr.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())
c.Check(duration, GreaterEqual, 1000*time.Millisecond)
c.Check(duration, LessEqual, 3000*time.Millisecond)
tk2.MustExec("rollback")
Expand Down Expand Up @@ -1279,7 +1280,7 @@ func (s *testPessimisticSuite) TestBatchPointGetLockIndex(c *C) {
tk2.MustExec("begin pessimistic")
err := tk2.ExecToErr("insert into t1 values(2, 2, 2)")
c.Assert(err, NotNil)
c.Assert(tikverr.ErrLockWaitTimeout.Equal(err), IsTrue)
c.Assert(txndriver.ErrLockWaitTimeout.Equal(err), IsTrue)
err = tk2.ExecToErr("select * from t1 where c2 = 3 for update nowait")
c.Assert(err, NotNil)
c.Assert(tikverr.ErrLockAcquireFailAndNoWaitSet.Equal(err), IsTrue)
Expand Down Expand Up @@ -1996,11 +1997,11 @@ func (s *testPessimisticSuite) TestSelectForUpdateWaitSeconds(c *C) {
waitErr2 := <-errCh
waitErr3 := <-errCh
c.Assert(waitErr, NotNil)
c.Check(waitErr.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Check(waitErr.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())
c.Assert(waitErr2, NotNil)
c.Check(waitErr2.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Check(waitErr2.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())
c.Assert(waitErr3, NotNil)
c.Check(waitErr3.Error(), Equals, tikverr.ErrLockWaitTimeout.Error())
c.Check(waitErr3.Error(), Equals, txndriver.ErrLockWaitTimeout.Error())
c.Assert(time.Since(start).Seconds(), Less, 45.0)
tk2.MustExec("commit")
tk3.MustExec("rollback")
Expand Down
6 changes: 6 additions & 0 deletions store/driver/txn/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ var (
// ErrTiKVMaxTimestampNotSynced is the error that tikv's max timestamp is not synced.
ErrTiKVMaxTimestampNotSynced = dbterror.ClassTiKV.NewStd(errno.ErrTiKVMaxTimestampNotSynced)
ErrResolveLockTimeout = dbterror.ClassTiKV.NewStd(errno.ErrResolveLockTimeout)
// ErrLockWaitTimeout is the error that wait for the lock is timeout.
ErrLockWaitTimeout = dbterror.ClassTiKV.NewStd(errno.ErrLockWaitTimeout)
// ErrTiKVServerBusy is the error when tikv server is busy.
ErrTiKVServerBusy = dbterror.ClassTiKV.NewStd(errno.ErrTiKVServerBusy)
// ErrTiFlashServerBusy is the error that tiflash server is busy.
Expand Down Expand Up @@ -251,6 +253,10 @@ func ToTiDBErr(err error) error {
return ErrResolveLockTimeout
}

if errors.ErrorEqual(err, tikverr.ErrLockWaitTimeout) {
return ErrLockWaitTimeout
}

if errors.ErrorEqual(err, tikverr.ErrRegionUnavailable) {
return ErrRegionUnavailable
}
Expand Down
3 changes: 2 additions & 1 deletion store/tikv/error/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ var (
ErrTiKVMaxTimestampNotSynced = errors.New("tikv max timestamp not synced")
// ErrResolveLockTimeout is the error that resolve lock timeout.
ErrResolveLockTimeout = errors.New("resolve lock timeout")
// ErrLockWaitTimeout is the error that wait for the lock is timeout.
ErrLockWaitTimeout = errors.New("lock wait timeout")
// ErrTiKVServerBusy is the error when tikv server is busy.
ErrTiKVServerBusy = errors.New("tikv server busy")
// ErrTiFlashServerBusy is the error that tiflash server is busy.
Expand All @@ -59,7 +61,6 @@ const MismatchClusterID = "mismatch cluster id"
var (
ErrQueryInterrupted = dbterror.ClassTiKV.NewStd(CodeQueryInterrupted)
ErrLockAcquireFailAndNoWaitSet = dbterror.ClassTiKV.NewStd(CodeLockAcquireFailAndNoWaitSet)
ErrLockWaitTimeout = dbterror.ClassTiKV.NewStd(CodeLockWaitTimeout)
ErrUnknown = dbterror.ClassTiKV.NewStd(CodeUnknown)
)

Expand Down
2 changes: 1 addition & 1 deletion store/tikv/tests/2pc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1025,7 +1025,7 @@ func (s *testCommitterSuite) TestPessimisticLockPrimary(c *C) {
c.Assert(failpoint.Disable("github.com/pingcap/tidb/store/tikv/txnNotFoundRetTTL"), IsNil)
c.Assert(err, IsNil)
waitErr := <-doneCh
c.Assert(tikverr.ErrLockWaitTimeout.Equal(waitErr), IsTrue)
c.Assert(tikverr.ErrLockWaitTimeout, Equals, waitErr)
}

func (s *testCommitterSuite) TestResolvePessimisticLock(c *C) {
Expand Down

0 comments on commit 9b86513

Please sign in to comment.