diff --git a/staging/src/k8s.io/client-go/tools/cache/reflector.go b/staging/src/k8s.io/client-go/tools/cache/reflector.go index 67e6feb978a..7b08160684d 100644 --- a/staging/src/k8s.io/client-go/tools/cache/reflector.go +++ b/staging/src/k8s.io/client-go/tools/cache/reflector.go @@ -22,7 +22,6 @@ import ( "fmt" "io" "math/rand" - "os" "reflect" "strings" "sync" @@ -39,6 +38,7 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + clientfeatures "k8s.io/client-go/features" "k8s.io/client-go/tools/pager" "k8s.io/klog/v2" "k8s.io/utils/clock" @@ -254,9 +254,7 @@ func NewReflectorWithOptions(lw ListerWatcher, expectedType interface{}, store S // don't overwrite UseWatchList if already set // because the higher layers (e.g. storage/cacher) disabled it on purpose if r.UseWatchList == nil { - if s := os.Getenv("ENABLE_CLIENT_GO_WATCH_LIST_ALPHA"); len(s) > 0 { - r.UseWatchList = ptr.To(true) - } + r.UseWatchList = ptr.To(clientfeatures.FeatureGates().Enabled(clientfeatures.WatchListClient)) } return r diff --git a/test/e2e/apimachinery/watchlist.go b/test/e2e/apimachinery/watchlist.go index 44721651a89..178b7235ef7 100644 --- a/test/e2e/apimachinery/watchlist.go +++ b/test/e2e/apimachinery/watchlist.go @@ -19,7 +19,6 @@ package apimachinery import ( "context" "fmt" - "os" "sort" "time" @@ -31,6 +30,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + clientfeatures "k8s.io/client-go/features" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/test/e2e/feature" "k8s.io/kubernetes/test/e2e/framework" @@ -38,16 +38,14 @@ import ( var _ = SIGDescribe("API Streaming (aka. WatchList)", framework.WithSerial(), feature.WatchList, func() { f := framework.NewDefaultFramework("watchlist") - ginkgo.It("should be requested when ENABLE_CLIENT_GO_WATCH_LIST_ALPHA is set", func(ctx context.Context) { - prevWatchListEnvValue, wasWatchListEnvSet := os.LookupEnv("ENABLE_CLIENT_GO_WATCH_LIST_ALPHA") - os.Setenv("ENABLE_CLIENT_GO_WATCH_LIST_ALPHA", "true") + ginkgo.It("should be requested when WatchListClient is enabled", func(ctx context.Context) { + // TODO(p0lyn0mial): use https://github.com/kubernetes/kubernetes/pull/123974 + // instead of using directly clientfeatures.ReplaceFeatureGates + prevClientFeatureGates := clientfeatures.FeatureGates() defer func() { - if !wasWatchListEnvSet { - os.Unsetenv("ENABLE_CLIENT_GO_WATCH_LIST_ALPHA") - return - } - os.Setenv("ENABLE_CLIENT_GO_WATCH_LIST_ALPHA", prevWatchListEnvValue) + clientfeatures.ReplaceFeatureGates(prevClientFeatureGates) }() + clientfeatures.ReplaceFeatureGates(newEnabledWatchListClientFeatureGateRegistry(prevClientFeatureGates)) stopCh := make(chan struct{}) defer close(stopCh) secretInformer := cache.NewSharedIndexInformer( @@ -123,3 +121,18 @@ func newSecret(name string) *v1.Secret { ObjectMeta: metav1.ObjectMeta{Name: name}, } } + +type enabledWatchListClientFeatureGateRegistry struct { + originalGates clientfeatures.Gates +} + +func newEnabledWatchListClientFeatureGateRegistry(originalGates clientfeatures.Gates) *enabledWatchListClientFeatureGateRegistry { + return &enabledWatchListClientFeatureGateRegistry{originalGates: originalGates} +} + +func (r *enabledWatchListClientFeatureGateRegistry) Enabled(feature clientfeatures.Feature) bool { + if feature == clientfeatures.WatchListClient { + return true + } + return r.originalGates.Enabled(feature) +}