MM-31391: Add max connection idle timeout to config (#16792)
* Update config.go * Update telemetry.go * Update store and store test * Update settings.go * use new error code * Trigger CI Co-authored-by: Haardik Dharma <dharmahaardik08@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
5f16fc644a
Коммит
2846ad9f93
@@ -4,7 +4,7 @@ go 1.14
|
||||
|
||||
require (
|
||||
github.com/jstemmer/go-junit-report v0.9.1 // indirect
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20201216181404-3faa6075089a // indirect
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20210122154757-d807da7d142a // indirect
|
||||
github.com/philhofer/fwd v1.0.0 // indirect
|
||||
github.com/reflog/struct2interface v0.6.1 // indirect
|
||||
github.com/tinylib/msgp v1.1.2 // indirect
|
||||
|
||||
@@ -77,6 +77,8 @@ github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20201013204121-e463fc
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20201216181404-3faa6075089a/go.mod h1:3gKozJI8n2Y/vW37GfnFWAdehGXe5yZlt+HykK6Y3DM=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20210103185547-4c12aa739237 h1:w6GQs7SU6abD0QXKoqwd4bpEzNaW1xKwpeftBpIX1Do=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20210103185547-4c12aa739237/go.mod h1:3gKozJI8n2Y/vW37GfnFWAdehGXe5yZlt+HykK6Y3DM=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20210122154757-d807da7d142a h1:H8g7UkbNEpYE6UD7ej8UWp2W9q0eW+7BtvUl1v+bGMc=
|
||||
github.com/mattermost/mattermost-utilities/mmgotool v0.0.0-20210122154757-d807da7d142a/go.mod h1:3gKozJI8n2Y/vW37GfnFWAdehGXe5yZlt+HykK6Y3DM=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
|
||||
@@ -7466,6 +7466,10 @@
|
||||
"id": "model.config.is_valid.sitename_length.app_error",
|
||||
"translation": "Site name must be less than or equal to {{.MaxLength}} characters."
|
||||
},
|
||||
{
|
||||
"id": "model.config.is_valid.sql_conn_max_idle_time_milliseconds.app_error",
|
||||
"translation": "Invalid connection maximum idle time for SQL settings. Must be a non-negative number."
|
||||
},
|
||||
{
|
||||
"id": "model.config.is_valid.sql_conn_max_lifetime_milliseconds.app_error",
|
||||
"translation": "Invalid connection maximum lifetime for SQL settings. Must be a non-negative number."
|
||||
|
||||
@@ -1091,6 +1091,7 @@ type SqlSettings struct {
|
||||
DataSourceSearchReplicas []string `access:"environment,write_restrictable,cloud_restrictable"`
|
||||
MaxIdleConns *int `access:"environment,write_restrictable,cloud_restrictable"`
|
||||
ConnMaxLifetimeMilliseconds *int `access:"environment,write_restrictable,cloud_restrictable"`
|
||||
ConnMaxIdleTimeMilliseconds *int `access:"environment,write_restrictable,cloud_restrictable"`
|
||||
MaxOpenConns *int `access:"environment,write_restrictable,cloud_restrictable"`
|
||||
Trace *bool `access:"environment,write_restrictable,cloud_restrictable"`
|
||||
AtRestEncryptKey *string `access:"environment,write_restrictable,cloud_restrictable"`
|
||||
@@ -1137,6 +1138,10 @@ func (s *SqlSettings) SetDefaults(isUpdate bool) {
|
||||
s.ConnMaxLifetimeMilliseconds = NewInt(3600000)
|
||||
}
|
||||
|
||||
if s.ConnMaxIdleTimeMilliseconds == nil {
|
||||
s.ConnMaxIdleTimeMilliseconds = NewInt(300000)
|
||||
}
|
||||
|
||||
if s.Trace == nil {
|
||||
s.Trace = NewBool(false)
|
||||
}
|
||||
@@ -3241,6 +3246,10 @@ func (s *SqlSettings) isValid() *AppError {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.sql_conn_max_lifetime_milliseconds.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if *s.ConnMaxIdleTimeMilliseconds < 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.sql_conn_max_idle_time_milliseconds.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
if *s.QueryTimeout <= 0 {
|
||||
return NewAppError("Config.IsValid", "model.config.is_valid.sql_query_timeout.app_error", nil, "", http.StatusBadRequest)
|
||||
}
|
||||
|
||||
@@ -474,6 +474,7 @@ func (ts *TelemetryService) trackConfig() {
|
||||
"trace": cfg.SqlSettings.Trace,
|
||||
"max_idle_conns": *cfg.SqlSettings.MaxIdleConns,
|
||||
"conn_max_lifetime_milliseconds": *cfg.SqlSettings.ConnMaxLifetimeMilliseconds,
|
||||
"conn_max_idletime_milliseconds": *cfg.SqlSettings.ConnMaxIdleTimeMilliseconds,
|
||||
"max_open_conns": *cfg.SqlSettings.MaxOpenConns,
|
||||
"data_source_replicas": len(cfg.SqlSettings.DataSourceReplicas),
|
||||
"data_source_search_replicas": len(cfg.SqlSettings.DataSourceSearchReplicas),
|
||||
|
||||
@@ -268,6 +268,7 @@ func setupConnection(con_type string, dataSource string, settings *model.SqlSett
|
||||
db.SetMaxIdleConns(*settings.MaxIdleConns)
|
||||
db.SetMaxOpenConns(*settings.MaxOpenConns)
|
||||
db.SetConnMaxLifetime(time.Duration(*settings.ConnMaxLifetimeMilliseconds) * time.Millisecond)
|
||||
db.SetConnMaxIdleTime(time.Duration(*settings.ConnMaxIdleTimeMilliseconds) * time.Millisecond)
|
||||
|
||||
var dbmap *gorp.DbMap
|
||||
|
||||
|
||||
@@ -515,6 +515,7 @@ func makeSqliteSettings() *model.SqlSettings {
|
||||
dataSource := ":memory:"
|
||||
maxIdleConns := 1
|
||||
connMaxLifetimeMilliseconds := 3600000
|
||||
connMaxIdleTimeMilliseconds := 300000
|
||||
maxOpenConns := 1
|
||||
queryTimeout := 5
|
||||
|
||||
@@ -523,6 +524,7 @@ func makeSqliteSettings() *model.SqlSettings {
|
||||
DataSource: &dataSource,
|
||||
MaxIdleConns: &maxIdleConns,
|
||||
ConnMaxLifetimeMilliseconds: &connMaxLifetimeMilliseconds,
|
||||
ConnMaxIdleTimeMilliseconds: &connMaxIdleTimeMilliseconds,
|
||||
MaxOpenConns: &maxOpenConns,
|
||||
QueryTimeout: &queryTimeout,
|
||||
}
|
||||
|
||||
@@ -133,6 +133,7 @@ func databaseSettings(driver, dataSource string) *model.SqlSettings {
|
||||
DataSourceSearchReplicas: []string{},
|
||||
MaxIdleConns: new(int),
|
||||
ConnMaxLifetimeMilliseconds: new(int),
|
||||
ConnMaxIdleTimeMilliseconds: new(int),
|
||||
MaxOpenConns: new(int),
|
||||
Trace: model.NewBool(false),
|
||||
AtRestEncryptKey: model.NewString(model.NewRandomString(32)),
|
||||
@@ -140,6 +141,7 @@ func databaseSettings(driver, dataSource string) *model.SqlSettings {
|
||||
}
|
||||
*settings.MaxIdleConns = 10
|
||||
*settings.ConnMaxLifetimeMilliseconds = 3600000
|
||||
*settings.ConnMaxIdleTimeMilliseconds = 300000
|
||||
*settings.MaxOpenConns = 100
|
||||
*settings.QueryTimeout = 60
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user