mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(scheduler): baremetal network free address out of count
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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{}),
|
||||
|
||||
@@ -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{}),
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user