aboutsummaryrefslogtreecommitdiff
path: root/setup/config
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2022-05-03 16:35:06 +0100
committerGitHub <noreply@github.com>2022-05-03 16:35:06 +0100
commit4ad5f9c982fe5dc9e306a9269621ead8c31248cf (patch)
tree9eac975c1d7232b35ce4d0c7f658db3c2289f0ab /setup/config
parent979a551f1e2aeb9f3417df5e52a7279230b7a3ba (diff)
Global database connection pool (for monolith mode) (#2411)
* Allow monolith components to share a single database pool * Don't yell about missing connection strings * Rename field * Setup tweaks * Fix panic * Improve configuration checks * Update config * Fix lint errors * Update comments
Diffstat (limited to 'setup/config')
-rw-r--r--setup/config/config_appservice.go4
-rw-r--r--setup/config/config_federationapi.go4
-rw-r--r--setup/config/config_global.go7
-rw-r--r--setup/config/config_keyserver.go4
-rw-r--r--setup/config/config_mediaapi.go4
-rw-r--r--setup/config/config_mscs.go4
-rw-r--r--setup/config/config_roomserver.go4
-rw-r--r--setup/config/config_syncapi.go4
-rw-r--r--setup/config/config_userapi.go4
9 files changed, 31 insertions, 8 deletions
diff --git a/setup/config/config_appservice.go b/setup/config/config_appservice.go
index 3f4e1c91..d93b6ebe 100644
--- a/setup/config/config_appservice.go
+++ b/setup/config/config_appservice.go
@@ -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
diff --git a/setup/config/config_federationapi.go b/setup/config/config_federationapi.go
index 176334dd..f62a23e1 100644
--- a/setup/config/config_federationapi.go
+++ b/setup/config/config_federationapi.go
@@ -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
diff --git a/setup/config/config_global.go b/setup/config/config_global.go
index c1650f07..d609e246 100644
--- a/setup/config/config_global.go
+++ b/setup/config/config_global.go
@@ -34,6 +34,13 @@ type Global struct {
// Defaults to 24 hours.
KeyValidityPeriod time.Duration `yaml:"key_validity_period"`
+ // Global pool of database connections, which is used only in monolith mode. If a
+ // component does not specify any database options of its own, then this pool of
+ // connections will be used instead. This way we don't have to manage connection
+ // counts on a per-component basis, but can instead do it for the entire monolith.
+ // In a polylith deployment, this will be ignored.
+ DatabaseOptions DatabaseOptions `yaml:"database"`
+
// The server name to delegate server-server communications to, with optional port
WellKnownServerName string `yaml:"well_known_server_name"`
diff --git a/setup/config/config_keyserver.go b/setup/config/config_keyserver.go
index 6180ccbc..9e2d54cd 100644
--- a/setup/config/config_keyserver.go
+++ b/setup/config/config_keyserver.go
@@ -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))
+ }
}
diff --git a/setup/config/config_mediaapi.go b/setup/config/config_mediaapi.go
index c85020d2..273de322 100644
--- a/setup/config/config_mediaapi.go
+++ b/setup/config/config_mediaapi.go
@@ -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))
diff --git a/setup/config/config_mscs.go b/setup/config/config_mscs.go
index 66a4c80c..b992f715 100644
--- a/setup/config/config_mscs.go
+++ b/setup/config/config_mscs.go
@@ -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))
+ }
}
diff --git a/setup/config/config_roomserver.go b/setup/config/config_roomserver.go
index 73abb4f4..8a322734 100644
--- a/setup/config/config_roomserver.go
+++ b/setup/config/config_roomserver.go
@@ -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))
+ }
}
diff --git a/setup/config/config_syncapi.go b/setup/config/config_syncapi.go
index dc813cb7..48fd9f50 100644
--- a/setup/config/config_syncapi.go
+++ b/setup/config/config_syncapi.go
@@ -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))
+ }
}
diff --git a/setup/config/config_userapi.go b/setup/config/config_userapi.go
index 570dc603..4aa3b57b 100644
--- a/setup/config/config_userapi.go
+++ b/setup/config/config_userapi.go
@@ -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)
}