diff --git a/config/retry/backoff.go b/config/retry/backoff.go index 6122e300d6..a2723e05b3 100644 --- a/config/retry/backoff.go +++ b/config/retry/backoff.go @@ -217,9 +217,10 @@ func (b *Backoffer) BackoffWithCfgAndMaxSleep(cfg *Config, maxSleepMs int, err e atomic.AddInt64(&detail.BackoffCount, 1) } - err2 := b.CheckKilled() - if err2 != nil { - return err2 + if b.vars != nil && b.vars.Killed != nil { + if atomic.LoadUint32(b.vars.Killed) == 1 { + return errors.WithStack(tikverr.ErrQueryInterrupted) + } } var startTs interface{} @@ -381,17 +382,3 @@ func (b *Backoffer) longestSleepCfg() (*Config, int) { } return nil, 0 } - -func (b *Backoffer) CheckKilled() error { - if b.vars != nil && b.vars.Killed != nil { - killed := atomic.LoadUint32(b.vars.Killed) - if killed != 0 { - logutil.BgLogger().Info( - "backoff stops because a killed signal is received", - zap.Uint32("signal", killed), - ) - return errors.WithStack(tikverr.ErrQueryInterrupted) - } - } - return nil -} diff --git a/integration_tests/2pc_test.go b/integration_tests/2pc_test.go index 9369bfb666..355dafeae1 100644 --- a/integration_tests/2pc_test.go +++ b/integration_tests/2pc_test.go @@ -2502,13 +2502,3 @@ func (s *testCommitterSuite) TestExtractKeyExistsErr() { s.True(txn.GetMemBuffer().TryLock()) txn.GetMemBuffer().Unlock() } - -func (s *testCommitterSuite) TestKillSignal() { - txn := s.begin() - err := txn.Set([]byte("key"), []byte("value")) - s.Nil(err) - var killed uint32 = 2 - txn.SetVars(kv.NewVariables(&killed)) - err = txn.Commit(context.Background()) - s.ErrorContains(err, "query interrupted") -} diff --git a/internal/client/retry/backoff.go b/internal/client/retry/backoff.go index 7a35a74b6d..a2723e05b3 100644 --- a/internal/client/retry/backoff.go +++ b/internal/client/retry/backoff.go @@ -217,38 +217,23 @@ func (b *Backoffer) BackoffWithCfgAndMaxSleep(cfg *Config, maxSleepMs int, err e atomic.AddInt64(&detail.BackoffCount, 1) } - err2 := b.checkKilled() - if err2 != nil { - return err2 + if b.vars != nil && b.vars.Killed != nil { + if atomic.LoadUint32(b.vars.Killed) == 1 { + return errors.WithStack(tikverr.ErrQueryInterrupted) + } } var startTs interface{} if ts := b.ctx.Value(TxnStartKey); ts != nil { startTs = ts } - logutil.Logger(b.ctx).Debug( - "retry later", + logutil.Logger(b.ctx).Debug("retry later", zap.Error(err), zap.Int("totalSleep", b.totalSleep), zap.Int("excludedSleep", b.excludedSleep), zap.Int("maxSleep", b.maxSleep), zap.Stringer("type", cfg), - zap.Reflect("txnStartTS", startTs), - ) - return nil -} - -func (b *Backoffer) checkKilled() error { - if b.vars != nil && b.vars.Killed != nil { - killed := atomic.LoadUint32(b.vars.Killed) - if killed != 0 { - logutil.BgLogger().Info( - "backoff stops because a killed signal is received", - zap.Uint32("signal", killed), - ) - return errors.WithStack(tikverr.ErrQueryInterrupted) - } - } + zap.Reflect("txnStartTS", startTs)) return nil } diff --git a/internal/locate/region_request.go b/internal/locate/region_request.go index 4ddd13160d..b5638eefce 100644 --- a/internal/locate/region_request.go +++ b/internal/locate/region_request.go @@ -1498,8 +1498,9 @@ func (s *RegionRequestSender) SendReqCtx( } // recheck whether the session/query is killed during the Next() - if err2 := bo.CheckKilled(); err2 != nil { - return nil, nil, retryTimes, err2 + boVars := bo.GetVars() + if boVars != nil && boVars.Killed != nil && atomic.LoadUint32(boVars.Killed) == 1 { + return nil, nil, retryTimes, errors.WithStack(tikverr.ErrQueryInterrupted) } if val, err := util.EvalFailpoint("mockRetrySendReqToRegion"); err == nil { if val.(bool) { diff --git a/kv/variables.go b/kv/variables.go index cae78c9c59..581be54d04 100644 --- a/kv/variables.go +++ b/kv/variables.go @@ -44,10 +44,6 @@ type Variables struct { // Pointer to SessionVars.Killed // Killed is a flag to indicate that this query is killed. - // This is an enum value rather than a boolean. See sqlkiller.go - // in TiDB for its definition. - // When its value is 0, it's not killed - // When its value is not 0, it's killed, the value indicates concrete reason. Killed *uint32 }