Skip to content

Commit 9f7fcf6

Browse files
committed
thockin hacking
This commit does not remove deads2k's work, so we can compare approaches. Assumptions: * A gate is enabled if it is enabled in EITHER the old mechanism OR the new mechanism. * A gate is disabled if it is disabled in BOTH the old mechanism AND the new mechanism.
1 parent 3659a70 commit 9f7fcf6

File tree

11 files changed

+330
-18
lines changed

11 files changed

+330
-18
lines changed

cmd/kube-controller-manager/app/storageversionmigrator.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ import (
2626
"k8s.io/controller-manager/controller"
2727
"k8s.io/kubernetes/cmd/kube-controller-manager/names"
2828
"k8s.io/kubernetes/pkg/features"
29+
"k8s.io/utils/feature"
2930

30-
utilfeature "k8s.io/apiserver/pkg/util/feature"
31+
oldutilfeature "k8s.io/apiserver/pkg/util/feature"
3132
clientgofeaturegate "k8s.io/client-go/features"
3233
svm "k8s.io/kubernetes/pkg/controller/storageversionmigrator"
3334
)
@@ -45,8 +46,8 @@ func startSVMController(
4546
controllerContext ControllerContext,
4647
controllerName string,
4748
) (controller.Interface, bool, error) {
48-
if !utilfeature.DefaultFeatureGate.Enabled(features.StorageVersionMigrator) ||
49-
!clientgofeaturegate.InformerResourceVersion2.Enabled() {
49+
if !oldutilfeature.DefaultFeatureGate.Enabled(features.StorageVersionMigrator) &&
50+
!feature.Enabled(clientgofeaturegate.InformerResourceVersion3) {
5051
return nil, false, nil
5152
}
5253

cmd/kube-controller-manager/controller-manager.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ limitations under the License.
2121
package main
2222

2323
import (
24-
clientfeatures "k8s.io/client-go/features"
25-
"k8s.io/utils/featuregates"
2624
"os"
2725
_ "time/tzdata" // for CronJob Time Zone support
2826

27+
clientfeatures "k8s.io/client-go/features"
28+
2929
"k8s.io/component-base/cli"
3030
_ "k8s.io/component-base/logs/json/register" // for JSON log format registration
3131
_ "k8s.io/component-base/metrics/prometheus/clientgo" // load all the prometheus client-go plugin
@@ -34,7 +34,7 @@ import (
3434
)
3535

3636
func main() {
37-
clientfeatures.WatchListClient2.(featuregates.MutableFeatureGate).OverrideDefaultValue(true)
37+
clientfeatures.WatchListClient3.Set(true)
3838

3939
command := app.NewControllerManagerCommand()
4040
code := cli.Run(command)

pkg/controlplane/apiserver/options/options.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ package options
1919

2020
import (
2121
"fmt"
22-
"k8s.io/kubernetes/pkg/features"
2322
"net"
2423
"os"
2524
"strings"
2625
"time"
2726

27+
"k8s.io/kubernetes/pkg/features"
28+
2829
peerreconcilers "k8s.io/apiserver/pkg/reconcilers"
2930
genericoptions "k8s.io/apiserver/pkg/server/options"
3031
"k8s.io/apiserver/pkg/storage/storagebackend"
@@ -99,7 +100,7 @@ type CompletedOptions struct {
99100
// NewOptions creates a new ServerRunOptions object with default parameters
100101
func NewOptions() *Options {
101102
s := Options{
102-
GenericServerRunOptions: genericoptions.NewServerRunOptions(features.KubernetesFeatureSet()),
103+
GenericServerRunOptions: genericoptions.NewServerRunOptions(features.KubernetesGates()),
103104
Etcd: genericoptions.NewEtcdOptions(storagebackend.NewDefaultConfig(kubeoptions.DefaultEtcdPathPrefix, nil)),
104105
SecureServing: kubeoptions.NewSecureServingOptions(),
105106
Audit: genericoptions.NewAuditOptions(),

pkg/features/kube_features.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
clientfeatures "k8s.io/client-go/features"
2525
"k8s.io/component-base/featuregate"
2626
kubeaggregatorfeatures "k8s.io/kube-aggregator/pkg/features"
27+
"k8s.io/utils/feature"
2728
"k8s.io/utils/featuregates"
2829
)
2930

@@ -988,6 +989,10 @@ const (
988989

989990
var (
990991
kubernetesFeatureSet = featuregates.NewSimpleFeatureSet()
992+
kubeGates = feature.MergeGateSets(
993+
clientfeatures.LibFeatureGates(),
994+
//kubeaggregatorfeatures.FeatureGates(),
995+
apiextensionsfeatures.FeatureGates())
991996
)
992997

993998
func init() {
@@ -1002,6 +1007,9 @@ func init() {
10021007
func KubernetesFeatureSet() featuregates.FeatureSet {
10031008
return kubernetesFeatureSet
10041009
}
1010+
func KubernetesGates() *feature.GateSet {
1011+
return kubeGates
1012+
}
10051013

10061014
func init() {
10071015
runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates))

staging/src/k8s.io/apiextensions-apiserver/pkg/cmd/server/options/options.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ type CustomResourceDefinitionsServerOptions struct {
6161
// NewCustomResourceDefinitionsServerOptions creates default options of an apiextensions-apiserver.
6262
func NewCustomResourceDefinitionsServerOptions(out, errOut io.Writer) *CustomResourceDefinitionsServerOptions {
6363
o := &CustomResourceDefinitionsServerOptions{
64-
ServerRunOptions: genericoptions.NewServerRunOptions(features.LibraryFeatureSet()),
64+
ServerRunOptions: genericoptions.NewServerRunOptions(features.FeatureGates()),
6565
RecommendedOptions: genericoptions.NewRecommendedOptions(
6666
defaultEtcdPathPrefix,
6767
apiserver.Codecs.LegacyCodec(v1beta1.SchemeGroupVersion, v1.SchemeGroupVersion),

staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
utilfeature "k8s.io/apiserver/pkg/util/feature"
2121
clientfeatures "k8s.io/client-go/features"
2222
"k8s.io/component-base/featuregate"
23+
"k8s.io/utils/feature"
2324
"k8s.io/utils/featuregates"
2425
)
2526

@@ -60,6 +61,18 @@ var (
6061
ToFeatureGateOrDie()
6162

6263
libraryFeatureSet = featuregates.NewSimpleFeatureSet()
64+
65+
libGates = &feature.GateSet{}
66+
CRDValidationRatcheting3 = libGates.Add(&feature.Gate{
67+
Name: "CRDValidationRatcheting",
68+
Default: true,
69+
Release: feature.Beta,
70+
})
71+
CustomResourceFieldSelectors3 = libGates.Add(&feature.Gate{
72+
Name: "CustomResourceFieldSelectors",
73+
Default: false,
74+
Release: feature.Beta,
75+
})
6376
)
6477

6578
func init() {
@@ -77,6 +90,10 @@ func LibraryFeatureSet() featuregates.FeatureSet {
7790
return libraryFeatureSet
7891
}
7992

93+
func FeatureGates() *feature.GateSet {
94+
return libGates
95+
}
96+
8097
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
8198
// To add a new feature, define a key for it above and add it here. The features will be
8299
// available throughout Kubernetes binaries.

staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ package options
1818

1919
import (
2020
"fmt"
21-
"k8s.io/utils/featuregates"
2221
"net"
2322
"regexp"
2423
"strings"
2524
"time"
2625

26+
"k8s.io/utils/feature"
27+
2728
"github.com/spf13/pflag"
2829
"k8s.io/apimachinery/pkg/runtime/serializer"
2930
"k8s.io/apimachinery/pkg/util/errors"
@@ -89,10 +90,10 @@ type ServerRunOptions struct {
8990
// it is not overridden by any other grace period.
9091
ShutdownWatchTerminationGracePeriod time.Duration
9192

92-
FeatureSetOptions *featuregates.FeatureSetOptions
93+
FeatureGates *feature.GateSet
9394
}
9495

95-
func NewServerRunOptions(featureSet featuregates.FeatureSet) *ServerRunOptions {
96+
func NewServerRunOptions(featureGates *feature.GateSet) *ServerRunOptions {
9697
defaults := server.NewConfig(serializer.CodecFactory{})
9798
return &ServerRunOptions{
9899
MaxRequestsInFlight: defaults.MaxRequestsInFlight,
@@ -105,7 +106,7 @@ func NewServerRunOptions(featureSet featuregates.FeatureSet) *ServerRunOptions {
105106
JSONPatchMaxCopyBytes: defaults.JSONPatchMaxCopyBytes,
106107
MaxRequestBodyBytes: defaults.MaxRequestBodyBytes,
107108
ShutdownSendRetryAfter: false,
108-
FeatureSetOptions: featuregates.NewFeatureSetOptions(featureSet),
109+
FeatureGates: featureGates,
109110
}
110111
}
111112

@@ -339,5 +340,5 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) {
339340
"This option, if set, represents the maximum amount of grace period the apiserver will wait "+
340341
"for active watch request(s) to drain during the graceful server shutdown window.")
341342

342-
s.FeatureSetOptions.AddFlags(fs)
343+
s.FeatureGates.AddFlags("new-feature-gates", fs)
343344
}

staging/src/k8s.io/client-go/features/known_features.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ limitations under the License.
1616

1717
package features
1818

19-
import "k8s.io/utils/featuregates"
19+
import (
20+
"k8s.io/utils/feature"
21+
"k8s.io/utils/featuregates"
22+
)
2023

2124
const (
2225
// Every feature gate should add method here following this template:
@@ -55,6 +58,16 @@ var (
5558
ToFeatureGateOrDie()
5659

5760
libraryFeatureSet = featuregates.NewSimpleFeatureSet()
61+
62+
libGates = &feature.GateSet{}
63+
WatchListClient3 = libGates.Add(&feature.Gate{
64+
Name: "WatchListClient",
65+
Release: feature.Beta,
66+
})
67+
InformerResourceVersion3 = libGates.Add(&feature.Gate{
68+
Name: "InformerResourceVersion",
69+
Release: feature.Alpha,
70+
})
5871
)
5972

6073
func init() {
@@ -68,6 +81,11 @@ func LibraryFeatureSet() featuregates.FeatureSet {
6881
return libraryFeatureSet
6982
}
7083

84+
// FIXME: rename to FeatureGates when other definition is gone.
85+
func LibFeatureGates() *feature.GateSet {
86+
return libGates
87+
}
88+
7189
// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys.
7290
//
7391
// To add a new feature, define a key for it above and add it here.

staging/src/k8s.io/client-go/tools/cache/shared_informer.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/client-go/tools/cache/synctrack"
3030
"k8s.io/utils/buffer"
3131
"k8s.io/utils/clock"
32+
"k8s.io/utils/feature"
3233

3334
"k8s.io/klog/v2"
3435

@@ -411,7 +412,8 @@ func (v *dummyController) HasSynced() bool {
411412
}
412413

413414
func (v *dummyController) LastSyncResourceVersion() string {
414-
if clientgofeaturegate.InformerResourceVersion2.Enabled() {
415+
if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InformerResourceVersion) ||
416+
feature.Enabled(clientgofeaturegate.InformerResourceVersion3) {
415417
return v.informer.LastSyncResourceVersion()
416418
}
417419

0 commit comments

Comments
 (0)