Merge pull request #129852 from p0lyn0mial/upstream-clock-test-cache
cacher: decrease the running time of TestConsistentReadFallback Kubernetes-commit: e279ae43358b4a95773647ff7644e9585201208d
This commit is contained in:
commit
35a4ee03bf
4
go.mod
4
go.mod
|
@ -52,8 +52,8 @@ require (
|
||||||
gopkg.in/go-jose/go-jose.v2 v2.6.3
|
gopkg.in/go-jose/go-jose.v2 v2.6.3
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
||||||
k8s.io/api v0.0.0-20250211114750-4629116ef3ab
|
k8s.io/api v0.0.0-20250211114750-4629116ef3ab
|
||||||
k8s.io/apimachinery v0.0.0-20250211114440-46c230ea8d65
|
k8s.io/apimachinery v0.0.0-20250214214420-47e7fa9a40a2
|
||||||
k8s.io/client-go v0.0.0-20250211115216-8683d2da3be9
|
k8s.io/client-go v0.0.0-20250215195049-90ccd59ab165
|
||||||
k8s.io/component-base v0.0.0-20250206205508-05a58ccfe08d
|
k8s.io/component-base v0.0.0-20250206205508-05a58ccfe08d
|
||||||
k8s.io/klog/v2 v2.130.1
|
k8s.io/klog/v2 v2.130.1
|
||||||
k8s.io/kms v0.0.0-20250106203549-2ea9aec44ce9
|
k8s.io/kms v0.0.0-20250106203549-2ea9aec44ce9
|
||||||
|
|
8
go.sum
8
go.sum
|
@ -365,10 +365,10 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
k8s.io/api v0.0.0-20250211114750-4629116ef3ab h1:bBsQSUPkp7s90RsTrNPfVKWOeX1jqXxYDgnoc1bjs8Y=
|
k8s.io/api v0.0.0-20250211114750-4629116ef3ab h1:bBsQSUPkp7s90RsTrNPfVKWOeX1jqXxYDgnoc1bjs8Y=
|
||||||
k8s.io/api v0.0.0-20250211114750-4629116ef3ab/go.mod h1:9+9XPWTbyV1YwAc5YizzbMHBe4gp7BY2PPZ3+DxXjxw=
|
k8s.io/api v0.0.0-20250211114750-4629116ef3ab/go.mod h1:9+9XPWTbyV1YwAc5YizzbMHBe4gp7BY2PPZ3+DxXjxw=
|
||||||
k8s.io/apimachinery v0.0.0-20250211114440-46c230ea8d65 h1:RADrjyqn52TmFg79piA2+zmjMJYBRxeR65d4YnqNhQE=
|
k8s.io/apimachinery v0.0.0-20250214214420-47e7fa9a40a2 h1:+Wh461h0wCf5qF35OJaZlyItfrbgmuRpIcPdohK3qNQ=
|
||||||
k8s.io/apimachinery v0.0.0-20250211114440-46c230ea8d65/go.mod h1:pvurfgWU15pkR11HFlMI9tdxY59XU+Wzo22Rx2iSD+g=
|
k8s.io/apimachinery v0.0.0-20250214214420-47e7fa9a40a2/go.mod h1:pvurfgWU15pkR11HFlMI9tdxY59XU+Wzo22Rx2iSD+g=
|
||||||
k8s.io/client-go v0.0.0-20250211115216-8683d2da3be9 h1:4qQCNM+BGSmABHbooN1JAc0j6LEyMCuIqSixdBcs5V4=
|
k8s.io/client-go v0.0.0-20250215195049-90ccd59ab165 h1:65iQDpH0Pgt6ux18kWgivA0wXgFfzT1NlHSynDlRWJE=
|
||||||
k8s.io/client-go v0.0.0-20250211115216-8683d2da3be9/go.mod h1:69142mPf6rG98xzKZ6K7fhlccQVwPbCp5QbavQEqViU=
|
k8s.io/client-go v0.0.0-20250215195049-90ccd59ab165/go.mod h1:yjLQ9IWpE/VbzDsnVeuBkNZ9wF4SGXKOLBpquIi4glo=
|
||||||
k8s.io/component-base v0.0.0-20250206205508-05a58ccfe08d h1:ucGaCLCdQDECgSOvEVYGRNTkUPamA+Of3SfwVWovZUE=
|
k8s.io/component-base v0.0.0-20250206205508-05a58ccfe08d h1:ucGaCLCdQDECgSOvEVYGRNTkUPamA+Of3SfwVWovZUE=
|
||||||
k8s.io/component-base v0.0.0-20250206205508-05a58ccfe08d/go.mod h1:m0Zr1J4qm4/+KLOEn4YxoHUVMkKFWyrm1TRORDgE9sY=
|
k8s.io/component-base v0.0.0-20250206205508-05a58ccfe08d/go.mod h1:m0Zr1J4qm4/+KLOEn4YxoHUVMkKFWyrm1TRORDgE9sY=
|
||||||
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
||||||
|
|
|
@ -61,7 +61,7 @@ import (
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newTestCacherWithoutSyncing(s storage.Interface) (*Cacher, storage.Versioner, error) {
|
func newTestCacherWithoutSyncing(s storage.Interface, c clock.WithTicker) (*Cacher, storage.Versioner, error) {
|
||||||
prefix := "pods"
|
prefix := "pods"
|
||||||
config := Config{
|
config := Config{
|
||||||
Storage: s,
|
Storage: s,
|
||||||
|
@ -85,7 +85,7 @@ func newTestCacherWithoutSyncing(s storage.Interface) (*Cacher, storage.Versione
|
||||||
NewFunc: func() runtime.Object { return &example.Pod{} },
|
NewFunc: func() runtime.Object { return &example.Pod{} },
|
||||||
NewListFunc: func() runtime.Object { return &example.PodList{} },
|
NewListFunc: func() runtime.Object { return &example.PodList{} },
|
||||||
Codec: codecs.LegacyCodec(examplev1.SchemeGroupVersion),
|
Codec: codecs.LegacyCodec(examplev1.SchemeGroupVersion),
|
||||||
Clock: clock.RealClock{},
|
Clock: c,
|
||||||
}
|
}
|
||||||
cacher, err := NewCacherFromConfig(config)
|
cacher, err := NewCacherFromConfig(config)
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ func newTestCacherWithoutSyncing(s storage.Interface) (*Cacher, storage.Versione
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTestCacher(s storage.Interface) (*Cacher, storage.Versioner, error) {
|
func newTestCacher(s storage.Interface) (*Cacher, storage.Versioner, error) {
|
||||||
cacher, versioner, err := newTestCacherWithoutSyncing(s)
|
cacher, versioner, err := newTestCacherWithoutSyncing(s, clock.RealClock{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, versioner, err
|
return nil, versioner, err
|
||||||
}
|
}
|
||||||
|
@ -435,17 +435,15 @@ apiserver_watch_cache_consistent_read_total{fallback="true", resource="pods", su
|
||||||
podList.ResourceVersion = tc.watchCacheRV
|
podList.ResourceVersion = tc.watchCacheRV
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// TODO: Use fake clock for this test to reduce execution time.
|
c := testingclock.NewFakeClock(time.Now())
|
||||||
cacher, _, err := newTestCacher(backingStorage)
|
cacher, _, err := newTestCacherWithoutSyncing(backingStorage, c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Couldn't create cacher: %v", err)
|
t.Fatalf("Couldn't create cacher: %v", err)
|
||||||
}
|
}
|
||||||
defer cacher.Stop()
|
defer cacher.Stop()
|
||||||
proxy := NewCacheProxy(cacher, backingStorage)
|
proxy := NewCacheProxy(cacher, backingStorage)
|
||||||
if !utilfeature.DefaultFeatureGate.Enabled(features.ResilientWatchCacheInitialization) {
|
if err := cacher.ready.wait(context.Background()); err != nil {
|
||||||
if err := cacher.ready.wait(context.Background()); err != nil {
|
t.Fatalf("unexpected error waiting for the cache to be ready")
|
||||||
t.Fatalf("unexpected error waiting for the cache to be ready")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if fmt.Sprintf("%d", cacher.watchCache.resourceVersion) != tc.watchCacheRV {
|
if fmt.Sprintf("%d", cacher.watchCache.resourceVersion) != tc.watchCacheRV {
|
||||||
|
@ -466,8 +464,28 @@ apiserver_watch_cache_consistent_read_total{fallback="true", resource="pods", su
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
result := &example.PodList{}
|
result := &example.PodList{}
|
||||||
|
|
||||||
|
ctx, clockStepCancelFn := context.WithTimeout(context.TODO(), time.Minute)
|
||||||
|
defer clockStepCancelFn()
|
||||||
|
if tc.expectBlock {
|
||||||
|
go func(ctx context.Context) {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
|
default:
|
||||||
|
if c.HasWaiters() {
|
||||||
|
c.Step(blockTimeout)
|
||||||
|
}
|
||||||
|
time.Sleep(time.Millisecond)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
start := cacher.clock.Now()
|
start := cacher.clock.Now()
|
||||||
err = proxy.GetList(context.TODO(), "pods/ns", storage.ListOptions{ResourceVersion: ""}, result)
|
err = proxy.GetList(context.TODO(), "pods/ns", storage.ListOptions{ResourceVersion: ""}, result)
|
||||||
|
clockStepCancelFn()
|
||||||
duration := cacher.clock.Since(start)
|
duration := cacher.clock.Since(start)
|
||||||
if (err != nil) != tc.expectError {
|
if (err != nil) != tc.expectError {
|
||||||
t.Fatalf("Unexpected error err: %v", err)
|
t.Fatalf("Unexpected error err: %v", err)
|
||||||
|
@ -605,7 +623,7 @@ func TestTooManyRequestsNotReturned(t *testing.T) {
|
||||||
|
|
||||||
dummyErr := fmt.Errorf("dummy")
|
dummyErr := fmt.Errorf("dummy")
|
||||||
backingStorage := &dummyStorage{err: dummyErr}
|
backingStorage := &dummyStorage{err: dummyErr}
|
||||||
cacher, _, err := newTestCacherWithoutSyncing(backingStorage)
|
cacher, _, err := newTestCacherWithoutSyncing(backingStorage, clock.RealClock{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Couldn't create cacher: %v", err)
|
t.Fatalf("Couldn't create cacher: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -732,7 +750,7 @@ func TestWatchNotHangingOnStartupFailure(t *testing.T) {
|
||||||
// constantly failing lists to the underlying storage.
|
// constantly failing lists to the underlying storage.
|
||||||
dummyErr := fmt.Errorf("dummy")
|
dummyErr := fmt.Errorf("dummy")
|
||||||
backingStorage := &dummyStorage{err: dummyErr}
|
backingStorage := &dummyStorage{err: dummyErr}
|
||||||
cacher, _, err := newTestCacherWithoutSyncing(backingStorage)
|
cacher, _, err := newTestCacherWithoutSyncing(backingStorage, clock.RealClock{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Couldn't create cacher: %v", err)
|
t.Fatalf("Couldn't create cacher: %v", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue