Add SQLite persistence and write-through gRPC mutations
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>
This commit is contained in:
12
internal/db/snapshot.go
Normal file
12
internal/db/snapshot.go
Normal file
@@ -0,0 +1,12 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user