diff --git a/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree.go b/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree.go index 021a3b12f10..9908e2f64b8 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree.go @@ -435,6 +435,16 @@ func newStoreSnapshotter() *storeSnapshotter { return s } +var _ Snapshotter = (*storeSnapshotter)(nil) + +type Snapshotter interface { + Reset() + GetLessOrEqual(rv uint64) (orderedLister, bool) + Add(rv uint64, indexer orderedLister) + RemoveLess(rv uint64) + Len() int +} + type storeSnapshotter struct { mux sync.RWMutex snapshots *btree.BTreeG[rvSnapshot] @@ -486,3 +496,10 @@ func (s *storeSnapshotter) RemoveLess(rv uint64) { s.snapshots.DeleteMin() } } + +func (s *storeSnapshotter) Len() int { + s.mux.RLock() + defer s.mux.RUnlock() + + return s.snapshots.Len() +} diff --git a/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree_test.go b/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree_test.go index 185c433956c..b461fe3b1b7 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/cacher/store_btree_test.go @@ -137,3 +137,22 @@ func (f fakeOrderedLister) ListPrefix(prefixKey, continueKey string) []interface return nil } func (f fakeOrderedLister) Count(prefixKey, continueKey string) int { return 0 } + +type fakeSnapshotter struct { + getLessOrEqual func(rv uint64) (orderedLister, bool) +} + +var _ Snapshotter = (*fakeSnapshotter)(nil) + +func (f *fakeSnapshotter) Reset() {} +func (f *fakeSnapshotter) GetLessOrEqual(rv uint64) (orderedLister, bool) { + if f.getLessOrEqual == nil { + return nil, false + } + return f.getLessOrEqual(rv) +} +func (f *fakeSnapshotter) Add(rv uint64, indexer orderedLister) {} +func (f *fakeSnapshotter) RemoveLess(rv uint64) {} +func (f *fakeSnapshotter) Len() int { + return 0 +} 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 771af215383..908081efb95 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 @@ -154,7 +154,7 @@ type watchCache struct { waitingUntilFresh *progress.ConditionalProgressRequester // Stores previous snapshots of orderedLister to allow serving requests from previous revisions. - snapshots *storeSnapshotter + snapshots Snapshotter } func newWatchCache( 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 5c1db0e4540..20a76bbec69 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 @@ -1363,7 +1363,7 @@ func TestCacheSnapshots(t *testing.T) { clock.Step(DefaultEventFreshDuration + 1) require.NoError(t, store.Update(makeTestPod("foo", 500))) assert.Equal(t, 1, store.capacity) - assert.Equal(t, 1, store.snapshots.snapshots.Len()) + assert.Equal(t, 1, store.snapshots.Len()) _, found = store.snapshots.GetLessOrEqual(499) assert.False(t, found, "Expected overfilled cache to delete events below 500") @@ -1377,7 +1377,7 @@ func TestCacheSnapshots(t *testing.T) { t.Log("Add event to force capacity upsize") require.NoError(t, store.Update(makeTestPod("foo", 600))) assert.Equal(t, 2, store.capacity) - assert.Equal(t, 2, store.snapshots.snapshots.Len()) + assert.Equal(t, 2, store.snapshots.Len()) t.Log("Test cache on rev 600") lister, found = store.snapshots.GetLessOrEqual(600)