mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #18388 from wanyaoqi/automated-cherry-pick-of-#18384-upstream-master
Automated cherry pick of #18384: Automated cherry pick of #18383: fix(region,host): live migrate disk driver determines the migration mode
This commit is contained in:
@@ -473,20 +473,23 @@ func (task *GuestLiveMigrateTask) OnStartDestComplete(ctx context.Context, guest
|
||||
task.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Get migrate port error: %s", err)))
|
||||
return
|
||||
}
|
||||
nbdServerPort, err := data.Get("nbd_server_port")
|
||||
if err != nil {
|
||||
task.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Get nbd server port error: %s", err)))
|
||||
return
|
||||
|
||||
var body = jsonutils.NewDict()
|
||||
var nbdServerPort jsonutils.JSONObject
|
||||
if !jsonutils.QueryBoolean(data, "nbd_server_disabled", false) {
|
||||
nbdServerPort, err = data.Get("nbd_server_port")
|
||||
if err != nil {
|
||||
task.TaskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("Get nbd server port error: %s", err)))
|
||||
return
|
||||
}
|
||||
body.Set("nbd_server_port", nbdServerPort)
|
||||
}
|
||||
|
||||
targetHostId, _ := task.Params.GetString("target_host_id")
|
||||
targetHost := models.HostManager.FetchHostById(targetHostId)
|
||||
|
||||
body := jsonutils.NewDict()
|
||||
isLocalStorage, _ := task.Params.Get("is_local_storage")
|
||||
body.Set("is_local_storage", isLocalStorage)
|
||||
body.Set("live_migrate_dest_port", liveMigrateDestPort)
|
||||
body.Set("nbd_server_port", nbdServerPort)
|
||||
body.Set("dest_ip", jsonutils.NewString(targetHost.AccessIp))
|
||||
body.Set("enable_tls", jsonutils.NewBool(jsonutils.QueryBoolean(task.GetParams(), "enable_tls", false)))
|
||||
body.Set("quickly_finish", jsonutils.NewBool(jsonutils.QueryBoolean(task.GetParams(), "quickly_finish", false)))
|
||||
@@ -496,7 +499,6 @@ func (task *GuestLiveMigrateTask) OnStartDestComplete(ctx context.Context, guest
|
||||
}
|
||||
|
||||
headers := task.GetTaskRequestHeader()
|
||||
|
||||
host, _ := guest.GetHost()
|
||||
url := fmt.Sprintf("%s/servers/%s/live-migrate", host.ManagerUri, guest.Id)
|
||||
task.SetStage("OnLiveMigrateComplete", nil)
|
||||
|
||||
@@ -447,10 +447,14 @@ func guestLiveMigrate(ctx context.Context, userCred mcclient.TokenCredential, si
|
||||
if err != nil {
|
||||
return nil, httperrors.NewMissingParameterError("live_migrate_dest_port")
|
||||
}
|
||||
nbdServerPort, err := body.Int("nbd_server_port")
|
||||
if err != nil {
|
||||
return nil, httperrors.NewMissingParameterError("live_migrate_dest_port")
|
||||
var nbdServerPort int64 = -1
|
||||
if body.Contains("nbd_server_port") {
|
||||
nbdServerPort, err = body.Int("nbd_server_port")
|
||||
if err != nil {
|
||||
return nil, httperrors.NewMissingParameterError("live_migrate_dest_port")
|
||||
}
|
||||
}
|
||||
|
||||
destIp, err := body.GetString("dest_ip")
|
||||
if err != nil {
|
||||
return nil, httperrors.NewMissingParameterError("dest_ip")
|
||||
|
||||
@@ -1196,7 +1196,17 @@ func (s *SGuestLiveMigrateTask) onDriveMirrorDisksFailed(res string) {
|
||||
}
|
||||
|
||||
func (s *SGuestLiveMigrateTask) doMigrate() {
|
||||
s.mirrorDisks("")
|
||||
if s.params.NbdServerPort > 0 {
|
||||
s.mirrorDisks("")
|
||||
} else {
|
||||
var copyIncremental = false
|
||||
if s.params.IsLocal {
|
||||
// copy disk data
|
||||
copyIncremental = true
|
||||
}
|
||||
s.Monitor.Migrate(fmt.Sprintf("tcp:%s:%d", s.params.DestIp, s.params.DestPort),
|
||||
copyIncremental, false, s.setMaxBandwidth)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SGuestLiveMigrateTask) setMaxBandwidth(res string) {
|
||||
|
||||
@@ -1180,6 +1180,15 @@ func (s *SKVMGuestInstance) getMemoryDevices() ([]monitor.MemoryDeviceInfo, erro
|
||||
return res, err
|
||||
}
|
||||
|
||||
func (s *SKVMGuestInstance) hasVirtioBlkDriver() bool {
|
||||
for i := range s.Desc.Disks {
|
||||
if s.Desc.Disks[i].Driver == "virtio" {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (s *SKVMGuestInstance) guestRun(ctx context.Context) {
|
||||
if s.LiveMigrateDestPort != nil && ctx != nil && !s.IsSlave() {
|
||||
// dest migrate guest
|
||||
@@ -1190,14 +1199,20 @@ func (s *SKVMGuestInstance) guestRun(ctx context.Context) {
|
||||
hostutils.TaskFailed(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
nbdServerPort := s.manager.GetNBDServerFreePort()
|
||||
defer s.manager.unsetPort(nbdServerPort)
|
||||
err = s.migrateStartNbdServer(nbdServerPort)
|
||||
if err != nil {
|
||||
hostutils.TaskFailed(ctx, err.Error())
|
||||
return
|
||||
|
||||
if s.hasVirtioBlkDriver() {
|
||||
// virtio driver bind iothread, need migrate use driver mirror
|
||||
nbdServerPort := s.manager.GetNBDServerFreePort()
|
||||
defer s.manager.unsetPort(nbdServerPort)
|
||||
err = s.migrateStartNbdServer(nbdServerPort)
|
||||
if err != nil {
|
||||
hostutils.TaskFailed(ctx, err.Error())
|
||||
return
|
||||
}
|
||||
body.Set("nbd_server_port", jsonutils.NewInt(int64(nbdServerPort)))
|
||||
} else {
|
||||
body.Set("nbd_server_disabled", jsonutils.JSONTrue)
|
||||
}
|
||||
body.Set("nbd_server_port", jsonutils.NewInt(int64(nbdServerPort)))
|
||||
|
||||
if s.LiveMigrateUseTls {
|
||||
s.setDestMigrateTLS(ctx, body)
|
||||
|
||||
Reference in New Issue
Block a user