session: change the variable range of circuit breaker (#61613)

close pingcap/tidb#61614
This commit is contained in:
Ryan Leung
2025-06-10 21:11:28 +08:00
committed by GitHub
parent 8123a22d38
commit c2e5dd3571
3 changed files with 23 additions and 7 deletions

View File

@ -1658,7 +1658,7 @@ const (
DefOptEnableProjectionPushDown = true
DefTiDBEnableSharedLockPromotion = false
DefTiDBTSOClientRPCMode = TSOClientRPCModeDefault
DefTiDBCircuitBreakerPDMetaErrorRatePct = 0
DefTiDBCircuitBreakerPDMetaErrorRatePct = 0.0
DefTiDBAccelerateUserCreationUpdate = false
DefTiDBEnableTSValidation = true
)
@ -1788,6 +1788,8 @@ var (
SchemaCacheSize = atomic.NewUint64(DefTiDBSchemaCacheSize)
SchemaCacheSizeOriginText = atomic.NewString(strconv.Itoa(DefTiDBSchemaCacheSize))
AccelerateUserCreationUpdate = atomic.NewBool(DefTiDBAccelerateUserCreationUpdate)
CircuitBreakerPDMetadataErrorRateThresholdPct = atomic.NewFloat64(0.0)
)
func serverMemoryLimitDefaultValue() string {

View File

@ -3563,14 +3563,24 @@ var defaultSysVars = []*SysVar{
return (*SetPDClientDynamicOption.Load())(vardef.TiDBTSOClientRPCMode, val)
},
},
{Scope: vardef.ScopeGlobal, Name: vardef.TiDBCircuitBreakerPDMetadataErrorRateThresholdPct, Value: strconv.Itoa(vardef.DefTiDBCircuitBreakerPDMetaErrorRatePct), Type: vardef.TypeUnsigned, MinValue: 0, MaxValue: 100,
{Scope: vardef.ScopeGlobal, Name: vardef.TiDBCircuitBreakerPDMetadataErrorRateThresholdPct, Value: strconv.FormatFloat(vardef.DefTiDBCircuitBreakerPDMetaErrorRatePct, 'f', -1, 64),
Type: vardef.TypeFloat, MinValue: 0, MaxValue: 1,
GetGlobal: func(_ context.Context, s *SessionVars) (string, error) {
return strconv.FormatFloat(vardef.CircuitBreakerPDMetadataErrorRateThresholdPct.Load(), 'f', -1, 64), nil
},
SetGlobal: func(_ context.Context, s *SessionVars, val string) error {
v := tidbOptFloat64(val, vardef.DefTiDBCircuitBreakerPDMetaErrorRatePct)
if v < 0 || v > 1 {
return errors.Errorf("invalid tidb_cb_pd_metadata_error_rate_threshold_pct value %s", val)
}
vardef.CircuitBreakerPDMetadataErrorRateThresholdPct.Store(v)
if ChangePDMetadataCircuitBreakerErrorRateThresholdPct != nil {
ChangePDMetadataCircuitBreakerErrorRateThresholdPct(uint32(tidbOptPositiveInt32(val, vardef.DefTiDBCircuitBreakerPDMetaErrorRatePct)))
ChangePDMetadataCircuitBreakerErrorRateThresholdPct(uint32(v * 100))
}
return nil
},
},
{Scope: vardef.ScopeGlobal, Name: vardef.TiDBAccelerateUserCreationUpdate, Value: BoolToOnOff(vardef.DefTiDBAccelerateUserCreationUpdate), Type: vardef.TypeBool,
SetGlobal: func(_ context.Context, s *SessionVars, val string) error {
vardef.AccelerateUserCreationUpdate.Store(TiDBOptOn(val))

View File

@ -1773,16 +1773,20 @@ func TestTiDBCircuitBreakerPDMetadataErrorRateThresholdPct(t *testing.T) {
require.Equal(t, "[variable:1292]Truncated incorrect tidb_cb_pd_metadata_error_rate_threshold_pct value: '-1'", warn.Error())
// Too high, will get lowered to the max value
val, err = sv.Validate(vars, "101", vardef.ScopeGlobal)
val, err = sv.Validate(vars, "1.1", vardef.ScopeGlobal)
require.NoError(t, err)
require.Equal(t, strconv.FormatUint(GetSysVar(vardef.TiDBCircuitBreakerPDMetadataErrorRateThresholdPct).MaxValue, 10), val)
warn = vars.StmtCtx.GetWarnings()[1].Err
require.Equal(t, "[variable:1292]Truncated incorrect tidb_cb_pd_metadata_error_rate_threshold_pct value: '101'", warn.Error())
require.Equal(t, "[variable:1292]Truncated incorrect tidb_cb_pd_metadata_error_rate_threshold_pct value: '1.1'", warn.Error())
// valid
val, err = sv.Validate(vars, "10", vardef.ScopeGlobal)
val, err = sv.Validate(vars, "0.9", vardef.ScopeGlobal)
require.NoError(t, err)
require.Equal(t, "10", val)
require.Equal(t, "0.9", val)
val, err = sv.Validate(vars, "0.0", vardef.ScopeGlobal)
require.NoError(t, err)
require.Equal(t, "0.0", val)
}
func TestEnableWindowFunction(t *testing.T) {