func()

in operatortrace-go/pkg/client/tracing_status_client.go [71:102]


func (ts *tracingStatusClient) Patch(ctx context.Context, obj client.Object, patch client.Patch, opts ...client.SubResourcePatchOption) error {
	gvk, err := apiutil.GVKForObject(obj, ts.scheme)
	if err != nil {
		return fmt.Errorf("problem getting the scheme: %w", err)
	}

	kind := gvk.GroupKind().Kind

	ctx, span := startSpanFromContext(ctx, ts.Logger, ts.Tracer, obj, ts.scheme, fmt.Sprintf("StatusPatch %s %s", kind, obj.GetName()))
	defer span.End()

	existingObj := obj.DeepCopyObject().(client.Object)
	if err := ts.Client.Get(ctx, client.ObjectKeyFromObject(obj), existingObj); err != nil {
		return err
	}

	if !predicates.HasSignificantUpdate(existingObj, obj) {
		ts.Logger.Info("Skipping update as object content has not changed", "object", obj.GetName())
		return nil
	}

	setConditionMessage("TraceID", span.SpanContext().TraceID().String(), obj, ts.scheme)
	setConditionMessage("SpanID", span.SpanContext().SpanID().String(), obj, ts.scheme)

	ts.Logger.Info("patching status object", "object", obj.GetName())
	err = ts.StatusWriter.Patch(ctx, obj, patch, opts...)
	if err != nil {
		span.RecordError(err)
	}

	return err
}