Add MySQL db max idle connections and connections lifetime assignment (#4211)

Allow the storage backend for MySQL to use a custom connection lifetime and max idle connection value if the parameter is specified in the config file of vault otherwise do not set in order to leave at default value.
This commit is contained in:
Nicholas Watkins
2018-03-28 13:43:55 -05:00
committed by Jeff Mitchell
parent 94b2878d1a
commit 90e3ad2fa8

View File

@@ -71,6 +71,30 @@ func NewMySQLBackend(conf map[string]string, logger log.Logger) (physical.Backen
} }
dbTable := database + "." + table dbTable := database + "." + table
maxIdleConnStr, ok := conf["max_idle_connections"]
var maxIdleConnInt int = nil
if ok {
maxParmaxIdleConnInt, err = strconv.Atoi(maxIdleConnStr)
if err != nil {
return nil, errwrap.Wrapf("failed parsing max_idle_connections parameter: {{err}}", err)
}
if logger.IsDebug() {
logger.Debug("mysql: max_idle_connections set", "max_idle_connections", maxIdleConnInt)
}
}
maxConnLifeStr, ok := conf["max_connection_lifetime"]
var maxConnLifeInt int = nil
if ok {
maxConnLifeInt, err = strconv.Atoi(maxConnLifeStr)
if err != nil {
return nil, errwrap.Wrapf("failed parsing max_connection_lifetime parameter: {{err}}", err)
}
if logger.IsDebug() {
logger.Debug("mysql: max_connection_lifetime set", "max_connection_lifetime", maxConnLifeInt)
}
}
maxParStr, ok := conf["max_parallel"] maxParStr, ok := conf["max_parallel"]
var maxParInt int var maxParInt int
if ok { if ok {
@@ -101,9 +125,13 @@ func NewMySQLBackend(conf map[string]string, logger log.Logger) (physical.Backen
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to connect to mysql: %v", err) return nil, fmt.Errorf("failed to connect to mysql: %v", err)
} }
db.SetMaxOpenConns(maxParInt) db.SetMaxOpenConns(maxParInt)
if maxIdleConnInt != nil {
db.SetMaxIdleConns(maxIdleConnInt)
}
if maxConnLifeInt != nil {
db.SetConnMaxLifetime(time.Second * maxConnLifeInt)
}
// Check schema exists // Check schema exists
var schemaExist bool var schemaExist bool
schemaRows, err := db.Query("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ?", database) schemaRows, err := db.Query("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ?", database)