diff --git a/docs/api-references/docs.html b/docs/api-references/docs.html
index a89f209fa5..900a1d105b 100644
--- a/docs/api-references/docs.html
+++ b/docs/api-references/docs.html
@@ -2948,6 +2948,7 @@
FileLogConfig
+(Optional)
Log filename, leave empty to disable file log.
|
@@ -2959,6 +2960,7 @@ FileLogConfig
+(Optional)
Is log rotate enabled.
|
@@ -2970,6 +2972,7 @@ FileLogConfig
+(Optional)
Max size for a single file, in MB.
|
@@ -2981,6 +2984,7 @@ FileLogConfig
+(Optional)
Max log keep days, default is never deleting.
|
@@ -2992,6 +2996,7 @@ FileLogConfig
+(Optional)
Maximum number of old log files to retain.
|
diff --git a/pkg/apis/pingcap/v1alpha1/defaulting/tidbcluster.go b/pkg/apis/pingcap/v1alpha1/defaulting/tidbcluster.go
index eac2b434ee..b7e6ace341 100644
--- a/pkg/apis/pingcap/v1alpha1/defaulting/tidbcluster.go
+++ b/pkg/apis/pingcap/v1alpha1/defaulting/tidbcluster.go
@@ -26,6 +26,10 @@ const (
defaultBinlogImage = "pingcap/tidb-binlog"
)
+var (
+ tidbLogMaxBackups = 3
+)
+
func SetTidbClusterDefault(tc *v1alpha1.TidbCluster) {
setTidbClusterSpecDefault(tc)
setPdSpecDefault(tc)
@@ -59,6 +63,27 @@ func setTidbSpecDefault(tc *v1alpha1.TidbCluster) {
if tc.Spec.TiDB.MaxFailoverCount == nil {
tc.Spec.TiDB.MaxFailoverCount = pointer.Int32Ptr(3)
}
+
+ // we only set default log
+ if tc.Spec.TiDB.Config != nil {
+ if tc.Spec.TiDB.Config.Log == nil {
+ tc.Spec.TiDB.Config.Log = &v1alpha1.Log{
+ File: &v1alpha1.FileLogConfig{
+ MaxBackups: &tidbLogMaxBackups,
+ },
+ }
+ } else {
+ if tc.Spec.TiDB.Config.Log.File == nil {
+ tc.Spec.TiDB.Config.Log.File = &v1alpha1.FileLogConfig{
+ MaxBackups: &tidbLogMaxBackups,
+ }
+ } else {
+ if tc.Spec.TiDB.Config.Log.File.MaxBackups == nil {
+ tc.Spec.TiDB.Config.Log.File.MaxBackups = &tidbLogMaxBackups
+ }
+ }
+ }
+ }
}
func setTikvSpecDefault(tc *v1alpha1.TidbCluster) {
diff --git a/pkg/apis/pingcap/v1alpha1/defaulting/tidbcluster_test.go b/pkg/apis/pingcap/v1alpha1/defaulting/tidbcluster_test.go
new file mode 100644
index 0000000000..fa57445328
--- /dev/null
+++ b/pkg/apis/pingcap/v1alpha1/defaulting/tidbcluster_test.go
@@ -0,0 +1,96 @@
+// Copyright 2020 PingCAP, Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package defaulting
+
+import (
+ . "github.com/onsi/gomega"
+ "github.com/pingcap/tidb-operator/pkg/apis/pingcap/v1alpha1"
+ "testing"
+)
+
+func TestSetTidbSpecDefault(t *testing.T) {
+ g := NewGomegaWithT(t)
+
+ tc := newTidbCluster()
+ setTidbSpecDefault(tc)
+ g.Expect(tc.Spec.TiDB.Config).Should(BeNil())
+
+ tc = newTidbCluster()
+ tc.Spec.TiDB.Config = &v1alpha1.TiDBConfig{}
+ setTidbSpecDefault(tc)
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.MaxBackups).Should(Equal(tidbLogMaxBackups))
+
+ tc = newTidbCluster()
+ oomAction := "cancel"
+ tc.Spec.TiDB.Config = &v1alpha1.TiDBConfig{
+ OOMAction: &oomAction,
+ }
+ setTidbSpecDefault(tc)
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.MaxBackups).Should(Equal(tidbLogMaxBackups))
+ g.Expect(*tc.Spec.TiDB.Config.OOMAction).Should(Equal(oomAction))
+
+ tc = newTidbCluster()
+ infoLevel := "info"
+ tc.Spec.TiDB.Config = &v1alpha1.TiDBConfig{
+ OOMAction: &oomAction,
+ Log: &v1alpha1.Log{
+ Level: &infoLevel,
+ },
+ }
+ setTidbSpecDefault(tc)
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.MaxBackups).Should(Equal(tidbLogMaxBackups))
+ g.Expect(*tc.Spec.TiDB.Config.OOMAction).Should(Equal(oomAction))
+ g.Expect(*tc.Spec.TiDB.Config.Log.Level).Should(Equal(infoLevel))
+
+ tc = newTidbCluster()
+ fileName := "slowlog.log"
+ tc.Spec.TiDB.Config = &v1alpha1.TiDBConfig{
+ OOMAction: &oomAction,
+ Log: &v1alpha1.Log{
+ Level: &infoLevel,
+ File: &v1alpha1.FileLogConfig{
+ Filename: &fileName,
+ },
+ },
+ }
+ setTidbSpecDefault(tc)
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.MaxBackups).Should(Equal(tidbLogMaxBackups))
+ g.Expect(*tc.Spec.TiDB.Config.OOMAction).Should(Equal(oomAction))
+ g.Expect(*tc.Spec.TiDB.Config.Log.Level).Should(Equal(infoLevel))
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.Filename).Should(Equal(fileName))
+
+ tc = newTidbCluster()
+ maxSize := 600
+ tc.Spec.TiDB.Config = &v1alpha1.TiDBConfig{
+ OOMAction: &oomAction,
+ Log: &v1alpha1.Log{
+ Level: &infoLevel,
+ File: &v1alpha1.FileLogConfig{
+ Filename: &fileName,
+ MaxSize: &maxSize,
+ },
+ },
+ }
+ setTidbSpecDefault(tc)
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.MaxSize).Should(Equal(maxSize))
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.MaxBackups).Should(Equal(tidbLogMaxBackups))
+ g.Expect(*tc.Spec.TiDB.Config.OOMAction).Should(Equal(oomAction))
+ g.Expect(*tc.Spec.TiDB.Config.Log.Level).Should(Equal(infoLevel))
+ g.Expect(*tc.Spec.TiDB.Config.Log.File.Filename).Should(Equal(fileName))
+
+}
+
+func newTidbCluster() *v1alpha1.TidbCluster {
+ return &v1alpha1.TidbCluster{}
+}
diff --git a/pkg/apis/pingcap/v1alpha1/pd_config.go b/pkg/apis/pingcap/v1alpha1/pd_config.go
index e7ed6429c3..49490476b4 100644
--- a/pkg/apis/pingcap/v1alpha1/pd_config.go
+++ b/pkg/apis/pingcap/v1alpha1/pd_config.go
@@ -428,15 +428,20 @@ type PDMetricConfig struct {
// +k8s:openapi-gen=true
type FileLogConfig struct {
// Log filename, leave empty to disable file log.
- Filename string `toml:"filename,omitempty" json:"filename,omitempty"`
+ // +optional
+ Filename *string `toml:"filename,omitempty" json:"filename,omitempty"`
// Is log rotate enabled.
- LogRotate bool `toml:"log-rotate,omitempty" json:"log-rotate,omitempty"`
+ // +optional
+ LogRotate *bool `toml:"log-rotate,omitempty" json:"log-rotate,omitempty"`
// Max size for a single file, in MB.
- MaxSize int `toml:"max-size,omitempty" json:"max-size,omitempty"`
+ // +optional
+ MaxSize *int `toml:"max-size,omitempty" json:"max-size,omitempty"`
// Max log keep days, default is never deleting.
- MaxDays int `toml:"max-days,omitempty" json:"max-days,omitempty"`
+ // +optional
+ MaxDays *int `toml:"max-days,omitempty" json:"max-days,omitempty"`
// Maximum number of old log files to retain.
- MaxBackups int `toml:"max-backups,omitempty" json:"max-backups,omitempty"`
+ // +optional
+ MaxBackups *int `toml:"max-backups,omitempty" json:"max-backups,omitempty"`
}
//StringSlice is more friendly to json encode/decode
diff --git a/pkg/apis/pingcap/v1alpha1/tidb_config.go b/pkg/apis/pingcap/v1alpha1/tidb_config.go
index 771ee2ddf8..2abab5f784 100644
--- a/pkg/apis/pingcap/v1alpha1/tidb_config.go
+++ b/pkg/apis/pingcap/v1alpha1/tidb_config.go
@@ -172,7 +172,7 @@ type Log struct {
QueryLogMaxLen *uint64 `toml:"query-log-max-len,omitempty" json:"query-log-max-len,omitempty"`
// Optional: Defaults to 1
// +optional
- RecordPlanInSlowLog uint32 `toml:"record-plan-in-slow-log,omitempty" json:"record-plan-in-slow-log,omitempty"`
+ RecordPlanInSlowLog *uint32 `toml:"record-plan-in-slow-log,omitempty" json:"record-plan-in-slow-log,omitempty"`
}
// Security is the security section of the config.
diff --git a/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go
index b24b675f3a..b9b5cab61d 100644
--- a/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/pingcap/v1alpha1/zz_generated.deepcopy.go
@@ -687,6 +687,31 @@ func (in *Experimental) DeepCopy() *Experimental {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *FileLogConfig) DeepCopyInto(out *FileLogConfig) {
*out = *in
+ if in.Filename != nil {
+ in, out := &in.Filename, &out.Filename
+ *out = new(string)
+ **out = **in
+ }
+ if in.LogRotate != nil {
+ in, out := &in.LogRotate, &out.LogRotate
+ *out = new(bool)
+ **out = **in
+ }
+ if in.MaxSize != nil {
+ in, out := &in.MaxSize, &out.MaxSize
+ *out = new(int)
+ **out = **in
+ }
+ if in.MaxDays != nil {
+ in, out := &in.MaxDays, &out.MaxDays
+ *out = new(int)
+ **out = **in
+ }
+ if in.MaxBackups != nil {
+ in, out := &in.MaxBackups, &out.MaxBackups
+ *out = new(int)
+ **out = **in
+ }
return
}
@@ -843,7 +868,7 @@ func (in *Log) DeepCopyInto(out *Log) {
if in.File != nil {
in, out := &in.File, &out.File
*out = new(FileLogConfig)
- **out = **in
+ (*in).DeepCopyInto(*out)
}
if in.EnableSlowLog != nil {
in, out := &in.EnableSlowLog, &out.EnableSlowLog
@@ -870,6 +895,11 @@ func (in *Log) DeepCopyInto(out *Log) {
*out = new(uint64)
**out = **in
}
+ if in.RecordPlanInSlowLog != nil {
+ in, out := &in.RecordPlanInSlowLog, &out.RecordPlanInSlowLog
+ *out = new(uint32)
+ **out = **in
+ }
return
}
@@ -1150,7 +1180,7 @@ func (in *PDLogConfig) DeepCopyInto(out *PDLogConfig) {
if in.File != nil {
in, out := &in.File, &out.File
*out = new(FileLogConfig)
- **out = **in
+ (*in).DeepCopyInto(*out)
}
if in.Development != nil {
in, out := &in.Development, &out.Development