mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(region): set sys disk index to 0 (#13322)
This commit is contained in:
@@ -190,18 +190,16 @@ func (manager *SDiskManager) ListItemFilter(
|
||||
|
||||
guestId := query.ServerId
|
||||
if len(guestId) > 0 {
|
||||
iGuest, err := GuestManager.FetchByIdOrName(userCred, guestId)
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError("guest %q not found", guestId)
|
||||
} else if err != nil {
|
||||
server, err := validators.ValidateModel(userCred, GuestManager, &guestId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
guest := iGuest.(*SGuest)
|
||||
guest := server.(*SGuest)
|
||||
guestDisks := GuestdiskManager.Query().SubQuery()
|
||||
q = q.Join(guestDisks, sqlchemy.AND(
|
||||
sqlchemy.Equals(guestDisks.Field("disk_id"), q.Field("id")),
|
||||
sqlchemy.Equals(guestDisks.Field("guest_id"), guest.Id),
|
||||
))
|
||||
)).Asc(guestDisks.Field("index"))
|
||||
}
|
||||
|
||||
if diskType := query.DiskType; diskType != "" {
|
||||
|
||||
@@ -248,7 +248,7 @@ func fetchGuestDisksInfo(guestIds []string) map[string][]api.GuestDiskInfo {
|
||||
)
|
||||
q = q.Join(guestdisks, sqlchemy.Equals(guestdisks.Field("disk_id"), disks.Field("id")))
|
||||
q = q.Join(storages, sqlchemy.Equals(disks.Field("storage_id"), storages.Field("id")))
|
||||
q = q.Filter(sqlchemy.In(guestdisks.Field("guest_id"), guestIds))
|
||||
q = q.Filter(sqlchemy.In(guestdisks.Field("guest_id"), guestIds)).Asc(guestdisks.Field("index"))
|
||||
gds := []sGuestDiskInfo{}
|
||||
err := q.All(&gds)
|
||||
if err != nil {
|
||||
|
||||
@@ -3274,9 +3274,49 @@ func (self *SGuest) SyncVMDisks(ctx context.Context, userCred mcclient.TokenCred
|
||||
result.Add()
|
||||
}
|
||||
|
||||
err = self.fixSysDiskIndex()
|
||||
if err != nil {
|
||||
result.Error(errors.Wrapf(err, "fixSysDiskIndex"))
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func (self *SGuest) fixSysDiskIndex() error {
|
||||
disks := DiskManager.Query().SubQuery()
|
||||
sysQ := GuestdiskManager.Query().Equals("guest_id", self.Id)
|
||||
sysQ = sysQ.Join(disks, sqlchemy.Equals(disks.Field("id"), sysQ.Field("disk_id"))).Filter(sqlchemy.Equals(disks.Field("disk_type"), api.DISK_TYPE_SYS))
|
||||
sysDisk := &SGuestdisk{}
|
||||
sysDisk.SetModelManager(GuestdiskManager, sysDisk)
|
||||
err := sysQ.First(sysDisk)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if sysDisk.Index == 0 {
|
||||
return nil
|
||||
}
|
||||
q := GuestdiskManager.Query().Equals("guest_id", self.Id).Equals("index", 0)
|
||||
|
||||
firstDisk := &SGuestdisk{}
|
||||
firstDisk.SetModelManager(GuestdiskManager, firstDisk)
|
||||
err = q.First(firstDisk)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = db.Update(firstDisk, func() error {
|
||||
firstDisk.Index = sysDisk.Index
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = db.Update(sysDisk, func() error {
|
||||
sysDisk.Index = 0
|
||||
return nil
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func filterGuestByRange(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, hostTypes []string, resourceTypes []string, providers []string, brands []string, cloudEnv string) *sqlchemy.SQuery {
|
||||
hosts := HostManager.Query().SubQuery()
|
||||
subq := hosts.Query(hosts.Field("id"))
|
||||
|
||||
Reference in New Issue
Block a user