aboutsummaryrefslogtreecommitdiff
path: root/internal/sqlutil
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-05-01 13:34:53 +0100
committerGitHub <noreply@github.com>2020-05-01 13:34:53 +0100
commitf7cfa758864cc9849ce8b0539895283417b75eb0 (patch)
treefd75b5363172dacd7eab3b47c9a3ab1b7c4721bb /internal/sqlutil
parent908108c23e47df5fbf0d6629b676e105abd2a564 (diff)
Limit database connections (#980, #564) (#998)
* Limit database connections (#564) - Add new options to the config file database: max_open_conns: 100 max_idle_conns: 2 conn_max_lifetime: -1 - Implement connection parameter setup on the *DB (database/sql) in internal/sqlutil/trace.go:Open() - Propagate the values in the form of DbProperties interface via all the Open() and NewDatabase() functions Signed-off-by: Tomas Jirka <tomas.jirka@email.cz> * Fix wasm builds * Remove file accidentally added from working tree Co-authored-by: Tomas Jirka <tomas.jirka@email.cz>
Diffstat (limited to 'internal/sqlutil')
-rw-r--r--internal/sqlutil/trace.go21
1 files changed, 19 insertions, 2 deletions
diff --git a/internal/sqlutil/trace.go b/internal/sqlutil/trace.go
index 3d5fa7dc..42ac4e58 100644
--- a/internal/sqlutil/trace.go
+++ b/internal/sqlutil/trace.go
@@ -21,9 +21,11 @@ import (
"fmt"
"io"
"os"
+ "regexp"
"strings"
"time"
+ "github.com/matrix-org/dendrite/common"
"github.com/ngrok/sqlmw"
"github.com/sirupsen/logrus"
)
@@ -76,12 +78,27 @@ func (in *traceInterceptor) RowsNext(c context.Context, rows driver.Rows, dest [
// Open opens a database specified by its database driver name and a driver-specific data source name,
// usually consisting of at least a database name and connection information. Includes tracing driver
// if DENDRITE_TRACE_SQL=1
-func Open(driverName, dsn string) (*sql.DB, error) {
+func Open(driverName, dsn string, dbProperties common.DbProperties) (*sql.DB, error) {
if tracingEnabled {
// install the wrapped driver
driverName += "-trace"
}
- return sql.Open(driverName, dsn)
+ db, err := sql.Open(driverName, dsn)
+ if err != nil {
+ return nil, err
+ }
+ if driverName != common.SQLiteDriverName() && dbProperties != nil {
+ logrus.WithFields(logrus.Fields{
+ "MaxOpenConns": dbProperties.MaxOpenConns(),
+ "MaxIdleConns": dbProperties.MaxIdleConns(),
+ "ConnMaxLifetime": dbProperties.ConnMaxLifetime(),
+ "dataSourceName": regexp.MustCompile(`://[^@]*@`).ReplaceAllLiteralString(dsn, "://"),
+ }).Debug("Setting DB connection limits")
+ db.SetMaxOpenConns(dbProperties.MaxOpenConns())
+ db.SetMaxIdleConns(dbProperties.MaxIdleConns())
+ db.SetConnMaxLifetime(dbProperties.ConnMaxLifetime())
+ }
+ return db, nil
}
func init() {