Skip to content

Commit 16d7ecf

Browse files
Remove direct accesses to cache's node map
Signed-off-by: Aldo Culquicondor <[email protected]> Change-Id: Iebb22fc816926aaa1ddd1e4b2e52f335a275ffaa Signed-off-by: Aldo Culquicondor <[email protected]>
1 parent eb8b5a9 commit 16d7ecf

File tree

10 files changed

+28
-49
lines changed

10 files changed

+28
-49
lines changed

pkg/scheduler/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ go_test(
8484
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
8585
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
8686
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
87-
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
8887
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
8988
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
9089
"//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library",

pkg/scheduler/internal/cache/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ go_library(
1616
"//pkg/scheduler/metrics:go_default_library",
1717
"//pkg/util/node:go_default_library",
1818
"//staging/src/k8s.io/api/core/v1:go_default_library",
19-
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
2019
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
2120
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
2221
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",

pkg/scheduler/internal/cache/cache.go

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"time"
2323

2424
v1 "k8s.io/api/core/v1"
25-
"k8s.io/apimachinery/pkg/labels"
2625
"k8s.io/apimachinery/pkg/util/sets"
2726
"k8s.io/apimachinery/pkg/util/wait"
2827
utilfeature "k8s.io/apiserver/pkg/util/feature"
@@ -315,7 +314,9 @@ func (cache *schedulerCache) removeDeletedNodesFromSnapshot(snapshot *Snapshot)
315314
}
316315
}
317316

