diff --git a/agent/app/service/snapshot_recover.go b/agent/app/service/snapshot_recover.go index 7eec242bb..3c70a4377 100644 --- a/agent/app/service/snapshot_recover.go +++ b/agent/app/service/snapshot_recover.go @@ -156,14 +156,6 @@ func (u *SnapshotService) SnapshotRecover(req dto.SnapshotRecover) error { ) req.IsNew = true } - if req.IsNew || snap.InterruptStep == "RecoverDBData" { - taskItem.AddSubTaskWithAliasAndOps( - "RecoverDBData", - func(t *task.Task) error { return recoverDBData(path.Join(rootDir, snap.Name, "db"), &itemHelper) }, - nil, 0, 90*time.Minute, - ) - req.IsNew = true - } if req.IsNew || snap.InterruptStep == "RecoverBackups" { taskItem.AddSubTaskWithAliasAndOps( "RecoverBackups", @@ -222,13 +214,24 @@ func (u *SnapshotService) SnapshotRecover(req dto.SnapshotRecover) error { ) req.IsNew = true } - taskItem.AddSubTaskWithAliasAndOps( - "RecoverDBData", - func(t *task.Task) error { - return restartCompose(path.Join(snapJson.BaseDir, "1panel/docker/compose"), &itemHelper) - }, - nil, 0, 90*time.Minute, - ) + if req.IsNew || snap.InterruptStep == "RecoverCompose" { + taskItem.AddSubTaskWithAliasAndOps( + "RecoverCompose", + func(t *task.Task) error { + return restartCompose(path.Join(snapJson.BaseDir, "1panel/docker/compose"), &itemHelper) + }, + nil, 0, 90*time.Minute, + ) + req.IsNew = true + } + if req.IsNew || snap.InterruptStep == "RecoverDBData" { + taskItem.AddSubTaskWithAliasAndOps( + "RecoverDBData", + func(t *task.Task) error { return recoverDBData(path.Join(rootDir, snap.Name, "db"), &itemHelper) }, + nil, 0, 90*time.Minute, + ) + req.IsNew = true + } if err := taskItem.Execute(); err != nil { _ = settingRepo.Update("SystemStatus", "Free") @@ -439,17 +442,8 @@ func recoverBaseData(src string, itemHelper *snapRecoverHelper) error { return nil } -func recoverDBData(src string, itemHelper *snapRecoverHelper) error { - itemHelper.Task.Log("---------------------- 7 / 11 ----------------------") - itemHelper.Task.LogStart(i18n.GetMsgByKey("RecoverDBData")) - err := itemHelper.FileOp.CopyDirWithExclude(src, global.Dir.DataDir, nil) - - itemHelper.Task.LogWithStatus(i18n.GetMsgByKey("RecoverDBData"), err) - return err -} - func restartCompose(composePath string, itemHelper *snapRecoverHelper) error { - itemHelper.Task.Log("---------------------- 11 / 11 ----------------------") + itemHelper.Task.Log("---------------------- 7 / 11 ----------------------") itemHelper.Task.LogStart(i18n.GetMsgByKey("RecoverCompose")) composes, err := composeRepo.ListRecord() @@ -472,3 +466,13 @@ func restartCompose(composePath string, itemHelper *snapRecoverHelper) error { } return nil } + +func recoverDBData(src string, itemHelper *snapRecoverHelper) error { + itemHelper.Task.Log("---------------------- 11 / 11 ----------------------") + itemHelper.Task.LogStart(i18n.GetMsgByKey("RecoverDBData")) + _ = os.Remove(path.Join(global.Dir.DataDir, "db")) + err := itemHelper.FileOp.CopyDirWithExclude(src, global.Dir.DataDir, nil) + + itemHelper.Task.LogWithStatus(i18n.GetMsgByKey("RecoverDBData"), err) + return err +} diff --git a/agent/utils/common/sqlite.go b/agent/utils/common/sqlite.go index 22eb8ec45..3c098704a 100644 --- a/agent/utils/common/sqlite.go +++ b/agent/utils/common/sqlite.go @@ -67,14 +67,29 @@ func GetDBWithPath(dbPath string) (*gorm.DB, error) { if err != nil { return nil, err } - sqlDB, dbError := db.DB() - if dbError != nil { - return nil, dbError + + sqlDB, err := db.DB() + if err != nil { + return nil, err } + sqlDB.SetMaxOpenConns(4) sqlDB.SetMaxIdleConns(1) - sqlDB.SetConnMaxIdleTime(15 * time.Minute) - sqlDB.SetConnMaxLifetime(time.Hour) + sqlDB.SetConnMaxLifetime(0) + sqlDB.SetConnMaxIdleTime(0) + + if err := db.Exec("PRAGMA journal_mode = WAL;").Error; err != nil { + return nil, err + } + if err := db.Exec("PRAGMA synchronous = NORMAL;").Error; err != nil { + return nil, err + } + if err := db.Exec("PRAGMA busy_timeout = 5000;").Error; err != nil { + return nil, err + } + if err := db.Exec("PRAGMA temp_store = MEMORY;").Error; err != nil { + return nil, err + } return db, nil } diff --git a/core/cmd/server/conf/app.yaml b/core/cmd/server/conf/app.yaml index db1c3b947..37c46145e 100644 --- a/core/cmd/server/conf/app.yaml +++ b/core/cmd/server/conf/app.yaml @@ -2,7 +2,6 @@ base: install_dir: /opt mode: dev is_demo: false - is_intl: false is_offline: false is_fxplay: false port: 9999 diff --git a/core/utils/common/sqlite.go b/core/utils/common/sqlite.go index acb82387c..b6cdc4d3a 100644 --- a/core/utils/common/sqlite.go +++ b/core/utils/common/sqlite.go @@ -40,18 +40,36 @@ func CloseDB(db *gorm.DB) { } func GetDBWithPath(dbPath string) (*gorm.DB, error) { - db, _ := gorm.Open(sqlite.Open(dbPath), &gorm.Config{ + db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{ DisableForeignKeyConstraintWhenMigrating: true, Logger: newLogger(), }) - sqlDB, dbError := db.DB() - if dbError != nil { - return nil, dbError + if err != nil { + return nil, err } + + sqlDB, err := db.DB() + if err != nil { + return nil, err + } + sqlDB.SetMaxOpenConns(4) sqlDB.SetMaxIdleConns(1) - sqlDB.SetConnMaxIdleTime(15 * time.Minute) - sqlDB.SetConnMaxLifetime(time.Hour) + sqlDB.SetConnMaxLifetime(0) + sqlDB.SetConnMaxIdleTime(0) + + if err := db.Exec("PRAGMA journal_mode = WAL;").Error; err != nil { + return nil, err + } + if err := db.Exec("PRAGMA synchronous = NORMAL;").Error; err != nil { + return nil, err + } + if err := db.Exec("PRAGMA busy_timeout = 5000;").Error; err != nil { + return nil, err + } + if err := db.Exec("PRAGMA temp_store = MEMORY;").Error; err != nil { + return nil, err + } return db, nil }