Merge pull request #115978 from seans3/discovery-empty-response
"empty response" not logged as error in memcache discovery client
This commit is contained in:
		@@ -33,6 +33,7 @@ import (
 | 
				
			|||||||
	"k8s.io/client-go/openapi"
 | 
						"k8s.io/client-go/openapi"
 | 
				
			||||||
	cachedopenapi "k8s.io/client-go/openapi/cached"
 | 
						cachedopenapi "k8s.io/client-go/openapi/cached"
 | 
				
			||||||
	restclient "k8s.io/client-go/rest"
 | 
						restclient "k8s.io/client-go/rest"
 | 
				
			||||||
 | 
						"k8s.io/klog/v2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type cacheEntry struct {
 | 
					type cacheEntry struct {
 | 
				
			||||||
@@ -61,6 +62,15 @@ var (
 | 
				
			|||||||
	ErrCacheNotFound = errors.New("not found")
 | 
						ErrCacheNotFound = errors.New("not found")
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Server returning empty ResourceList for Group/Version.
 | 
				
			||||||
 | 
					type emptyResponseError struct {
 | 
				
			||||||
 | 
						gv string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (e *emptyResponseError) Error() string {
 | 
				
			||||||
 | 
						return fmt.Sprintf("received empty response for: %s", e.gv)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ discovery.CachedDiscoveryInterface = &memCacheClient{}
 | 
					var _ discovery.CachedDiscoveryInterface = &memCacheClient{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// isTransientConnectionError checks whether given error is "Connection refused" or
 | 
					// isTransientConnectionError checks whether given error is "Connection refused" or
 | 
				
			||||||
@@ -103,8 +113,14 @@ func (d *memCacheClient) ServerResourcesForGroupVersion(groupVersion string) (*m
 | 
				
			|||||||
	if cachedVal.err != nil && isTransientError(cachedVal.err) {
 | 
						if cachedVal.err != nil && isTransientError(cachedVal.err) {
 | 
				
			||||||
		r, err := d.serverResourcesForGroupVersion(groupVersion)
 | 
							r, err := d.serverResourcesForGroupVersion(groupVersion)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 | 
								// Don't log "empty response" as an error; it is a common response for metrics.
 | 
				
			||||||
 | 
								if _, emptyErr := err.(*emptyResponseError); emptyErr {
 | 
				
			||||||
 | 
									// Log at same verbosity as disk cache.
 | 
				
			||||||
 | 
									klog.V(3).Infof("%v", err)
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
				utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", groupVersion, err))
 | 
									utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", groupVersion, err))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		cachedVal = &cacheEntry{r, err}
 | 
							cachedVal = &cacheEntry{r, err}
 | 
				
			||||||
		d.groupToServerResources[groupVersion] = cachedVal
 | 
							d.groupToServerResources[groupVersion] = cachedVal
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -252,8 +268,14 @@ func (d *memCacheClient) refreshLocked() error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				r, err := d.serverResourcesForGroupVersion(gv)
 | 
									r, err := d.serverResourcesForGroupVersion(gv)
 | 
				
			||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
 | 
										// Don't log "empty response" as an error; it is a common response for metrics.
 | 
				
			||||||
 | 
										if _, emptyErr := err.(*emptyResponseError); emptyErr {
 | 
				
			||||||
 | 
											// Log at same verbosity as disk cache.
 | 
				
			||||||
 | 
											klog.V(3).Infof("%v", err)
 | 
				
			||||||
 | 
										} else {
 | 
				
			||||||
						utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", gv, err))
 | 
											utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", gv, err))
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				resultLock.Lock()
 | 
									resultLock.Lock()
 | 
				
			||||||
				defer resultLock.Unlock()
 | 
									defer resultLock.Unlock()
 | 
				
			||||||
@@ -274,7 +296,7 @@ func (d *memCacheClient) serverResourcesForGroupVersion(groupVersion string) (*m
 | 
				
			|||||||
		return r, err
 | 
							return r, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if len(r.APIResources) == 0 {
 | 
						if len(r.APIResources) == 0 {
 | 
				
			||||||
		return r, fmt.Errorf("Got empty response for: %v", groupVersion)
 | 
							return r, &emptyResponseError{gv: groupVersion}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return r, nil
 | 
						return r, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user