Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sessionctx: refactor sessionctx pkg's warning and note generation #49760

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pkg/sessionctx/stmtctx/stmtctx.go
Original file line number Diff line number Diff line change
Expand Up @@ -1275,10 +1275,10 @@ func (sc *StatementContext) RecordRangeFallback(rangeMaxSize int64) {
// If range fallback happens, it means ether the query is unreasonable(for example, several long IN lists) or tidb_opt_range_max_size is too small
// and the generated plan is probably suboptimal. In that case we don't put it into plan cache.
if sc.UseCache {
sc.SetSkipPlanCache(errors.Errorf("in-list is too long"))
sc.SetSkipPlanCache(errors.NewNoStackError("in-list is too long"))
}
if !sc.RangeFallback {
sc.AppendWarning(errors.Errorf("Memory capacity of %v bytes for 'tidb_opt_range_max_size' exceeded when building ranges. Less accurate ranges such as full range are chosen", rangeMaxSize))
sc.AppendWarning(errors.NewNoStackErrorf("Memory capacity of %v bytes for 'tidb_opt_range_max_size' exceeded when building ranges. Less accurate ranges such as full range are chosen", rangeMaxSize))
sc.RangeFallback = true
}
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/sessionctx/stmtctx/stmtctx_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ func TestNewStmtCtx(t *testing.T) {
require.Equal(t, types.DefaultStmtFlags, sc.TypeFlags())
require.Same(t, time.UTC, sc.TimeZone())
require.Same(t, time.UTC, sc.TimeZone())
sc.AppendWarning(errors.New("err1"))
sc.AppendWarning(errors.NewNoStackError("err1"))
warnings := sc.GetWarnings()
require.Equal(t, 1, len(warnings))
require.Equal(t, stmtctx.WarnLevelWarning, warnings[0].Level)
Expand All @@ -328,7 +328,7 @@ func TestNewStmtCtx(t *testing.T) {
require.Equal(t, types.DefaultStmtFlags, sc.TypeFlags())
require.Same(t, tz, sc.TimeZone())
require.Same(t, tz, sc.TimeZone())
sc.AppendWarning(errors.New("err2"))
sc.AppendWarning(errors.NewNoStackError("err2"))
warnings = sc.GetWarnings()
require.Equal(t, 1, len(warnings))
require.Equal(t, stmtctx.WarnLevelWarning, warnings[0].Level)
Expand Down Expand Up @@ -363,7 +363,7 @@ func TestResetStmtCtx(t *testing.T) {
tz := time.FixedZone("UTC+1", 2*60*60)
sc.SetTimeZone(tz)
sc.SetTypeFlags(types.FlagAllowNegativeToUnsigned | types.FlagSkipASCIICheck)
sc.AppendWarning(errors.New("err1"))
sc.AppendWarning(errors.NewNoStackError("err1"))
sc.InRestrictedSQL = true
sc.StmtType = "Insert"

Expand All @@ -379,7 +379,7 @@ func TestResetStmtCtx(t *testing.T) {
require.False(t, sc.InRestrictedSQL)
require.Empty(t, sc.StmtType)
require.Equal(t, 0, len(sc.GetWarnings()))
sc.AppendWarning(errors.New("err2"))
sc.AppendWarning(errors.NewNoStackError("err2"))
warnings := sc.GetWarnings()
require.Equal(t, 1, len(warnings))
require.Equal(t, stmtctx.WarnLevelWarning, warnings[0].Level)
Expand Down
8 changes: 5 additions & 3 deletions pkg/sessionctx/variable/noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ package variable

import (
"math"

"github.com/pingcap/errors"
)

// The following sysVars are noops.
Expand Down Expand Up @@ -196,11 +198,11 @@ var noopSysVars = []*SysVar{
{Scope: ScopeGlobal | ScopeSession, Name: SQLAutoIsNull, Value: Off, Type: TypeBool, IsHintUpdatableVerfied: true, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) {
// checkSQLAutoIsNull requires TiDBEnableNoopFuncs != OFF for the same scope otherwise an error will be returned.
// See also https://github.com/pingcap/tidb/issues/28230
errMsg := ErrFunctionsNoopImpl.GenWithStackByArgs("sql_auto_is_null")
errMsg := ErrFunctionsNoopImpl.FastGenByArgs("sql_auto_is_null")
if TiDBOptOn(normalizedValue) {
if scope == ScopeSession && vars.NoopFuncsMode != OnInt {
if vars.NoopFuncsMode == OffInt {
return Off, errMsg
return Off, errors.Trace(errMsg)
}
vars.StmtCtx.AppendWarning(errMsg)
}
Expand All @@ -210,7 +212,7 @@ var noopSysVars = []*SysVar{
return originalValue, errUnknownSystemVariable.GenWithStackByArgs(TiDBEnableNoopFuncs)
}
if val == Off {
return Off, errMsg
return Off, errors.Trace(errMsg)
}
if val == Warn {
vars.StmtCtx.AppendWarning(errMsg)
Expand Down
4 changes: 2 additions & 2 deletions pkg/sessionctx/variable/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -1739,9 +1739,9 @@ func (s *SessionVars) RaiseWarningWhenMPPEnforced(warning string) {
return
}
if s.StmtCtx.InExplainStmt {
s.StmtCtx.AppendWarning(errors.New(warning))
s.StmtCtx.AppendWarning(errors.NewNoStackError(warning))
} else {
s.StmtCtx.AppendExtraWarning(errors.New(warning))
s.StmtCtx.AppendExtraWarning(errors.NewNoStackError(warning))
}
}

Expand Down
28 changes: 14 additions & 14 deletions pkg/sessionctx/variable/sysvar.go
Original file line number Diff line number Diff line change
Expand Up @@ -1044,7 +1044,7 @@ var defaultSysVars = []*SysVar{
intVal = bt
}
if intVal > 0 && intVal < 128 { // 128 Bytes
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(TiDBServerMemoryLimitSessMinSize, originalValue))
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(TiDBServerMemoryLimitSessMinSize, originalValue))
intVal = 128
}
return strconv.FormatUint(intVal, 10), nil
Expand Down Expand Up @@ -1566,7 +1566,7 @@ var defaultSysVars = []*SysVar{
if mathutil.IntBits == 32 {
if val, err := strconv.ParseUint(normalizedValue, 10, 64); err == nil {
if val > uint64(math.MaxUint32) {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(GroupConcatMaxLen, originalValue))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(GroupConcatMaxLen, originalValue))
return strconv.FormatInt(int64(math.MaxUint32), 10), nil
}
}
Expand Down Expand Up @@ -1603,7 +1603,7 @@ var defaultSysVars = []*SysVar{
}
remainder := u % 1024
if remainder != 0 {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(MaxAllowedPacket, normalizedValue))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(MaxAllowedPacket, normalizedValue))
u -= remainder
}
return strconv.FormatUint(u, 10), nil
Expand Down Expand Up @@ -1924,7 +1924,7 @@ var defaultSysVars = []*SysVar{
{Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableFastAnalyze, Value: BoolToOnOff(DefTiDBUseFastAnalyze), Type: TypeBool,
Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) {
if TiDBOptOn(normalizedValue) {
vars.StmtCtx.AppendWarning(errors.New("the fast analyze feature has already been removed in TiDB v7.5.0, so this will have no effect"))
vars.StmtCtx.AppendWarning(errors.NewNoStackError("the fast analyze feature has already been removed in TiDB v7.5.0, so this will have no effect"))
}
return normalizedValue, nil
},
Expand Down Expand Up @@ -2076,15 +2076,15 @@ var defaultSysVars = []*SysVar{
}, SetSession: func(s *SessionVars, val string) error {
newMode := strings.ToLower(strings.TrimSpace(val))
if PartitionPruneMode(s.PartitionPruneMode.Load()) == Static && PartitionPruneMode(newMode) == Dynamic {
s.StmtCtx.AppendWarning(errors.New("Please analyze all partition tables again for consistency between partition and global stats"))
s.StmtCtx.AppendWarning(errors.New("Please avoid setting partition prune mode to dynamic at session level and set partition prune mode to dynamic at global level"))
s.StmtCtx.AppendWarning(errors.NewNoStackError("Please analyze all partition tables again for consistency between partition and global stats"))
s.StmtCtx.AppendWarning(errors.NewNoStackError("Please avoid setting partition prune mode to dynamic at session level and set partition prune mode to dynamic at global level"))
}
s.PartitionPruneMode.Store(newMode)
return nil
}, SetGlobal: func(_ context.Context, s *SessionVars, val string) error {
newMode := strings.ToLower(strings.TrimSpace(val))
if PartitionPruneMode(newMode) == Dynamic {
s.StmtCtx.AppendWarning(errors.New("Please analyze all partition tables again for consistency between partition and global stats"))
s.StmtCtx.AppendWarning(errors.NewNoStackError("Please analyze all partition tables again for consistency between partition and global stats"))
}
return nil
}},
Expand Down Expand Up @@ -2132,7 +2132,7 @@ var defaultSysVars = []*SysVar{
{Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableExchangePartition, Value: On, Type: TypeBool,
Validation: func(vars *SessionVars, s string, s2 string, flag ScopeFlag) (string, error) {
if s == Off {
vars.StmtCtx.AppendWarning(errors.New("tidb_enable_exchange_partition is always turned on. This variable has been deprecated and will be removed in the future releases"))
vars.StmtCtx.AppendWarning(errors.NewNoStackError("tidb_enable_exchange_partition is always turned on. This variable has been deprecated and will be removed in the future releases"))
}
return On, nil
},
Expand Down Expand Up @@ -2251,7 +2251,7 @@ var defaultSysVars = []*SysVar{
}, Validation: func(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) {
intVal := TidbOptInt64(normalizedValue, DefTiDBMemQuotaQuery)
if intVal > 0 && intVal < 128 {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(TiDBMemQuotaQuery, originalValue))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(TiDBMemQuotaQuery, originalValue))
normalizedValue = "128"
}
return normalizedValue, nil
Expand Down Expand Up @@ -2350,7 +2350,7 @@ var defaultSysVars = []*SysVar{
{Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableTiFlashReadForWriteStmt, Value: On, Type: TypeBool,
Validation: func(vars *SessionVars, s string, s2 string, flag ScopeFlag) (string, error) {
if s == Off {
vars.StmtCtx.AppendWarning(errors.New("tidb_enable_tiflash_read_for_write_stmt is always turned on. This variable has been deprecated and will be removed in the future releases"))
vars.StmtCtx.AppendWarning(errors.NewNoStackError("tidb_enable_tiflash_read_for_write_stmt is always turned on. This variable has been deprecated and will be removed in the future releases"))
}
return On, nil
},
Expand Down Expand Up @@ -2641,7 +2641,7 @@ var defaultSysVars = []*SysVar{
return err
}
for _, warning := range warnings {
vars.StmtCtx.AppendWarning(errors.New(warning))
vars.StmtCtx.AppendWarning(errors.NewNoStackError(warning))
}
return nil
},
Expand All @@ -2651,7 +2651,7 @@ var defaultSysVars = []*SysVar{
return err
}
for _, warning := range warnings {
s.StmtCtx.AppendWarning(errors.New(warning))
s.StmtCtx.AppendWarning(errors.NewNoStackError(warning))
}
s.OptimizerFixControl = newMap
return nil
Expand Down Expand Up @@ -2905,7 +2905,7 @@ var defaultSysVars = []*SysVar{
chars := []rune(normalizedValue)
warningAdded := false
if len(chars) > 64 {
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(TiDBSessionAlias, originalValue))
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(TiDBSessionAlias, originalValue))
warningAdded = true
chars = chars[:64]
normalizedValue = string(chars)
Expand All @@ -2914,7 +2914,7 @@ var defaultSysVars = []*SysVar{
// truncate to a valid identifier
for normalizedValue != "" && util.IsInCorrectIdentifierName(normalizedValue) {
if !warningAdded {
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(TiDBSessionAlias, originalValue))
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(TiDBSessionAlias, originalValue))
warningAdded = true
}
chars = chars[:len(chars)-1]
Expand Down
18 changes: 9 additions & 9 deletions pkg/sessionctx/variable/variable.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,11 +402,11 @@ func (sv *SysVar) checkDurationSystemVar(value string, vars *SessionVars) (strin
}
// Check for min/max violations
if int64(d) < sv.MinValue {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return time.Duration(sv.MinValue).String(), nil
}
if uint64(d) > sv.MaxValue {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return time.Duration(sv.MaxValue).String(), nil
}
// return a string representation of the duration
Expand All @@ -425,19 +425,19 @@ func (sv *SysVar) checkUInt64SystemVar(value string, vars *SessionVars) (string,
if err != nil {
return value, ErrWrongTypeForVar.GenWithStackByArgs(sv.Name)
}
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return strconv.FormatInt(sv.MinValue, 10), nil
}
val, err := strconv.ParseUint(value, 10, 64)
if err != nil {
return value, ErrWrongTypeForVar.GenWithStackByArgs(sv.Name)
}
if val < uint64(sv.MinValue) {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return strconv.FormatInt(sv.MinValue, 10), nil
}
if val > sv.MaxValue {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return strconv.FormatUint(sv.MaxValue, 10), nil
}
return value, nil
Expand All @@ -452,11 +452,11 @@ func (sv *SysVar) checkInt64SystemVar(value string, vars *SessionVars) (string,
return value, ErrWrongTypeForVar.GenWithStackByArgs(sv.Name)
}
if val < sv.MinValue {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return strconv.FormatInt(sv.MinValue, 10), nil
}
if val > int64(sv.MaxValue) {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return strconv.FormatUint(sv.MaxValue, 10), nil
}
return value, nil
Expand Down Expand Up @@ -484,11 +484,11 @@ func (sv *SysVar) checkFloatSystemVar(value string, vars *SessionVars) (string,
return value, ErrWrongTypeForVar.GenWithStackByArgs(sv.Name)
}
if val < float64(sv.MinValue) {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return strconv.FormatInt(sv.MinValue, 10), nil
}
if val > float64(sv.MaxValue) {
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(sv.Name, value))
vars.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(sv.Name, value))
return strconv.FormatUint(sv.MaxValue, 10), nil
}
return value, nil
Expand Down
14 changes: 7 additions & 7 deletions pkg/sessionctx/variable/varsutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ func checkDefaultCollationForUTF8MB4(vars *SessionVars, normalizedValue string,

func checkCharacterSet(normalizedValue string, argName string) (string, error) {
if normalizedValue == "" {
return normalizedValue, errors.Trace(ErrWrongValueForVar.GenWithStackByArgs(argName, "NULL"))
return normalizedValue, errors.Trace(ErrWrongValueForVar.FastGenByArgs(argName, "NULL"))
}
cs, err := charset.GetCharsetInfo(normalizedValue)
if err != nil {
Expand All @@ -147,14 +147,14 @@ func checkCharacterSet(normalizedValue string, argName string) (string, error) {

// checkReadOnly requires TiDBEnableNoopFuncs=1 for the same scope otherwise an error will be returned.
func checkReadOnly(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag, offlineMode bool) (string, error) {
errMsg := ErrFunctionsNoopImpl.GenWithStackByArgs("READ ONLY")
errMsg := ErrFunctionsNoopImpl.FastGenByArgs("READ ONLY")
if offlineMode {
errMsg = ErrFunctionsNoopImpl.GenWithStackByArgs("OFFLINE MODE")
errMsg = ErrFunctionsNoopImpl.FastGenByArgs("OFFLINE MODE")
}
if TiDBOptOn(normalizedValue) {
if scope == ScopeSession && vars.NoopFuncsMode != OnInt {
if vars.NoopFuncsMode == OffInt {
return Off, errMsg
return Off, errors.Trace(errMsg)
}
vars.StmtCtx.AppendWarning(errMsg)
}
Expand All @@ -164,7 +164,7 @@ func checkReadOnly(vars *SessionVars, normalizedValue string, originalValue stri
return originalValue, errUnknownSystemVariable.GenWithStackByArgs(TiDBEnableNoopFuncs)
}
if val == Off {
return Off, errMsg
return Off, errors.Trace(errMsg)
}
if val == Warn {
vars.StmtCtx.AppendWarning(errMsg)
Expand All @@ -176,7 +176,7 @@ func checkReadOnly(vars *SessionVars, normalizedValue string, originalValue stri

func checkIsolationLevel(vars *SessionVars, normalizedValue string, originalValue string, scope ScopeFlag) (string, error) {
if normalizedValue == "SERIALIZABLE" || normalizedValue == "READ-UNCOMMITTED" {
returnErr := ErrUnsupportedIsolationLevel.GenWithStackByArgs(normalizedValue)
returnErr := ErrUnsupportedIsolationLevel.FastGenByArgs(normalizedValue)
if !TiDBOptOn(vars.systems[TiDBSkipIsolationLevelCheck]) {
return normalizedValue, ErrUnsupportedIsolationLevel.GenWithStackByArgs(normalizedValue)
}
Expand Down Expand Up @@ -362,7 +362,7 @@ func tidbOptFloat64(opt string, defaultVal float64) float64 {
func parseMemoryLimit(s *SessionVars, normalizedValue string, originalValue string) (byteSize uint64, normalizedStr string, err error) {
defer func() {
if err == nil && byteSize > 0 && byteSize < (512<<20) {
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.GenWithStackByArgs(TiDBServerMemoryLimit, originalValue))
s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(TiDBServerMemoryLimit, originalValue))
byteSize = 512 << 20
normalizedStr = "512MB"
}
Expand Down