in plugins/core/tracing.go [201:234]
func (t *Tracer) createSpan0(ctx *TracingContext, parent TracingSpan, pluginOpts []interface{}, coreOpts ...interface{}) (s TracingSpan, err error) {
ds := NewDefaultSpan(t, parent)
var parentSpan SegmentSpan
if parent != nil {
tmpSpan, ok := parent.(SegmentSpan)
if ok {
parentSpan = tmpSpan
}
}
isForceSample := len(ds.Refs) > 0
// Try to sample when it is not force sample
if parentSpan == nil && !isForceSample {
// Force sample
sampled := t.Sampler.IsSampled(ds.OperationName)
if !sampled {
// Filter by sample just return noop span
s = &NoopSpan{}
return s, nil
}
}
// process the opts from agent core for prepare building segment span
for _, opt := range coreOpts {
opt.(tracing.SpanOption).Apply(ds)
}
s, err = NewSegmentSpan(ctx, ds, parentSpan)
if err != nil {
return nil, err
}
// process the opts from plugin, split opts because the DefaultSpan not contains the tracing context information(AdaptSpan)
for _, opt := range pluginOpts {
opt.(tracing.SpanOption).Apply(s)
}
return s, nil
}