mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-01 15:07:17 +08:00
fix(region): cpu numa pin guest sched start (#20937)
This commit is contained in:
@@ -588,7 +588,7 @@ func (self *SGuest) StartMigrateTask(
|
||||
|
||||
data.Set("guest_status", jsonutils.NewString(guestStatus))
|
||||
dedicateMigrateTask := "GuestMigrateTask"
|
||||
if self.GetHypervisor() != api.HYPERVISOR_KVM {
|
||||
if !utils.IsInStringArray(self.GetHypervisor(), []string{api.HYPERVISOR_KVM, api.HYPERVISOR_POD}) {
|
||||
dedicateMigrateTask = "ManagedGuestMigrateTask" //托管私有云
|
||||
}
|
||||
self.SetStatus(ctx, userCred, vmStatus, "")
|
||||
@@ -1558,8 +1558,11 @@ func (self *SGuest) StartGueststartTask(
|
||||
data *jsonutils.JSONDict, parentTaskId string,
|
||||
) error {
|
||||
schedStart := self.Hypervisor == api.HYPERVISOR_KVM && self.guestDisksStorageTypeIsShared()
|
||||
if options.Options.IgnoreNonrunningGuests && self.CpuNumaPin != nil {
|
||||
schedStart = true
|
||||
if options.Options.IgnoreNonrunningGuests {
|
||||
host := HostManager.FetchHostById(self.HostId)
|
||||
if host != nil && host.EnableNumaAllocate {
|
||||
schedStart = true
|
||||
}
|
||||
}
|
||||
|
||||
if schedStart {
|
||||
|
||||
@@ -152,32 +152,32 @@ func (self *GuestSchedStartTask) OnInit(ctx context.Context, obj db.IStandaloneM
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) StartScheduler(ctx context.Context, guest *models.SGuest) {
|
||||
if guest.CpuNumaPin != nil {
|
||||
self.ScheduleFailed(ctx, guest)
|
||||
host, _ := guest.GetHost()
|
||||
if host.EnableNumaAllocate {
|
||||
self.ScheduleFailed(ctx, guest, true)
|
||||
return
|
||||
}
|
||||
|
||||
host, _ := guest.GetHost()
|
||||
if request := host.GetRunningGuestResourceUsage(); request == nil {
|
||||
self.TaskFailed(ctx, guest, jsonutils.NewString("Guest Start Failed: Can't Get Host Guests CPU Memory Usage"))
|
||||
} else {
|
||||
if float32(request.GuestVmemSize+guest.VmemSize) > host.GetVirtualMemorySize() {
|
||||
log.Infof("host memory not enough to start guest")
|
||||
self.ScheduleFailed(ctx, guest)
|
||||
self.ScheduleFailed(ctx, guest, false)
|
||||
} else if request.GuestVcpuCount+guest.VcpuCount > int(host.GetVirtualCPUCount()) {
|
||||
log.Infof("host cpu not enough to start guest")
|
||||
self.ScheduleFailed(ctx, guest)
|
||||
self.ScheduleFailed(ctx, guest, false)
|
||||
} else {
|
||||
self.ScheduleSucc(ctx, guest)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) ScheduleFailed(ctx context.Context, guest *models.SGuest) {
|
||||
func (self *GuestSchedStartTask) ScheduleFailed(ctx context.Context, guest *models.SGuest, resetCpuNumaPin bool) {
|
||||
self.SetStage("OnGuestMigrate", nil)
|
||||
|
||||
preferHostId := ""
|
||||
if guest.CpuNumaPin != nil {
|
||||
if resetCpuNumaPin {
|
||||
preferHostId = guest.HostId
|
||||
}
|
||||
|
||||
@@ -185,17 +185,27 @@ func (self *GuestSchedStartTask) ScheduleFailed(ctx context.Context, guest *mode
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) OnGuestMigrate(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
|
||||
self.SetStageComplete(ctx, nil)
|
||||
guest.GuestNonSchedStartTask(ctx, self.UserCred, nil, "")
|
||||
self.SetStage("OnGuestStarted", nil)
|
||||
|
||||
guest.GuestNonSchedStartTask(ctx, self.UserCred, self.Params, self.GetTaskId())
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) OnGuestMigrateFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
|
||||
self.TaskFailed(ctx, guest, data)
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) ScheduleSucc(ctx context.Context, guest *models.SGuest) {
|
||||
func (self *GuestSchedStartTask) OnGuestStarted(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
|
||||
self.SetStageComplete(ctx, nil)
|
||||
guest.GuestNonSchedStartTask(ctx, self.UserCred, self.Params, "")
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) OnGuestStartedFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) {
|
||||
self.TaskFailed(ctx, guest, data)
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) ScheduleSucc(ctx context.Context, guest *models.SGuest) {
|
||||
self.SetStage("OnGuestStarted", nil)
|
||||
|
||||
guest.GuestNonSchedStartTask(ctx, self.UserCred, self.Params, self.GetTaskId())
|
||||
}
|
||||
|
||||
func (self *GuestSchedStartTask) TaskFailed(ctx context.Context, guest *models.SGuest, reason jsonutils.JSONObject) {
|
||||
|
||||
Reference in New Issue
Block a user