diff options
author | 2023-01-17 13:29:44 +0100 | |
---|---|---|
committer | 2023-01-17 12:29:44 +0000 | |
commit | 627b8eeae6b7e3ad11d2b5b0b3f9f46c4aca055f (patch) | |
tree | 2eddb361599bac9345147d1cbec7253e8229669b /internal/config | |
parent | [chore]: Bump codeberg.org/gruf/go-errors/v2 from 2.0.2 to 2.1.1 (#1346) (diff) | |
download | gotosocial-627b8eeae6b7e3ad11d2b5b0b3f9f46c4aca055f.tar.xz |
[feature] Tune sqlite pragmas (#1349)
* sqlite pragma tuning
* use formatuint
* add sqlite busy timeout
* fix incorrect cache size format
* update envparsing test
* add sqlite tuning flags to cli
* set sqlite timeout to 30s default
Diffstat (limited to 'internal/config')
-rw-r--r-- | internal/config/config.go | 20 | ||||
-rw-r--r-- | internal/config/defaults.go | 20 | ||||
-rw-r--r-- | internal/config/flags.go | 4 | ||||
-rw-r--r-- | internal/config/helpers.gen.go | 100 |
4 files changed, 128 insertions, 16 deletions
diff --git a/internal/config/config.go b/internal/config/config.go index ec8675f2d..c28cfe419 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -58,14 +58,18 @@ type Configuration struct { TrustedProxies []string `name:"trusted-proxies" usage:"Proxies to trust when parsing x-forwarded headers into real IPs."` SoftwareVersion string `name:"software-version" usage:""` - DbType string `name:"db-type" usage:"Database type: eg., postgres"` - DbAddress string `name:"db-address" usage:"Database ipv4 address, hostname, or filename"` - DbPort int `name:"db-port" usage:"Database port"` - DbUser string `name:"db-user" usage:"Database username"` - DbPassword string `name:"db-password" usage:"Database password"` - DbDatabase string `name:"db-database" usage:"Database name"` - DbTLSMode string `name:"db-tls-mode" usage:"Database tls mode"` - DbTLSCACert string `name:"db-tls-ca-cert" usage:"Path to CA cert for db tls connection"` + DbType string `name:"db-type" usage:"Database type: eg., postgres"` + DbAddress string `name:"db-address" usage:"Database ipv4 address, hostname, or filename"` + DbPort int `name:"db-port" usage:"Database port"` + DbUser string `name:"db-user" usage:"Database username"` + DbPassword string `name:"db-password" usage:"Database password"` + DbDatabase string `name:"db-database" usage:"Database name"` + DbTLSMode string `name:"db-tls-mode" usage:"Database tls mode"` + DbTLSCACert string `name:"db-tls-ca-cert" usage:"Path to CA cert for db tls connection"` + DbSqliteJournalMode string `name:"db-sqlite-journal-mode" usage:"Sqlite only: see https://www.sqlite.org/pragma.html#pragma_journal_mode"` + DbSqliteSynchronous string `name:"db-sqlite-synchronous" usage:"Sqlite only: see https://www.sqlite.org/pragma.html#pragma_synchronous"` + DbSqliteCacheSize bytesize.Size `name:"db-sqlite-cache-size" usage:"Sqlite only: see https://www.sqlite.org/pragma.html#pragma_cache_size"` + DbSqliteBusyTimeout time.Duration `name:"db-sqlite-busy-timeout" usage:"Sqlite only: see https://www.sqlite.org/pragma.html#pragma_busy_timeout"` WebTemplateBaseDir string `name:"web-template-base-dir" usage:"Basedir for html templating files for rendering pages and composing emails."` WebAssetBaseDir string `name:"web-asset-base-dir" usage:"Directory to serve static assets from, accessible at example.org/assets/"` diff --git a/internal/config/defaults.go b/internal/config/defaults.go index 4d61bec05..31f282113 100644 --- a/internal/config/defaults.go +++ b/internal/config/defaults.go @@ -40,14 +40,18 @@ var Defaults = Configuration{ Port: 8080, TrustedProxies: []string{"127.0.0.1/32", "::1"}, // localhost - DbType: "postgres", - DbAddress: "", - DbPort: 5432, - DbUser: "", - DbPassword: "", - DbDatabase: "gotosocial", - DbTLSMode: "disable", - DbTLSCACert: "", + DbType: "postgres", + DbAddress: "", + DbPort: 5432, + DbUser: "", + DbPassword: "", + DbDatabase: "gotosocial", + DbTLSMode: "disable", + DbTLSCACert: "", + DbSqliteJournalMode: "WAL", + DbSqliteSynchronous: "NORMAL", + DbSqliteCacheSize: 64 * bytesize.MiB, + DbSqliteBusyTimeout: time.Second * 30, WebTemplateBaseDir: "./web/template/", WebAssetBaseDir: "./web/assets/", diff --git a/internal/config/flags.go b/internal/config/flags.go index e3d1b20da..a0fde3eed 100644 --- a/internal/config/flags.go +++ b/internal/config/flags.go @@ -51,6 +51,10 @@ func (s *ConfigState) AddGlobalFlags(cmd *cobra.Command) { cmd.PersistentFlags().String(DbDatabaseFlag(), cfg.DbDatabase, fieldtag("DbDatabase", "usage")) cmd.PersistentFlags().String(DbTLSModeFlag(), cfg.DbTLSMode, fieldtag("DbTLSMode", "usage")) cmd.PersistentFlags().String(DbTLSCACertFlag(), cfg.DbTLSCACert, fieldtag("DbTLSCACert", "usage")) + cmd.PersistentFlags().String(DbSqliteJournalModeFlag(), cfg.DbSqliteJournalMode, fieldtag("DbSqliteJournalMode", "usage")) + cmd.PersistentFlags().String(DbSqliteSynchronousFlag(), cfg.DbSqliteSynchronous, fieldtag("DbSqliteSynchronous", "usage")) + cmd.PersistentFlags().Uint64(DbSqliteCacheSizeFlag(), uint64(cfg.DbSqliteCacheSize), fieldtag("DbSqliteCacheSize", "usage")) + cmd.PersistentFlags().Duration(DbSqliteBusyTimeoutFlag(), cfg.DbSqliteBusyTimeout, fieldtag("DbSqliteBusyTimeout", "usage")) }) } diff --git a/internal/config/helpers.gen.go b/internal/config/helpers.gen.go index f340360b2..1da2ff42c 100644 --- a/internal/config/helpers.gen.go +++ b/internal/config/helpers.gen.go @@ -524,6 +524,106 @@ func GetDbTLSCACert() string { return global.GetDbTLSCACert() } // SetDbTLSCACert safely sets the value for global configuration 'DbTLSCACert' field func SetDbTLSCACert(v string) { global.SetDbTLSCACert(v) } +// GetDbSqliteJournalMode safely fetches the Configuration value for state's 'DbSqliteJournalMode' field +func (st *ConfigState) GetDbSqliteJournalMode() (v string) { + st.mutex.Lock() + v = st.config.DbSqliteJournalMode + st.mutex.Unlock() + return +} + +// SetDbSqliteJournalMode safely sets the Configuration value for state's 'DbSqliteJournalMode' field +func (st *ConfigState) SetDbSqliteJournalMode(v string) { + st.mutex.Lock() + defer st.mutex.Unlock() + st.config.DbSqliteJournalMode = v + st.reloadToViper() +} + +// DbSqliteJournalModeFlag returns the flag name for the 'DbSqliteJournalMode' field +func DbSqliteJournalModeFlag() string { return "db-sqlite-journal-mode" } + +// GetDbSqliteJournalMode safely fetches the value for global configuration 'DbSqliteJournalMode' field +func GetDbSqliteJournalMode() string { return global.GetDbSqliteJournalMode() } + +// SetDbSqliteJournalMode safely sets the value for global configuration 'DbSqliteJournalMode' field +func SetDbSqliteJournalMode(v string) { global.SetDbSqliteJournalMode(v) } + +// GetDbSqliteSynchronous safely fetches the Configuration value for state's 'DbSqliteSynchronous' field +func (st *ConfigState) GetDbSqliteSynchronous() (v string) { + st.mutex.Lock() + v = st.config.DbSqliteSynchronous + st.mutex.Unlock() + return +} + +// SetDbSqliteSynchronous safely sets the Configuration value for state's 'DbSqliteSynchronous' field +func (st *ConfigState) SetDbSqliteSynchronous(v string) { + st.mutex.Lock() + defer st.mutex.Unlock() + st.config.DbSqliteSynchronous = v + st.reloadToViper() +} + +// DbSqliteSynchronousFlag returns the flag name for the 'DbSqliteSynchronous' field +func DbSqliteSynchronousFlag() string { return "db-sqlite-synchronous" } + +// GetDbSqliteSynchronous safely fetches the value for global configuration 'DbSqliteSynchronous' field +func GetDbSqliteSynchronous() string { return global.GetDbSqliteSynchronous() } + +// SetDbSqliteSynchronous safely sets the value for global configuration 'DbSqliteSynchronous' field +func SetDbSqliteSynchronous(v string) { global.SetDbSqliteSynchronous(v) } + +// GetDbSqliteCacheSize safely fetches the Configuration value for state's 'DbSqliteCacheSize' field +func (st *ConfigState) GetDbSqliteCacheSize() (v bytesize.Size) { + st.mutex.Lock() + v = st.config.DbSqliteCacheSize + st.mutex.Unlock() + return +} + +// SetDbSqliteCacheSize safely sets the Configuration value for state's 'DbSqliteCacheSize' field +func (st *ConfigState) SetDbSqliteCacheSize(v bytesize.Size) { + st.mutex.Lock() + defer st.mutex.Unlock() + st.config.DbSqliteCacheSize = v + st.reloadToViper() +} + +// DbSqliteCacheSizeFlag returns the flag name for the 'DbSqliteCacheSize' field +func DbSqliteCacheSizeFlag() string { return "db-sqlite-cache-size" } + +// GetDbSqliteCacheSize safely fetches the value for global configuration 'DbSqliteCacheSize' field +func GetDbSqliteCacheSize() bytesize.Size { return global.GetDbSqliteCacheSize() } + +// SetDbSqliteCacheSize safely sets the value for global configuration 'DbSqliteCacheSize' field +func SetDbSqliteCacheSize(v bytesize.Size) { global.SetDbSqliteCacheSize(v) } + +// GetDbSqliteBusyTimeout safely fetches the Configuration value for state's 'DbSqliteBusyTimeout' field +func (st *ConfigState) GetDbSqliteBusyTimeout() (v time.Duration) { + st.mutex.Lock() + v = st.config.DbSqliteBusyTimeout + st.mutex.Unlock() + return +} + +// SetDbSqliteBusyTimeout safely sets the Configuration value for state's 'DbSqliteBusyTimeout' field +func (st *ConfigState) SetDbSqliteBusyTimeout(v time.Duration) { + st.mutex.Lock() + defer st.mutex.Unlock() + st.config.DbSqliteBusyTimeout = v + st.reloadToViper() +} + +// DbSqliteBusyTimeoutFlag returns the flag name for the 'DbSqliteBusyTimeout' field +func DbSqliteBusyTimeoutFlag() string { return "db-sqlite-busy-timeout" } + +// GetDbSqliteBusyTimeout safely fetches the value for global configuration 'DbSqliteBusyTimeout' field +func GetDbSqliteBusyTimeout() time.Duration { return global.GetDbSqliteBusyTimeout() } + +// SetDbSqliteBusyTimeout safely sets the value for global configuration 'DbSqliteBusyTimeout' field +func SetDbSqliteBusyTimeout(v time.Duration) { global.SetDbSqliteBusyTimeout(v) } + // GetWebTemplateBaseDir safely fetches the Configuration value for state's 'WebTemplateBaseDir' field func (st *ConfigState) GetWebTemplateBaseDir() (v string) { st.mutex.Lock() |