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
import (
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"fmt"
"one-api/common"
"os"
"strings"
"time"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var DB *gorm.DB
@ -82,7 +84,32 @@ func InitDB() (err error) {
if !common.IsMasterNode {
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")
var err error
err = db.AutoMigrate(&Channel{})
if err != nil {
return err
@ -114,17 +141,4 @@ func InitDB() (err error) {
common.SysLog("database migrated")
err = createRootAccountIfNeed()
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
}