From f0aab8c984d329e22c498a3e6f0fe1db9823d1b7 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. --- .../src/k8s.io/apimachinery/pkg/runtime/helper.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/staging/src/k8s.io/apimachinery/pkg/runtime/helper.go b/staging/src/k8s.io/apimachinery/pkg/runtime/helper.go index 7bd1a3a6a5b..9eb8af9dfe4 100644 --- a/staging/src/k8s.io/apimachinery/pkg/runtime/helper.go +++ b/staging/src/k8s.io/apimachinery/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.