mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
bugfix: 避免openstack磁盘扩容成功后未能挂载到虚拟机上
This commit is contained in:
@@ -175,25 +175,40 @@ func (disk *SDisk) Delete(ctx context.Context) error {
|
||||
return cloudprovider.WaitDeleted(disk, 10*time.Second, 8*time.Minute)
|
||||
}
|
||||
|
||||
func (disk *SDisk) attachInstances(instanceIds []string) {
|
||||
for _, instanceId := range instanceIds {
|
||||
if err := disk.storage.zone.region.AttachDisk(instanceId, disk.ID); err != nil {
|
||||
log.Errorf("recover attach disk %s => instance %s error: %v", disk.ID, instanceId, err)
|
||||
func (disk *SDisk) attachInstances(attachments []Attachment) error {
|
||||
for _, attachment := range attachments {
|
||||
startTime := time.Now()
|
||||
for time.Now().Sub(startTime) < 5*time.Minute {
|
||||
if err := disk.storage.zone.region.AttachDisk(attachment.ServerID, disk.ID); err != nil {
|
||||
if strings.Contains(err.Error(), "status must be available or downloading") {
|
||||
time.Sleep(time.Second * 10)
|
||||
continue
|
||||
}
|
||||
log.Errorf("recover attach disk %s => instance %s error: %v", disk.ID, attachment.ServerID, err)
|
||||
return err
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (disk *SDisk) Resize(ctx context.Context, sizeMb int64) error {
|
||||
instanceIds := []string{}
|
||||
|
||||
defer disk.attachInstances(instanceIds)
|
||||
for _, attachement := range disk.Attachments {
|
||||
if err := disk.storage.zone.region.DetachDisk(attachement.ServerID, disk.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
instanceIds = append(instanceIds, attachement.ServerID)
|
||||
}
|
||||
return disk.storage.zone.region.ResizeDisk(disk.ID, sizeMb)
|
||||
err := disk.storage.zone.region.ResizeDisk(disk.ID, sizeMb)
|
||||
if err != nil {
|
||||
disk.attachInstances(disk.Attachments)
|
||||
return err
|
||||
}
|
||||
return disk.attachInstances(disk.Attachments)
|
||||
}
|
||||
|
||||
func (disk *SDisk) GetName() string {
|
||||
|
||||
Reference in New Issue
Block a user