From 94f56c23e0c84cde841188a920ce4bedefa05728 Mon Sep 17 00:00:00 2001 From: Nicholas Watkins <5408930+rin1221@users.noreply.github.com> Date: Wed, 28 Mar 2018 12:38:03 -0500 Subject: [PATCH] Add MySQL db max idle connections and connections lifetime assignment 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. --- physical/mysql/mysql.go | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/physical/mysql/mysql.go b/physical/mysql/mysql.go index fd55117ced65..cc7a80abc7c4 100644 --- a/physical/mysql/mysql.go +++ b/physical/mysql/mysql.go @@ -71,6 +71,30 @@ func NewMySQLBackend(conf map[string]string, logger log.Logger) (physical.Backen } 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"] var maxParInt int if ok { @@ -101,9 +125,13 @@ func NewMySQLBackend(conf map[string]string, logger log.Logger) (physical.Backen if err != nil { return nil, fmt.Errorf("failed to connect to mysql: %v", err) } - db.SetMaxOpenConns(maxParInt) - + if maxIdleConnInt != nil { + db.SetMaxIdleConns(maxIdleConnInt) + } + if maxConnLifeInt != nil { + db.SetConnMaxLifetime(time.Second * maxConnLifeInt) + } // Check schema exists var schemaExist bool schemaRows, err := db.Query("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ?", database)