diff --git a/src/Elastic.Apm/Model/Transaction.cs b/src/Elastic.Apm/Model/Transaction.cs index 3558d7a56..4e504fbef 100644 --- a/src/Elastic.Apm/Model/Transaction.cs +++ b/src/Elastic.Apm/Model/Transaction.cs @@ -270,10 +270,14 @@ internal Transaction( // This is so that the distributed tracing data will flow to any child activities try { - _activity.SetParentId( - ActivityTraceId.CreateFromString(distributedTracingData.TraceId.AsSpan()), - ActivitySpanId.CreateFromString(distributedTracingData.ParentId.AsSpan()), - distributedTracingData.FlagRecorded ? ActivityTraceFlags.Recorded : ActivityTraceFlags.None); + // Only if the parent does not already exist + if (_activity.ParentId == null && _activity.Parent == null) + { + _activity.SetParentId( + ActivityTraceId.CreateFromString(distributedTracingData.TraceId.AsSpan()), + ActivitySpanId.CreateFromString(distributedTracingData.ParentId.AsSpan()), + distributedTracingData.FlagRecorded ? ActivityTraceFlags.Recorded : ActivityTraceFlags.None); + } if (distributedTracingData.HasTraceState) _activity.TraceStateString = distributedTracingData.TraceState.ToTextHeader();