chore: migrate database in background

* do database migration in background for fast startup time
* the caveat is: for the first time startup, service is not available until the migration is done
This commit is contained in:
canghai118 2023-11-30 08:18:47 +00:00
parent 0e73418cdf
commit ae2b442a96

View File

@ -1,14 +1,16 @@
package model package model
import ( import (
"gorm.io/driver/mysql" "fmt"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"one-api/common" "one-api/common"
"os" "os"
"strings" "strings"
"time" "time"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
) )
var DB *gorm.DB var DB *gorm.DB
@ -82,7 +84,32 @@ func InitDB() (err error) {
if !common.IsMasterNode { if !common.IsMasterNode {
return nil return nil
} }
// migrate database in the background, to avoid blocking application startup
go func() {
err = migrateDB(db)
if err != nil {
common.FatalLog(fmt.Errorf("migrateDB error: %v", err))
}
}()
} else {
common.FatalLog(err)
}
return err
}
func CloseDB() error {
sqlDB, err := DB.DB()
if err != nil {
return err
}
err = sqlDB.Close()
return err
}
func migrateDB(db *gorm.DB) error {
common.SysLog("database migration started") common.SysLog("database migration started")
var err error
err = db.AutoMigrate(&Channel{}) err = db.AutoMigrate(&Channel{})
if err != nil { if err != nil {
return err return err
@ -114,17 +141,4 @@ func InitDB() (err error) {
common.SysLog("database migrated") common.SysLog("database migrated")
err = createRootAccountIfNeed() err = createRootAccountIfNeed()
return err return err
} else {
common.FatalLog(err)
}
return err
}
func CloseDB() error {
sqlDB, err := DB.DB()
if err != nil {
return err
}
err = sqlDB.Close()
return err
} }