From 013c6eb4d4d52bf6f8f4e737d62dbd779b29ce31 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Tue, 7 Nov 2023 08:11:44 +0100 Subject: [PATCH] encoding: avoid setting GVK unnecessarily Setting the group/version/kind is not necessary when the object already has it. In that particular case some extra work and the data race when the same object is used multiple times in parallel can be avoided. Kubernetes-commit: f0aab8c984d329e22c498a3e6f0fe1db9823d1b7 --- pkg/runtime/helper.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pkg/runtime/helper.go b/pkg/runtime/helper.go index f46a24cc6..cc0a77bba 100644 --- a/pkg/runtime/helper.go +++ b/pkg/runtime/helper.go @@ -236,10 +236,14 @@ func (e WithVersionEncoder) Encode(obj Object, stream io.Writer) error { gvk = preferredGVK } } - kind.SetGroupVersionKind(gvk) - err = e.Encoder.Encode(obj, stream) - kind.SetGroupVersionKind(oldGVK) - return err + + // The gvk only needs to be set if not already as desired. + if gvk != oldGVK { + kind.SetGroupVersionKind(gvk) + defer kind.SetGroupVersionKind(oldGVK) + } + + return e.Encoder.Encode(obj, stream) } // WithoutVersionDecoder clears the group version kind of a deserialized object.