From 3160386f2913de209f3fd71bdd595349267a99a8 Mon Sep 17 00:00:00 2001 From: Quan Tian Date: Tue, 6 Feb 2024 18:28:39 +0800 Subject: [PATCH] Fix internal error when serializing groupLookupFailures in log When garbagecollector failed to look up ServerPreferredResources, it logged the failed groups as "", 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 --- pkg/controller/garbagecollector/garbagecollector.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/controller/garbagecollector/garbagecollector.go b/pkg/controller/garbagecollector/garbagecollector.go index 1a4aeecb834..f43667a11d0 100644 --- a/pkg/controller/garbagecollector/garbagecollector.go +++ b/pkg/controller/garbagecollector/garbagecollector.go @@ -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) }