From 93c4cccc6ed0d973f16fce4d291396aa5c52f39e Mon Sep 17 00:00:00 2001 From: vishalnayak Date: Thu, 1 Oct 2015 21:15:56 -0400 Subject: [PATCH] mysql: made max_open_connections configurable --- builtin/logical/mysql/backend.go | 8 +++++--- .../logical/mysql/path_config_connection.go | 20 ++++++++++++++++++- .../source/docs/secrets/mysql/index.html.md | 10 ++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/builtin/logical/mysql/backend.go b/builtin/logical/mysql/backend.go index d78a60d639..01d5c3cfb5 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 786ee8c8bb..3c09eef14e 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 f4d95a1292..b6179432b7 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. +
+ +
Returns