Fix internal error when serializing groupLookupFailures in log

When garbagecollector failed to look up ServerPreferredResources, it
logged the failed groups as "<internal error: json: unsupported type:
map[schema.GroupVersion]error>", making the failure more obscure.

It's because the logger tried to serialize the value using json encoder
but the type map[schema.GroupVersion]error is not supported. Either
schema.GroupVersion needs to implement TextMarshaler interface, or we
can serialize the type before passing it to the logger.

Signed-off-by: Quan Tian <qtian@vmware.com>
This commit is contained in:
Quan Tian
2024-02-06 18:28:39 +08:00
parent 920333b5fb
commit 3160386f29

View File

@@ -832,7 +832,9 @@ func GetDeletableResources(logger klog.Logger, discoveryClient discovery.ServerR
preferredResources, lookupErr := discoveryClient.ServerPreferredResources()
if lookupErr != nil {
if groupLookupFailures, isLookupFailure := discovery.GroupDiscoveryFailedErrorGroups(lookupErr); isLookupFailure {
logger.Info("failed to discover some groups", "groups", groupLookupFailures)
// Serialize groupLookupFailures here as map[schema.GroupVersion]error is not json encodable, otherwise the
// logger would throw internal error.
logger.Info("failed to discover some groups", "groups", fmt.Sprintf("%q", groupLookupFailures))
} else {
logger.Info("failed to discover preferred resources", "error", lookupErr)
}