@@ -33,6 +33,7 @@ import (
3333 "k8s.io/client-go/openapi"
3434 cachedopenapi "k8s.io/client-go/openapi/cached"
3535 restclient "k8s.io/client-go/rest"
36+ "k8s.io/klog/v2"
3637)
3738
3839type cacheEntry struct {
6162 ErrCacheNotFound = errors .New ("not found" )
6263)
6364
65+ // Server returning empty ResourceList for Group/Version.
66+ type emptyResponseError struct {
67+ gv string
68+ }
69+
70+ func (e * emptyResponseError ) Error () string {
71+ return fmt .Sprintf ("received empty response for: %s" , e .gv )
72+ }
73+
6474var _ discovery.CachedDiscoveryInterface = & memCacheClient {}
6575
6676// isTransientConnectionError checks whether given error is "Connection refused" or
@@ -103,7 +113,13 @@ func (d *memCacheClient) ServerResourcesForGroupVersion(groupVersion string) (*m
103113 if cachedVal .err != nil && isTransientError (cachedVal .err ) {
104114 r , err := d .serverResourcesForGroupVersion (groupVersion )
105115 if err != nil {
106- utilruntime .HandleError (fmt .Errorf ("couldn't get resource list for %v: %v" , groupVersion , err ))
116+ // Don't log "empty response" as an error; it is a common response for metrics.
117+ if _ , emptyErr := err .(* emptyResponseError ); emptyErr {
118+ // Log at same verbosity as disk cache.
119+ klog .V (3 ).Infof ("%v" , err )
120+ } else {
121+ utilruntime .HandleError (fmt .Errorf ("couldn't get resource list for %v: %v" , groupVersion , err ))
122+ }
107123 }
108124 cachedVal = & cacheEntry {r , err }
109125 d .groupToServerResources [groupVersion ] = cachedVal
@@ -252,7 +268,13 @@ func (d *memCacheClient) refreshLocked() error {
252268
253269 r , err := d .serverResourcesForGroupVersion (gv )
254270 if err != nil {
255- utilruntime .HandleError (fmt .Errorf ("couldn't get resource list for %v: %v" , gv , err ))
271+ // Don't log "empty response" as an error; it is a common response for metrics.
272+ if _ , emptyErr := err .(* emptyResponseError ); emptyErr {
273+ // Log at same verbosity as disk cache.
274+ klog .V (3 ).Infof ("%v" , err )
275+ } else {
276+ utilruntime .HandleError (fmt .Errorf ("couldn't get resource list for %v: %v" , gv , err ))
277+ }
256278 }
257279
258280 resultLock .Lock ()
@@ -274,7 +296,7 @@ func (d *memCacheClient) serverResourcesForGroupVersion(groupVersion string) (*m
274296 return r , err
275297 }
276298 if len (r .APIResources ) == 0 {
277- return r , fmt . Errorf ( "Got empty response for: %v" , groupVersion )
299+ return r , & emptyResponseError { gv : groupVersion }
278300 }
279301 return r , nil
280302}
0 commit comments