From 78a68bffd110a1e4bc920a872279d14a0bf53e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Tue, 28 Jul 2020 18:46:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=81=BF=E5=85=8D=E5=88=9B=E5=BB=BArds?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E6=97=B6=E5=AF=B9rds=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C=20(#7354)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Qu Xuan --- pkg/apis/compute/dbinstance_const.go | 27 ++++++++++--------- pkg/compute/models/dbinstance_backups.go | 9 +++++-- pkg/compute/regiondrivers/aliyun.go | 1 + pkg/compute/regiondrivers/google.go | 1 + pkg/compute/regiondrivers/managedvirtual.go | 6 ++++- .../tasks/dbinstance_backup_create_task.go | 10 ++++++- pkg/multicloud/google/dbinstance.go | 9 +++++-- pkg/multicloud/google/zone.go | 4 +-- 8 files changed, 46 insertions(+), 21 deletions(-) diff --git a/pkg/apis/compute/dbinstance_const.go b/pkg/apis/compute/dbinstance_const.go index 1c331d2a3f..7ce8054332 100644 --- a/pkg/apis/compute/dbinstance_const.go +++ b/pkg/apis/compute/dbinstance_const.go @@ -16,19 +16,20 @@ package compute const ( //实例状态 - DBINSTANCE_DEPLOYING = "deploying" //部署中 - DBINSTANCE_RUNNING = "running" //运行中 - DBINSTANCE_REBOOTING = "rebooting" //重启中 - DBINSTANCE_MIGRATING = "migrating" //迁移中 - DBINSTANCE_BACKING_UP = "backing_up" //备份中 - DBINSTANCE_RESTORING = "restoring" //备份恢复中 - DBINSTANCE_RESTORE_FAILED = "restore_failed" - DBINSTANCE_IMPORTING = "importing" //数据导入中 - DBINSTANCE_CLONING = "cloning" //克隆中 - DBINSTANCE_DELETING = "deleting" //删除中 - DBINSTANCE_DELETE_FAILED = "delete_failed" //删除失败 - DBINSTANCE_MAINTENANCE = "maintenance" //维护中 - DBINSTANCE_UNKNOWN = "unknown" + DBINSTANCE_DEPLOYING = "deploying" //部署中 + DBINSTANCE_RUNNING = "running" //运行中 + DBINSTANCE_REBOOTING = "rebooting" //重启中 + DBINSTANCE_MIGRATING = "migrating" //迁移中 + DBINSTANCE_BACKING_UP = "backing_up" //备份中 + DBINSTANCE_BACKING_UP_FAILED = "backing_up_failed" //备份失败 + DBINSTANCE_RESTORING = "restoring" //备份恢复中 + DBINSTANCE_RESTORE_FAILED = "restore_failed" + DBINSTANCE_IMPORTING = "importing" //数据导入中 + DBINSTANCE_CLONING = "cloning" //克隆中 + DBINSTANCE_DELETING = "deleting" //删除中 + DBINSTANCE_DELETE_FAILED = "delete_failed" //删除失败 + DBINSTANCE_MAINTENANCE = "maintenance" //维护中 + DBINSTANCE_UNKNOWN = "unknown" DBINSTANCE_CHANGE_CONFIG = "change_config" //调整配置 DBINSTANCE_CHANGE_CONFIG_FAILED = "change_config_failed" //调整配置失败 diff --git a/pkg/compute/models/dbinstance_backups.go b/pkg/compute/models/dbinstance_backups.go index b2df7a7ba6..56967a69ee 100644 --- a/pkg/compute/models/dbinstance_backups.go +++ b/pkg/compute/models/dbinstance_backups.go @@ -259,11 +259,16 @@ func (self *SDBInstanceBackup) PostCreate(ctx context.Context, userCred mcclient } func (self *SDBInstanceBackup) StartDBInstanceBackupCreateTask(ctx context.Context, userCred mcclient.TokenCredential, data *jsonutils.JSONDict, parentTaskId string) error { - self.SetStatus(userCred, api.DBINSTANCE_BACKUP_CREATING, "") task, err := taskman.TaskManager.NewTask(ctx, "DBInstanceBackupCreateTask", self, userCred, data, parentTaskId, "", nil) if err != nil { - return err + return errors.Wrap(err, "NewTask") } + instance, err := self.GetDBInstance() + if err != nil { + return errors.Wrap(err, "GetDBInstance") + } + instance.SetStatus(userCred, api.DBINSTANCE_BACKING_UP, "") + self.SetStatus(userCred, api.DBINSTANCE_BACKUP_CREATING, "") task.ScheduleRun(nil) return nil } diff --git a/pkg/compute/regiondrivers/aliyun.go b/pkg/compute/regiondrivers/aliyun.go index 2fa624bf52..462789cce4 100644 --- a/pkg/compute/regiondrivers/aliyun.go +++ b/pkg/compute/regiondrivers/aliyun.go @@ -1109,6 +1109,7 @@ func (self *SAliyunRegionDriver) RequestCreateDBInstanceBackup(ctx context.Conte } result := models.DBInstanceBackupManager.SyncDBInstanceBackups(ctx, userCred, backup.GetCloudprovider(), instance, backup.GetRegion(), backups) log.Infof("SyncDBInstanceBackups for dbinstance %s(%s) result: %s", instance.Name, instance.Id, result.Result()) + instance.SetStatus(userCred, api.DBINSTANCE_RUNNING, "") return nil, nil }) return nil diff --git a/pkg/compute/regiondrivers/google.go b/pkg/compute/regiondrivers/google.go index 9493c83c71..d22fbc2791 100644 --- a/pkg/compute/regiondrivers/google.go +++ b/pkg/compute/regiondrivers/google.go @@ -265,6 +265,7 @@ func (self *SGoogleRegionDriver) RequestCreateDBInstanceBackup(ctx context.Conte result := models.DBInstanceBackupManager.SyncDBInstanceBackups(ctx, userCred, backup.GetCloudprovider(), instance, backup.GetRegion(), backups) log.Infof("SyncDBInstanceBackups for dbinstance %s(%s) result: %s", instance.Name, instance.Id, result.Result()) + instance.SetStatus(userCred, api.DBINSTANCE_RUNNING, "") return nil, nil }) return nil diff --git a/pkg/compute/regiondrivers/managedvirtual.go b/pkg/compute/regiondrivers/managedvirtual.go index 0e2933620b..9d6af33c0f 100644 --- a/pkg/compute/regiondrivers/managedvirtual.go +++ b/pkg/compute/regiondrivers/managedvirtual.go @@ -2326,8 +2326,12 @@ func (self *SManagedVirtualizationRegionDriver) RequestCreateDBInstanceBackup(ct backup.BackupSizeMb = iBackup.GetBackupSizeMb() return nil }) + if err != nil { + return nil, errors.Wrap(err, "db.Update") + } - return nil, err + instance.SetStatus(userCred, api.DBINSTANCE_RUNNING, "") + return nil, nil }) return nil } diff --git a/pkg/compute/tasks/dbinstance_backup_create_task.go b/pkg/compute/tasks/dbinstance_backup_create_task.go index e97d671f3e..a5c7f0dbcd 100644 --- a/pkg/compute/tasks/dbinstance_backup_create_task.go +++ b/pkg/compute/tasks/dbinstance_backup_create_task.go @@ -40,6 +40,10 @@ func (self *DBInstanceBackupCreateTask) taskFailed(ctx context.Context, backup * backup.SetStatus(self.UserCred, api.DBINSTANCE_BACKUP_CREATE_FAILED, err.Error()) db.OpsLog.LogEvent(backup, db.ACT_CREATE, err.Error(), self.GetUserCred()) logclient.AddActionLogWithStartable(self, backup, logclient.ACT_CREATE, err.Error(), self.UserCred, false) + instance, _ := backup.GetDBInstance() + if instance != nil { + instance.SetStatus(self.UserCred, api.DBINSTANCE_BACKING_UP_FAILED, err.Error()) + } self.SetStageFailed(ctx, err.Error()) } @@ -56,7 +60,11 @@ func (self *DBInstanceBackupCreateTask) CreateDBInstanceBackup(ctx context.Conte } self.SetStage("OnCreateDBInstanceBackupComplete", nil) - instance.GetRegion().GetDriver().RequestCreateDBInstanceBackup(ctx, self.UserCred, instance, backup, self) + err = instance.GetRegion().GetDriver().RequestCreateDBInstanceBackup(ctx, self.UserCred, instance, backup, self) + if err != nil { + self.taskFailed(ctx, backup, errors.Wrap(err, "RequestCreateDBInstanceBackup")) + return + } } func (self *DBInstanceBackupCreateTask) OnCreateDBInstanceBackupComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/multicloud/google/dbinstance.go b/pkg/multicloud/google/dbinstance.go index d92a6edf59..84c2f9982a 100644 --- a/pkg/multicloud/google/dbinstance.go +++ b/pkg/multicloud/google/dbinstance.go @@ -359,12 +359,17 @@ func (rds *SDBInstance) GetInternalConnectionStr() string { } func (rds *SDBInstance) GetZone1Id() string { - zone, err := rds.region.GetZone(rds.GceZone) + zones, err := rds.region.GetIZones() if err != nil { log.Errorf("failed to found rds %s zone %s", rds.Name, rds.GceZone) return "" } - return zone.GetGlobalId() + for _, zone := range zones { + if zone.GetId() == rds.GceZone { + return zone.GetGlobalId() + } + } + return "" } func (rds *SDBInstance) GetZone2Id() string { diff --git a/pkg/multicloud/google/zone.go b/pkg/multicloud/google/zone.go index 6fe93cf964..a51b62bca4 100644 --- a/pkg/multicloud/google/zone.go +++ b/pkg/multicloud/google/zone.go @@ -56,11 +56,11 @@ func (zone *SZone) GetName() string { } func (zone *SZone) GetGlobalId() string { - return zone.GetId() + return fmt.Sprintf("%s/%s", zone.region.GetGlobalId(), zone.Name) } func (zone *SZone) GetId() string { - return fmt.Sprintf("%s/%s", zone.region.GetGlobalId(), zone.Name) + return zone.Name } func (zone *SZone) GetIHostById(hostId string) (cloudprovider.ICloudHost, error) {