mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-13 13:55:41 +00:00
Merge pull request #123609 from veshij/fix
[kubernetes/scheduler] use lockless diagnosis collection in findNodes…
This commit is contained in:
commit
6c8dc1d1ed
@ -595,10 +595,15 @@ func (sched *Scheduler) findNodesThatPassFilters(
|
|||||||
}
|
}
|
||||||
|
|
||||||
errCh := parallelize.NewErrorChannel()
|
errCh := parallelize.NewErrorChannel()
|
||||||
var statusesLock sync.Mutex
|
|
||||||
var feasibleNodesLen int32
|
var feasibleNodesLen int32
|
||||||
ctx, cancel := context.WithCancel(ctx)
|
ctx, cancel := context.WithCancel(ctx)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
type nodeStatus struct {
|
||||||
|
node string
|
||||||
|
status *framework.Status
|
||||||
|
}
|
||||||
|
result := make([]*nodeStatus, numAllNodes)
|
||||||
checkNode := func(i int) {
|
checkNode := func(i int) {
|
||||||
// We check the nodes starting from where we left off in the previous scheduling cycle,
|
// We check the nodes starting from where we left off in the previous scheduling cycle,
|
||||||
// this is to make sure all nodes have the same chance of being examined across pods.
|
// this is to make sure all nodes have the same chance of being examined across pods.
|
||||||
@ -617,10 +622,7 @@ func (sched *Scheduler) findNodesThatPassFilters(
|
|||||||
feasibleNodes[length-1] = nodeInfo
|
feasibleNodes[length-1] = nodeInfo
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
statusesLock.Lock()
|
result[i] = &nodeStatus{node: nodeInfo.Node().Name, status: status}
|
||||||
diagnosis.NodeToStatusMap[nodeInfo.Node().Name] = status
|
|
||||||
diagnosis.AddPluginStatus(status)
|
|
||||||
statusesLock.Unlock()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -637,6 +639,13 @@ func (sched *Scheduler) findNodesThatPassFilters(
|
|||||||
// are found.
|
// are found.
|
||||||
fwk.Parallelizer().Until(ctx, numAllNodes, checkNode, metrics.Filter)
|
fwk.Parallelizer().Until(ctx, numAllNodes, checkNode, metrics.Filter)
|
||||||
feasibleNodes = feasibleNodes[:feasibleNodesLen]
|
feasibleNodes = feasibleNodes[:feasibleNodesLen]
|
||||||
|
for _, item := range result {
|
||||||
|
if item == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
diagnosis.NodeToStatusMap[item.node] = item.status
|
||||||
|
diagnosis.AddPluginStatus(item.status)
|
||||||
|
}
|
||||||
if err := errCh.ReceiveError(); err != nil {
|
if err := errCh.ReceiveError(); err != nil {
|
||||||
statusCode = framework.Error
|
statusCode = framework.Error
|
||||||
return feasibleNodes, err
|
return feasibleNodes, err
|
||||||
|
Loading…
Reference in New Issue
Block a user