Improve configuration checks

This commit is contained in:
Neil Alexander 2022-05-03 12:11:45 +01:00
parent 0c5fc324c2
commit 496dd3a36d
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
9 changed files with 40 additions and 22 deletions

View file

@ -194,20 +194,22 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string, options ...Base
// have a separate database config of their own.
var db *sql.DB
var writer sqlutil.Writer
if cfg.Global.DatabaseOptions.ConnectionString != "" && isMonolith {
switch {
case cfg.Global.DatabaseOptions.ConnectionString.IsSQLite():
writer = sqlutil.NewExclusiveWriter()
default:
writer = sqlutil.NewDummyWriter()
if cfg.Global.DatabaseOptions.ConnectionString != "" {
if isMonolith {
switch {
case cfg.Global.DatabaseOptions.ConnectionString.IsSQLite():
writer = sqlutil.NewExclusiveWriter()
default:
writer = sqlutil.NewDummyWriter()
}
db, err = sqlutil.Open(&cfg.Global.DatabaseOptions, writer)
if err != nil {
logrus.WithError(err).Panic("Failed to set up global database connections")
}
logrus.Info("Using global database connection pool")
} else {
logrus.Panic("Using a global database connection pool is not supported in polylith deployments")
}
db, err = sqlutil.Open(&cfg.Global.DatabaseOptions, writer)
if err != nil {
logrus.WithError(err).Panic("Failed to set up global database connections")
}
logrus.Info("Using global database connection pool")
} else {
logrus.Info("Not using global database connection pool")
}
// Ideally we would only use SkipClean on routes which we know can allow '/' but due to
@ -250,7 +252,7 @@ func (b *BaseDendrite) Close() error {
}
// DatabaseConnection sets up a new database connection if appropriate,
// or returns the global connection pool if not (monolith mode only).
// or returns the global connection pool if not.
func (b *BaseDendrite) DatabaseConnection(dbProperties *config.DatabaseOptions, writer sqlutil.Writer) (*sql.DB, sqlutil.Writer, error) {
if dbProperties.ConnectionString != "" || b == nil {
db, err := sqlutil.Open(dbProperties, writer)

View file

@ -52,7 +52,9 @@ func (c *AppServiceAPI) Defaults(generate bool) {
func (c *AppServiceAPI) Verify(configErrs *ConfigErrors, isMonolith bool) {
checkURL(configErrs, "app_service_api.internal_api.listen", string(c.InternalAPI.Listen))
checkURL(configErrs, "app_service_api.internal_api.bind", string(c.InternalAPI.Connect))
//checkNotEmpty(configErrs, "app_service_api.database.connection_string", string(c.Database.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "app_service_api.database.connection_string", string(c.Database.ConnectionString))
}
}
// ApplicationServiceNamespace is the namespace that a specific application

View file

@ -49,7 +49,9 @@ func (c *FederationAPI) Verify(configErrs *ConfigErrors, isMonolith bool) {
if !isMonolith {
checkURL(configErrs, "federation_api.external_api.listen", string(c.ExternalAPI.Listen))
}
//checkNotEmpty(configErrs, "federation_api.database.connection_string", string(c.Database.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "federation_api.database.connection_string", string(c.Database.ConnectionString))
}
}
// The config for setting a proxy to use for server->server requests

View file

@ -20,5 +20,7 @@ func (c *KeyServer) Defaults(generate bool) {
func (c *KeyServer) Verify(configErrs *ConfigErrors, isMonolith bool) {
checkURL(configErrs, "key_server.internal_api.listen", string(c.InternalAPI.Listen))
checkURL(configErrs, "key_server.internal_api.bind", string(c.InternalAPI.Connect))
//checkNotEmpty(configErrs, "key_server.database.connection_string", string(c.Database.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "key_server.database.connection_string", string(c.Database.ConnectionString))
}
}

View file

@ -58,7 +58,9 @@ func (c *MediaAPI) Verify(configErrs *ConfigErrors, isMonolith bool) {
if !isMonolith {
checkURL(configErrs, "media_api.external_api.listen", string(c.ExternalAPI.Listen))
}
//checkNotEmpty(configErrs, "media_api.database.connection_string", string(c.Database.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "media_api.database.connection_string", string(c.Database.ConnectionString))
}
checkNotEmpty(configErrs, "media_api.base_path", string(c.BasePath))
checkPositive(configErrs, "media_api.max_file_size_bytes", int64(c.MaxFileSizeBytes))

View file

@ -31,5 +31,7 @@ func (c *MSCs) Enabled(msc string) bool {
}
func (c *MSCs) Verify(configErrs *ConfigErrors, isMonolith bool) {
//checkNotEmpty(configErrs, "mscs.database.connection_string", string(c.Database.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "mscs.database.connection_string", string(c.Database.ConnectionString))
}
}

View file

@ -20,5 +20,7 @@ func (c *RoomServer) Defaults(generate bool) {
func (c *RoomServer) Verify(configErrs *ConfigErrors, isMonolith bool) {
checkURL(configErrs, "room_server.internal_api.listen", string(c.InternalAPI.Listen))
checkURL(configErrs, "room_server.internal_ap.bind", string(c.InternalAPI.Connect))
//checkNotEmpty(configErrs, "room_server.database.connection_string", string(c.Database.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "room_server.database.connection_string", string(c.Database.ConnectionString))
}
}

View file

@ -27,5 +27,7 @@ func (c *SyncAPI) Verify(configErrs *ConfigErrors, isMonolith bool) {
if !isMonolith {
checkURL(configErrs, "sync_api.external_api.listen", string(c.ExternalAPI.Listen))
}
//checkNotEmpty(configErrs, "sync_api.database", string(c.Database.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "sync_api.database", string(c.Database.ConnectionString))
}
}

View file

@ -37,6 +37,8 @@ func (c *UserAPI) Defaults(generate bool) {
func (c *UserAPI) Verify(configErrs *ConfigErrors, isMonolith bool) {
checkURL(configErrs, "user_api.internal_api.listen", string(c.InternalAPI.Listen))
checkURL(configErrs, "user_api.internal_api.connect", string(c.InternalAPI.Connect))
//checkNotEmpty(configErrs, "user_api.account_database.connection_string", string(c.AccountDatabase.ConnectionString))
if c.Matrix.DatabaseOptions.ConnectionString == "" {
checkNotEmpty(configErrs, "user_api.account_database.connection_string", string(c.AccountDatabase.ConnectionString))
}
checkPositive(configErrs, "user_api.openid_token_lifetime_ms", c.OpenIDTokenLifetimeMS)
}