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 {