fix(region): delete gpu device only on guest pending delete

Signed-off-by: wanyaoqi <d3lx.yq@gmail.com>
This commit is contained in:
wanyaoqi
2023-03-28 23:15:21 +08:00
parent 367aca37fa
commit 5b51e58b3f
2 changed files with 24 additions and 1 deletions
+23
View File
@@ -571,6 +571,29 @@ func (manager *SIsolatedDeviceManager) findHostUnusedByDevConfig(model, devType,
return devs, nil
}
func (manager *SIsolatedDeviceManager) ReleaseGPUDevicesOfGuest(ctx context.Context, guest *SGuest, userCred mcclient.TokenCredential) error {
devs := manager.findAttachedDevicesOfGuest(guest)
if devs == nil {
return fmt.Errorf("fail to find attached devices")
}
for _, dev := range devs {
if !utils.IsInStringArray(dev.DevType, api.VALID_GPU_TYPES) {
continue
}
_, err := db.Update(&dev, func() error {
dev.GuestId = ""
dev.NetworkIndex = -1
return nil
})
if err != nil {
db.OpsLog.LogEvent(guest, db.ACT_GUEST_DETACH_ISOLATED_DEVICE_FAIL, dev.GetShortDesc(ctx), userCred)
return err
}
db.OpsLog.LogEvent(guest, db.ACT_GUEST_DETACH_ISOLATED_DEVICE, dev.GetShortDesc(ctx), userCred)
}
return nil
}
func (manager *SIsolatedDeviceManager) ReleaseDevicesOfGuest(ctx context.Context, guest *SGuest, userCred mcclient.TokenCredential) error {
devs := manager.findAttachedDevicesOfGuest(guest)
if devs == nil {
+1 -1
View File
@@ -196,7 +196,7 @@ func (self *GuestDeleteTask) OnDiskDetachCompleteFailed(ctx context.Context, obj
// revoke all secgroups
func (self *GuestDeleteTask) doClearSecurityGroupComplete(ctx context.Context, guest *models.SGuest) {
log.Debugf("doClearSecurityGroupComplete")
models.IsolatedDeviceManager.ReleaseDevicesOfGuest(ctx, guest, self.UserCred)
models.IsolatedDeviceManager.ReleaseGPUDevicesOfGuest(ctx, guest, self.UserCred)
guest.RevokeAllSecgroups(ctx, self.UserCred)
// sync revoked secgroups to remote cloud
if jsonutils.QueryBoolean(self.Params, "purge", false) {