mirror of https://github.com/tikv/client-go.git
This reverts commit 057c479dd8.
Signed-off-by: MyonKeminta <MyonKeminta@users.noreply.github.com>
Co-authored-by: MyonKeminta <MyonKeminta@users.noreply.github.com>
This commit is contained in:
parent
fd2fc84032
commit
3480b5ed7c
|
|
@ -217,9 +217,10 @@ func (b *Backoffer) BackoffWithCfgAndMaxSleep(cfg *Config, maxSleepMs int, err e
|
||||||
atomic.AddInt64(&detail.BackoffCount, 1)
|
atomic.AddInt64(&detail.BackoffCount, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
err2 := b.CheckKilled()
|
if b.vars != nil && b.vars.Killed != nil {
|
||||||
if err2 != nil {
|
if atomic.LoadUint32(b.vars.Killed) == 1 {
|
||||||
return err2
|
return errors.WithStack(tikverr.ErrQueryInterrupted)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var startTs interface{}
|
var startTs interface{}
|
||||||
|
|
@ -381,17 +382,3 @@ func (b *Backoffer) longestSleepCfg() (*Config, int) {
|
||||||
}
|
}
|
||||||
return nil, 0
|
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
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -2502,13 +2502,3 @@ func (s *testCommitterSuite) TestExtractKeyExistsErr() {
|
||||||
s.True(txn.GetMemBuffer().TryLock())
|
s.True(txn.GetMemBuffer().TryLock())
|
||||||
txn.GetMemBuffer().Unlock()
|
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")
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -217,38 +217,23 @@ func (b *Backoffer) BackoffWithCfgAndMaxSleep(cfg *Config, maxSleepMs int, err e
|
||||||
atomic.AddInt64(&detail.BackoffCount, 1)
|
atomic.AddInt64(&detail.BackoffCount, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
err2 := b.checkKilled()
|
if b.vars != nil && b.vars.Killed != nil {
|
||||||
if err2 != nil {
|
if atomic.LoadUint32(b.vars.Killed) == 1 {
|
||||||
return err2
|
return errors.WithStack(tikverr.ErrQueryInterrupted)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var startTs interface{}
|
var startTs interface{}
|
||||||
if ts := b.ctx.Value(TxnStartKey); ts != nil {
|
if ts := b.ctx.Value(TxnStartKey); ts != nil {
|
||||||
startTs = ts
|
startTs = ts
|
||||||
}
|
}
|
||||||
logutil.Logger(b.ctx).Debug(
|
logutil.Logger(b.ctx).Debug("retry later",
|
||||||
"retry later",
|
|
||||||
zap.Error(err),
|
zap.Error(err),
|
||||||
zap.Int("totalSleep", b.totalSleep),
|
zap.Int("totalSleep", b.totalSleep),
|
||||||
zap.Int("excludedSleep", b.excludedSleep),
|
zap.Int("excludedSleep", b.excludedSleep),
|
||||||
zap.Int("maxSleep", b.maxSleep),
|
zap.Int("maxSleep", b.maxSleep),
|
||||||
zap.Stringer("type", cfg),
|
zap.Stringer("type", cfg),
|
||||||
zap.Reflect("txnStartTS", startTs),
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1498,8 +1498,9 @@ func (s *RegionRequestSender) SendReqCtx(
|
||||||
}
|
}
|
||||||
|
|
||||||
// recheck whether the session/query is killed during the Next()
|
// recheck whether the session/query is killed during the Next()
|
||||||
if err2 := bo.CheckKilled(); err2 != nil {
|
boVars := bo.GetVars()
|
||||||
return nil, nil, retryTimes, err2
|
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, err := util.EvalFailpoint("mockRetrySendReqToRegion"); err == nil {
|
||||||
if val.(bool) {
|
if val.(bool) {
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,6 @@ type Variables struct {
|
||||||
|
|
||||||
// Pointer to SessionVars.Killed
|
// Pointer to SessionVars.Killed
|
||||||
// Killed is a flag to indicate that this query is 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
|
Killed *uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue