From 8947adc312917ee47d091e716d6493e19df1bf5d Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Sat, 6 Mar 2021 08:33:19 -0700 Subject: [PATCH] Expose additional DB configuration settings This commit exposes the monitor interval, checkpoint interval, minimum checkpoint page count, and maximum checkpoint page count via the YAML configuration file. --- cmd/litestream/main.go | 21 ++++++++++++++++++++- db.go | 5 +++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/cmd/litestream/main.go b/cmd/litestream/main.go index fca5472..2a146d3 100644 --- a/cmd/litestream/main.go +++ b/cmd/litestream/main.go @@ -208,7 +208,12 @@ func ReadConfigFile(filename string) (_ Config, err error) { // DBConfig represents the configuration for a single database. type DBConfig struct { - Path string `yaml:"path"` + Path string `yaml:"path"` + MonitorInterval *time.Duration `yaml:"monitor-interval"` + CheckpointInterval *time.Duration `yaml:"checkpoint-interval"` + MinCheckpointPageN *int `yaml:"min-checkpoint-page-count"` + MaxCheckpointPageN *int `yaml:"max-checkpoint-page-count"` + Replicas []*ReplicaConfig `yaml:"replicas"` } @@ -222,6 +227,20 @@ func NewDBFromConfig(dbc *DBConfig) (*litestream.DB, error) { // Initialize database with given path. db := litestream.NewDB(path) + // Override default database settings if specified in configuration. + if dbc.MonitorInterval != nil { + db.MonitorInterval = *dbc.MonitorInterval + } + if dbc.CheckpointInterval != nil { + db.CheckpointInterval = *dbc.CheckpointInterval + } + if dbc.MinCheckpointPageN != nil { + db.MinCheckpointPageN = *dbc.MinCheckpointPageN + } + if dbc.MaxCheckpointPageN != nil { + db.MaxCheckpointPageN = *dbc.MaxCheckpointPageN + } + // Instantiate and attach replicas. for _, rc := range dbc.Replicas { r, err := NewReplicaFromConfig(rc, db) diff --git a/db.go b/db.go index 081ec9d..73b9ea9 100644 --- a/db.go +++ b/db.go @@ -260,6 +260,11 @@ func (db *DB) PageSize() int { // Open initializes the background monitoring goroutine. func (db *DB) Open() (err error) { + // Validate fields on database. + if db.MinCheckpointPageN <= 0 { + return fmt.Errorf("minimum checkpoint page count required") + } + // Validate that all replica names are unique. m := make(map[string]struct{}) for _, r := range db.Replicas {