mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-08-01 13:52:46 +00:00
Configuration format v1 (#1230)
* Initial pass at refactoring config (not finished) * Don't forget current state and EDU servers * More shifting around * Update server key API tests * Fix roomserver test * Fix more tests * Further tweaks * Fix current state server test (sort of) * Maybe fix appservices * Fix client API test * Include database connection string in database options * Fix sync API build * Update config test * Fix unit tests * Fix federation sender build * Fix gobind build * Set Listen address for all services in HTTP monolith mode * Validate config, reinstate appservice derived in directory, tweaks * Tweak federation API test * Set MaxOpenConnections/MaxIdleConnections to previous values * Update generate-config
This commit is contained in:
parent
fdabba1851
commit
4b09f445c9
155 changed files with 1716 additions and 1503 deletions
|
@ -19,7 +19,6 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"go.uber.org/atomic"
|
||||
)
|
||||
|
@ -107,13 +106,6 @@ func SQLiteDriverName() string {
|
|||
return "sqlite3"
|
||||
}
|
||||
|
||||
// DbProperties functions return properties used by database/sql/DB
|
||||
type DbProperties interface {
|
||||
MaxIdleConns() int
|
||||
MaxOpenConns() int
|
||||
ConnMaxLifetime() time.Duration
|
||||
}
|
||||
|
||||
// TransactionWriter allows queuing database writes so that you don't
|
||||
// contend on database locks in, e.g. SQLite. Only one task will run
|
||||
// at a time on a given TransactionWriter.
|
||||
|
|
|
@ -25,6 +25,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/matrix-org/dendrite/internal/config"
|
||||
"github.com/ngrok/sqlmw"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
@ -77,7 +78,22 @@ 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, dbProperties DbProperties) (*sql.DB, error) {
|
||||
func Open(dbProperties *config.DatabaseOptions) (*sql.DB, error) {
|
||||
var err error
|
||||
var driverName, dsn string
|
||||
switch {
|
||||
case dbProperties.ConnectionString.IsSQLite():
|
||||
driverName = SQLiteDriverName()
|
||||
dsn, err = ParseFileURI(dbProperties.ConnectionString)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("ParseFileURI: %w", err)
|
||||
}
|
||||
case dbProperties.ConnectionString.IsPostgres():
|
||||
driverName = "postgres"
|
||||
dsn = string(dbProperties.ConnectionString)
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid database connection string %q", dbProperties.ConnectionString)
|
||||
}
|
||||
if tracingEnabled {
|
||||
// install the wrapped driver
|
||||
driverName += "-trace"
|
||||
|
@ -86,11 +102,11 @@ func Open(driverName, dsn string, dbProperties DbProperties) (*sql.DB, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if driverName != SQLiteDriverName() && dbProperties != nil {
|
||||
if driverName != SQLiteDriverName() {
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"MaxOpenConns": dbProperties.MaxOpenConns(),
|
||||
"MaxIdleConns": dbProperties.MaxIdleConns(),
|
||||
"ConnMaxLifetime": dbProperties.ConnMaxLifetime(),
|
||||
"MaxOpenConns": dbProperties.MaxOpenConns,
|
||||
"MaxIdleConns": dbProperties.MaxIdleConns,
|
||||
"ConnMaxLifetime": dbProperties.ConnMaxLifetime,
|
||||
"dataSourceName": regexp.MustCompile(`://[^@]*@`).ReplaceAllLiteralString(dsn, "://"),
|
||||
}).Debug("Setting DB connection limits")
|
||||
db.SetMaxOpenConns(dbProperties.MaxOpenConns())
|
||||
|
|
|
@ -15,14 +15,20 @@
|
|||
package sqlutil
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/matrix-org/dendrite/internal/config"
|
||||
)
|
||||
|
||||
// ParseFileURI returns the filepath in the given file: URI. Specifically, this will handle
|
||||
// both relative (file:foo.db) and absolute (file:///path/to/foo) paths.
|
||||
func ParseFileURI(dataSourceName string) (string, error) {
|
||||
uri, err := url.Parse(dataSourceName)
|
||||
func ParseFileURI(dataSourceName config.DataSource) (string, error) {
|
||||
if !dataSourceName.IsSQLite() {
|
||||
return "", errors.New("ParseFileURI expects SQLite connection string")
|
||||
}
|
||||
uri, err := url.Parse(string(dataSourceName))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue