diff --git a/builtin/logical/mysql/backend.go b/builtin/logical/mysql/backend.go index d78a60d63..01d5c3cfb 100644 --- a/builtin/logical/mysql/backend.go +++ b/builtin/logical/mysql/backend.go @@ -68,11 +68,13 @@ func (b *backend) DB(s logical.Storage) (*sql.DB, error) { fmt.Errorf("configure the DB connection with config/connection first") } - var conn string - if err := entry.DecodeJSON(&conn); err != nil { + var connConfig connectionConfig + if err := entry.DecodeJSON(&connConfig); err != nil { return nil, err } + conn := connConfig.ConnectionString + b.db, err = sql.Open("mysql", conn) if err != nil { return nil, err @@ -80,7 +82,7 @@ func (b *backend) DB(s logical.Storage) (*sql.DB, error) { // Set some connection pool settings. We don't need much of this, // since the request rate shouldn't be high. - b.db.SetMaxOpenConns(2) + b.db.SetMaxOpenConns(connConfig.MaxOpenConnections) return b.db, nil } diff --git a/builtin/logical/mysql/path_config_connection.go b/builtin/logical/mysql/path_config_connection.go index 786ee8c8b..3c09eef14 100644 --- a/builtin/logical/mysql/path_config_connection.go +++ b/builtin/logical/mysql/path_config_connection.go @@ -17,6 +17,10 @@ func pathConfigConnection(b *backend) *framework.Path { Type: framework.TypeString, Description: "DB connection string", }, + "max_open_connections": &framework.FieldSchema{ + Type: framework.TypeInt, + Description: "Maximum number of open connections to database", + }, }, Callbacks: map[logical.Operation]framework.OperationFunc{ @@ -32,8 +36,14 @@ func (b *backend) pathConnectionWrite( req *logical.Request, data *framework.FieldData) (*logical.Response, error) { connString := data.Get("value").(string) + maxOpenConns := data.Get("max_open_connections").(int) + if maxOpenConns == 0 { + maxOpenConns = 2 + } + // Verify the string db, err := sql.Open("mysql", connString) + if err != nil { return logical.ErrorResponse(fmt.Sprintf( "Error validating connection info: %s", err)), nil @@ -45,7 +55,10 @@ func (b *backend) pathConnectionWrite( } // Store it - entry, err := logical.StorageEntryJSON("config/connection", connString) + entry, err := logical.StorageEntryJSON("config/connection", connectionConfig{ + ConnectionString: connString, + MaxOpenConnections: maxOpenConns, + }) if err != nil { return nil, err } @@ -58,6 +71,11 @@ func (b *backend) pathConnectionWrite( return nil, nil } +type connectionConfig struct { + ConnectionString string `json:"value"` + MaxOpenConnections int `json:"max_open_connections"` +} + const pathConfigConnectionHelpSyn = ` Configure the connection string to talk to MySQL. ` diff --git a/website/source/docs/secrets/mysql/index.html.md b/website/source/docs/secrets/mysql/index.html.md index f4d95a129..b6179432b 100644 --- a/website/source/docs/secrets/mysql/index.html.md +++ b/website/source/docs/secrets/mysql/index.html.md @@ -129,6 +129,16 @@ allowed to read. +