Skip to content

Commit

Permalink
make configurable wal auto checkpoint
Browse files Browse the repository at this point in the history
SQLite WAL addition disabled auto checkpoint, this
makes the WAL grow forever, not sure why I did that.

Make it configurable, set it to SQLite default.

Fixes #2204

Signed-off-by: Kristoffer Dalby <[email protected]>
  • Loading branch information
kradalby committed Nov 22, 2024
1 parent 5fbf3f8 commit 84c1243
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
5 changes: 5 additions & 0 deletions config-example.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,11 @@ database:
# https://www.sqlite.org/wal.html
write_ahead_log: true

# Maximum number of WAL file frames before the WAL file is automatically checkpointed.
# https://www.sqlite.org/c3ref/wal_autocheckpoint.html
# Set to 0 to disable automatic checkpointing.
wal_autocheckpoint: 1000

# # Postgres config
# Please note that using Postgres is highly discouraged as it is only supported for legacy reasons.
# See database.type for more information.
Expand Down
6 changes: 3 additions & 3 deletions hscontrol/db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -543,10 +543,10 @@ func openDB(cfg types.DatabaseConfig) (*gorm.DB, error) {
}

if cfg.Sqlite.WriteAheadLog {
if err := db.Exec(`
if err := db.Exec(fmt.Sprintf(`
PRAGMA journal_mode=WAL;
PRAGMA wal_autocheckpoint=0;
`).Error; err != nil {
PRAGMA wal_autocheckpoint=%d;
`, cfg.Sqlite.WALAutoCheckPoint)).Error; err != nil {
return nil, fmt.Errorf("setting WAL mode: %w", err)
}
}
Expand Down
9 changes: 6 additions & 3 deletions hscontrol/types/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,9 @@ type Nameservers struct {
}

type SqliteConfig struct {
Path string
WriteAheadLog bool
Path string
WriteAheadLog bool
WALAutoCheckPoint int
}

type PostgresConfig struct {
Expand Down Expand Up @@ -270,6 +271,7 @@ func LoadConfig(path string, isFile bool) error {
viper.SetDefault("database.postgres.conn_max_idle_time_secs", 3600)

viper.SetDefault("database.sqlite.write_ahead_log", true)
viper.SetDefault("database.sqlite.wal_autocheckpoint", 1000) // SQLite default

viper.SetDefault("oidc.scope", []string{oidc.ScopeOpenID, "profile", "email"})
viper.SetDefault("oidc.only_start_if_oidc_is_available", true)
Expand Down Expand Up @@ -542,7 +544,8 @@ func databaseConfig() DatabaseConfig {
Path: util.AbsolutePathFromConfigPath(
viper.GetString("database.sqlite.path"),
),
WriteAheadLog: viper.GetBool("database.sqlite.write_ahead_log"),
WriteAheadLog: viper.GetBool("database.sqlite.write_ahead_log"),
WALAutoCheckPoint: viper.GetInt("database.sqlite.wal_autocheckpoint"),
},
Postgres: PostgresConfig{
Host: viper.GetString("database.postgres.host"),
Expand Down

0 comments on commit 84c1243

Please sign in to comment.