318-
func (cache *schedulerCache) ListPods(selector labels.Selector) ([]*v1.Pod, error) {
317+
// PodCount returns the number of pods in the cache (including those from deleted nodes).
318+
// DO NOT use outside of tests.
319+
func (cache *schedulerCache) PodCount() (int, error) {
319320
cache.mu.RLock()
320321
defer cache.mu.RUnlock()
321322
// podFilter is expected to return true for most or all of the pods. We
@@ -325,15 +326,11 @@ func (cache *schedulerCache) ListPods(selector labels.Selector) ([]*v1.Pod, erro
325326
for _, n := range cache.nodes {
326327
maxSize += len(n.info.Pods)
327328
}
328-
pods := make([]*v1.Pod, 0, maxSize)
329+
count := 0
329330
for _, n := range cache.nodes {
330-
for _, p := range n.info.Pods {
331-
if selector.Matches(labels.Set(p.Pod.Labels)) {
332-
pods = append(pods, p.Pod)
333-
}
334-
}
331+
count += len(n.info.Pods)
335332
}
336-
return pods, nil
333+
return count, nil
337334
}
338335

339336
func (cache *schedulerCache) AssumePod(pod *v1.Pod) error {
@@ -736,19 +733,6 @@ func (cache *schedulerCache) expirePod(key string, ps *podState) error {
736733
return nil
737734
}
738735

739-
// GetNodeInfo returns cached data for the node name.
740-
func (cache *schedulerCache) GetNodeInfo(nodeName string) (*v1.Node, error) {
741-
cache.mu.RLock()
742-
defer cache.mu.RUnlock()
743-
744-
n, ok := cache.nodes[nodeName]
745-
if !ok {
746-
return nil, fmt.Errorf("node %q not found in cache", nodeName)
747-
}
748-
749-
return n.info.Node(), nil
750-
}
751-
752736
// updateMetrics updates cache size metric values for pods, assumed pods, and nodes
753737
func (cache *schedulerCache) updateMetrics() {
754738
metrics.CacheSize.WithLabelValues("assumed_pods").Set(float64(len(cache.assumedPods)))

pkg/scheduler/internal/cache/cache_test.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1142,7 +1142,7 @@ func TestNodeOperators(t *testing.T) {
11421142
if err := cache.RemoveNode(node); err != nil {
11431143
t.Error(err)
11441144
}
1145-
if _, err := cache.GetNodeInfo(node.Name); err == nil {
1145+
if _, err := cache.getNodeInfo(node.Name); err == nil {
11461146
t.Errorf("The node %v should be removed.", node.Name)
11471147
}
11481148
// Check node is removed from nodeTree as well.
@@ -1798,3 +1798,16 @@ func isForgottenFromCache(p *v1.Pod, c *schedulerCache) error {
17981798
}
17991799
return nil
18001800
}
1801+
1802+
// getNodeInfo returns cached data for the node name.
1803+
func (cache *schedulerCache) getNodeInfo(nodeName string) (*v1.Node, error) {
1804+
cache.mu.RLock()
1805+
defer cache.mu.RUnlock()
1806+
1807+
n, ok := cache.nodes[nodeName]
1808+
if !ok {
1809+
return nil, fmt.Errorf("node %q not found in cache", nodeName)
1810+
}
1811+
1812+
return n.info.Node(), nil
1813+
}

pkg/scheduler/internal/cache/fake/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ go_library(
88
deps = [
99
"//pkg/scheduler/internal/cache:go_default_library",
1010
"//staging/src/k8s.io/api/core/v1:go_default_library",
11-
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
1211
],
1312
)
1413

pkg/scheduler/internal/cache/fake/fake_cache.go

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package fake
1818

1919
import (
2020
v1 "k8s.io/api/core/v1"
21-
"k8s.io/apimachinery/pkg/labels"
2221
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
2322
)
2423

@@ -78,20 +77,10 @@ func (c *Cache) UpdateSnapshot(snapshot *internalcache.Snapshot) error {
7877
return nil
7978
}
8079

81-
// ListPods is a fake method for testing.
82-
func (c *Cache) ListPods(s labels.Selector) ([]*v1.Pod, error) { return nil, nil }
80+
// PodCount is a fake method for testing.
81+
func (c *Cache) PodCount() (int, error) { return 0, nil }
8382

8483
// Dump is a fake method for testing.
8584
func (c *Cache) Dump() *internalcache.Dump {
8685
return &internalcache.Dump{}
8786
}
88-
89-
// GetNodeInfo is a fake method for testing.
90-
func (c *Cache) GetNodeInfo(nodeName string) (*v1.Node, error) {
91-
return nil, nil
92-
}
93-
94-
// ListNodes is a fake method for testing.
95-
func (c *Cache) ListNodes() []*v1.Node {
96-
return nil
97-
}

pkg/scheduler/internal/cache/interface.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package cache
1818

1919
import (
2020
"k8s.io/api/core/v1"
21-
"k8s.io/apimachinery/pkg/labels"
2221
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
2322
)
2423

@@ -57,8 +56,8 @@ import (
5756
// - Both "Expired" and "Deleted" are valid end states. In case of some problems, e.g. network issue,
5857
// a pod might have changed its state (e.g. added and deleted) without delivering notification to the cache.
5958
type Cache interface {
60-
// ListPods lists all pods in the cache.
61-
ListPods(selector labels.Selector) ([]*v1.Pod, error)
59+
// PodCount returns the number of pods in the cache (including those from deleted nodes).
60+
PodCount() (int, error)
6261

6362
// AssumePod assumes a pod scheduled and aggregates the pod's information into its node.
6463
// The implementation also decides the policy to expire pod before being confirmed (receiving Add event).

pkg/scheduler/scheduler_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import (
3636
eventsv1 "k8s.io/api/events/v1"
3737
"k8s.io/apimachinery/pkg/api/resource"
3838
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
39-
"k8s.io/apimachinery/pkg/labels"
4039
"k8s.io/apimachinery/pkg/runtime"
4140
"k8s.io/apimachinery/pkg/types"
4241
"k8s.io/apimachinery/pkg/util/sets"
@@ -527,12 +526,12 @@ func TestSchedulerNoPhantomPodAfterExpire(t *testing.T) {
527526
return
528527
default:
529528
}
530-
pods, err := scache.ListPods(labels.Everything())
529+
pods, err := scache.PodCount()
531530
if err != nil {
532531
errChan <- fmt.Errorf("cache.List failed: %v", err)
533532
return
534533
}
535-
if len(pods) == 0 {
534+
if pods == 0 {
536535
close(waitPodExpireChan)
537536
return
538537
}

test/integration/scheduler/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ go_library(
9696
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
9797
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
9898
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
99-
"//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library",
10099
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
101100
"//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library",
102101
"//staging/src/k8s.io/client-go/dynamic:go_default_library",

test/integration/scheduler/util.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
policy "k8s.io/api/policy/v1beta1"
2727
apierrors "k8s.io/apimachinery/pkg/api/errors"
2828
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29-
"k8s.io/apimachinery/pkg/labels"
3029
"k8s.io/apimachinery/pkg/util/wait"
3130
cacheddiscovery "k8s.io/client-go/discovery/cached/memory"
3231
"k8s.io/client-go/dynamic"
@@ -401,11 +400,11 @@ func waitForPDBsStable(testCtx *testutils.TestContext, pdbs []*policy.PodDisrupt
401400
// waitCachedPodsStable waits until scheduler cache has the given pods.
402401
func waitCachedPodsStable(testCtx *testutils.TestContext, pods []*v1.Pod) error {
403402
return wait.Poll(time.Second, 30*time.Second, func() (bool, error) {
404-
cachedPods, err := testCtx.Scheduler.SchedulerCache.ListPods(labels.Everything())
403+
cachedPods, err := testCtx.Scheduler.SchedulerCache.PodCount()
405404
if err != nil {
406405
return false, err
407406
}
408-
if len(pods) != len(cachedPods) {
407+
if len(pods) != cachedPods {
409408
return false, nil
410409
}
411410
for _, p := range pods {

0 commit comments

Comments
 (0)