From 7787ebc85b87eb7bc00f234f4e52eed3d987d5dd Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Wed, 27 May 2020 14:19:38 +0200 Subject: [PATCH] Revert "Revert "Rely on default watch cache capacity and ignore its requested size"" --- .../k8s.io/apiserver/pkg/storage/cacher/cacher.go | 4 +++- .../apiserver/pkg/storage/cacher/watch_cache.go | 14 ++++++-------- .../pkg/storage/cacher/watch_cache_test.go | 9 ++++++++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go b/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go index 273fcf847d3..aa1221d486a 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go @@ -61,6 +61,8 @@ const ( // Config contains the configuration for a given Cache. type Config struct { // Maximum size of the history cached in memory. + // + // DEPRECATED: Cache capacity is dynamic and this field is no longer used. CacheCapacity int // An underlying storage.Interface. @@ -357,7 +359,7 @@ func NewCacherFromConfig(config Config) (*Cacher, error) { } watchCache := newWatchCache( - config.CacheCapacity, config.KeyFunc, cacher.processEvent, config.GetAttrsFunc, config.Versioner, config.Indexers, objType) + config.KeyFunc, cacher.processEvent, config.GetAttrsFunc, config.Versioner, config.Indexers, objType) listerWatcher := NewCacherListerWatcher(config.Storage, config.ResourcePrefix, config.NewListFunc) reflectorName := "storage/cacher.go:" + config.ResourcePrefix diff --git a/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go b/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go index 6fb84443d6a..4235f061627 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache.go @@ -193,7 +193,6 @@ type watchCache struct { } func newWatchCache( - capacity int, keyFunc func(runtime.Object) (string, error), eventHandler func(*watchCacheEvent), getAttrsFunc func(runtime.Object) (labels.Set, fields.Set, error), @@ -201,13 +200,12 @@ func newWatchCache( indexers *cache.Indexers, objectType reflect.Type) *watchCache { wc := &watchCache{ - capacity: capacity, - keyFunc: keyFunc, - getAttrsFunc: getAttrsFunc, - cache: make([]*watchCacheEvent, capacity), - // TODO get rid of them once we stop passing capacity as a parameter to watch cache. - lowerBoundCapacity: min(capacity, defaultLowerBoundCapacity), - upperBoundCapacity: max(capacity, defaultUpperBoundCapacity), + capacity: defaultLowerBoundCapacity, + keyFunc: keyFunc, + getAttrsFunc: getAttrsFunc, + cache: make([]*watchCacheEvent, defaultLowerBoundCapacity), + lowerBoundCapacity: defaultLowerBoundCapacity, + upperBoundCapacity: defaultUpperBoundCapacity, startIndex: 0, endIndex: 0, store: cache.NewIndexer(storeElementKey, storeElementIndexers(indexers)), diff --git a/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache_test.go b/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache_test.go index 86b573f323f..dde7d3b3c5b 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/cacher/watch_cache_test.go @@ -81,7 +81,14 @@ func newTestWatchCache(capacity int, indexers *cache.Indexers) *watchCache { } versioner := etcd3.APIObjectVersioner{} mockHandler := func(*watchCacheEvent) {} - wc := newWatchCache(capacity, keyFunc, mockHandler, getAttrsFunc, versioner, indexers, reflect.TypeOf(&example.Pod{})) + wc := newWatchCache(keyFunc, mockHandler, getAttrsFunc, versioner, indexers, reflect.TypeOf(&example.Pod{})) + // To preserve behavior of tests that assume a given capacity, + // resize it to th expected size. + wc.capacity = capacity + wc.cache = make([]*watchCacheEvent, capacity) + wc.lowerBoundCapacity = min(capacity, defaultLowerBoundCapacity) + wc.upperBoundCapacity = max(capacity, defaultUpperBoundCapacity) + wc.clock = clock.NewFakeClock(time.Now()) return wc }