in plugins/core/span_tracing.go [378:415]
func newSnapshotSpan(current TracingSpan) TracingSpan {
if current == nil {
return nil
}
if _, isNoop := current.(*NoopSpan); isNoop {
return newSnapshotNoopSpan()
}
segmentSpan, ok := current.(SegmentSpan)
if !ok || !segmentSpan.IsValid() { // is not segment span or segment is invalid(Executed End() method
return nil
}
segCtx := segmentSpan.GetSegmentContext()
copiedCorrelation := make(map[string]string)
for k, v := range segCtx.CorrelationContext {
copiedCorrelation[k] = v
}
s := &SnapshotSpan{
DefaultSpan: DefaultSpan{
OperationName: segmentSpan.GetOperationName(),
Refs: nil,
tracer: segmentSpan.tracer(),
Peer: segmentSpan.GetPeer(),
},
SegmentContext: SegmentContext{
TraceID: segCtx.GetTraceID(),
SegmentID: segCtx.SegmentID,
SpanID: segCtx.SpanID,
collect: segCtx.collect,
refNum: segCtx.refNum,
spanIDGenerator: segCtx.spanIDGenerator,
FirstSpan: segCtx.FirstSpan,
CorrelationContext: copiedCorrelation,
},
}
return s
}