mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Merge pull request #85139 from ahg-g/ahg-snapshot2
Updated NewSnapshot interface to accept a NodeInfoMap
This commit is contained in:
commit
055daafe23
@ -355,7 +355,7 @@ func TestPredicateMetadata_AddRemovePod(t *testing.T) {
|
|||||||
allPodLister := fakelisters.PodLister(append(test.existingPods, test.addedPod))
|
allPodLister := fakelisters.PodLister(append(test.existingPods, test.addedPod))
|
||||||
// getMeta creates predicate meta data given the list of pods.
|
// getMeta creates predicate meta data given the list of pods.
|
||||||
getMeta := func(pods []*v1.Pod) (*predicateMetadata, map[string]*schedulernodeinfo.NodeInfo) {
|
getMeta := func(pods []*v1.Pod) (*predicateMetadata, map[string]*schedulernodeinfo.NodeInfo) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(pods, test.nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(pods, test.nodes))
|
||||||
_, precompute := NewServiceAffinityPredicate(s.NodeInfos(), s.Pods(), fakelisters.ServiceLister(test.services), nil)
|
_, precompute := NewServiceAffinityPredicate(s.NodeInfos(), s.Pods(), fakelisters.ServiceLister(test.services), nil)
|
||||||
RegisterPredicateMetadataProducer("ServiceAffinityMetaProducer", precompute)
|
RegisterPredicateMetadataProducer("ServiceAffinityMetaProducer", precompute)
|
||||||
factory := &MetadataProducerFactory{}
|
factory := &MetadataProducerFactory{}
|
||||||
@ -786,7 +786,7 @@ func TestGetTPMapMatchingIncomingAffinityAntiAffinity(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
l, _ := s.NodeInfos().List()
|
l, _ := s.NodeInfos().List()
|
||||||
gotAffinityPodsMaps, gotAntiAffinityPodsMaps, err := getTPMapMatchingIncomingAffinityAntiAffinity(tt.pod, l)
|
gotAffinityPodsMaps, gotAntiAffinityPodsMaps, err := getTPMapMatchingIncomingAffinityAntiAffinity(tt.pod, l)
|
||||||
if (err != nil) != tt.wantErr {
|
if (err != nil) != tt.wantErr {
|
||||||
@ -1182,7 +1182,7 @@ func TestGetTPMapMatchingSpreadConstraints(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
l, _ := s.NodeInfos().List()
|
l, _ := s.NodeInfos().List()
|
||||||
got, _ := getEvenPodsSpreadMetadata(tt.pod, l)
|
got, _ := getEvenPodsSpreadMetadata(tt.pod, l)
|
||||||
got.sortCriticalPaths()
|
got.sortCriticalPaths()
|
||||||
@ -1450,7 +1450,7 @@ func TestPodSpreadCache_addPod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
l, _ := s.NodeInfos().List()
|
l, _ := s.NodeInfos().List()
|
||||||
evenPodsSpreadMetadata, _ := getEvenPodsSpreadMetadata(tt.preemptor, l)
|
evenPodsSpreadMetadata, _ := getEvenPodsSpreadMetadata(tt.preemptor, l)
|
||||||
evenPodsSpreadMetadata.addPod(tt.addedPod, tt.preemptor, tt.nodes[tt.nodeIdx])
|
evenPodsSpreadMetadata.addPod(tt.addedPod, tt.preemptor, tt.nodes[tt.nodeIdx])
|
||||||
@ -1628,7 +1628,7 @@ func TestPodSpreadCache_removePod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
l, _ := s.NodeInfos().List()
|
l, _ := s.NodeInfos().List()
|
||||||
evenPodsSpreadMetadata, _ := getEvenPodsSpreadMetadata(tt.preemptor, l)
|
evenPodsSpreadMetadata, _ := getEvenPodsSpreadMetadata(tt.preemptor, l)
|
||||||
|
|
||||||
@ -1687,7 +1687,7 @@ func BenchmarkTestGetTPMapMatchingSpreadConstraints(b *testing.B) {
|
|||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
b.Run(tt.name, func(b *testing.B) {
|
b.Run(tt.name, func(b *testing.B) {
|
||||||
existingPods, allNodes, _ := st.MakeNodesAndPodsForEvenPodsSpread(tt.pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.filteredNodesNum)
|
existingPods, allNodes, _ := st.MakeNodesAndPodsForEvenPodsSpread(tt.pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.filteredNodesNum)
|
||||||
s := nodeinfosnapshot.NewSnapshot(existingPods, allNodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(existingPods, allNodes))
|
||||||
l, _ := s.NodeInfos().List()
|
l, _ := s.NodeInfos().List()
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
|
@ -1860,7 +1860,7 @@ func TestServiceAffinity(t *testing.T) {
|
|||||||
testIt := func(skipPrecompute bool) {
|
testIt := func(skipPrecompute bool) {
|
||||||
t.Run(fmt.Sprintf("%v/skipPrecompute/%v", test.name, skipPrecompute), func(t *testing.T) {
|
t.Run(fmt.Sprintf("%v/skipPrecompute/%v", test.name, skipPrecompute), func(t *testing.T) {
|
||||||
nodes := []*v1.Node{&node1, &node2, &node3, &node4, &node5}
|
nodes := []*v1.Node{&node1, &node2, &node3, &node4, &node5}
|
||||||
s := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
|
|
||||||
// Reimplementing the logic that the scheduler implements: Any time it makes a predicate, it registers any precomputations.
|
// Reimplementing the logic that the scheduler implements: Any time it makes a predicate, it registers any precomputations.
|
||||||
predicate, precompute := NewServiceAffinityPredicate(s.NodeInfos(), s.Pods(), fakelisters.ServiceLister(test.services), test.labels)
|
predicate, precompute := NewServiceAffinityPredicate(s.NodeInfos(), s.Pods(), fakelisters.ServiceLister(test.services), test.labels)
|
||||||
@ -2929,7 +2929,7 @@ func TestInterPodAffinity(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(test.pods, []*v1.Node{test.node})
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, []*v1.Node{test.node}))
|
||||||
|
|
||||||
fit := PodAffinityChecker{
|
fit := PodAffinityChecker{
|
||||||
nodeInfoLister: s.NodeInfos(),
|
nodeInfoLister: s.NodeInfos(),
|
||||||
@ -4025,7 +4025,7 @@ func TestInterPodAffinityWithMultipleNodes(t *testing.T) {
|
|||||||
|
|
||||||
for indexTest, test := range tests {
|
for indexTest, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
for indexNode, node := range test.nodes {
|
for indexNode, node := range test.nodes {
|
||||||
testFit := PodAffinityChecker{
|
testFit := PodAffinityChecker{
|
||||||
nodeInfoLister: snapshot.NodeInfos(),
|
nodeInfoLister: snapshot.NodeInfos(),
|
||||||
@ -4044,7 +4044,7 @@ func TestInterPodAffinityWithMultipleNodes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
affinity := test.pod.Spec.Affinity
|
affinity := test.pod.Spec.Affinity
|
||||||
if affinity != nil && affinity.NodeAffinity != nil {
|
if affinity != nil && affinity.NodeAffinity != nil {
|
||||||
s := nodeinfosnapshot.NewSnapshot(nil, []*v1.Node{node})
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, []*v1.Node{node}))
|
||||||
factory := &MetadataProducerFactory{}
|
factory := &MetadataProducerFactory{}
|
||||||
fits2, reasons, err := PodMatchNodeSelector(test.pod, factory.GetPredicateMetadata(test.pod, s), s.NodeInfoMap[node.Name])
|
fits2, reasons, err := PodMatchNodeSelector(test.pod, factory.GetPredicateMetadata(test.pod, s), s.NodeInfoMap[node.Name])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -4967,7 +4967,7 @@ func TestEvenPodsSpreadPredicate_SingleConstraint(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
factory := &MetadataProducerFactory{}
|
factory := &MetadataProducerFactory{}
|
||||||
meta := factory.GetPredicateMetadata(tt.pod, s)
|
meta := factory.GetPredicateMetadata(tt.pod, s)
|
||||||
for _, node := range tt.nodes {
|
for _, node := range tt.nodes {
|
||||||
@ -5161,7 +5161,7 @@ func TestEvenPodsSpreadPredicate_MultipleConstraints(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
s := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
factory := &MetadataProducerFactory{}
|
factory := &MetadataProducerFactory{}
|
||||||
meta := factory.GetPredicateMetadata(tt.pod, s)
|
meta := factory.GetPredicateMetadata(tt.pod, s)
|
||||||
for _, node := range tt.nodes {
|
for _, node := range tt.nodes {
|
||||||
|
@ -401,7 +401,7 @@ func TestBalancedResourceAllocation(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
if len(test.pod.Spec.Volumes) > 0 {
|
if len(test.pod.Spec.Volumes) > 0 {
|
||||||
maxVolumes := 5
|
maxVolumes := 5
|
||||||
for _, info := range snapshot.NodeInfoMap {
|
for _, info := range snapshot.NodeInfoMap {
|
||||||
|
@ -434,7 +434,7 @@ func TestCalculateEvenPodsSpreadPriority(t *testing.T) {
|
|||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
allNodes := append([]*v1.Node{}, tt.nodes...)
|
allNodes := append([]*v1.Node{}, tt.nodes...)
|
||||||
allNodes = append(allNodes, tt.failedNodes...)
|
allNodes = append(allNodes, tt.failedNodes...)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(tt.existingPods, allNodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, allNodes))
|
||||||
|
|
||||||
meta := &priorityMetadata{
|
meta := &priorityMetadata{
|
||||||
podTopologySpreadMap: buildPodTopologySpreadMap(tt.pod, tt.nodes, snapshot.NodeInfoList),
|
podTopologySpreadMap: buildPodTopologySpreadMap(tt.pod, tt.nodes, snapshot.NodeInfoList),
|
||||||
@ -497,7 +497,7 @@ func BenchmarkTestCalculateEvenPodsSpreadPriority(b *testing.B) {
|
|||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
b.Run(tt.name, func(b *testing.B) {
|
b.Run(tt.name, func(b *testing.B) {
|
||||||
existingPods, allNodes, filteredNodes := st.MakeNodesAndPodsForEvenPodsSpread(tt.pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.filteredNodesNum)
|
existingPods, allNodes, filteredNodes := st.MakeNodesAndPodsForEvenPodsSpread(tt.pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.filteredNodesNum)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(existingPods, allNodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(existingPods, allNodes))
|
||||||
meta := &priorityMetadata{
|
meta := &priorityMetadata{
|
||||||
podTopologySpreadMap: buildPodTopologySpreadMap(tt.pod, filteredNodes, snapshot.NodeInfoList),
|
podTopologySpreadMap: buildPodTopologySpreadMap(tt.pod, filteredNodes, snapshot.NodeInfoList),
|
||||||
}
|
}
|
||||||
|
@ -184,7 +184,7 @@ func TestImageLocalityPriority(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
list, err := runMapReducePriority(ImageLocalityPriorityMap, nil, &priorityMetadata{totalNumNodes: len(test.nodes)}, test.pod, snapshot, test.nodes)
|
list, err := runMapReducePriority(ImageLocalityPriorityMap, nil, &priorityMetadata{totalNumNodes: len(test.nodes)}, test.pod, snapshot, test.nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -515,7 +515,7 @@ func TestInterPodAffinityPriority(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
allNodes := append([]*v1.Node{}, test.nodes...)
|
allNodes := append([]*v1.Node{}, test.nodes...)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
|
|
||||||
meta := &priorityMetadata{
|
meta := &priorityMetadata{
|
||||||
topologyScore: buildTopologyPairToScore(test.pod, snapshot, allNodes, v1.DefaultHardPodAffinitySymmetricWeight),
|
topologyScore: buildTopologyPairToScore(test.pod, snapshot, allNodes, v1.DefaultHardPodAffinitySymmetricWeight),
|
||||||
@ -611,7 +611,7 @@ func TestHardPodAffinitySymmetricWeight(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
allNodes := append([]*v1.Node{}, test.nodes...)
|
allNodes := append([]*v1.Node{}, test.nodes...)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
|
|
||||||
meta := &priorityMetadata{
|
meta := &priorityMetadata{
|
||||||
topologyScore: buildTopologyPairToScore(test.pod, snapshot, allNodes, test.hardPodAffinityWeight),
|
topologyScore: buildTopologyPairToScore(test.pod, snapshot, allNodes, test.hardPodAffinityWeight),
|
||||||
@ -675,7 +675,7 @@ func BenchmarkInterPodAffinityPriority(b *testing.B) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
b.Run(test.name, func(b *testing.B) {
|
b.Run(test.name, func(b *testing.B) {
|
||||||
existingPods, allNodes := test.prepFunc(test.existingPodsNum, test.allNodesNum)
|
existingPods, allNodes := test.prepFunc(test.existingPodsNum, test.allNodesNum)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(existingPods, allNodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(existingPods, allNodes))
|
||||||
|
|
||||||
meta := &priorityMetadata{
|
meta := &priorityMetadata{
|
||||||
topologyScore: buildTopologyPairToScore(test.pod, snapshot, allNodes, v1.DefaultHardPodAffinitySymmetricWeight),
|
topologyScore: buildTopologyPairToScore(test.pod, snapshot, allNodes, v1.DefaultHardPodAffinitySymmetricWeight),
|
||||||
|
@ -253,7 +253,7 @@ func TestLeastRequested(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
list, err := runMapReducePriority(LeastRequestedPriorityMap, nil, nil, test.pod, snapshot, test.nodes)
|
list, err := runMapReducePriority(LeastRequestedPriorityMap, nil, nil, test.pod, snapshot, test.nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -210,7 +210,7 @@ func TestMostRequested(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
list, err := runMapReducePriority(MostRequestedPriorityMap, nil, nil, test.pod, snapshot, test.nodes)
|
list, err := runMapReducePriority(MostRequestedPriorityMap, nil, nil, test.pod, snapshot, test.nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -167,7 +167,7 @@ func TestNodeAffinityPriority(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(nil, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))
|
||||||
list, err := runMapReducePriority(CalculateNodeAffinityPriorityMap, CalculateNodeAffinityPriorityReduce, nil, test.pod, snapshot, test.nodes)
|
list, err := runMapReducePriority(CalculateNodeAffinityPriorityMap, CalculateNodeAffinityPriorityReduce, nil, test.pod, snapshot, test.nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -141,7 +141,7 @@ func TestNodePreferAvoidPriority(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(nil, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))
|
||||||
list, err := runMapReducePriority(CalculateNodePreferAvoidPodsPriorityMap, nil, nil, test.pod, snapshot, test.nodes)
|
list, err := runMapReducePriority(CalculateNodePreferAvoidPodsPriorityMap, nil, nil, test.pod, snapshot, test.nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -240,7 +240,7 @@ func TestRequestedToCapacityRatio(t *testing.T) {
|
|||||||
|
|
||||||
newPod := buildResourcesPod("", test.requested)
|
newPod := buildResourcesPod("", test.requested)
|
||||||
|
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(scheduledPods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(scheduledPods, nodes))
|
||||||
list, err := runMapReducePriority(RequestedToCapacityRatioResourceAllocationPriorityDefault().PriorityMap, nil, nil, newPod, snapshot, nodes)
|
list, err := runMapReducePriority(RequestedToCapacityRatioResourceAllocationPriorityDefault().PriorityMap, nil, nil, newPod, snapshot, nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
@ -386,7 +386,7 @@ func TestResourceBinPackingSingleExtended(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
functionShape, _ := NewFunctionShape([]FunctionShapePoint{{0, 0}, {100, 10}})
|
functionShape, _ := NewFunctionShape([]FunctionShapePoint{{0, 0}, {100, 10}})
|
||||||
resourceToWeightMap := ResourceToWeightMap{v1.ResourceName("intel.com/foo"): 1}
|
resourceToWeightMap := ResourceToWeightMap{v1.ResourceName("intel.com/foo"): 1}
|
||||||
prior := RequestedToCapacityRatioResourceAllocationPriority(functionShape, resourceToWeightMap)
|
prior := RequestedToCapacityRatioResourceAllocationPriority(functionShape, resourceToWeightMap)
|
||||||
@ -611,7 +611,7 @@ func TestResourceBinPackingMultipleExtended(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
functionShape, _ := NewFunctionShape([]FunctionShapePoint{{0, 0}, {100, 10}})
|
functionShape, _ := NewFunctionShape([]FunctionShapePoint{{0, 0}, {100, 10}})
|
||||||
resourceToWeightMap := ResourceToWeightMap{v1.ResourceName("intel.com/foo"): 3, v1.ResourceName("intel.com/bar"): 5}
|
resourceToWeightMap := ResourceToWeightMap{v1.ResourceName("intel.com/foo"): 3, v1.ResourceName("intel.com/bar"): 5}
|
||||||
prior := RequestedToCapacityRatioResourceAllocationPriority(functionShape, resourceToWeightMap)
|
prior := RequestedToCapacityRatioResourceAllocationPriority(functionShape, resourceToWeightMap)
|
||||||
|
@ -138,7 +138,7 @@ func TestResourceLimitsPriority(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(nil, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))
|
||||||
metadata := &priorityMetadata{
|
metadata := &priorityMetadata{
|
||||||
podLimits: getResourceLimits(test.pod),
|
podLimits: getResourceLimits(test.pod),
|
||||||
}
|
}
|
||||||
|
@ -339,7 +339,7 @@ func TestSelectorSpreadPriority(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
nodes := makeNodeList(test.nodes)
|
nodes := makeNodeList(test.nodes)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
selectorSpread := SelectorSpread{
|
selectorSpread := SelectorSpread{
|
||||||
serviceLister: fakelisters.ServiceLister(test.services),
|
serviceLister: fakelisters.ServiceLister(test.services),
|
||||||
controllerLister: fakelisters.ControllerLister(test.rcs),
|
controllerLister: fakelisters.ControllerLister(test.rcs),
|
||||||
@ -577,7 +577,7 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
nodes := makeLabeledNodeList(labeledNodes)
|
nodes := makeLabeledNodeList(labeledNodes)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
selectorSpread := SelectorSpread{
|
selectorSpread := SelectorSpread{
|
||||||
serviceLister: fakelisters.ServiceLister(test.services),
|
serviceLister: fakelisters.ServiceLister(test.services),
|
||||||
controllerLister: fakelisters.ControllerLister(test.rcs),
|
controllerLister: fakelisters.ControllerLister(test.rcs),
|
||||||
@ -771,7 +771,7 @@ func TestZoneSpreadPriority(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
nodes := makeLabeledNodeList(labeledNodes)
|
nodes := makeLabeledNodeList(labeledNodes)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
zoneSpread := ServiceAntiAffinity{podLister: snapshot.Pods(), serviceLister: fakelisters.ServiceLister(test.services), labels: []string{"zone"}}
|
zoneSpread := ServiceAntiAffinity{podLister: snapshot.Pods(), serviceLister: fakelisters.ServiceLister(test.services), labels: []string{"zone"}}
|
||||||
|
|
||||||
metaDataProducer := NewMetadataFactory(
|
metaDataProducer := NewMetadataFactory(
|
||||||
|
@ -55,7 +55,7 @@ func BenchmarkTestDefaultEvenPodsSpreadPriority(b *testing.B) {
|
|||||||
SpreadConstraint(1, v1.LabelHostname, softSpread, st.MakeLabelSelector().Exists("foo").Obj()).
|
SpreadConstraint(1, v1.LabelHostname, softSpread, st.MakeLabelSelector().Exists("foo").Obj()).
|
||||||
SpreadConstraint(1, v1.LabelZoneFailureDomain, softSpread, st.MakeLabelSelector().Exists("foo").Obj()).Obj()
|
SpreadConstraint(1, v1.LabelZoneFailureDomain, softSpread, st.MakeLabelSelector().Exists("foo").Obj()).Obj()
|
||||||
existingPods, allNodes, filteredNodes := st.MakeNodesAndPodsForEvenPodsSpread(pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.allNodesNum)
|
existingPods, allNodes, filteredNodes := st.MakeNodesAndPodsForEvenPodsSpread(pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.allNodesNum)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(existingPods, allNodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(existingPods, allNodes))
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
@ -84,7 +84,7 @@ func BenchmarkTestSelectorSpreadPriority(b *testing.B) {
|
|||||||
b.Run(tt.name, func(b *testing.B) {
|
b.Run(tt.name, func(b *testing.B) {
|
||||||
pod := st.MakePod().Name("p").Label("foo", "").Obj()
|
pod := st.MakePod().Name("p").Label("foo", "").Obj()
|
||||||
existingPods, allNodes, filteredNodes := st.MakeNodesAndPodsForEvenPodsSpread(pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.allNodesNum)
|
existingPods, allNodes, filteredNodes := st.MakeNodesAndPodsForEvenPodsSpread(pod.Labels, tt.existingPodsNum, tt.allNodesNum, tt.allNodesNum)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(existingPods, allNodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(existingPods, allNodes))
|
||||||
services := []*v1.Service{{Spec: v1.ServiceSpec{Selector: map[string]string{"foo": ""}}}}
|
services := []*v1.Service{{Spec: v1.ServiceSpec{Selector: map[string]string{"foo": ""}}}}
|
||||||
ss := SelectorSpread{
|
ss := SelectorSpread{
|
||||||
serviceLister: fake.ServiceLister(services),
|
serviceLister: fake.ServiceLister(services),
|
||||||
|
@ -227,7 +227,7 @@ func TestTaintAndToleration(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(nil, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))
|
||||||
list, err := runMapReducePriority(ComputeTaintTolerationPriorityMap, ComputeTaintTolerationPriorityReduce, nil, test.pod, snapshot, test.nodes)
|
list, err := runMapReducePriority(ComputeTaintTolerationPriorityMap, ComputeTaintTolerationPriorityReduce, nil, test.pod, snapshot, test.nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("unexpected error: %v", err)
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
@ -32,7 +32,7 @@ func TestEmptyPriorityMetadataProducer(t *testing.T) {
|
|||||||
fakeLabelSelector := labels.SelectorFromSet(labels.Set{"foo": "bar"})
|
fakeLabelSelector := labels.SelectorFromSet(labels.Set{"foo": "bar"})
|
||||||
fakeNodes := []*v1.Node{st.MakeNode().Name("node1").Obj(), st.MakeNode().Name("node-a").Obj()}
|
fakeNodes := []*v1.Node{st.MakeNode().Name("node1").Obj(), st.MakeNode().Name("node-a").Obj()}
|
||||||
|
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot([]*v1.Pod{fakePod}, fakeNodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap([]*v1.Pod{fakePod}, fakeNodes))
|
||||||
// Test EmptyMetadataProducer
|
// Test EmptyMetadataProducer
|
||||||
metadata := EmptyMetadataProducer(fakePod, fakeNodes, snapshot)
|
metadata := EmptyMetadataProducer(fakePod, fakeNodes, snapshot)
|
||||||
if metadata != nil {
|
if metadata != nil {
|
||||||
|
@ -996,7 +996,7 @@ func TestZeroRequest(t *testing.T) {
|
|||||||
pc := priorities.PriorityConfig{Map: selectorSpreadPriorityMap, Reduce: selectorSpreadPriorityReduce, Weight: 1}
|
pc := priorities.PriorityConfig{Map: selectorSpreadPriorityMap, Reduce: selectorSpreadPriorityReduce, Weight: 1}
|
||||||
priorityConfigs = append(priorityConfigs, pc)
|
priorityConfigs = append(priorityConfigs, pc)
|
||||||
|
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
|
|
||||||
metaDataProducer := priorities.NewMetadataFactory(
|
metaDataProducer := priorities.NewMetadataFactory(
|
||||||
informerFactory.Core().V1().Services().Lister(),
|
informerFactory.Core().V1().Services().Lister(),
|
||||||
@ -1449,7 +1449,7 @@ func TestSelectNodesForPreemption(t *testing.T) {
|
|||||||
test.predicates[algorithmpredicates.MatchInterPodAffinityPred] = algorithmpredicates.NewPodAffinityPredicate(n, p)
|
test.predicates[algorithmpredicates.MatchInterPodAffinityPred] = algorithmpredicates.NewPodAffinityPredicate(n, p)
|
||||||
}
|
}
|
||||||
|
|
||||||
g.nodeInfoSnapshot = nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
g.nodeInfoSnapshot = nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
// newnode simulate a case that a new node is added to the cluster, but nodeNameToInfo
|
// newnode simulate a case that a new node is added to the cluster, but nodeNameToInfo
|
||||||
// doesn't have it yet.
|
// doesn't have it yet.
|
||||||
newnode := makeNode("newnode", 1000*5, priorityutil.DefaultMemoryRequest*5)
|
newnode := makeNode("newnode", 1000*5, priorityutil.DefaultMemoryRequest*5)
|
||||||
@ -1673,7 +1673,7 @@ func TestPickOneNodeForPreemption(t *testing.T) {
|
|||||||
for _, n := range test.nodes {
|
for _, n := range test.nodes {
|
||||||
nodes = append(nodes, makeNode(n, priorityutil.DefaultMilliCPURequest*5, priorityutil.DefaultMemoryRequest*5))
|
nodes = append(nodes, makeNode(n, priorityutil.DefaultMilliCPURequest*5, priorityutil.DefaultMemoryRequest*5))
|
||||||
}
|
}
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
fwk, _ := framework.NewFramework(emptyPluginRegistry, nil, []schedulerapi.PluginConfig{}, framework.WithSnapshotSharedLister(snapshot))
|
fwk, _ := framework.NewFramework(emptyPluginRegistry, nil, []schedulerapi.PluginConfig{}, framework.WithSnapshotSharedLister(snapshot))
|
||||||
|
|
||||||
factory := algorithmpredicates.MetadataProducerFactory{}
|
factory := algorithmpredicates.MetadataProducerFactory{}
|
||||||
@ -1830,7 +1830,7 @@ func TestNodesWherePreemptionMightHelp(t *testing.T) {
|
|||||||
FailedPredicates: test.failedPredMap,
|
FailedPredicates: test.failedPredMap,
|
||||||
FilteredNodesStatuses: test.nodesStatuses,
|
FilteredNodesStatuses: test.nodesStatuses,
|
||||||
}
|
}
|
||||||
nodes := nodesWherePreemptionMightHelp(schedulernodeinfo.CreateNodeNameToInfoMap(nil, makeNodeList(nodeNames)), &fitErr)
|
nodes := nodesWherePreemptionMightHelp(nodeinfosnapshot.CreateNodeInfoMap(nil, makeNodeList(nodeNames)), &fitErr)
|
||||||
if len(test.expected) != len(nodes) {
|
if len(test.expected) != len(nodes) {
|
||||||
t.Errorf("number of nodes is not the same as expected. exptectd: %d, got: %d. Nodes: %v", len(test.expected), len(nodes), nodes)
|
t.Errorf("number of nodes is not the same as expected. exptectd: %d, got: %d. Nodes: %v", len(test.expected), len(nodes), nodes)
|
||||||
}
|
}
|
||||||
|
@ -342,7 +342,7 @@ func TestDefaultPodTopologySpreadScore(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
nodes := makeNodeList(test.nodes)
|
nodes := makeNodeList(test.nodes)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
|
|
||||||
mapFunction, reduceFunction := priorities.NewSelectorSpreadPriority(
|
mapFunction, reduceFunction := priorities.NewSelectorSpreadPriority(
|
||||||
@ -601,7 +601,7 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
nodes := makeLabeledNodeList(labeledNodes)
|
nodes := makeLabeledNodeList(labeledNodes)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
|
|
||||||
mapFunction, reduceFunction := priorities.NewSelectorSpreadPriority(
|
mapFunction, reduceFunction := priorities.NewSelectorSpreadPriority(
|
||||||
|
@ -201,7 +201,7 @@ func TestImageLocalityPriority(t *testing.T) {
|
|||||||
1,
|
1,
|
||||||
)
|
)
|
||||||
|
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(nil, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))
|
||||||
meta := metaDataProducer(test.pod, test.nodes, snapshot)
|
meta := metaDataProducer(test.pod, test.nodes, snapshot)
|
||||||
|
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
|
@ -735,7 +735,7 @@ func TestSingleNode(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, []*v1.Node{test.node})
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, []*v1.Node{test.node}))
|
||||||
factory := &predicates.MetadataProducerFactory{}
|
factory := &predicates.MetadataProducerFactory{}
|
||||||
meta := factory.GetPredicateMetadata(test.pod, snapshot)
|
meta := factory.GetPredicateMetadata(test.pod, snapshot)
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
@ -1436,7 +1436,7 @@ func TestMultipleNodes(t *testing.T) {
|
|||||||
|
|
||||||
for indexTest, test := range tests {
|
for indexTest, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
for indexNode, node := range test.nodes {
|
for indexNode, node := range test.nodes {
|
||||||
factory := &predicates.MetadataProducerFactory{}
|
factory := &predicates.MetadataProducerFactory{}
|
||||||
meta := factory.GetPredicateMetadata(test.pod, snapshot)
|
meta := factory.GetPredicateMetadata(test.pod, snapshot)
|
||||||
@ -1943,7 +1943,7 @@ func TestInterPodAffinityPriority(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
|
|
||||||
client := clientsetfake.NewSimpleClientset()
|
client := clientsetfake.NewSimpleClientset()
|
||||||
@ -2058,7 +2058,7 @@ func TestHardPodAffinitySymmetricWeight(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
|
|
||||||
client := clientsetfake.NewSimpleClientset()
|
client := clientsetfake.NewSimpleClientset()
|
||||||
|
@ -850,7 +850,7 @@ func TestNodeAffinityPriority(t *testing.T) {
|
|||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
|
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(nodeinfosnapshot.NewSnapshot(nil, test.nodes)))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))))
|
||||||
p, _ := New(nil, fh)
|
p, _ := New(nil, fh)
|
||||||
var gotList framework.NodeScoreList
|
var gotList framework.NodeScoreList
|
||||||
for _, n := range test.nodes {
|
for _, n := range test.nodes {
|
||||||
|
@ -227,7 +227,7 @@ func TestNodeLabelScore(t *testing.T) {
|
|||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
node := &v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1", Labels: map[string]string{"foo": "", "bar": ""}}}
|
node := &v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "machine1", Labels: map[string]string{"foo": "", "bar": ""}}}
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(nodeinfosnapshot.NewSnapshot(nil, []*v1.Node{node})))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, []*v1.Node{node}))))
|
||||||
args := &runtime.Unknown{Raw: []byte(test.rawArgs)}
|
args := &runtime.Unknown{Raw: []byte(test.rawArgs)}
|
||||||
p, err := New(args, fh)
|
p, err := New(args, fh)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -143,7 +143,7 @@ func TestNodePreferAvoidPods(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(nodeinfosnapshot.NewSnapshot(nil, test.nodes)))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))))
|
||||||
p, _ := New(nil, fh)
|
p, _ := New(nil, fh)
|
||||||
var gotList framework.NodeScoreList
|
var gotList framework.NodeScoreList
|
||||||
for _, n := range test.nodes {
|
for _, n := range test.nodes {
|
||||||
|
@ -379,7 +379,7 @@ func TestNodeResourcesBalancedAllocation(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
if len(test.pod.Spec.Volumes) > 0 {
|
if len(test.pod.Spec.Volumes) > 0 {
|
||||||
maxVolumes := 5
|
maxVolumes := 5
|
||||||
nodeInfoList, _ := snapshot.NodeInfos().List()
|
nodeInfoList, _ := snapshot.NodeInfos().List()
|
||||||
|
@ -233,7 +233,7 @@ func TestNodeResourcesLeastAllocated(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
p, _ := NewLeastAllocated(nil, fh)
|
p, _ := NewLeastAllocated(nil, fh)
|
||||||
for i := range test.nodes {
|
for i := range test.nodes {
|
||||||
|
@ -196,7 +196,7 @@ func TestNodeResourcesMostAllocated(t *testing.T) {
|
|||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, test.nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
p, _ := NewMostAllocated(nil, fh)
|
p, _ := NewMostAllocated(nil, fh)
|
||||||
for i := range test.nodes {
|
for i := range test.nodes {
|
||||||
|
@ -269,7 +269,7 @@ func TestPodTopologySpread_Filter_SingleConstraint(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
factory := &predicates.MetadataProducerFactory{}
|
factory := &predicates.MetadataProducerFactory{}
|
||||||
meta := factory.GetPredicateMetadata(tt.pod, snapshot)
|
meta := factory.GetPredicateMetadata(tt.pod, snapshot)
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
@ -467,7 +467,7 @@ func TestPodTopologySpread_Filter_MultipleConstraints(t *testing.T) {
|
|||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(tt.existingPods, tt.nodes))
|
||||||
factory := &predicates.MetadataProducerFactory{}
|
factory := &predicates.MetadataProducerFactory{}
|
||||||
meta := factory.GetPredicateMetadata(tt.pod, snapshot)
|
meta := factory.GetPredicateMetadata(tt.pod, snapshot)
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
|
@ -65,7 +65,7 @@ func TestRequestedToCapacityRatio(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.scheduledPods, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.scheduledPods, test.nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
args := &runtime.Unknown{Raw: []byte(`{"FunctionShape" : [{"Utilization" : 0, "Score" : 100}, {"Utilization" : 100, "Score" : 0}], "ResourceToWeightMap" : {"memory" : 1, "cpu" : 1}}`)}
|
args := &runtime.Unknown{Raw: []byte(`{"FunctionShape" : [{"Utilization" : 0, "Score" : 100}, {"Utilization" : 100, "Score" : 0}], "ResourceToWeightMap" : {"memory" : 1, "cpu" : 1}}`)}
|
||||||
p, _ := New(args, fh)
|
p, _ := New(args, fh)
|
||||||
|
@ -163,7 +163,7 @@ func TestServiceAffinity(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
nodes := []*v1.Node{&node1, &node2, &node3, &node4, &node5}
|
nodes := []*v1.Node{&node1, &node2, &node3, &node4, &node5}
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
|
|
||||||
predicate, precompute := predicates.NewServiceAffinityPredicate(snapshot.NodeInfos(), snapshot.Pods(), fakelisters.ServiceLister(test.services), test.labels)
|
predicate, precompute := predicates.NewServiceAffinityPredicate(snapshot.NodeInfos(), snapshot.Pods(), fakelisters.ServiceLister(test.services), test.labels)
|
||||||
predicates.RegisterPredicateMetadataProducer("ServiceAffinityMetaProducer", precompute)
|
predicates.RegisterPredicateMetadataProducer("ServiceAffinityMetaProducer", precompute)
|
||||||
@ -390,7 +390,7 @@ func TestServiceAffinityScore(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
nodes := makeLabeledNodeList(test.nodes)
|
nodes := makeLabeledNodeList(test.nodes)
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(test.pods, nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
serviceLister := fakelisters.ServiceLister(test.services)
|
serviceLister := fakelisters.ServiceLister(test.services)
|
||||||
priorityMapFunction, priorityReduceFunction := priorities.NewServiceAntiAffinityPriority(snapshot.Pods(), serviceLister, test.labels)
|
priorityMapFunction, priorityReduceFunction := priorities.NewServiceAntiAffinityPriority(snapshot.Pods(), serviceLister, test.labels)
|
||||||
|
@ -230,7 +230,7 @@ func TestTaintTolerationScore(t *testing.T) {
|
|||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
state := framework.NewCycleState()
|
state := framework.NewCycleState()
|
||||||
snapshot := nodeinfosnapshot.NewSnapshot(nil, test.nodes)
|
snapshot := nodeinfosnapshot.NewSnapshot(nodeinfosnapshot.CreateNodeInfoMap(nil, test.nodes))
|
||||||
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
fh, _ := framework.NewFramework(nil, nil, nil, framework.WithSnapshotSharedLister(snapshot))
|
||||||
|
|
||||||
p, _ := New(nil, fh)
|
p, _ := New(nil, fh)
|
||||||
|
@ -5,7 +5,6 @@ go_library(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"host_ports.go",
|
"host_ports.go",
|
||||||
"node_info.go",
|
"node_info.go",
|
||||||
"util.go",
|
|
||||||
],
|
],
|
||||||
importpath = "k8s.io/kubernetes/pkg/scheduler/nodeinfo",
|
importpath = "k8s.io/kubernetes/pkg/scheduler/nodeinfo",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
@ -15,7 +14,6 @@ go_library(
|
|||||||
"//pkg/scheduler/algorithm/priorities/util:go_default_library",
|
"//pkg/scheduler/algorithm/priorities/util:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
"//vendor/k8s.io/klog:go_default_library",
|
"//vendor/k8s.io/klog:go_default_library",
|
||||||
],
|
],
|
||||||
@ -26,7 +24,6 @@ go_test(
|
|||||||
srcs = [
|
srcs = [
|
||||||
"host_ports_test.go",
|
"host_ports_test.go",
|
||||||
"node_info_test.go",
|
"node_info_test.go",
|
||||||
"util_test.go",
|
|
||||||
],
|
],
|
||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
@ -35,7 +32,6 @@ go_test(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
|
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
|
||||||
],
|
],
|
||||||
|
@ -1,17 +1,4 @@
|
|||||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
|
||||||
|
|
||||||
go_library(
|
|
||||||
name = "go_default_library",
|
|
||||||
srcs = ["snapshot.go"],
|
|
||||||
importpath = "k8s.io/kubernetes/pkg/scheduler/nodeinfo/snapshot",
|
|
||||||
visibility = ["//visibility:public"],
|
|
||||||
deps = [
|
|
||||||
"//pkg/scheduler/listers:go_default_library",
|
|
||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
name = "package-srcs",
|
name = "package-srcs",
|
||||||
@ -26,3 +13,29 @@ filegroup(
|
|||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
go_test(
|
||||||
|
name = "go_default_test",
|
||||||
|
srcs = ["snapshot_test.go"],
|
||||||
|
embed = [":go_default_library"],
|
||||||
|
deps = [
|
||||||
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["snapshot.go"],
|
||||||
|
importpath = "k8s.io/kubernetes/pkg/scheduler/nodeinfo/snapshot",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
deps = [
|
||||||
|
"//pkg/scheduler/listers:go_default_library",
|
||||||
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
|
||||||
|
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
@ -14,13 +14,14 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package nodeinfo
|
package snapshot
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers"
|
schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers"
|
||||||
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
)
|
)
|
||||||
@ -47,10 +48,9 @@ func NewEmptySnapshot() *Snapshot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewSnapshot initializes a Snapshot struct and returns it.
|
// NewSnapshot initializes a Snapshot struct and returns it.
|
||||||
func NewSnapshot(pods []*v1.Pod, nodes []*v1.Node) *Snapshot {
|
func NewSnapshot(nodeInfoMap map[string]*schedulernodeinfo.NodeInfo) *Snapshot {
|
||||||
nodeInfoMap := schedulernodeinfo.CreateNodeNameToInfoMap(pods, nodes)
|
nodeInfoList := make([]*schedulernodeinfo.NodeInfo, 0, len(nodeInfoMap))
|
||||||
nodeInfoList := make([]*schedulernodeinfo.NodeInfo, 0, len(nodes))
|
havePodsWithAffinityNodeInfoList := make([]*schedulernodeinfo.NodeInfo, 0, len(nodeInfoMap))
|
||||||
havePodsWithAffinityNodeInfoList := make([]*schedulernodeinfo.NodeInfo, 0, len(nodes))
|
|
||||||
for _, v := range nodeInfoMap {
|
for _, v := range nodeInfoMap {
|
||||||
nodeInfoList = append(nodeInfoList, v)
|
nodeInfoList = append(nodeInfoList, v)
|
||||||
if len(v.PodsWithAffinity()) > 0 {
|
if len(v.PodsWithAffinity()) > 0 {
|
||||||
@ -66,6 +66,62 @@ func NewSnapshot(pods []*v1.Pod, nodes []*v1.Node) *Snapshot {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateNodeInfoMap obtains a list of pods and pivots that list into a map where the keys are node names
|
||||||
|
// and the values are the aggregated information for that node.
|
||||||
|
func CreateNodeInfoMap(pods []*v1.Pod, nodes []*v1.Node) map[string]*schedulernodeinfo.NodeInfo {
|
||||||
|
nodeNameToInfo := make(map[string]*schedulernodeinfo.NodeInfo)
|
||||||
|
for _, pod := range pods {
|
||||||
|
nodeName := pod.Spec.NodeName
|
||||||
|
if _, ok := nodeNameToInfo[nodeName]; !ok {
|
||||||
|
nodeNameToInfo[nodeName] = schedulernodeinfo.NewNodeInfo()
|
||||||
|
}
|
||||||
|
nodeNameToInfo[nodeName].AddPod(pod)
|
||||||
|
}
|
||||||
|
imageExistenceMap := createImageExistenceMap(nodes)
|
||||||
|
|
||||||
|
for _, node := range nodes {
|
||||||
|
if _, ok := nodeNameToInfo[node.Name]; !ok {
|
||||||
|
nodeNameToInfo[node.Name] = schedulernodeinfo.NewNodeInfo()
|
||||||
|
}
|
||||||
|
nodeInfo := nodeNameToInfo[node.Name]
|
||||||
|
nodeInfo.SetNode(node)
|
||||||
|
nodeInfo.SetImageStates(getNodeImageStates(node, imageExistenceMap))
|
||||||
|
}
|
||||||
|
return nodeNameToInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
// getNodeImageStates returns the given node's image states based on the given imageExistence map.
|
||||||
|
func getNodeImageStates(node *v1.Node, imageExistenceMap map[string]sets.String) map[string]*schedulernodeinfo.ImageStateSummary {
|
||||||
|
imageStates := make(map[string]*schedulernodeinfo.ImageStateSummary)
|
||||||
|
|
||||||
|
for _, image := range node.Status.Images {
|
||||||
|
for _, name := range image.Names {
|
||||||
|
imageStates[name] = &schedulernodeinfo.ImageStateSummary{
|
||||||
|
Size: image.SizeBytes,
|
||||||
|
NumNodes: len(imageExistenceMap[name]),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return imageStates
|
||||||
|
}
|
||||||
|
|
||||||
|
// createImageExistenceMap returns a map recording on which nodes the images exist, keyed by the images' names.
|
||||||
|
func createImageExistenceMap(nodes []*v1.Node) map[string]sets.String {
|
||||||
|
imageExistenceMap := make(map[string]sets.String)
|
||||||
|
for _, node := range nodes {
|
||||||
|
for _, image := range node.Status.Images {
|
||||||
|
for _, name := range image.Names {
|
||||||
|
if _, ok := imageExistenceMap[name]; !ok {
|
||||||
|
imageExistenceMap[name] = sets.NewString(node.Name)
|
||||||
|
} else {
|
||||||
|
imageExistenceMap[name].Insert(node.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return imageExistenceMap
|
||||||
|
}
|
||||||
|
|
||||||
// Pods returns a PodLister
|
// Pods returns a PodLister
|
||||||
func (s *Snapshot) Pods() schedulerlisters.PodLister {
|
func (s *Snapshot) Pods() schedulerlisters.PodLister {
|
||||||
return &podLister{snapshot: s}
|
return &podLister{snapshot: s}
|
||||||
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package nodeinfo
|
package snapshot
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -23,6 +23,7 @@ import (
|
|||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
|
||||||
)
|
)
|
||||||
|
|
||||||
const mb int64 = 1024 * 1024
|
const mb int64 = 1024 * 1024
|
||||||
@ -31,7 +32,7 @@ func TestGetNodeImageStates(t *testing.T) {
|
|||||||
tests := []struct {
|
tests := []struct {
|
||||||
node *v1.Node
|
node *v1.Node
|
||||||
imageExistenceMap map[string]sets.String
|
imageExistenceMap map[string]sets.String
|
||||||
expected map[string]*ImageStateSummary
|
expected map[string]*schedulernodeinfo.ImageStateSummary
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
node: &v1.Node{
|
node: &v1.Node{
|
||||||
@ -57,7 +58,7 @@ func TestGetNodeImageStates(t *testing.T) {
|
|||||||
"gcr.io/10:v1": sets.NewString("node-0", "node-1"),
|
"gcr.io/10:v1": sets.NewString("node-0", "node-1"),
|
||||||
"gcr.io/200:v1": sets.NewString("node-0"),
|
"gcr.io/200:v1": sets.NewString("node-0"),
|
||||||
},
|
},
|
||||||
expected: map[string]*ImageStateSummary{
|
expected: map[string]*schedulernodeinfo.ImageStateSummary{
|
||||||
"gcr.io/10:v1": {
|
"gcr.io/10:v1": {
|
||||||
Size: int64(10 * mb),
|
Size: int64(10 * mb),
|
||||||
NumNodes: 2,
|
NumNodes: 2,
|
||||||
@ -77,7 +78,7 @@ func TestGetNodeImageStates(t *testing.T) {
|
|||||||
"gcr.io/10:v1": sets.NewString("node-1"),
|
"gcr.io/10:v1": sets.NewString("node-1"),
|
||||||
"gcr.io/200:v1": sets.NewString(),
|
"gcr.io/200:v1": sets.NewString(),
|
||||||
},
|
},
|
||||||
expected: map[string]*ImageStateSummary{},
|
expected: map[string]*schedulernodeinfo.ImageStateSummary{},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2015 The Kubernetes Authors.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package nodeinfo
|
|
||||||
|
|
||||||
import (
|
|
||||||
"k8s.io/api/core/v1"
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
|
||||||
)
|
|
||||||
|
|
||||||
// CreateNodeNameToInfoMap obtains a list of pods and pivots that list into a map where the keys are node names
|
|
||||||
// and the values are the aggregated information for that node.
|
|
||||||
func CreateNodeNameToInfoMap(pods []*v1.Pod, nodes []*v1.Node) map[string]*NodeInfo {
|
|
||||||
nodeNameToInfo := make(map[string]*NodeInfo)
|
|
||||||
for _, pod := range pods {
|
|
||||||
nodeName := pod.Spec.NodeName
|
|
||||||
if _, ok := nodeNameToInfo[nodeName]; !ok {
|
|
||||||
nodeNameToInfo[nodeName] = NewNodeInfo()
|
|
||||||
}
|
|
||||||
nodeNameToInfo[nodeName].AddPod(pod)
|
|
||||||
}
|
|
||||||
imageExistenceMap := createImageExistenceMap(nodes)
|
|
||||||
|
|
||||||
for _, node := range nodes {
|
|
||||||
if _, ok := nodeNameToInfo[node.Name]; !ok {
|
|
||||||
nodeNameToInfo[node.Name] = NewNodeInfo()
|
|
||||||
}
|
|
||||||
nodeInfo := nodeNameToInfo[node.Name]
|
|
||||||
nodeInfo.SetNode(node)
|
|
||||||
nodeInfo.imageStates = getNodeImageStates(node, imageExistenceMap)
|
|
||||||
}
|
|
||||||
return nodeNameToInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
// getNodeImageStates returns the given node's image states based on the given imageExistence map.
|
|
||||||
func getNodeImageStates(node *v1.Node, imageExistenceMap map[string]sets.String) map[string]*ImageStateSummary {
|
|
||||||
imageStates := make(map[string]*ImageStateSummary)
|
|
||||||
|
|
||||||
for _, image := range node.Status.Images {
|
|
||||||
for _, name := range image.Names {
|
|
||||||
imageStates[name] = &ImageStateSummary{
|
|
||||||
Size: image.SizeBytes,
|
|
||||||
NumNodes: len(imageExistenceMap[name]),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return imageStates
|
|
||||||
}
|
|
||||||
|
|
||||||
// createImageExistenceMap returns a map recording on which nodes the images exist, keyed by the images' names.
|
|
||||||
func createImageExistenceMap(nodes []*v1.Node) map[string]sets.String {
|
|
||||||
imageExistenceMap := make(map[string]sets.String)
|
|
||||||
for _, node := range nodes {
|
|
||||||
for _, image := range node.Status.Images {
|
|
||||||
for _, name := range image.Names {
|
|
||||||
if _, ok := imageExistenceMap[name]; !ok {
|
|
||||||
imageExistenceMap[name] = sets.NewString(node.Name)
|
|
||||||
} else {
|
|
||||||
imageExistenceMap[name].Insert(node.Name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return imageExistenceMap
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user