fix(scheduler): baremetal network free address out of count

This commit is contained in:
Zexi Li
2021-06-29 20:24:35 +08:00
parent fd2e0f7ddf
commit c8facc9489
5 changed files with 39 additions and 18 deletions
+9 -1
View File
@@ -60,7 +60,10 @@ type SNetworkManager struct {
var NetworkManager *SNetworkManager
func init() {
func GetNetworkManager() *SNetworkManager {
if NetworkManager != nil {
return NetworkManager
}
NetworkManager = &SNetworkManager{
SSharableVirtualResourceBaseManager: db.NewSharableVirtualResourceBaseManager(
SNetwork{},
@@ -70,6 +73,11 @@ func init() {
),
}
NetworkManager.SetVirtualObject(NetworkManager)
return NetworkManager
}
func init() {
GetNetworkManager()
}
type SNetwork struct {
@@ -41,15 +41,22 @@ type NetworkPredicate struct {
networkFreePortCount map[string]int
}
func NewNetworkPredicate(getter INetworkNicCountGetter) *NetworkPredicate {
if getter == nil {
getter = models.NetworkManager
}
func NewNetworkPredicate() *NetworkPredicate {
return &NetworkPredicate{
NetworkNicCountGetter: getter,
NetworkNicCountGetter: nil,
networkFreePortCount: make(map[string]int),
}
}
func NewNetworkPredicateWithNicCounter() *NetworkPredicate {
return NewNetworkPredicate().WithNetworkCountGetter(models.GetNetworkManager())
}
func (p *NetworkPredicate) WithNetworkCountGetter(getter INetworkNicCountGetter) *NetworkPredicate {
p.NetworkNicCountGetter = getter
return p
}
func (p *NetworkPredicate) Name() string {
return "host_network"
}
@@ -57,6 +64,7 @@ func (p *NetworkPredicate) Name() string {
func (p *NetworkPredicate) Clone() core.FitPredicate {
return &NetworkPredicate{
NetworkNicCountGetter: p.NetworkNicCountGetter,
networkFreePortCount: p.networkFreePortCount,
}
}
@@ -75,14 +83,16 @@ func (p *NetworkPredicate) PreExecute(u *core.Unit, cs []core.Candidater) (bool,
networkIds.Insert(net.GetId())
}
}
netCounts, err := p.NetworkNicCountGetter.GetTotalNicCount(networkIds.UnsortedList())
if err != nil {
return false, errors.Wrap(err, "unable to GetTotalNicCount")
}
p.networkFreePortCount = map[string]int{}
for i := range cs {
for _, net := range cs[i].Getter().Networks() {
p.networkFreePortCount[net.Id] = net.GetTotalAddressCount() - netCounts[net.Id]
if p.NetworkNicCountGetter != nil {
netCounts, err := p.NetworkNicCountGetter.GetTotalNicCount(networkIds.UnsortedList())
if err != nil {
return false, errors.Wrap(err, "unable to GetTotalNicCount")
}
for i := range cs {
for _, net := range cs[i].Getter().Networks() {
p.networkFreePortCount[net.Id] = net.GetTotalAddressCount() - netCounts[net.Id]
}
}
}
@@ -266,7 +276,10 @@ func (p *NetworkPredicate) Execute(u *core.Unit, c core.Candidater) (bool, []cor
d := u.SchedData()
getFreePort := func(id string) int {
return p.networkFreePortCount[id] - c.Getter().GetPendingUsage().NetUsage.Get(id)
if _, ok := p.networkFreePortCount[id]; ok {
return p.networkFreePortCount[id] - c.Getter().GetPendingUsage().NetUsage.Get(id)
}
return c.Getter().GetFreePort(id)
}
for _, reqNet := range d.Networks {
+1 -1
View File
@@ -34,7 +34,7 @@ func baremetalPredicates() sets.String {
factory.RegisterFitPredicate("c-BaremetalCPUFilter", &predicatebm.CPUPredicate{}),
factory.RegisterFitPredicate("d-BaremetalMemoryFilter", &predicatebm.MemoryPredicate{}),
factory.RegisterFitPredicate("e-BaremetalStorageFilter", &predicatebm.StoragePredicate{}),
factory.RegisterFitPredicate("f-BaremetalNetFilter", predicates.NewNetworkPredicate(nil)),
factory.RegisterFitPredicate("f-BaremetalNetFilter", predicates.NewNetworkPredicate()),
factory.RegisterFitPredicate("g-BaremetalResourceTypeFilter", &predicates.ResourceTypePredicate{}),
factory.RegisterFitPredicate("h-DiskschedtagFilter", &predicates.DiskSchedtagPredicate{}),
factory.RegisterFitPredicate("i-NetschedtagFilter", &predicates.NetworkSchedtagPredicate{}),
+1 -1
View File
@@ -39,7 +39,7 @@ func defaultPredicates() sets.String {
factory.RegisterFitPredicate("g-GuestCPUFilter", &predicateguest.CPUPredicate{}),
factory.RegisterFitPredicate("h-GuestMemoryFilter", &predicateguest.MemoryPredicate{}),
factory.RegisterFitPredicate("i-GuestStorageFilter", &predicateguest.StoragePredicate{}),
factory.RegisterFitPredicate("j-GuestNetworkFilter", predicates.NewNetworkPredicate(nil)),
factory.RegisterFitPredicate("j-GuestNetworkFilter", predicates.NewNetworkPredicateWithNicCounter()),
factory.RegisterFitPredicate("k-GuestIsolatedDeviceFilter", &predicates.IsolatedDevicePredicate{}),
factory.RegisterFitPredicate("l-GuestResourceTypeFilter", &predicates.ResourceTypePredicate{}),
factory.RegisterFitPredicate("m-GuestDiskschedtagFilter", &predicates.DiskSchedtagPredicate{}),
+1 -1
View File
@@ -201,7 +201,7 @@ func buildScheduler(ctrl *gomock.Controller, networkNicCount map[string]int, pre
if networkNicGetter == nil {
fmt.Printf("networkNicGetter is nil")
}
ret["j-GuestNetworkFilter"] = pre.NewNetworkPredicate(networkNicGetter)
ret["j-GuestNetworkFilter"] = pre.NewNetworkPredicate().WithNetworkCountGetter(networkNicGetter)
return ret, nil
})
mockScheduler.EXPECT().PriorityConfigs().AnyTimes().DoAndReturn(func() ([]core.PriorityConfig, error) {