Add new option DATABASE_CONNECTION_LIFETIME

This commit is contained in:
Frédéric Guillot 2021-05-23 19:32:34 -07:00 committed by fguillot
parent e0557d8961
commit c119a2c011
5 changed files with 28 additions and 3 deletions

View File

@ -132,6 +132,7 @@ func Parse() {
config.Opts.DatabaseURL(),
config.Opts.DatabaseMinConns(),
config.Opts.DatabaseMaxConns(),
config.Opts.DatabaseConnectionLifetime(),
)
if err != nil {
logger.Fatal("Unable to initialize database connection pool: %v", err)

View File

@ -8,6 +8,7 @@ import (
"fmt"
"sort"
"strings"
"time"
"miniflux.app/version"
)
@ -34,6 +35,7 @@ const (
defaultDatabaseURL = "user=postgres password=postgres dbname=miniflux2 sslmode=disable"
defaultDatabaseMaxConns = 20
defaultDatabaseMinConns = 1
defaultDatabaseConnectionLifetime = 5
defaultListenAddr = "127.0.0.1:8080"
defaultCertFile = ""
defaultKeyFile = ""
@ -90,6 +92,7 @@ type Options struct {
databaseURL string
databaseMaxConns int
databaseMinConns int
databaseConnectionLifetime int
runMigrations bool
listenAddr string
certFile string
@ -148,6 +151,7 @@ func NewOptions() *Options {
databaseURL: defaultDatabaseURL,
databaseMaxConns: defaultDatabaseMaxConns,
databaseMinConns: defaultDatabaseMinConns,
databaseConnectionLifetime: defaultDatabaseConnectionLifetime,
runMigrations: defaultRunMigrations,
listenAddr: defaultListenAddr,
certFile: defaultCertFile,
@ -249,6 +253,11 @@ func (o *Options) DatabaseMinConns() int {
return o.databaseMinConns
}
// DatabaseConnectionLifetime returns the maximum amount of time a connection may be reused.
func (o *Options) DatabaseConnectionLifetime() time.Duration {
return time.Duration(o.databaseConnectionLifetime) * time.Minute
}
// ListenAddr returns the listen address for the HTTP server.
func (o *Options) ListenAddr() string {
return o.listenAddr
@ -484,6 +493,7 @@ func (o *Options) SortedOptions() []*Option {
"CREATE_ADMIN": o.createAdmin,
"DATABASE_MAX_CONNS": o.databaseMaxConns,
"DATABASE_MIN_CONNS": o.databaseMinConns,
"DATABASE_CONNECTION_LIFETIME": o.databaseConnectionLifetime,
"DATABASE_URL": o.databaseURL,
"DEBUG": o.debug,
"FETCH_YOUTUBE_WATCH_TIME": o.fetchYouTubeWatchTime,

View File

@ -95,6 +95,8 @@ func (p *Parser) parseLines(lines []string) (err error) {
p.opts.databaseMaxConns = parseInt(value, defaultDatabaseMaxConns)
case "DATABASE_MIN_CONNS":
p.opts.databaseMinConns = parseInt(value, defaultDatabaseMinConns)
case "DATABASE_CONNECTION_LIFETIME":
p.opts.databaseConnectionLifetime = parseInt(value, defaultDatabaseConnectionLifetime)
case "RUN_MIGRATIONS":
p.opts.runMigrations = parseBool(value, defaultRunMigrations)
case "DISABLE_HSTS":

View File

@ -7,13 +7,14 @@ package database // import "miniflux.app/database"
import (
"database/sql"
"fmt"
"time"
// Postgresql driver import
_ "github.com/lib/pq"
)
// NewConnectionPool configures the database connection pool.
func NewConnectionPool(dsn string, minConnections, maxConnections int) (*sql.DB, error) {
func NewConnectionPool(dsn string, minConnections, maxConnections int, connectionLifetime time.Duration) (*sql.DB, error) {
db, err := sql.Open("postgres", dsn)
if err != nil {
return nil, err
@ -21,6 +22,7 @@ func NewConnectionPool(dsn string, minConnections, maxConnections int) (*sql.DB,
db.SetMaxOpenConns(maxConnections)
db.SetMaxIdleConns(minConnections)
db.SetConnMaxLifetime(connectionLifetime)
return db, nil
}

View File

@ -1,5 +1,5 @@
.\" Manpage for miniflux.
.TH "MINIFLUX" "1" "April 30, 2021" "\ \&" "\ \&"
.TH "MINIFLUX" "1" "May 23, 2021" "\ \&" "\ \&"
.SH NAME
miniflux \- Minimalist and opinionated feed reader
@ -174,6 +174,11 @@ Path to a secret key exposed as a file, it should contain $DATABASE_URL value\&.
.br
Default is empty\&.
.TP
.B DATABASE_CONNECTION_LIFETIME
Set the maximum amount of time a connection may be reused\&.
.br
Default is 5 minutes\&.
.TP
.B DATABASE_MAX_CONNS
Maximum number of database connections\&.
.br
@ -400,7 +405,12 @@ Disabled by default\&.
.B MAINTENANCE_MESSAGE
Define a custom maintenance message\&.
.br
Default is "Miniflux is currently under maintenance".
Default is "Miniflux is currently under maintenance"\&.
.TP
.B WATCHDOG
Enable or disable Systemd watchdog\&.
.br
Enabled by default\&.
.SH AUTHORS
.P