mirror of https://github.com/k3s-io/k3s
Merge pull request #71063 from Huang-Wei/nodeinfo-clone-panic
fix a scheduler panic due to internal cache inconsistencypull/58/head
commit
7e621ccb08
|
@ -895,7 +895,6 @@ func selectNodesForPreemption(pod *v1.Pod,
|
||||||
queue internalqueue.SchedulingQueue,
|
queue internalqueue.SchedulingQueue,
|
||||||
pdbs []*policy.PodDisruptionBudget,
|
pdbs []*policy.PodDisruptionBudget,
|
||||||
) (map[*v1.Node]*schedulerapi.Victims, error) {
|
) (map[*v1.Node]*schedulerapi.Victims, error) {
|
||||||
|
|
||||||
nodeToVictims := map[*v1.Node]*schedulerapi.Victims{}
|
nodeToVictims := map[*v1.Node]*schedulerapi.Victims{}
|
||||||
var resultLock sync.Mutex
|
var resultLock sync.Mutex
|
||||||
|
|
||||||
|
@ -984,6 +983,9 @@ func selectVictimsOnNode(
|
||||||
queue internalqueue.SchedulingQueue,
|
queue internalqueue.SchedulingQueue,
|
||||||
pdbs []*policy.PodDisruptionBudget,
|
pdbs []*policy.PodDisruptionBudget,
|
||||||
) ([]*v1.Pod, int, bool) {
|
) ([]*v1.Pod, int, bool) {
|
||||||
|
if nodeInfo == nil {
|
||||||
|
return nil, 0, false
|
||||||
|
}
|
||||||
potentialVictims := util.SortableList{CompFunc: util.HigherPriorityPod}
|
potentialVictims := util.SortableList{CompFunc: util.HigherPriorityPod}
|
||||||
nodeInfoCopy := nodeInfo.Clone()
|
nodeInfoCopy := nodeInfo.Clone()
|
||||||
|
|
||||||
|
|
|
@ -960,6 +960,11 @@ func TestSelectNodesForPreemption(t *testing.T) {
|
||||||
test.predicates[algorithmpredicates.MatchInterPodAffinityPred] = algorithmpredicates.NewPodAffinityPredicate(FakeNodeInfo(*nodes[0]), schedulertesting.FakePodLister(test.pods))
|
test.predicates[algorithmpredicates.MatchInterPodAffinityPred] = algorithmpredicates.NewPodAffinityPredicate(FakeNodeInfo(*nodes[0]), schedulertesting.FakePodLister(test.pods))
|
||||||
}
|
}
|
||||||
nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nodes)
|
nodeNameToInfo := schedulercache.CreateNodeNameToInfoMap(test.pods, nodes)
|
||||||
|
// newnode simulate a case that a new node is added to the cluster, but nodeNameToInfo
|
||||||
|
// doesn't have it yet.
|
||||||
|
newnode := makeNode("newnode", 1000*5, priorityutil.DefaultMemoryRequest*5)
|
||||||
|
newnode.ObjectMeta.Labels = map[string]string{"hostname": "newnode"}
|
||||||
|
nodes = append(nodes, newnode)
|
||||||
nodeToPods, err := selectNodesForPreemption(test.pod, nodeNameToInfo, nodes, test.predicates, PredicateMetadata, nil, nil)
|
nodeToPods, err := selectNodesForPreemption(test.pod, nodeNameToInfo, nodes, test.predicates, PredicateMetadata, nil, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
|
Loading…
Reference in New Issue