From b456f585bb330e468ebc58e031dc8c13d851cd07 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Mon, 21 Mar 2022 18:13:41 +0800 Subject: [PATCH] fix(region): add host cpuset used cores --- pkg/apis/compute/guests.go | 5 +++-- pkg/compute/models/guest_actions.go | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/pkg/apis/compute/guests.go b/pkg/apis/compute/guests.go index 50a0cab127..b1e3e6fc7e 100644 --- a/pkg/apis/compute/guests.go +++ b/pkg/apis/compute/guests.go @@ -818,6 +818,7 @@ type ServerCPUSetRemoveResp struct { type ServerGetCPUSetCoresInput struct{} type ServerGetCPUSetCoresResp struct { - PinnedCores []int `json:"pinned_cores"` - HostCores []int `json:"host_cores"` + PinnedCores []int `json:"pinned_cores"` + HostCores []int `json:"host_cores"` + HostUsedCores []int `json:"host_used_cores"` } diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index d884c6ae5e..917517a9ca 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -5418,12 +5418,15 @@ func (self *SGuest) PerformCpuset(ctx context.Context, userCred mcclient.TokenCr } pinnedSets := sets.NewInt() - for _, pinned := range pinnedMap { + for key, pinned := range pinnedMap { + if key == self.GetId() { + continue + } pinnedSets.Insert(pinned...) } if pinnedSets.HasAny(data.CPUS...) { - return nil, httperrors.NewInputParameterError("More than one of input cores %v already setted in host %v", data.CPUS, pinnedSets.List()) + return nil, httperrors.NewInputParameterError("More than one of input cores %v already set in host %v", data.CPUS, pinnedSets.List()) } if err := self.SetMetadata(ctx, api.VM_METADATA_CGROUP_CPUSET, data, userCred); err != nil { @@ -5483,8 +5486,19 @@ func (self *SGuest) GetDetailsCpusetCores(ctx context.Context, userCred mcclient return nil, err } + host, _ := self.GetHost() + usedMap, err := host.GetPinnedCpusetCores(ctx, userCred) + if err != nil { + return nil, err + } + usedSets := sets.NewInt() + for _, used := range usedMap { + usedSets.Insert(used...) + } + resp := &api.ServerGetCPUSetCoresResp{ - HostCores: allCores, + HostCores: allCores, + HostUsedCores: usedSets.List(), } // fetch cpuset pinned