Database (internal/db) stores listeners, routes, and firewall rules with WAL mode, foreign keys, and idempotent migrations. First run seeds from TOML config; subsequent runs load from DB as source of truth. gRPC admin API now writes to the database before updating in-memory state (write-through cache pattern). Adds snapshot command for VACUUM INTO backups. Refactors firewall.New to accept raw rule slices instead of config struct for flexibility. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
13 lines
290 B
Go
13 lines
290 B
Go
package db
|
|
|
|
import "fmt"
|
|
|
|
// Snapshot creates a consistent backup of the database using VACUUM INTO.
|
|
func (s *Store) Snapshot(destPath string) error {
|
|
_, err := s.db.Exec("VACUUM INTO ?", destPath)
|
|
if err != nil {
|
|
return fmt.Errorf("snapshot to %q: %w", destPath, err)
|
|
}
|
|
return nil
|
|
}
|