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
This commit is contained in:
parent
c60cc3525f
commit
ad8f290dad
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
"github.com/lib/pq"
|
"github.com/lib/pq"
|
||||||
|
@ -84,14 +85,15 @@ type Queries struct {
|
||||||
|
|
||||||
// dbConf contains database config required for connecting to a DB.
|
// dbConf contains database config required for connecting to a DB.
|
||||||
type dbConf struct {
|
type dbConf struct {
|
||||||
Host string `koanf:"host"`
|
Host string `koanf:"host"`
|
||||||
Port int `koanf:"port"`
|
Port int `koanf:"port"`
|
||||||
User string `koanf:"user"`
|
User string `koanf:"user"`
|
||||||
Password string `koanf:"password"`
|
Password string `koanf:"password"`
|
||||||
DBName string `koanf:"database"`
|
DBName string `koanf:"database"`
|
||||||
SSLMode string `koanf:"ssl_mode"`
|
SSLMode string `koanf:"ssl_mode"`
|
||||||
MaxOpen int `koanf:"max_open"`
|
MaxOpen int `koanf:"max_open"`
|
||||||
MaxIdle int `koanf:"max_idle"`
|
MaxIdle int `koanf:"max_idle"`
|
||||||
|
MaxLifetime time.Duration `koanf:"max_lifetime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// connectDB initializes a database connection.
|
// connectDB initializes a database connection.
|
||||||
|
@ -104,6 +106,7 @@ func connectDB(c dbConf) (*sqlx.DB, error) {
|
||||||
}
|
}
|
||||||
db.SetMaxOpenConns(c.MaxOpen)
|
db.SetMaxOpenConns(c.MaxOpen)
|
||||||
db.SetMaxIdleConns(c.MaxIdle)
|
db.SetMaxIdleConns(c.MaxIdle)
|
||||||
|
db.SetConnMaxLifetime(c.MaxLifetime)
|
||||||
return db, nil
|
return db, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,3 +10,6 @@
|
||||||
password = "listmonk"
|
password = "listmonk"
|
||||||
database = "listmonk"
|
database = "listmonk"
|
||||||
ssl_mode = "disable"
|
ssl_mode = "disable"
|
||||||
|
max_open = 25
|
||||||
|
max_idle = 25
|
||||||
|
max_lifetime = "300s"
|
||||||
|
|
|
@ -17,3 +17,6 @@
|
||||||
password = "listmonk"
|
password = "listmonk"
|
||||||
database = "listmonk"
|
database = "listmonk"
|
||||||
ssl_mode = "disable"
|
ssl_mode = "disable"
|
||||||
|
max_open = 25
|
||||||
|
max_idle = 25
|
||||||
|
max_lifetime = "300s"
|
||||||
|
|
Loading…
Reference in New Issue