From b7ff9f09c46c8f313378f7f6091260be4f6363e5 Mon Sep 17 00:00:00 2001 From: mark9white Date: Fri, 15 May 2020 16:49:44 +0100 Subject: [PATCH] chore: Add ability to configure maximum DB connection lifetime (#3032) --- config/config.go | 5 +++-- docs/workflow-controller-configmap.yaml | 1 + manifests/quick-start-mysql.yaml | 1 + manifests/quick-start-postgres.yaml | 1 + .../mysql/overlays/workflow-controller-configmap.yaml | 1 + .../postgres/overlays/workflow-controller-configmap.yaml | 1 + persist/sqldb/sqldb.go | 3 +++ 7 files changed, 11 insertions(+), 2 deletions(-) diff --git a/config/config.go b/config/config.go index 74e446ba88a9..e12b0432a683 100644 --- a/config/config.go +++ b/config/config.go @@ -141,8 +141,9 @@ func (c PersistConfig) GetClusterName() string { } type ConnectionPool struct { - MaxIdleConns int `json:"maxIdleConns,omitempty"` - MaxOpenConns int `json:"maxOpenConns,omitempty"` + MaxIdleConns int `json:"maxIdleConns,omitempty"` + MaxOpenConns int `json:"maxOpenConns,omitempty"` + ConnMaxLifetime TTL `json:"connMaxLifetime,omitempty"` } type PostgreSQLConfig struct { Host string `json:"host"` diff --git a/docs/workflow-controller-configmap.yaml b/docs/workflow-controller-configmap.yaml index 237f033232e1..8e7078f5bb8a 100644 --- a/docs/workflow-controller-configmap.yaml +++ b/docs/workflow-controller-configmap.yaml @@ -146,6 +146,7 @@ data: connectionPool: maxIdleConns: 100 maxOpenConns: 0 + connMaxLifetime: 0s # 0 means connections don't have a max lifetime # if true node status is only saved to the persistence DB to avoid the 1MB limit in etcd nodeStatusOffLoad: false # save completed workloads to the workflow archive diff --git a/manifests/quick-start-mysql.yaml b/manifests/quick-start-mysql.yaml index 5e38618a7783..d675f4a9ba0f 100644 --- a/manifests/quick-start-mysql.yaml +++ b/manifests/quick-start-mysql.yaml @@ -369,6 +369,7 @@ data: connectionPool: maxIdleConns: 100 maxOpenConns: 0 + connMaxLifetime: 0s nodeStatusOffLoad: true archive: true archiveTTL: 7d diff --git a/manifests/quick-start-postgres.yaml b/manifests/quick-start-postgres.yaml index 9c24989aadda..58cea8e50db3 100644 --- a/manifests/quick-start-postgres.yaml +++ b/manifests/quick-start-postgres.yaml @@ -369,6 +369,7 @@ data: connectionPool: maxIdleConns: 100 maxOpenConns: 0 + connMaxLifetime: 0s nodeStatusOffLoad: true archive: true archiveTTL: 7d diff --git a/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml b/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml index ae2914b1c0f5..c20578d14825 100644 --- a/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml +++ b/manifests/quick-start/mysql/overlays/workflow-controller-configmap.yaml @@ -4,6 +4,7 @@ data: connectionPool: maxIdleConns: 100 maxOpenConns: 0 + connMaxLifetime: 0s nodeStatusOffLoad: true archive: true archiveTTL: 7d diff --git a/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml b/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml index 68bf894877e2..6675ce86e2d2 100644 --- a/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml +++ b/manifests/quick-start/postgres/overlays/workflow-controller-configmap.yaml @@ -4,6 +4,7 @@ data: connectionPool: maxIdleConns: 100 maxOpenConns: 0 + connMaxLifetime: 0s nodeStatusOffLoad: true archive: true archiveTTL: 7d diff --git a/persist/sqldb/sqldb.go b/persist/sqldb/sqldb.go index 1f8a83be98dc..6c1264db2ac3 100644 --- a/persist/sqldb/sqldb.go +++ b/persist/sqldb/sqldb.go @@ -2,6 +2,7 @@ package sqldb import ( "fmt" + "time" log "github.com/sirupsen/logrus" "k8s.io/client-go/kubernetes" @@ -70,6 +71,7 @@ func CreatePostGresDBSession(kubectlConfig kubernetes.Interface, namespace strin if persistPool != nil { session.SetMaxOpenConns(persistPool.MaxOpenConns) session.SetMaxIdleConns(persistPool.MaxIdleConns) + session.SetConnMaxLifetime(time.Duration(persistPool.ConnMaxLifetime)) } return session, cfg.TableName, nil } @@ -103,6 +105,7 @@ func CreateMySQLDBSession(kubectlConfig kubernetes.Interface, namespace string, if persistPool != nil { session.SetMaxOpenConns(persistPool.MaxOpenConns) session.SetMaxIdleConns(persistPool.MaxIdleConns) + session.SetConnMaxLifetime(time.Duration(persistPool.ConnMaxLifetime)) } // this is needed to make MySQL run in a Golang-compatible UTF-8 character set. _, err = session.Exec("SET NAMES 'utf8mb4'")