Wire serving codecs to CBOR feature gate.
Integration testing has to this point relied on patching serving codecs for built-in APIs. The test-only patching is removed and replaced by feature gated checks at runtime. Kubernetes-commit: 439d2f7b4028638b3d8d9261bb046c3ba8d9bfcb
This commit is contained in:
parent
88f051a068
commit
0b5852eb9a
|
@ -40,6 +40,7 @@ import (
|
||||||
"k8s.io/apiserver/pkg/endpoints/request"
|
"k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/features"
|
"k8s.io/apiserver/pkg/features"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
|
"k8s.io/apiserver/pkg/util/apihelpers"
|
||||||
"k8s.io/apiserver/pkg/util/dryrun"
|
"k8s.io/apiserver/pkg/util/dryrun"
|
||||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
"k8s.io/component-base/tracing"
|
"k8s.io/component-base/tracing"
|
||||||
|
@ -85,7 +86,7 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope *RequestSc
|
||||||
}
|
}
|
||||||
span.AddEvent("limitedReadBody succeeded", attribute.Int("len", len(body)))
|
span.AddEvent("limitedReadBody succeeded", attribute.Int("len", len(body)))
|
||||||
if len(body) > 0 {
|
if len(body) > 0 {
|
||||||
s, err := negotiation.NegotiateInputSerializer(req, false, metainternalversionscheme.Codecs)
|
s, err := negotiation.NegotiateInputSerializer(req, false, apihelpers.GetMetaInternalVersionCodecs())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
scope.err(err, w, req)
|
scope.err(err, w, req)
|
||||||
return
|
return
|
||||||
|
@ -93,7 +94,7 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope *RequestSc
|
||||||
// For backwards compatibility, we need to allow existing clients to submit per group DeleteOptions
|
// For backwards compatibility, we need to allow existing clients to submit per group DeleteOptions
|
||||||
// It is also allowed to pass a body with meta.k8s.io/v1.DeleteOptions
|
// It is also allowed to pass a body with meta.k8s.io/v1.DeleteOptions
|
||||||
defaultGVK := scope.MetaGroupVersion.WithKind("DeleteOptions")
|
defaultGVK := scope.MetaGroupVersion.WithKind("DeleteOptions")
|
||||||
obj, gvk, err := metainternalversionscheme.Codecs.DecoderToVersion(s.Serializer, defaultGVK.GroupVersion()).Decode(body, &defaultGVK, options)
|
obj, gvk, err := apihelpers.GetMetaInternalVersionCodecs().DecoderToVersion(s.Serializer, defaultGVK.GroupVersion()).Decode(body, &defaultGVK, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
scope.err(err, w, req)
|
scope.err(err, w, req)
|
||||||
return
|
return
|
||||||
|
@ -105,7 +106,7 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope *RequestSc
|
||||||
span.AddEvent("Decoded delete options")
|
span.AddEvent("Decoded delete options")
|
||||||
|
|
||||||
objGV := gvk.GroupVersion()
|
objGV := gvk.GroupVersion()
|
||||||
audit.LogRequestObject(req.Context(), obj, objGV, scope.Resource, scope.Subresource, metainternalversionscheme.Codecs)
|
audit.LogRequestObject(req.Context(), obj, objGV, scope.Resource, scope.Subresource, apihelpers.GetMetaInternalVersionCodecs())
|
||||||
span.AddEvent("Recorded the audit event")
|
span.AddEvent("Recorded the audit event")
|
||||||
} else {
|
} else {
|
||||||
if err := metainternalversionscheme.ParameterCodec.DecodeParameters(req.URL.Query(), scope.MetaGroupVersion, options); err != nil {
|
if err := metainternalversionscheme.ParameterCodec.DecodeParameters(req.URL.Query(), scope.MetaGroupVersion, options); err != nil {
|
||||||
|
@ -231,7 +232,7 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope *RequestSc
|
||||||
}
|
}
|
||||||
span.AddEvent("limitedReadBody succeeded", attribute.Int("len", len(body)))
|
span.AddEvent("limitedReadBody succeeded", attribute.Int("len", len(body)))
|
||||||
if len(body) > 0 {
|
if len(body) > 0 {
|
||||||
s, err := negotiation.NegotiateInputSerializer(req, false, metainternalversionscheme.Codecs)
|
s, err := negotiation.NegotiateInputSerializer(req, false, apihelpers.GetMetaInternalVersionCodecs())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
scope.err(err, w, req)
|
scope.err(err, w, req)
|
||||||
return
|
return
|
||||||
|
@ -239,7 +240,7 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope *RequestSc
|
||||||
// For backwards compatibility, we need to allow existing clients to submit per group DeleteOptions
|
// For backwards compatibility, we need to allow existing clients to submit per group DeleteOptions
|
||||||
// It is also allowed to pass a body with meta.k8s.io/v1.DeleteOptions
|
// It is also allowed to pass a body with meta.k8s.io/v1.DeleteOptions
|
||||||
defaultGVK := scope.MetaGroupVersion.WithKind("DeleteOptions")
|
defaultGVK := scope.MetaGroupVersion.WithKind("DeleteOptions")
|
||||||
obj, gvk, err := metainternalversionscheme.Codecs.DecoderToVersion(s.Serializer, defaultGVK.GroupVersion()).Decode(body, &defaultGVK, options)
|
obj, gvk, err := apihelpers.GetMetaInternalVersionCodecs().DecoderToVersion(s.Serializer, defaultGVK.GroupVersion()).Decode(body, &defaultGVK, options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
scope.err(err, w, req)
|
scope.err(err, w, req)
|
||||||
return
|
return
|
||||||
|
@ -250,7 +251,7 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope *RequestSc
|
||||||
}
|
}
|
||||||
|
|
||||||
objGV := gvk.GroupVersion()
|
objGV := gvk.GroupVersion()
|
||||||
audit.LogRequestObject(req.Context(), obj, objGV, scope.Resource, scope.Subresource, metainternalversionscheme.Codecs)
|
audit.LogRequestObject(req.Context(), obj, objGV, scope.Resource, scope.Subresource, apihelpers.GetMetaInternalVersionCodecs())
|
||||||
} else {
|
} else {
|
||||||
if err := metainternalversionscheme.ParameterCodec.DecodeParameters(req.URL.Query(), scope.MetaGroupVersion, options); err != nil {
|
if err := metainternalversionscheme.ParameterCodec.DecodeParameters(req.URL.Query(), scope.MetaGroupVersion, options); err != nil {
|
||||||
err = errors.NewBadRequest(err.Error())
|
err = errors.NewBadRequest(err.Error())
|
||||||
|
|
|
@ -40,7 +40,7 @@ import (
|
||||||
"k8s.io/apiserver/pkg/endpoints/metrics"
|
"k8s.io/apiserver/pkg/endpoints/metrics"
|
||||||
endpointsrequest "k8s.io/apiserver/pkg/endpoints/request"
|
endpointsrequest "k8s.io/apiserver/pkg/endpoints/request"
|
||||||
"k8s.io/apiserver/pkg/storage"
|
"k8s.io/apiserver/pkg/storage"
|
||||||
|
"k8s.io/apiserver/pkg/util/apihelpers"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ func doTransformObject(ctx context.Context, obj runtime.Object, opts interface{}
|
||||||
return asTable(ctx, obj, options, scope, target.GroupVersion())
|
return asTable(ctx, obj, options, scope, target.GroupVersion())
|
||||||
|
|
||||||
default:
|
default:
|
||||||
accepted, _ := negotiation.MediaTypesForSerializer(metainternalversionscheme.Codecs)
|
accepted, _ := negotiation.MediaTypesForSerializer(apihelpers.GetMetaInternalVersionCodecs())
|
||||||
err := negotiation.NewNotAcceptableError(accepted)
|
err := negotiation.NewNotAcceptableError(accepted)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -315,7 +315,7 @@ func targetEncodingForTransform(scope *RequestScope, mediaType negotiation.Media
|
||||||
case target == nil:
|
case target == nil:
|
||||||
case (target.Kind == "PartialObjectMetadata" || target.Kind == "PartialObjectMetadataList" || target.Kind == "Table") &&
|
case (target.Kind == "PartialObjectMetadata" || target.Kind == "PartialObjectMetadataList" || target.Kind == "Table") &&
|
||||||
(target.GroupVersion() == metav1beta1.SchemeGroupVersion || target.GroupVersion() == metav1.SchemeGroupVersion):
|
(target.GroupVersion() == metav1beta1.SchemeGroupVersion || target.GroupVersion() == metav1.SchemeGroupVersion):
|
||||||
return *target, metainternalversionscheme.Codecs, true
|
return *target, apihelpers.GetMetaInternalVersionCodecs(), true
|
||||||
}
|
}
|
||||||
return scope.Kind, scope.Serializer, false
|
return scope.Kind, scope.Serializer, false
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,7 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/runtime/serializer"
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer/cbor"
|
||||||
"k8s.io/apimachinery/pkg/util/managedfields"
|
"k8s.io/apimachinery/pkg/util/managedfields"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
|
@ -51,6 +52,7 @@ import (
|
||||||
"k8s.io/apiserver/pkg/server/healthz"
|
"k8s.io/apiserver/pkg/server/healthz"
|
||||||
"k8s.io/apiserver/pkg/server/routes"
|
"k8s.io/apiserver/pkg/server/routes"
|
||||||
"k8s.io/apiserver/pkg/storageversion"
|
"k8s.io/apiserver/pkg/storageversion"
|
||||||
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/component-base/featuregate"
|
"k8s.io/component-base/featuregate"
|
||||||
utilversion "k8s.io/component-base/version"
|
utilversion "k8s.io/component-base/version"
|
||||||
|
@ -989,6 +991,9 @@ func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV
|
||||||
// NewDefaultAPIGroupInfo returns an APIGroupInfo stubbed with "normal" values
|
// NewDefaultAPIGroupInfo returns an APIGroupInfo stubbed with "normal" values
|
||||||
// exposed for easier composition from other packages
|
// exposed for easier composition from other packages
|
||||||
func NewDefaultAPIGroupInfo(group string, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo {
|
func NewDefaultAPIGroupInfo(group string, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo {
|
||||||
|
if utilfeature.DefaultFeatureGate.Enabled(features.CBORServingAndStorage) {
|
||||||
|
codecs = serializer.NewCodecFactory(scheme, serializer.WithSerializer(cbor.NewSerializerInfo))
|
||||||
|
}
|
||||||
return APIGroupInfo{
|
return APIGroupInfo{
|
||||||
PrioritizedVersions: scheme.PrioritizedVersionsForGroup(group),
|
PrioritizedVersions: scheme.PrioritizedVersionsForGroup(group),
|
||||||
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{},
|
VersionedResourcesStorageMap: map[string]map[string]rest.Storage{},
|
||||||
|
|
|
@ -20,6 +20,12 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
flowcontrol "k8s.io/api/flowcontrol/v1"
|
flowcontrol "k8s.io/api/flowcontrol/v1"
|
||||||
|
metainternalversionscheme "k8s.io/apimachinery/pkg/apis/meta/internalversion/scheme"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer"
|
||||||
|
"k8s.io/apimachinery/pkg/runtime/serializer/cbor"
|
||||||
|
"k8s.io/apiserver/pkg/features"
|
||||||
|
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SetFlowSchemaCondition sets conditions.
|
// SetFlowSchemaCondition sets conditions.
|
||||||
|
@ -98,3 +104,15 @@ func (s FlowSchemaSequence) Less(i, j int) bool {
|
||||||
func (s FlowSchemaSequence) Swap(i, j int) {
|
func (s FlowSchemaSequence) Swap(i, j int) {
|
||||||
s[i], s[j] = s[j], s[i]
|
s[i], s[j] = s[j], s[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var metaInternalVersionCodecsWithCBOR = serializer.NewCodecFactory(metainternalversionscheme.Scheme, serializer.WithSerializer(cbor.NewSerializerInfo))
|
||||||
|
|
||||||
|
// GetMetaInternalVersionCodecs returns a negotiated serializer that recognizes the types from
|
||||||
|
// k8s.io/apimachinery/pkg/apis/meta/internalversion/scheme.Scheme. It will or will include a CBOR
|
||||||
|
// serializer if CBOR is enabled.
|
||||||
|
func GetMetaInternalVersionCodecs() runtime.NegotiatedSerializer {
|
||||||
|
if utilfeature.DefaultFeatureGate.Enabled(features.CBORServingAndStorage) {
|
||||||
|
return metaInternalVersionCodecsWithCBOR
|
||||||
|
}
|
||||||
|
return metainternalversionscheme.Codecs
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue