Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
8 changes: 4 additions & 4 deletions DEPS.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -5539,11 +5539,11 @@ def go_deps():
name = "com_github_pingcap_log",
build_file_proto_mode = "disable_global",
importpath = "github.com/pingcap/log",
sha256 = "50df543d8d2d5f5f24f6ec5926855f074714a958f1f58e7fe50920c7e4d5fe5d",
strip_prefix = "github.com/pingcap/log@v1.1.1-0.20250917021125-19901e015dc9",
sha256 = "1a358a72b0e696b2e74bb74c08a51f36035fbe5721a9a1b5a3cc1e7c11493710",
strip_prefix = "github.com/pingcap/log@v1.1.1-0.20260604211921-80a4a2dc3943",
urls = [
"https://cache.hawkingrei.com/gomod/github.com/pingcap/log/com_github_pingcap_log-v1.1.1-0.20250917021125-19901e015dc9.zip",
"https://storage.googleapis.com/pingcapmirror/gomod/github.com/pingcap/log/com_github_pingcap_log-v1.1.1-0.20250917021125-19901e015dc9.zip",
"https://cache.hawkingrei.com/gomod/github.com/pingcap/log/com_github_pingcap_log-v1.1.1-0.20260604211921-80a4a2dc3943.zip",
"https://storage.googleapis.com/pingcapmirror/gomod/github.com/pingcap/log/com_github_pingcap_log-v1.1.1-0.20260604211921-80a4a2dc3943.zip",
],
)
go_repository(
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ require (
github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86
github.com/pingcap/fn v1.0.0
github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278
github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9
github.com/pingcap/log v1.1.1-0.20260604211921-80a4a2dc3943
github.com/pingcap/metering_sdk v0.0.0-20260324055927-14fead745f1d
github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5
github.com/pingcap/tidb/pkg/parser v0.0.0-20211011031125-9b13dc409c5e
Expand Down Expand Up @@ -352,7 +352,7 @@ require (
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
google.golang.org/protobuf v1.36.10
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apimachinery v0.29.11 // indirect
k8s.io/klog/v2 v2.120.1 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -732,8 +732,8 @@ github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 h1:VV03wSSG2XhOwhF
github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE=
github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM=
github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4=
github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9 h1:qG9BSvlWFEE5otQGamuWedx9LRm0nrHvsQRQiW8SxEs=
github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9/go.mod h1:ORfBOFp1eteu2odzsyaxI+b8TzJwgjwyQcGhI+9SfEA=
github.com/pingcap/log v1.1.1-0.20260604211921-80a4a2dc3943 h1:Gdg+HJrHOg4suytbZUrR0vITtGOgufme94srbScI3hk=
github.com/pingcap/log v1.1.1-0.20260604211921-80a4a2dc3943/go.mod h1:pxfz2oJfAuhwrb3/rcLqD//GS/5gRP4gD022iP3cEO0=
github.com/pingcap/metering_sdk v0.0.0-20260324055927-14fead745f1d h1:5JCgncG9X7tOsqKqbIXpV2VG4mu/hv3RvvZewqFj0U4=
github.com/pingcap/metering_sdk v0.0.0-20260324055927-14fead745f1d/go.mod h1:HMNxmg0/lrn3SPGJ6LTZqP0WwEpcXMu9s/4TWJbzT8w=
github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5 h1:T4pXRhBflzDeAhmOQHNPRRogMYxP13V7BkYw3ZsoSfE=
Expand Down
2 changes: 1 addition & 1 deletion pkg/config/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ go_test(
data = glob(["**"]),
embed = [":config"],
flaky = True,
shard_count = 35,
shard_count = 36,
deps = [
"//pkg/config/deploymode",
"//pkg/config/kerneltype",
Expand Down
15 changes: 14 additions & 1 deletion pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -627,8 +627,11 @@ type Log struct {
SlowThreshold uint64 `toml:"slow-threshold" json:"slow-threshold"`
RecordPlanInSlowLog uint32 `toml:"record-plan-in-slow-log" json:"record-plan-in-slow-log"`

// Make tidb panic if write log operation hang in `Timeout` seconds
// Timeout is the maximum seconds allowed for a log write/sync operation.
Timeout int `toml:"timeout" json:"timeout"`
// TimeoutAction controls the action when log write/sync timeout occurs.
// Valid values: panic, discard.
TimeoutAction string `toml:"timeout-action" json:"timeout-action"`
}

// Instance is the section of instance scope system variables.
Expand Down Expand Up @@ -1133,6 +1136,7 @@ var defaultConf = Config{
QueryLogMaxLen: logutil.DefaultQueryLogMaxLen,
RecordPlanInSlowLog: logutil.DefaultRecordPlanInSlowLog,
EnableSlowLog: *NewAtomicBool(logutil.DefaultTiDBEnableSlowLog),
TimeoutAction: zaplog.LogTimeoutActionPanic,
},
Instance: Instance{
TiDBGeneralLog: false,
Expand Down Expand Up @@ -1647,6 +1651,14 @@ func (c *Config) Valid() error {
if c.Log.File.MaxSize > MaxLogFileSize {
return fmt.Errorf("invalid max log file size=%v which is larger than max=%v", c.Log.File.MaxSize, MaxLogFileSize)
}
switch strings.ToLower(c.Log.TimeoutAction) {
case "", zaplog.LogTimeoutActionPanic:
c.Log.TimeoutAction = zaplog.LogTimeoutActionPanic
case zaplog.LogTimeoutActionDiscard:
c.Log.TimeoutAction = zaplog.LogTimeoutActionDiscard
default:
return fmt.Errorf("log.timeout-action should be one of [%s, %s]", zaplog.LogTimeoutActionPanic, zaplog.LogTimeoutActionDiscard)
}
if c.TableColumnCountLimit < DefTableColumnCountLimit || c.TableColumnCountLimit > DefMaxOfTableColumnCountLimit {
return fmt.Errorf("table-column-limit should be [%d, %d]", DefIndexLimit, DefMaxOfTableColumnCountLimit)
}
Expand Down Expand Up @@ -1762,6 +1774,7 @@ func (l *Log) ToLogConfig() *logutil.LogConfig {
return logutil.NewLogConfig(l.Level, l.Format, l.SlowQueryFile, l.GeneralLogFile, l.File, l.getDisableTimestamp(),
func(config *zaplog.Config) { config.DisableErrorVerbose = l.getDisableErrorStack() },
func(config *zaplog.Config) { config.Timeout = l.Timeout },
func(config *zaplog.Config) { config.TimeoutAction = l.TimeoutAction },
)
}

Expand Down
28 changes: 26 additions & 2 deletions pkg/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,10 @@ func TestLogConfig(t *testing.T) {
require.Equal(t, expectedDisableErrorStack, conf.Log.DisableErrorStack)
require.Equal(t, expectedEnableTimestamp, conf.Log.EnableTimestamp)
require.Equal(t, expectedDisableTimestamp, conf.Log.DisableTimestamp)
require.Equal(t, logutil.NewLogConfig("info", "text", "tidb-slow.log", "", conf.Log.File, resultedDisableTimestamp, func(config *zaplog.Config) { config.DisableErrorVerbose = resultedDisableErrorVerbose }), conf.Log.ToLogConfig())
require.Equal(t, logutil.NewLogConfig("info", "text", "tidb-slow.log", "", conf.Log.File, resultedDisableTimestamp,
func(config *zaplog.Config) { config.DisableErrorVerbose = resultedDisableErrorVerbose },
func(config *zaplog.Config) { config.TimeoutAction = conf.Log.TimeoutAction },
), conf.Log.ToLogConfig())
err := f.Truncate(0)
require.NoError(t, err)
_, err = f.Seek(0, 0)
Expand Down Expand Up @@ -170,6 +173,24 @@ disable-error-stack = false
`, nbFalse, nbUnset, nbUnset, nbUnset, false, true)
}

func TestLogTimeoutAction(t *testing.T) {
conf := NewConfig()
require.Equal(t, zaplog.LogTimeoutActionPanic, conf.Log.TimeoutAction)
require.NoError(t, conf.Valid())
require.Equal(t, zaplog.LogTimeoutActionPanic, conf.Log.ToLogConfig().TimeoutAction)

conf.Log.TimeoutAction = zaplog.LogTimeoutActionDiscard
require.NoError(t, conf.Valid())
require.Equal(t, zaplog.LogTimeoutActionDiscard, conf.Log.ToLogConfig().TimeoutAction)

conf.Log.TimeoutAction = "DISCARD"
require.NoError(t, conf.Valid())
require.Equal(t, zaplog.LogTimeoutActionDiscard, conf.Log.TimeoutAction)

conf.Log.TimeoutAction = "invalid"
require.EqualError(t, conf.Valid(), "log.timeout-action should be one of [panic, discard]")
}

func TestKeyspaceObservability(t *testing.T) {
conf := NewConfig()
content := `
Expand Down Expand Up @@ -1131,7 +1152,10 @@ grpc-keepalive-timeout = 0.01
require.Equal(t, GetGlobalConfig(), conf)

// Test for log config.
require.Equal(t, logutil.NewLogConfig("info", "text", "tidb-slow.log", "", conf.Log.File, false, func(config *zaplog.Config) { config.DisableErrorVerbose = conf.Log.getDisableErrorStack() }), conf.Log.ToLogConfig())
require.Equal(t, logutil.NewLogConfig("info", "text", "tidb-slow.log", "", conf.Log.File, false,
func(config *zaplog.Config) { config.DisableErrorVerbose = conf.Log.getDisableErrorStack() },
func(config *zaplog.Config) { config.TimeoutAction = conf.Log.TimeoutAction },
), conf.Log.ToLogConfig())

// Test for tracing config.
tracingConf := &tracing.Configuration{
Expand Down
2 changes: 1 addition & 1 deletion pkg/extension/enterprise
Loading