Merge pull request #1763 from Zexi/feature/service-db-sync-exist

Feature/service db sync exist
This commit is contained in:
yunion-ci-robot
2019-07-17 13:45:59 +08:00
committed by GitHub
6 changed files with 42 additions and 60 deletions
+3 -11
View File
@@ -39,21 +39,13 @@ func StartService() {
})
dbOpts := &opts.DBOptions
cloudcommon.InitDB(dbOpts)
defer cloudcommon.CloseDB()
baseOpts := &opts.BaseOptions
app := common_app.InitApp(baseOpts, false)
InitHandlers(app)
if !db.CheckSync(opts.AutoSyncTable) {
log.Fatalf("database schema not in sync!")
}
err := models.InitDB()
if err != nil {
log.Errorf("InitDB fail: %s", err)
}
db.EnsureAppInitSyncDB(app, dbOpts, models.InitDB)
defer cloudcommon.CloseDB()
common_app.ServeForever(app, baseOpts)
}
+26
View File
@@ -16,10 +16,15 @@ package db
import (
"fmt"
"os"
"yunion.io/x/log"
"yunion.io/x/pkg/utils"
"yunion.io/x/sqlchemy"
"yunion.io/x/onecloud/pkg/appsrv"
"yunion.io/x/onecloud/pkg/cloudcommon"
common_options "yunion.io/x/onecloud/pkg/cloudcommon/options"
)
var globalTables map[string]IModelManager
@@ -100,6 +105,27 @@ func CheckSync(autoSync bool) bool {
return inSync
}
func EnsureAppInitSyncDB(app *appsrv.Application, opt *common_options.DBOptions, modelInitDBFunc func() error) {
cloudcommon.InitDB(opt)
if !CheckSync(opt.AutoSyncTable) {
log.Fatalf("database schema not in sync!")
}
if modelInitDBFunc != nil {
if err := modelInitDBFunc(); err != nil {
log.Fatalf("model init db: %v", err)
}
}
if opt.ExitAfterDBInit {
log.Infof("Exiting after db initialization ...")
os.Exit(0)
}
cloudcommon.AppDBInit(app)
}
func GetModelManager(keyword string) IModelManager {
modelMan, ok := globalTables[keyword]
if ok {
+8 -8
View File
@@ -97,17 +97,17 @@ func (manager *SSchedtagManager) InitializeData() error {
return nil
})
}
manager.BindJointManagers(
HostschedtagManager,
StorageschedtagManager,
NetworkschedtagManager,
)
manager.BindJointManagers(map[db.IModelManager]ISchedtagJointManager{
HostManager: HostschedtagManager,
StorageManager: StorageschedtagManager,
NetworkManager: NetworkschedtagManager,
})
return nil
}
func (manager *SSchedtagManager) BindJointManagers(ms ...ISchedtagJointManager) {
for _, m := range ms {
manager.jointsManager[m.GetMasterManager().KeywordPlural()] = m
func (manager *SSchedtagManager) BindJointManagers(ms map[db.IModelManager]ISchedtagJointManager) {
for m, schedtagM := range ms {
manager.jointsManager[m.KeywordPlural()] = schedtagM
}
}
+3 -13
View File
@@ -64,23 +64,13 @@ func StartService() {
log.Infof("Auth complete!!")
})
cloudcommon.InitDB(dbOpts)
defer cloudcommon.CloseDB()
app := app_common.InitApp(baseOpts, true)
cloudcommon.AppDBInit(app)
InitHandlers(app)
if !db.CheckSync(opts.AutoSyncTable) {
log.Fatalf("database schema not in sync!")
}
db.EnsureAppInitSyncDB(app, dbOpts, models.InitDB)
defer cloudcommon.CloseDB()
err := models.InitDB()
if err != nil {
log.Errorf("InitDB fail: %s", err)
}
err = setInfluxdbRetentionPolicy()
err := setInfluxdbRetentionPolicy()
if err != nil {
log.Errorf("setInfluxdbRetentionPolicy fail: %s", err)
}
+1 -7
View File
@@ -91,16 +91,10 @@ func StartService() {
return
}
cloudcommon.InitDB(dbOpts)
app := app_common.InitApp(baseOpts, true)
initHandlers(app)
if !db.CheckSync(opts.AutoSyncTable) {
log.Fatalf("database schema not in sync!")
}
models.InitDB()
db.EnsureAppInitSyncDB(app, dbOpts, models.InitDB)
go models.CheckImages()
+1 -21
View File
@@ -21,8 +21,6 @@ import (
_ "github.com/go-sql-driver/mysql"
"github.com/golang-plus/uuid"
"yunion.io/x/log"
api "yunion.io/x/onecloud/pkg/apis/identity"
"yunion.io/x/onecloud/pkg/cloudcommon"
app_common "yunion.io/x/onecloud/pkg/cloudcommon/app"
@@ -75,28 +73,10 @@ func StartService() {
app := app_common.InitApp(&opts.BaseOptions, true)
initHandlers(app)
cloudcommon.InitDB(&opts.DBOptions)
if !db.CheckSync(opts.AutoSyncTable) {
log.Fatalf("database schema not in sync!")
}
models.InitDB()
if opts.ExitAfterDBInit {
log.Infof("Exiting after db initialization ...")
os.Exit(0)
}
db.EnsureAppInitSyncDB(app, &opts.DBOptions, models.InitDB)
app_common.InitBaseAuth(&opts.BaseOptions)
cloudcommon.AppDBInit(app)
err := models.InitDB()
if err != nil {
log.Errorf("InitDB fail: %s", err)
}
if !opts.IsSlaveNode {
cron := cronman.GetCronJobManager(true)