diff --git a/config/config.go b/config/config.go index a2f5022..f572742 100644 --- a/config/config.go +++ b/config/config.go @@ -38,6 +38,9 @@ type Config struct { Database struct { Type string `yaml:"type"` URI string `yaml:"uri"` + + MaxOpenConns int `yaml:"max_open_conns"` + MaxIdleConns int `yaml:"max_idle_conns"` } `yaml:"database"` StateStore string `yaml:"state_store_path"` @@ -58,6 +61,11 @@ type Config struct { Logging appservice.LogConfig `yaml:"logging"` } +func (config *Config) setDefaults() { + config.AppService.Database.MaxOpenConns = 20 + config.AppService.Database.MaxIdleConns = 2 +} + func Load(path string) (*Config, error) { data, err := ioutil.ReadFile(path) if err != nil { @@ -65,6 +73,7 @@ func Load(path string) (*Config, error) { } var config = &Config{} + config.setDefaults() err = yaml.Unmarshal(data, config) return config, err } diff --git a/example-config.yaml b/example-config.yaml index 20bf56d..eb32688 100644 --- a/example-config.yaml +++ b/example-config.yaml @@ -23,6 +23,10 @@ appservice: # SQLite: File name is enough. https://github.com/mattn/go-sqlite3#connection-string # Postgres: Connection string. For example, postgres://user:password@host/database uri: mautrix-whatsapp.db + # Maximum number of connections. Mostly relevant for Postgres. + max_open_conns: 20 + max_idle_conns: 2 + # Path to the Matrix room state store. state_store_path: ./mx-state.json @@ -56,6 +60,11 @@ bridge: # WhatsApp connection timeout in seconds. connection_timeout: 20 + # Maximum number of times to retry connecting on connection error. + max_connection_attempts: 3 + # Whether or not the bridge should send a notice to the user's management room when it retries connecting. + # If false, it will only report when it stops retrying. + report_connection_retry: true # The prefix for commands. Only required in non-management rooms. command_prefix: "!wa" diff --git a/main.go b/main.go index 7779101..a82f8d4 100644 --- a/main.go +++ b/main.go @@ -139,6 +139,9 @@ func (bridge *Bridge) Init() { os.Exit(14) } + bridge.DB.SetMaxOpenConns(bridge.Config.AppService.Database.MaxOpenConns) + bridge.DB.SetMaxIdleConns(bridge.Config.AppService.Database.MaxIdleConns) + bridge.Log.Debugln("Initializing Matrix event processor") bridge.EventProcessor = appservice.NewEventProcessor(bridge.AS) bridge.Log.Debugln("Initializing Matrix event handler")