refactor: maintain persistent database connections in instance status and correct wait order for backup processes
Build and Push / build (godump, amd64, linux) (push) Successful in 29s
Build and Push / build (godump, amd64, linux) (push) Successful in 29s
This commit is contained in:
+14
-2
@@ -1,12 +1,16 @@
|
||||
package backup
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
|
||||
"godump/config"
|
||||
"godump/logger"
|
||||
"godump/notify"
|
||||
@@ -23,6 +27,7 @@ type DBStatus struct {
|
||||
|
||||
type InstanceStatus struct {
|
||||
Config config.InstanceConfig
|
||||
DB *sql.DB
|
||||
LastRunTime time.Time
|
||||
NextRunTime time.Time
|
||||
OverallResult string // success, partial, failed, running
|
||||
@@ -97,8 +102,15 @@ func NewManager(cfg *config.Config) *Manager {
|
||||
}
|
||||
|
||||
for _, instCfg := range cfg.Instances {
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/?parseTime=true", instCfg.User, instCfg.Password, instCfg.Host, instCfg.Port)
|
||||
db, err := sql.Open("mysql", dsn)
|
||||
if err != nil {
|
||||
logger.Error(instCfg.Name, "Failed to initialize database pool: %v", err)
|
||||
}
|
||||
|
||||
status := &InstanceStatus{
|
||||
Config: instCfg,
|
||||
DB: db,
|
||||
Databases: make(map[string]*DBStatus),
|
||||
}
|
||||
m.instances[instCfg.Name] = status
|
||||
@@ -148,7 +160,7 @@ func (m *Manager) DiscoverInitial() {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
for name, inst := range m.instances {
|
||||
dbs, err := discoverDatabases(inst.Config)
|
||||
dbs, err := discoverDatabases(inst.DB, inst.Config)
|
||||
if err != nil {
|
||||
logger.Error(name, "Initial database discovery failed: %v", err)
|
||||
inst.mu.Lock()
|
||||
@@ -246,7 +258,7 @@ func (m *Manager) RunInstance(name string) {
|
||||
logger.Info(name, "Starting backup job")
|
||||
|
||||
// 1. Discovery
|
||||
dbs, err := discoverDatabases(inst.Config)
|
||||
dbs, err := discoverDatabases(inst.DB, inst.Config)
|
||||
if err != nil {
|
||||
logger.Error(name, "Database discovery failed: %v", err)
|
||||
inst.mu.Lock()
|
||||
|
||||
Reference in New Issue
Block a user