Change:
It seems to me like all of the garbage collection integration tests produce a ton of log messages of the form:

Discussion:
"WatchEvent", ) <ins> var commonKinds = []string{"ListOptions", "DeleteOptions"} // verify all external group/versions have the common kinds like the ListOptions, DeleteOptions are registered. func TestCommonKindsRegistered(t *testing.T) { for _, kind := range commonKinds { for _, group := range testapi.Groups { gv := group.GroupVersion() if _, err := api.Scheme.New(gv.WithKind(kind)); err != nil { t.Error(err) } } } } </ins> var nonInternalRoundTrippableTypes = sets.NewString("List", "ListOptions", "ExportOptions") var nonRoundTrippableTypesByVersion = map[string][]string{}

&PetSet{}, &PetSetList{}, &v1.ListOptions{}, <ins> &v1.DeleteOptions{}, </ins> ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) }

&HorizontalPodAutoscalerList{}, &Scale{}, &v1.ListOptions{}, <ins> &v1.DeleteOptions{}, </ins> ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) }

&Job{}, &JobList{}, &v1.ListOptions{}, <ins> &v1.DeleteOptions{}, </ins> ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) }

&ScheduledJob{}, &ScheduledJobList{}, &v1.ListOptions{}, <ins> &v1.DeleteOptions{}, </ins> ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) }

import ( "k8s.io/kubernetes/pkg/api/unversioned" <ins> "k8s.io/kubernetes/pkg/api/v1" </ins> "k8s.io/kubernetes/pkg/runtime" versionedwatch "k8s.io/kubernetes/pkg/watch/versioned" )

scheme.AddKnownTypes(SchemeGroupVersion, &PodDisruptionBudget{}, &PodDisruptionBudgetList{}, <ins> &v1.ListOptions{}, &v1.DeleteOptions{}, </ins> ) // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion)

} var defaultParameterEncoder runtime.ParameterCodec = parameterCodec{} <ins> type versionedParameterEncoderWithV1Fallback struct{} func (versionedParameterEncoderWithV1Fallback) EncodeParameters(obj runtime.Object, to unversioned.GroupVersion) (url.Values, error) { ret, err := api.ParameterCodec.EncodeParameters(obj, to) if err != nil && runtime.IsNotRegisteredError(err) { // fallback to v1 return api.ParameterCodec.EncodeParameters(obj, v1.SchemeGroupVersion) } return ret, err } func (versionedParameterEncoderWithV1Fallback) DecodeParameters(parameters url.Values, from unversioned.GroupVersion, into runtime.Object) error { return errors.New("DecodeParameters not implemented on versionedParameterEncoderWithV1Fallback") } // VersionedParameterEncoderWithV1Fallback is useful for encoding query // parameters for thirdparty resources. It tries to convert object to the // specified version before converting it to query parameters, and falls back to // converting to v1 if the object is not registered in the specified version. // For the record, currently API server always treats query parameters sent to a // thirdparty resource endpoint as v1. var VersionedParameterEncoderWithV1Fallback runtime.ParameterCodec = versionedParameterEncoderWithV1Fallback{} </ins>

// namespaces if it's namespace scoped, so leave // APIResource.Namespaced as false is all right. apiResource := unversioned.APIResource{Name: resource.Resource} <del> // The default parameter codec used by the dynamic client cannot // encode api.ListOptions. // TODO: api.ParameterCodec doesn't support thirdparty objects. // We need a generic parameter codec. return client.ParameterCodec(api.ParameterCodec).Resource(&apiResource, api.NamespaceAll).List(&options) </del> <ins> return client.ParameterCodec(dynamic.VersionedParameterEncoderWithV1Fallback). Resource(&apiResource, api.NamespaceAll). List(&options) </ins> }, WatchFunc: func(options api.ListOptions) (watch.Interface, error) { // APIResource.Kind is not used by the dynamic client, so

// namespaces if it's namespace scoped, so leave // APIResource.Namespaced as false is all right. apiResource := unversioned.APIResource{Name: resource.Resource} <del> // The default parameter codec used by the dynamic client cannot // encode api.ListOptions. return client.ParameterCodec(api.ParameterCodec).Resource(&apiResource, api.NamespaceAll).Watch(&options) </del> <ins> return client.ParameterCodec(dynamic.VersionedParameterEncoderWithV1Fallback). Resource(&apiResource, api.NamespaceAll). Watch(&options) </ins> }, } }