in operatortrace-go/pkg/client/tracing_client.go [80:110]
func (tc *tracingClient) Update(ctx context.Context, obj client.Object, opts ...client.UpdateOption) error {
gvk, err := apiutil.GVKForObject(obj, tc.scheme)
if err != nil {
return fmt.Errorf("problem getting the scheme: %w", err)
}
kind := gvk.GroupKind().Kind
ctx, span := startSpanFromContext(ctx, tc.Logger, tc.Tracer, obj, tc.scheme, fmt.Sprintf("Update %s %s", kind, obj.GetName()))
defer span.End()
existingObj := obj.DeepCopyObject().(client.Object)
if err := tc.Client.Get(ctx, client.ObjectKeyFromObject(obj), existingObj); err != nil {
return err
}
if !predicates.HasSignificantUpdate(existingObj, obj) {
tc.Logger.Info("Skipping update as object content has not changed", "object", obj.GetName())
return nil
}
addTraceIDAnnotation(ctx, obj)
tc.Logger.Info("Updating object", "object", obj.GetName())
err = tc.Client.Update(ctx, obj, opts...)
if err != nil {
span.RecordError(err)
}
return err
}