From ad8f290dad61d95b76299c387150590c2834d13a Mon Sep 17 00:00:00 2001 From: Karan Sharma Date: Tue, 17 Nov 2020 13:59:32 +0530 Subject: [PATCH] feat: Set default values for DB connection parameters - Configures `max_open` and `max_idle` in default configs to `25`. This changes the previous behaviour of connection pooling where both the values were unset (from default config) and causes unbounded connection limit and no connection reuse. - Configures `db.SetConnMaxLifetime` which sets the maximum time the connection can be reused in a pool. - Sets `max_conn_lifetime` in default config as `5 minutes`. Closes https://github.com/knadh/listmonk/issues/225 --- cmd/queries.go | 19 +++++++++++-------- config-demo.toml | 3 +++ config.toml.sample | 3 +++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cmd/queries.go b/cmd/queries.go index 6e6e0c6b..bf2edc41 100644 --- a/cmd/queries.go +++ b/cmd/queries.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "fmt" + "time" "github.com/jmoiron/sqlx" "github.com/lib/pq" @@ -84,14 +85,15 @@ type Queries struct { // dbConf contains database config required for connecting to a DB. type dbConf struct { - Host string `koanf:"host"` - Port int `koanf:"port"` - User string `koanf:"user"` - Password string `koanf:"password"` - DBName string `koanf:"database"` - SSLMode string `koanf:"ssl_mode"` - MaxOpen int `koanf:"max_open"` - MaxIdle int `koanf:"max_idle"` + Host string `koanf:"host"` + Port int `koanf:"port"` + User string `koanf:"user"` + Password string `koanf:"password"` + DBName string `koanf:"database"` + SSLMode string `koanf:"ssl_mode"` + MaxOpen int `koanf:"max_open"` + MaxIdle int `koanf:"max_idle"` + MaxLifetime time.Duration `koanf:"max_lifetime"` } // connectDB initializes a database connection. @@ -104,6 +106,7 @@ func connectDB(c dbConf) (*sqlx.DB, error) { } db.SetMaxOpenConns(c.MaxOpen) db.SetMaxIdleConns(c.MaxIdle) + db.SetConnMaxLifetime(c.MaxLifetime) return db, nil } diff --git a/config-demo.toml b/config-demo.toml index 03a0eb08..7aff549c 100644 --- a/config-demo.toml +++ b/config-demo.toml @@ -10,3 +10,6 @@ password = "listmonk" database = "listmonk" ssl_mode = "disable" + max_open = 25 + max_idle = 25 + max_lifetime = "300s" diff --git a/config.toml.sample b/config.toml.sample index 7c0e3c6b..7b09b772 100644 --- a/config.toml.sample +++ b/config.toml.sample @@ -17,3 +17,6 @@ password = "listmonk" database = "listmonk" ssl_mode = "disable" + max_open = 25 + max_idle = 25 + max_lifetime = "300s"