mirror of
https://github.com/kubernetes/client-go.git
synced 2025-06-26 15:12:06 +00:00
Merge pull request #115978 from seans3/discovery-empty-response
"empty response" not logged as error in memcache discovery client Kubernetes-commit: 6bfa9371cffc66e7b80a848d72b81d4007ab05b8
This commit is contained in:
commit
48ca73428a
@ -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,7 +113,13 @@ 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 {
|
||||||
utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", groupVersion, err))
|
// 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))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cachedVal = &cacheEntry{r, err}
|
cachedVal = &cacheEntry{r, err}
|
||||||
d.groupToServerResources[groupVersion] = cachedVal
|
d.groupToServerResources[groupVersion] = cachedVal
|
||||||
@ -252,7 +268,13 @@ func (d *memCacheClient) refreshLocked() error {
|
|||||||
|
|
||||||
r, err := d.serverResourcesForGroupVersion(gv)
|
r, err := d.serverResourcesForGroupVersion(gv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utilruntime.HandleError(fmt.Errorf("couldn't get resource list for %v: %v", gv, err))
|
// 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))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resultLock.Lock()
|
resultLock.Lock()
|
||||||
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user