1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-11-23 22:34:47 +02:00

Unify API Span Start/End Options (#1108)

* Unify API Span Start/End Options

Replace both with `SpanOption`. Add a unified `SpanConfig` to match and
a `SpanConfigure` function to parse a `SpanConfig` from `SpanOption`s.

Update all the related options to use new `SpanOption`s.

* No non-zero SpanConfig defaults

The SDK uses an internal clock for the current time that cannot be use
if it does not know the time has not been set.

* Append attributes for WithAttributes

This preserves existing behavior.

* Add unit test for SpanConfigure

* Propagate changes

* Update append option documentation

* Update testing comments

* Move comments on guarantees to appropriate function

* Add documentation for SDK methods

Include SDK implementation specific information in the Tracer Start
method and Span End method.

* Add changes to Changelog

* Apply suggestions from code review

Co-authored-by: ET <evantorrie@users.noreply.github.com>

* Update the SpanKind comment in the  SpanConfig

Try for a less tautological comment.

Co-authored-by: ET <evantorrie@users.noreply.github.com>
This commit is contained in:
Tyler Yahn
2020-09-03 07:34:36 -07:00
committed by GitHub
parent 4d83d5b571
commit d143b8fbf8
19 changed files with 393 additions and 190 deletions

View File

@@ -29,14 +29,16 @@ type tracer struct {
var _ apitrace.Tracer = &tracer{}
func (tr *tracer) Start(ctx context.Context, name string, o ...apitrace.StartOption) (context.Context, apitrace.Span) {
var opts apitrace.StartConfig
// Start starts a Span and returns it along with a context containing it.
//
// The Span is created with the provided name and as a child of any existing
// span context found in the passed context. The created Span will be
// configured appropriately by any SpanOption passed. Any Timestamp option
// passed will be used as the start time of the Span's life-cycle.
func (tr *tracer) Start(ctx context.Context, name string, options ...apitrace.SpanOption) (context.Context, apitrace.Span) {
config := apitrace.SpanConfigure(options)
for _, op := range o {
op(&opts)
}
parentSpanContext, remoteParent, links := parent.GetSpanContextAndLinks(ctx, opts.NewRoot)
parentSpanContext, remoteParent, links := parent.GetSpanContextAndLinks(ctx, config.NewRoot)
if p := apitrace.SpanFromContext(ctx); p != nil {
if sdkSpan, ok := p.(*span); ok {
@@ -44,14 +46,14 @@ func (tr *tracer) Start(ctx context.Context, name string, o ...apitrace.StartOpt
}
}
span := startSpanInternal(tr, name, parentSpanContext, remoteParent, opts)
span := startSpanInternal(tr, name, parentSpanContext, remoteParent, config)
for _, l := range links {
span.addLink(l)
}
for _, l := range opts.Links {
for _, l := range config.Links {
span.addLink(l)
}
span.SetAttributes(opts.Attributes...)
span.SetAttributes(config.Attributes...)
span.tracer = tr