diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go index 8c31bf8195c..f2fa59723f7 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/storage_factory.go @@ -50,7 +50,7 @@ func StorageWithCacher() generic.StorageDecorator { return s, d, err } if klog.V(5).Enabled() { - klog.Infof("Storage caching is enabled for %s", objectTypeToString(newFunc())) + klog.InfoS("Storage caching is enabled", objectTypeToArgs(newFunc())...) } cacherConfig := cacherstorage.Config{ @@ -83,15 +83,16 @@ func StorageWithCacher() generic.StorageDecorator { } } -func objectTypeToString(obj runtime.Object) string { +func objectTypeToArgs(obj runtime.Object) []interface{} { // special-case unstructured objects that tell us their apiVersion/kind if u, isUnstructured := obj.(*unstructured.Unstructured); isUnstructured { if apiVersion, kind := u.GetAPIVersion(), u.GetKind(); len(apiVersion) > 0 && len(kind) > 0 { - return fmt.Sprintf("apiVersion=%s, kind=%s", apiVersion, kind) + return []interface{}{"apiVersion", apiVersion, "kind", kind} } } + // otherwise just return the type - return fmt.Sprintf("%T", obj) + return []interface{}{"type", fmt.Sprintf("%T", obj)} } // TODO : Remove all the code below when PR diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go index 0fe82ed0c97..4ff379aef5d 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go @@ -464,7 +464,7 @@ func ShouldDeleteDuringUpdate(ctx context.Context, key string, obj, existing run // Used for objects that are either been finalized or have never initialized. func (e *Store) deleteWithoutFinalizers(ctx context.Context, name, key string, obj runtime.Object, preconditions *storage.Preconditions, options *metav1.DeleteOptions) (runtime.Object, bool, error) { out := e.NewFunc() - klog.V(6).Infof("going to delete %s from registry, triggered by update", name) + klog.V(6).InfoS("Going to delete object from registry, triggered by update", "object", klog.KRef(genericapirequest.NamespaceValue(ctx), name)) // Using the rest.ValidateAllObjectFunc because the request is an UPDATE request and has already passed the admission for the UPDATE verb. if err := e.Storage.Delete(ctx, key, out, preconditions, rest.ValidateAllObjectFunc, dryrun.IsDryRun(options.DryRun), nil); err != nil { // Deletion is racy, i.e., there could be multiple update @@ -935,7 +935,8 @@ func (e *Store) updateForGracefulDeletionAndFinalizers(ctx context.Context, name if !graceful { // set the DeleteGracePeriods to 0 if the object has pendingFinalizers but not supporting graceful deletion if pendingFinalizers { - klog.V(6).Infof("update the DeletionTimestamp to \"now\" and GracePeriodSeconds to 0 for object %s, because it has pending finalizers", name) + klog.V(6).InfoS("Object has pending finalizers, so the registry is going to update its status to deleting", + "object", klog.KRef(genericapirequest.NamespaceValue(ctx), name), "gracePeriod", time.Second*0) err = markAsDeleting(existing, time.Now()) if err != nil { return nil, err @@ -1055,7 +1056,7 @@ func (e *Store) Delete(ctx context.Context, name string, deleteValidation rest.V } // delete immediately, or no graceful deletion supported - klog.V(6).Infof("going to delete %s from registry: ", name) + klog.V(6).InfoS("Going to delete object from registry", "object", klog.KRef(genericapirequest.NamespaceValue(ctx), name)) out = e.NewFunc() if err := e.Storage.Delete(ctx, key, out, &preconditions, storage.ValidateObjectFunc(deleteValidation), dryrun.IsDryRun(options.DryRun), nil); err != nil { // Please refer to the place where we set ignoreNotFound for the reason @@ -1148,7 +1149,7 @@ func (e *Store) DeleteCollection(ctx context.Context, deleteValidation rest.Vali return } if _, _, err := e.Delete(ctx, accessor.GetName(), deleteValidation, options); err != nil && !apierrors.IsNotFound(err) { - klog.V(4).Infof("Delete %s in DeleteCollection failed: %v", accessor.GetName(), err) + klog.V(4).InfoS("Delete object in DeleteCollection failed", "object", klog.KObj(accessor), "err", err) errs <- err return } @@ -1425,12 +1426,12 @@ func (e *Store) CompleteWithOptions(options *generic.StoreOptions) error { func (e *Store) startObservingCount(period time.Duration) func() { prefix := e.KeyRootFunc(genericapirequest.NewContext()) resourceName := e.DefaultQualifiedResource.String() - klog.V(2).Infof("Monitoring %v count at /%v", resourceName, prefix) + klog.V(2).InfoS("Monitoring resource count at path", "resource", resourceName, "path", "/"+prefix) stopCh := make(chan struct{}) go wait.JitterUntil(func() { count, err := e.Storage.Count(prefix) if err != nil { - klog.V(5).Infof("Failed to update storage count metric: %v", err) + klog.V(5).InfoS("Failed to update storage count metric", "err", err) metrics.UpdateObjectCount(resourceName, -1) } else { metrics.UpdateObjectCount(resourceName, count)