From 58218340e68b665be90644ba443f7f8c761c8f9e Mon Sep 17 00:00:00 2001 From: jmacd Date: Mon, 9 Dec 2019 23:21:15 -0800 Subject: [PATCH 01/21] Remove grpctrace Vendor var --- plugin/grpctrace/grpctrace.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go index 0f87b1bf2b7..7498775e07e 100644 --- a/plugin/grpctrace/grpctrace.go +++ b/plugin/grpctrace/grpctrace.go @@ -24,11 +24,6 @@ import ( "go.opentelemetry.io/otel/api/propagators" ) -const ( - // Vendor is the integration provider - Vendor = "ot" -) - var ( propagator = propagators.TraceContext{} ) From f1bfbb0dcf60c3a87d05d97c9216d7bbec3638e2 Mon Sep 17 00:00:00 2001 From: jmacd Date: Mon, 9 Dec 2019 23:21:33 -0800 Subject: [PATCH 02/21] Remove binary propagator --- api/propagators/binary_propagator.go | 80 ---------- api/propagators/binary_propagator_test.go | 170 ---------------------- 2 files changed, 250 deletions(-) delete mode 100644 api/propagators/binary_propagator.go delete mode 100644 api/propagators/binary_propagator_test.go diff --git a/api/propagators/binary_propagator.go b/api/propagators/binary_propagator.go deleted file mode 100644 index 9a73c054b15..00000000000 --- a/api/propagators/binary_propagator.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2019, OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package propagators - -import ( - "go.opentelemetry.io/otel/api/core" -) - -// BinaryFormat is an interface that specifies methods to convert SpanContext -// to/from byte array. -type BinaryFormat interface { - // ToBytes serializes span context into a byte array and returns the array. - ToBytes(sc core.SpanContext) []byte - - // FromBytes de-serializes byte array into span context and returns the span context. - FromBytes([]byte) core.SpanContext -} - -var _ BinaryFormat = binary{} - -type binary struct{} - -// Binary creates a new propagator. The propagator implements -// ToBytes and FromBytes method to transform SpanContext to/from byte array. -func Binary() BinaryFormat { - return binary{} -} - -// ToBytes implements ToBytes method of propagators.BinaryFormat. -// It serializes core.SpanContext into a byte array. -func (bp binary) ToBytes(sc core.SpanContext) []byte { - if sc == core.EmptySpanContext() { - return nil - } - var b [29]byte - copy(b[2:18], sc.TraceID[:]) - b[18] = 1 - copy(b[19:27], sc.SpanID[:]) - b[27] = 2 - b[28] = sc.TraceFlags - return b[:] -} - -// FromBytes implements FromBytes method of propagators.BinaryFormat. -// It de-serializes bytes into core.SpanContext. -func (bp binary) FromBytes(b []byte) (sc core.SpanContext) { - if len(b) == 0 { - return core.EmptySpanContext() - } - b = b[1:] - if len(b) >= 17 && b[0] == 0 { - copy(sc.TraceID[:], b[1:17]) - b = b[17:] - } else { - return core.EmptySpanContext() - } - if len(b) >= 9 && b[0] == 1 { - copy(sc.SpanID[:], b[1:9]) - b = b[9:] - } - if len(b) >= 2 && b[0] == 2 { - sc.TraceFlags = b[1] - } - if sc.IsValid() { - return sc - } - return core.EmptySpanContext() -} diff --git a/api/propagators/binary_propagator_test.go b/api/propagators/binary_propagator_test.go deleted file mode 100644 index 8f5d090b45a..00000000000 --- a/api/propagators/binary_propagator_test.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright 2019, OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package propagators_test - -import ( - "testing" - - "github.com/google/go-cmp/cmp" - - "go.opentelemetry.io/otel/api/core" - "go.opentelemetry.io/otel/api/propagators" -) - -func TestExtractSpanContextFromBytes(t *testing.T) { - traceID, _ := core.TraceIDFromHex("4bf92f3577b34da6a3ce929d0e0e4736") - spanID, _ := core.SpanIDFromHex("00f067aa0ba902b7") - - propagator := propagators.Binary() - tests := []struct { - name string - bytes []byte - wantSc core.SpanContext - }{ - { - name: "future version of the proto", - bytes: []byte{ - 0x02, 0x00, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, 0xa6, 0xa3, 0xce, 0x92, 0x9d, 0x0e, 0x0e, 0x47, 0x36, - 0x01, 0x00, 0xf0, 0x67, 0xaa, 0x0b, 0xa9, 0x02, 0xb7, - 0x02, 0x01, - }, - wantSc: core.SpanContext{ - TraceID: traceID, - SpanID: spanID, - TraceFlags: core.TraceFlagsSampled, - }, - }, - { - name: "current version with valid SpanContext and with Sampled bit set", - bytes: []byte{ - 0x00, 0x00, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, 0xa6, 0xa3, 0xce, 0x92, 0x9d, 0x0e, 0x0e, 0x47, 0x36, - 0x01, 0x00, 0xf0, 0x67, 0xaa, 0x0b, 0xa9, 0x02, 0xb7, - 0x02, 0x01, - }, - wantSc: core.SpanContext{ - TraceID: traceID, - SpanID: spanID, - TraceFlags: core.TraceFlagsSampled, - }, - }, - { - name: "valid SpanContext without option", - bytes: []byte{ - 0x00, 0x00, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, 0xa6, 0xa3, 0xce, 0x92, 0x9d, 0x0e, 0x0e, 0x47, 0x36, - 0x01, 0x00, 0xf0, 0x67, 0xaa, 0x0b, 0xa9, 0x02, 0xb7, - }, - wantSc: core.SpanContext{ - TraceID: traceID, - SpanID: spanID, - }, - }, - { - name: "zero trace ID", - bytes: []byte{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, - }, - wantSc: core.EmptySpanContext(), - }, - { - name: "zero span ID", - bytes: []byte{ - 0x00, 0x00, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, 0xa6, 0xa3, 0xce, 0x92, 0x9d, 0x0e, 0x0e, 0x47, 0x36, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x01, - }, - wantSc: core.EmptySpanContext(), - }, - { - name: "wrong trace ID field number", - bytes: []byte{ - 0x00, 0x01, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, 0xa6, 0xa3, 0xce, 0x92, 0x9d, 0x0e, 0x0e, 0x47, 0x36, - 0x01, 0x00, 0xf0, 0x67, 0xaa, 0x0b, 0xa9, 0x02, 0xb7, - }, - wantSc: core.EmptySpanContext(), - }, - { - name: "short byte array", - bytes: []byte{ - 0x00, 0x00, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, - }, - wantSc: core.EmptySpanContext(), - }, - { - name: "nil byte array", - wantSc: core.EmptySpanContext(), - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - gotSc := propagator.FromBytes(tt.bytes) - if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { - t.Errorf("Deserialize SpanContext from byte array: %s: -got +want %s", tt.name, diff) - } - }) - } -} - -func TestConvertSpanContextToBytes(t *testing.T) { - traceID, _ := core.TraceIDFromHex("4bf92f3577b34da6a3ce929d0e0e4736") - spanID, _ := core.SpanIDFromHex("00f067aa0ba902b7") - - propagator := propagators.Binary() - tests := []struct { - name string - sc core.SpanContext - bytes []byte - }{ - { - name: "valid SpanContext, with sampling bit set", - sc: core.SpanContext{ - TraceID: traceID, - SpanID: spanID, - TraceFlags: core.TraceFlagsSampled, - }, - bytes: []byte{ - 0x00, 0x00, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, 0xa6, 0xa3, 0xce, 0x92, 0x9d, 0x0e, 0x0e, 0x47, 0x36, - 0x01, 0x00, 0xf0, 0x67, 0xaa, 0x0b, 0xa9, 0x02, 0xb7, - 0x02, 0x01, - }, - }, - { - name: "valid SpanContext, with sampling bit cleared", - sc: core.SpanContext{ - TraceID: traceID, - SpanID: spanID, - }, - bytes: []byte{ - 0x00, 0x00, 0x4b, 0xf9, 0x2f, 0x35, 0x77, 0xb3, 0x4d, 0xa6, 0xa3, 0xce, 0x92, 0x9d, 0x0e, 0x0e, 0x47, 0x36, - 0x01, 0x00, 0xf0, 0x67, 0xaa, 0x0b, 0xa9, 0x02, 0xb7, - 0x02, 0x00, - }, - }, - { - name: "invalid spancontext", - sc: core.EmptySpanContext(), - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - gotBytes := propagator.ToBytes(tt.sc) - if diff := cmp.Diff(gotBytes, tt.bytes); diff != "" { - t.Errorf("Serialize SpanContext to byte array: %s: -got +want %s", tt.name, diff) - } - }) - } -} From 33bfd7298a6b590ba6fb9f14b63e3723a791aaeb Mon Sep 17 00:00:00 2001 From: jmacd Date: Tue, 10 Dec 2019 00:00:36 -0800 Subject: [PATCH 03/21] Checkpoint --- api/context/propagation/propagation.go | 103 +++++++++++++++++++++++++ api/global/global.go | 25 +++++- go.sum | 1 + 3 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 api/context/propagation/propagation.go diff --git a/api/context/propagation/propagation.go b/api/context/propagation/propagation.go new file mode 100644 index 00000000000..fd039811fdf --- /dev/null +++ b/api/context/propagation/propagation.go @@ -0,0 +1,103 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package propagation + +import ( + "context" + "sync/atomic" + + "go.opentelemetry.io/otel/api/core" +) + +// HTTPSupplier is implemented by http.Headers. +type HTTPSupplier interface { + Get(key string) string + Set(key string, value string) +} + +type HTTPExtractor interface { + // Extract method retrieves encoded SpanContext using supplier + // from the associated carrier. It decodes the SpanContext + // and returns it and a dctx of correlated context. If no + // SpanContext was retrieved OR if the retrieved SpanContext + // is invalid then an empty SpanContext is returned. + Extract(context.Context, HTTPSupplier) (core.SpanContext, dctx.Map) +} + +type HTTPInjector interface { + // Inject method retrieves current SpanContext from the ctx, + // encodes it into propagator specific format and then injects + // the encoded SpanContext using supplier into a carrier + // associated with the supplier. It also takes a + // correlationCtx whose values will be injected into a carrier + // using the supplier. + Inject(context.Context, HTTPSupplier) context.Context +} + +type Propagators interface { + // HTTP propagation + SetHTTPExtractors(...HTTPExtractor) + SetHTTPInjectors(...HTTPInjector) + HTTPExtractors() []HTTPExtractor + HTTPInjectors() []HTTPInjector + + // Binary propagation + // TODO +} + +type propagators struct { + // TODO Nah. Use an options pattern to avoid mutation. + + httpEx atomic.Value // []HTTPExtractor + httpIn atomic.Value // []HTTPInjector +} + +func New() Propagators { + p := &propagators{} + + p.httpIn.Store([]HTTPInjector{}) + p.httpEs.Store([]HTTPExtractor{}) + + return p +} + +func (p *Propagators) SetHTTPExtractors(ex ...HTTPExtractor) { + if ex == nil { + ex = []HTTPExtractor{} + } + p.httpEx.Store(ex) +} + +func (p *Propagators) SetHTTPInjectors(in ...HTTPInjector) { + if in == nil { + in = []HTTPInjector{} + } + p.httpIn.Store(in) +} + +func (p *Propagators) HTTPExtractors() []HTTPExtractor { + return p.httpEx.Load().([]HTTPExtractor) +} + +func (p *Propagators) HTTPInjectors() []HTTPInjector { + return p.httpIn.Load().([]HTTPInjector) +} + +type NoopPropagators struct{} + +func (NoopPropagators) SetHTTPExtractors(ex ...HTTPExtractor) {} +func (NoopPropagators) SetHTTPInjectors(in ...HTTPInjector) {} +func (NoopPropagators) HTTPExtractors() []HTTPExtractor { return nil } +func (NoopPropagators) HTTPInjectors() []HTTPInjector { return nil } diff --git a/api/global/global.go b/api/global/global.go index af7f8ac8c12..4b4aacb22a4 100644 --- a/api/global/global.go +++ b/api/global/global.go @@ -17,6 +17,7 @@ package global import ( "sync/atomic" + "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/metric" "go.opentelemetry.io/otel/api/trace" ) @@ -29,11 +30,16 @@ type ( meterProvider struct { mp metric.Provider } + + propagators struct { + pr propagation.Propagators + } ) var ( - globalTracer atomic.Value - globalMeter atomic.Value + globalTracer atomic.Value + globalMeter atomic.Value + globalPropagators atomic.Value ) // TraceProvider returns the registered global trace provider. @@ -67,3 +73,18 @@ func MeterProvider() metric.Provider { func SetMeterProvider(mp metric.Provider) { globalMeter.Store(meterProvider{mp: mp}) } + +// Propagators returns the registered global propagators instance. If +// none is registered then an instance of propagators.NoopPropagators +// is returned. +func Propagators() propagation.Propagators { + if gp := globalPropagators.Load(); gp != nil { + return gp.(propagators).prop + } + return propagation.NoopPropagators{} +} + +// SetPropagators registers `p` as the global propagators instance. +func SetPropagators(p Propagators) { + globalPropagators.Store(propatators{prop: p}) +} diff --git a/go.sum b/go.sum index 1af69309501..2d3f1826c04 100644 --- a/go.sum +++ b/go.sum @@ -284,6 +284,7 @@ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opentelemetry.io v0.1.0 h1:EANZoRCOP+A3faIlw/iN6YEWoYb1vleZRKm1EvH8T48= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= From 9aa0681d38295643ab989e1ca44b31add6bc527e Mon Sep 17 00:00:00 2001 From: jmacd Date: Tue, 10 Dec 2019 18:23:30 -0800 Subject: [PATCH 04/21] Use options pattern --- api/context/propagation/propagation.go | 63 ++++++++++++-------------- api/global/global.go | 6 +-- 2 files changed, 32 insertions(+), 37 deletions(-) diff --git a/api/context/propagation/propagation.go b/api/context/propagation/propagation.go index fd039811fdf..814522bdd58 100644 --- a/api/context/propagation/propagation.go +++ b/api/context/propagation/propagation.go @@ -16,9 +16,9 @@ package propagation import ( "context" - "sync/atomic" "go.opentelemetry.io/otel/api/core" + dctx "go.opentelemetry.io/otel/api/distributedcontext" ) // HTTPSupplier is implemented by http.Headers. @@ -46,58 +46,53 @@ type HTTPInjector interface { Inject(context.Context, HTTPSupplier) context.Context } +type Config struct { + httpEx []HTTPExtractor + httpIn []HTTPInjector +} + type Propagators interface { - // HTTP propagation - SetHTTPExtractors(...HTTPExtractor) - SetHTTPInjectors(...HTTPInjector) HTTPExtractors() []HTTPExtractor HTTPInjectors() []HTTPInjector - - // Binary propagation - // TODO } -type propagators struct { - // TODO Nah. Use an options pattern to avoid mutation. +type Option func(*Config) - httpEx atomic.Value // []HTTPExtractor - httpIn atomic.Value // []HTTPInjector +type propagators struct { + config Config } -func New() Propagators { - p := &propagators{} - - p.httpIn.Store([]HTTPInjector{}) - p.httpEs.Store([]HTTPExtractor{}) - - return p +func New(options ...Option) Propagators { + config := Config{} + for _, opt := range options { + opt(&config) + } + return &propagators{ + config: config, + } } -func (p *Propagators) SetHTTPExtractors(ex ...HTTPExtractor) { - if ex == nil { - ex = []HTTPExtractor{} +func WithInjectors(inj ...HTTPInjector) Option { + return func(config *Config) { + config.httpIn = append(config.httpIn, inj...) } - p.httpEx.Store(ex) } -func (p *Propagators) SetHTTPInjectors(in ...HTTPInjector) { - if in == nil { - in = []HTTPInjector{} +func WithExtractors(ext ...HTTPExtractor) Option { + return func(config *Config) { + config.httpEx = append(config.httpEx, ext...) } - p.httpIn.Store(in) } -func (p *Propagators) HTTPExtractors() []HTTPExtractor { - return p.httpEx.Load().([]HTTPExtractor) +func (p *propagators) HTTPExtractors() []HTTPExtractor { + return p.config.httpEx } -func (p *Propagators) HTTPInjectors() []HTTPInjector { - return p.httpIn.Load().([]HTTPInjector) +func (p *propagators) HTTPInjectors() []HTTPInjector { + return p.config.httpIn } type NoopPropagators struct{} -func (NoopPropagators) SetHTTPExtractors(ex ...HTTPExtractor) {} -func (NoopPropagators) SetHTTPInjectors(in ...HTTPInjector) {} -func (NoopPropagators) HTTPExtractors() []HTTPExtractor { return nil } -func (NoopPropagators) HTTPInjectors() []HTTPInjector { return nil } +func (NoopPropagators) HTTPExtractors() []HTTPExtractor { return nil } +func (NoopPropagators) HTTPInjectors() []HTTPInjector { return nil } diff --git a/api/global/global.go b/api/global/global.go index 4b4aacb22a4..12163eb0dcd 100644 --- a/api/global/global.go +++ b/api/global/global.go @@ -79,12 +79,12 @@ func SetMeterProvider(mp metric.Provider) { // is returned. func Propagators() propagation.Propagators { if gp := globalPropagators.Load(); gp != nil { - return gp.(propagators).prop + return gp.(propagators).pr } return propagation.NoopPropagators{} } // SetPropagators registers `p` as the global propagators instance. -func SetPropagators(p Propagators) { - globalPropagators.Store(propatators{prop: p}) +func SetPropagators(p propagation.Propagators) { + globalPropagators.Store(propagators{pr: p}) } From 9e10f6e2b0dff3881df8a8f7ff0bb0a9a391a2e1 Mon Sep 17 00:00:00 2001 From: jmacd Date: Tue, 10 Dec 2019 18:31:56 -0800 Subject: [PATCH 05/21] Remove old interfaces --- api/context/propagation/propagation.go | 7 ++- api/propagators/b3_propagator.go | 11 +++-- api/propagators/text_noop_propagator.go | 41 --------------- api/propagators/text_propagator.go | 55 --------------------- api/propagators/trace_context_propagator.go | 11 +++-- plugin/othttp/handler.go | 5 +- plugin/othttp/wrap.go | 4 +- 7 files changed, 23 insertions(+), 111 deletions(-) delete mode 100644 api/propagators/text_noop_propagator.go delete mode 100644 api/propagators/text_propagator.go diff --git a/api/context/propagation/propagation.go b/api/context/propagation/propagation.go index 814522bdd58..942f846897e 100644 --- a/api/context/propagation/propagation.go +++ b/api/context/propagation/propagation.go @@ -43,7 +43,7 @@ type HTTPInjector interface { // associated with the supplier. It also takes a // correlationCtx whose values will be injected into a carrier // using the supplier. - Inject(context.Context, HTTPSupplier) context.Context + Inject(context.Context, HTTPSupplier) } type Config struct { @@ -56,6 +56,11 @@ type Propagators interface { HTTPInjectors() []HTTPInjector } +type HTTPPropagator interface { + HTTPInjector + HTTPExtractor +} + type Option func(*Config) type propagators struct { diff --git a/api/propagators/b3_propagator.go b/api/propagators/b3_propagator.go index 4753603fbfb..0e11b479c43 100644 --- a/api/propagators/b3_propagator.go +++ b/api/propagators/b3_propagator.go @@ -19,6 +19,7 @@ import ( "fmt" "strings" + "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" dctx "go.opentelemetry.io/otel/api/distributedcontext" "go.opentelemetry.io/otel/api/trace" @@ -50,9 +51,9 @@ type B3 struct { SingleHeader bool } -var _ TextFormat = B3{} +var _ propagation.HTTPPropagator = B3{} -func (b3 B3) Inject(ctx context.Context, supplier Supplier) { +func (b3 B3) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { sc := trace.CurrentSpan(ctx).SpanContext() if sc.IsValid() { if b3.SingleHeader { @@ -76,7 +77,7 @@ func (b3 B3) Inject(ctx context.Context, supplier Supplier) { } // Extract retrieves B3 Headers from the supplier -func (b3 B3) Extract(ctx context.Context, supplier Supplier) (core.SpanContext, dctx.Map) { +func (b3 B3) Extract(ctx context.Context, supplier propagation.HTTPSupplier) (core.SpanContext, dctx.Map) { if b3.SingleHeader { return b3.extractSingleHeader(supplier), dctx.NewEmptyMap() } @@ -90,7 +91,7 @@ func (b3 B3) GetAllKeys() []string { return []string{B3TraceIDHeader, B3SpanIDHeader, B3SampledHeader} } -func (b3 B3) extract(supplier Supplier) core.SpanContext { +func (b3 B3) extract(supplier propagation.HTTPSupplier) core.SpanContext { tid, err := core.TraceIDFromHex(supplier.Get(B3TraceIDHeader)) if err != nil { return core.EmptySpanContext() @@ -125,7 +126,7 @@ func (b3 B3) extract(supplier Supplier) core.SpanContext { return sc } -func (b3 B3) extractSingleHeader(supplier Supplier) core.SpanContext { +func (b3 B3) extractSingleHeader(supplier propagation.HTTPSupplier) core.SpanContext { h := supplier.Get(B3SingleHeader) if h == "" || h == "0" { core.EmptySpanContext() diff --git a/api/propagators/text_noop_propagator.go b/api/propagators/text_noop_propagator.go deleted file mode 100644 index 85429712118..00000000000 --- a/api/propagators/text_noop_propagator.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2019, OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package propagators - -import ( - "context" - - "go.opentelemetry.io/otel/api/core" - dctx "go.opentelemetry.io/otel/api/distributedcontext" -) - -// NoopTextFormat implements TextFormat that does nothing. -type NoopTextFormat struct{} - -var _ TextFormat = NoopTextFormat{} - -// Inject does nothing. -func (np NoopTextFormat) Inject(ctx context.Context, supplier Supplier) { -} - -// Extract does nothing and returns an empty SpanContext -func (np NoopTextFormat) Extract(ctx context.Context, supplier Supplier) (core.SpanContext, dctx.Map) { - return core.EmptySpanContext(), dctx.NewEmptyMap() -} - -// GetAllKeys returns empty list of strings. -func (np NoopTextFormat) GetAllKeys() []string { - return []string{} -} diff --git a/api/propagators/text_propagator.go b/api/propagators/text_propagator.go deleted file mode 100644 index c39c835c595..00000000000 --- a/api/propagators/text_propagator.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2019, OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package propagators - -import ( - "context" - - "go.opentelemetry.io/otel/api/core" - dctx "go.opentelemetry.io/otel/api/distributedcontext" -) - -// TextFormat is an interface that specifies methods to inject and extract SpanContext -// and distributed context into/from a carrier using Supplier interface. -// For example, HTTP Trace Context propagator would encode SpanContext into W3C Trace -// Context Header and set the header into HttpRequest. -type TextFormat interface { - // Inject method retrieves current SpanContext from the ctx, encodes it into propagator - // specific format and then injects the encoded SpanContext using supplier into a carrier - // associated with the supplier. It also takes a correlationCtx whose values will be - // injected into a carrier using the supplier. - Inject(ctx context.Context, supplier Supplier) - - // Extract method retrieves encoded SpanContext using supplier from the associated carrier. - // It decodes the SpanContext and returns it and a dctx of correlated context. - // If no SpanContext was retrieved OR if the retrieved SpanContext is invalid then - // an empty SpanContext is returned. - Extract(ctx context.Context, supplier Supplier) (core.SpanContext, dctx.Map) - - // GetAllKeys returns all the keys that this propagator injects/extracts into/from a - // carrier. The use cases for this are - // * allow pre-allocation of fields, especially in systems like gRPC Metadata - // * allow a single-pass over an iterator (ex OpenTracing has no getter in TextMap) - GetAllKeys() []string -} - -// Supplier is an interface that specifies methods to retrieve and store -// value for a key to an associated carrier. -// Get method retrieves the value for a given key. -// Set method stores the value for a given key. -type Supplier interface { - Get(key string) string - Set(key string, value string) -} diff --git a/api/propagators/trace_context_propagator.go b/api/propagators/trace_context_propagator.go index 91440bccc02..073aa390060 100644 --- a/api/propagators/trace_context_propagator.go +++ b/api/propagators/trace_context_propagator.go @@ -22,6 +22,7 @@ import ( "regexp" "strings" + "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" dctx "go.opentelemetry.io/otel/api/distributedcontext" "go.opentelemetry.io/otel/api/key" @@ -38,10 +39,10 @@ const ( // TraceContext propagates SpanContext in W3C TraceContext format. type TraceContext struct{} -var _ TextFormat = TraceContext{} +var _ propagation.HTTPPropagator = TraceContext{} var traceCtxRegExp = regexp.MustCompile("^[0-9a-f]{2}-[a-f0-9]{32}-[a-f0-9]{16}-[a-f0-9]{2}-?") -func (hp TraceContext) Inject(ctx context.Context, supplier Supplier) { +func (hp TraceContext) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { sc := trace.CurrentSpan(ctx).SpanContext() if sc.IsValid() { h := fmt.Sprintf("%.2x-%s-%.16x-%.2x", @@ -72,13 +73,13 @@ func (hp TraceContext) Inject(ctx context.Context, supplier Supplier) { } func (hp TraceContext) Extract( - ctx context.Context, supplier Supplier, + ctx context.Context, supplier propagation.HTTPSupplier, ) (core.SpanContext, dctx.Map) { return hp.extractSpanContext(ctx, supplier), hp.extractCorrelationCtx(ctx, supplier) } func (hp TraceContext) extractSpanContext( - ctx context.Context, supplier Supplier, + ctx context.Context, supplier propagation.HTTPSupplier, ) core.SpanContext { h := supplier.Get(TraceparentHeader) if h == "" { @@ -146,7 +147,7 @@ func (hp TraceContext) extractSpanContext( return sc } -func (hp TraceContext) extractCorrelationCtx(ctx context.Context, supplier Supplier) dctx.Map { +func (hp TraceContext) extractCorrelationCtx(ctx context.Context, supplier propagation.HTTPSupplier) dctx.Map { correlationContext := supplier.Get(CorrelationContextHeader) if correlationContext == "" { return dctx.NewEmptyMap() diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index 14325e9b3a5..49ab78bf279 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -18,6 +18,7 @@ import ( "io" "net/http" + "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/global" "go.opentelemetry.io/otel/api/propagators" @@ -50,7 +51,7 @@ type Handler struct { handler http.Handler tracer trace.Tracer - prop propagators.TextFormat + prop propagation.HTTPPropagator spanStartOptions []trace.StartOption public bool readEvent bool @@ -80,7 +81,7 @@ func WithPublicEndpoint() Option { // WithPropagator configures the Handler with a specific propagator. If this // option isn't specificed then // go.opentelemetry.io/otel/api/propagators.TraceContext is used. -func WithPropagator(p propagators.TextFormat) Option { +func WithPropagator(p propagation.HTTPPropagator) Option { return func(h *Handler) { h.prop = p } diff --git a/plugin/othttp/wrap.go b/plugin/othttp/wrap.go index 95b3ec6bfe4..890dfeef2d1 100644 --- a/plugin/othttp/wrap.go +++ b/plugin/othttp/wrap.go @@ -19,7 +19,7 @@ import ( "io" "net/http" - "go.opentelemetry.io/otel/api/propagators" + "go.opentelemetry.io/otel/api/context/propagation" ) var _ io.ReadCloser = &bodyWrapper{} @@ -50,7 +50,7 @@ func (w *bodyWrapper) Close() error { var _ http.ResponseWriter = &respWriterWrapper{} type injector interface { - Inject(context.Context, propagators.Supplier) + Inject(context.Context, propagation.HTTPSupplier) } // respWriterWrapper wraps a http.ResponseWriter in order to track the number of From 44cd3db88f481328749d0c2d81fabfdea5b7b658 Mon Sep 17 00:00:00 2001 From: jmacd Date: Tue, 10 Dec 2019 18:51:33 -0800 Subject: [PATCH 06/21] Move trace-specific propagators into sdk/trace/propagation --- plugin/grpctrace/grpctrace.go | 4 +- plugin/httptrace/httptrace.go | 4 +- plugin/othttp/handler.go | 6 +- plugin/othttp/handler_test.go | 4 +- .../trace/propagation}/b3_propagator.go | 2 +- .../b3_propagator_benchmark_test.go | 8 +- .../propagation}/b3_propagator_data_test.go | 260 +++++++++--------- .../trace/propagation}/b3_propagator_test.go | 20 +- .../trace/propagation}/doc.go | 6 +- .../propagation}/trace_context_propagator.go | 2 +- ...trace_context_propagator_benchmark_test.go | 2 +- .../trace_context_propagator_test.go | 18 +- 12 files changed, 168 insertions(+), 168 deletions(-) rename {api/propagators => sdk/trace/propagation}/b3_propagator.go (99%) rename {api/propagators => sdk/trace/propagation}/b3_propagator_benchmark_test.go (93%) rename {api/propagators => sdk/trace/propagation}/b3_propagator_data_test.go (56%) rename {api/propagators => sdk/trace/propagation}/b3_propagator_test.go (89%) rename {api/propagators => sdk/trace/propagation}/doc.go (75%) rename {api/propagators => sdk/trace/propagation}/trace_context_propagator.go (99%) rename {api/propagators => sdk/trace/propagation}/trace_context_propagator_benchmark_test.go (99%) rename {api/propagators => sdk/trace/propagation}/trace_context_propagator_test.go (97%) diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go index 7498775e07e..c22c6f2fe45 100644 --- a/plugin/grpctrace/grpctrace.go +++ b/plugin/grpctrace/grpctrace.go @@ -21,11 +21,11 @@ import ( "google.golang.org/grpc/metadata" "go.opentelemetry.io/otel/api/core" - "go.opentelemetry.io/otel/api/propagators" + "go.opentelemetry.io/otel/sdk/trace/propagation" ) var ( - propagator = propagators.TraceContext{} + propagator = propagation.TraceContext{} ) type metadataSupplier struct { diff --git a/plugin/httptrace/httptrace.go b/plugin/httptrace/httptrace.go index 398b25e87ff..7601972f94d 100644 --- a/plugin/httptrace/httptrace.go +++ b/plugin/httptrace/httptrace.go @@ -20,7 +20,7 @@ import ( "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/key" - "go.opentelemetry.io/otel/api/propagators" + "go.opentelemetry.io/otel/sdk/trace/propagation" ) const ( @@ -31,7 +31,7 @@ var ( HostKey = key.New("http.host") URLKey = key.New("http.url") - propagator = propagators.TraceContext{} + propagator = propagation.TraceContext{} ) // Returns the Attributes, Context Entries, and SpanContext that were encoded by Inject. diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index 49ab78bf279..1d9d008e1b0 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -21,8 +21,8 @@ import ( "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/global" - "go.opentelemetry.io/otel/api/propagators" "go.opentelemetry.io/otel/api/trace" + sdkpropagation "go.opentelemetry.io/otel/sdk/trace/propagation" ) var _ http.Handler = &Handler{} @@ -80,7 +80,7 @@ func WithPublicEndpoint() Option { // WithPropagator configures the Handler with a specific propagator. If this // option isn't specificed then -// go.opentelemetry.io/otel/api/propagators.TraceContext is used. +// go.opentelemetry.io/otel/sdk/trace/propagation.TraceContext is used. func WithPropagator(p propagation.HTTPPropagator) Option { return func(h *Handler) { h.prop = p @@ -131,7 +131,7 @@ func NewHandler(handler http.Handler, operation string, opts ...Option) http.Han h := Handler{handler: handler, operation: operation} defaultOpts := []Option{ WithTracer(global.TraceProvider().Tracer("go.opentelemetry.io/plugin/othttp")), - WithPropagator(propagators.TraceContext{}), + WithPropagator(sdkpropagation.TraceContext{}), WithSpanOptions(trace.WithSpanKind(trace.SpanKindServer)), } diff --git a/plugin/othttp/handler_test.go b/plugin/othttp/handler_test.go index 4bc645d10f3..0336a6b6373 100644 --- a/plugin/othttp/handler_test.go +++ b/plugin/othttp/handler_test.go @@ -20,7 +20,7 @@ import ( "net/http/httptest" "testing" - "go.opentelemetry.io/otel/api/propagators" + "go.opentelemetry.io/otel/sdk/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" ) @@ -47,7 +47,7 @@ func TestBasics(t *testing.T) { if got, expected := rr.Result().StatusCode, http.StatusOK; got != expected { t.Fatalf("got %d, expected %d", got, expected) } - if got := rr.Header().Get(propagators.TraceparentHeader); got == "" { + if got := rr.Header().Get(propagation.TraceparentHeader); got == "" { t.Fatal("expected non empty trace header") } if got, expected := id, uint64(1); got != expected { diff --git a/api/propagators/b3_propagator.go b/sdk/trace/propagation/b3_propagator.go similarity index 99% rename from api/propagators/b3_propagator.go rename to sdk/trace/propagation/b3_propagator.go index 0e11b479c43..3b08ed37447 100644 --- a/api/propagators/b3_propagator.go +++ b/sdk/trace/propagation/b3_propagator.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package propagators +package propagation import ( "context" diff --git a/api/propagators/b3_propagator_benchmark_test.go b/sdk/trace/propagation/b3_propagator_benchmark_test.go similarity index 93% rename from api/propagators/b3_propagator_benchmark_test.go rename to sdk/trace/propagation/b3_propagator_benchmark_test.go index b3917931457..a1e3629d31d 100644 --- a/api/propagators/b3_propagator_benchmark_test.go +++ b/sdk/trace/propagation/b3_propagator_benchmark_test.go @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -package propagators_test +package propagation_test import ( "context" "net/http" "testing" - "go.opentelemetry.io/otel/api/propagators" "go.opentelemetry.io/otel/api/trace" mocktrace "go.opentelemetry.io/otel/internal/trace" + "go.opentelemetry.io/otel/sdk/trace/propagation" ) func BenchmarkExtractB3(b *testing.B) { @@ -53,7 +53,7 @@ func BenchmarkExtractB3(b *testing.B) { } for _, tg := range testGroup { - propagator := propagators.B3{SingleHeader: tg.singleHeader} + propagator := propagation.B3{SingleHeader: tg.singleHeader} for _, tt := range tg.tests { traceBenchmark(tg.name+"/"+tt.name, b, func(b *testing.B) { ctx := context.Background() @@ -97,7 +97,7 @@ func BenchmarkInjectB3(b *testing.B) { for _, tg := range testGroup { id = 0 - propagator := propagators.B3{SingleHeader: tg.singleHeader} + propagator := propagation.B3{SingleHeader: tg.singleHeader} for _, tt := range tg.tests { traceBenchmark(tg.name+"/"+tt.name, b, func(b *testing.B) { req, _ := http.NewRequest("GET", "http://example.com", nil) diff --git a/api/propagators/b3_propagator_data_test.go b/sdk/trace/propagation/b3_propagator_data_test.go similarity index 56% rename from api/propagators/b3_propagator_data_test.go rename to sdk/trace/propagation/b3_propagator_data_test.go index 73389d47916..dc496a2bc56 100644 --- a/api/propagators/b3_propagator_data_test.go +++ b/sdk/trace/propagation/b3_propagator_data_test.go @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -package propagators_test +package propagation_test import ( "go.opentelemetry.io/otel/api/core" - "go.opentelemetry.io/otel/api/propagators" + "go.opentelemetry.io/otel/sdk/trace/propagation" ) type extractTest struct { @@ -29,8 +29,8 @@ var extractMultipleHeaders = []extractTest{ { name: "sampling state defer", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -40,9 +40,9 @@ var extractMultipleHeaders = []extractTest{ { name: "sampling state deny", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3SampledHeader: "0", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3SampledHeader: "0", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -52,9 +52,9 @@ var extractMultipleHeaders = []extractTest{ { name: "sampling state accept", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3SampledHeader: "1", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -65,9 +65,9 @@ var extractMultipleHeaders = []extractTest{ { name: "sampling state as a boolean", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3SampledHeader: "true", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3SampledHeader: "true", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -78,9 +78,9 @@ var extractMultipleHeaders = []extractTest{ { name: "debug flag set", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3DebugFlagHeader: "1", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3DebugFlagHeader: "1", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -94,10 +94,10 @@ var extractMultipleHeaders = []extractTest{ // takes precedence. Hence, it is sampled. name: "debug flag set and sampling state is deny", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3SampledHeader: "0", - propagators.B3DebugFlagHeader: "1", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3SampledHeader: "0", + propagation.B3DebugFlagHeader: "1", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -108,10 +108,10 @@ var extractMultipleHeaders = []extractTest{ { name: "with parent span id", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3SampledHeader: "1", - propagators.B3ParentSpanIDHeader: "00f067aa0ba90200", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3SampledHeader: "1", + propagation.B3ParentSpanIDHeader: "00f067aa0ba90200", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -122,7 +122,7 @@ var extractMultipleHeaders = []extractTest{ { name: "with only sampled state header", headers: map[string]string{ - propagators.B3SampledHeader: "0", + propagation.B3SampledHeader: "0", }, wantSc: core.EmptySpanContext(), }, @@ -132,7 +132,7 @@ var extractSingleHeader = []extractTest{ { name: "sampling state defer", headers: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -142,7 +142,7 @@ var extractSingleHeader = []extractTest{ { name: "sampling state deny", headers: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-0", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-0", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -152,7 +152,7 @@ var extractSingleHeader = []extractTest{ { name: "sampling state accept", headers: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -163,7 +163,7 @@ var extractSingleHeader = []extractTest{ { name: "sampling state debug", headers: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-d", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-d", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -174,7 +174,7 @@ var extractSingleHeader = []extractTest{ { name: "with parent span id", headers: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1-00000000000000cd", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1-00000000000000cd", }, wantSc: core.SpanContext{ TraceID: traceID, @@ -185,7 +185,7 @@ var extractSingleHeader = []extractTest{ { name: "with only sampling state deny", headers: map[string]string{ - propagators.B3SingleHeader: "0", + propagation.B3SingleHeader: "0", }, wantSc: core.EmptySpanContext(), }, @@ -195,143 +195,143 @@ var extractInvalidB3MultipleHeaders = []extractTest{ { name: "trace ID length > 32", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab00000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab00000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "trace ID length >16 and <32", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab0000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab0000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "trace ID length <16", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab0000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab0000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "wrong span ID length", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd0000000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd0000000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "wrong sampled flag length", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "10", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "10", }, }, { name: "bogus trace ID", headers: map[string]string{ - propagators.B3TraceIDHeader: "qw000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "qw000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "bogus span ID", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "qw00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "qw00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "bogus sampled flag", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "d", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "d", }, }, { name: "bogus debug flag (string)", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", - propagators.B3DebugFlagHeader: "d", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", + propagation.B3DebugFlagHeader: "d", }, }, { name: "bogus debug flag (number)", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", - propagators.B3DebugFlagHeader: "10", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", + propagation.B3DebugFlagHeader: "10", }, }, { name: "upper case trace ID", headers: map[string]string{ - propagators.B3TraceIDHeader: "AB000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "AB000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "upper case span ID", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "CD00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "CD00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "zero trace ID", headers: map[string]string{ - propagators.B3TraceIDHeader: "00000000000000000000000000000000", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "00000000000000000000000000000000", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "zero span ID", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SpanIDHeader: "0000000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SpanIDHeader: "0000000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "missing span ID", headers: map[string]string{ - propagators.B3TraceIDHeader: "ab000000000000000000000000000000", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "ab000000000000000000000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "missing trace ID", headers: map[string]string{ - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "missing trace ID with valid single header", headers: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1", - propagators.B3SpanIDHeader: "cd00000000000000", - propagators.B3SampledHeader: "1", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1", + propagation.B3SpanIDHeader: "cd00000000000000", + propagation.B3SampledHeader: "1", }, }, { name: "sampled header set to 1 but trace ID and span ID are missing", headers: map[string]string{ - propagators.B3SampledHeader: "1", + propagation.B3SampledHeader: "1", }, }, } @@ -340,96 +340,96 @@ var extractInvalidB3SingleHeader = []extractTest{ { name: "wrong trace ID length", headers: map[string]string{ - propagators.B3SingleHeader: "ab00000000000000000000000000000000-cd00000000000000-1", + propagation.B3SingleHeader: "ab00000000000000000000000000000000-cd00000000000000-1", }, }, { name: "wrong span ID length", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-cd0000000000000000-1", + propagation.B3SingleHeader: "ab000000000000000000000000000000-cd0000000000000000-1", }, }, { name: "wrong sampled state length", headers: map[string]string{ - propagators.B3SingleHeader: "00-ab000000000000000000000000000000-cd00000000000000-01", + propagation.B3SingleHeader: "00-ab000000000000000000000000000000-cd00000000000000-01", }, }, { name: "wrong parent span ID length", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-1-cd0000000000000000", + propagation.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-1-cd0000000000000000", }, }, { name: "bogus trace ID", headers: map[string]string{ - propagators.B3SingleHeader: "qw000000000000000000000000000000-cd00000000000000-1", + propagation.B3SingleHeader: "qw000000000000000000000000000000-cd00000000000000-1", }, }, { name: "bogus span ID", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-qw00000000000000-1", + propagation.B3SingleHeader: "ab000000000000000000000000000000-qw00000000000000-1", }, }, { name: "bogus sampled flag", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-q", + propagation.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-q", }, }, { name: "bogus parent span ID", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-1-qw00000000000000", + propagation.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-1-qw00000000000000", }, }, { name: "upper case trace ID", headers: map[string]string{ - propagators.B3SingleHeader: "AB000000000000000000000000000000-cd00000000000000-1", + propagation.B3SingleHeader: "AB000000000000000000000000000000-cd00000000000000-1", }, }, { name: "upper case span ID", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-CD00000000000000-1", + propagation.B3SingleHeader: "ab000000000000000000000000000000-CD00000000000000-1", }, }, { name: "upper case parent span ID", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-1-EF00000000000000", + propagation.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-1-EF00000000000000", }, }, { name: "zero trace ID and span ID", headers: map[string]string{ - propagators.B3SingleHeader: "00000000000000000000000000000000-0000000000000000-1", + propagation.B3SingleHeader: "00000000000000000000000000000000-0000000000000000-1", }, }, { name: "missing single header with valid separate headers", headers: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3SampledHeader: "1", }, }, { name: "upper case span ID with valid separate headers", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-CD00000000000000-1", - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "00f067aa0ba902b7", - propagators.B3SampledHeader: "1", + propagation.B3SingleHeader: "ab000000000000000000000000000000-CD00000000000000-1", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "00f067aa0ba902b7", + propagation.B3SampledHeader: "1", }, }, { name: "with sampling set to true", headers: map[string]string{ - propagators.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-true", + propagation.B3SingleHeader: "ab000000000000000000000000000000-cd00000000000000-true", }, }, } @@ -450,12 +450,12 @@ var injectB3MultipleHeader = []injectTest{ TraceFlags: core.TraceFlagsSampled, }, wantHeaders: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "0000000000000001", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "0000000000000001", + propagation.B3SampledHeader: "1", }, doNotWantHeaders: []string{ - propagators.B3ParentSpanIDHeader, + propagation.B3ParentSpanIDHeader, }, }, { @@ -465,12 +465,12 @@ var injectB3MultipleHeader = []injectTest{ SpanID: spanID, }, wantHeaders: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "0000000000000002", - propagators.B3SampledHeader: "0", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "0000000000000002", + propagation.B3SampledHeader: "0", }, doNotWantHeaders: []string{ - propagators.B3ParentSpanIDHeader, + propagation.B3ParentSpanIDHeader, }, }, { @@ -481,12 +481,12 @@ var injectB3MultipleHeader = []injectTest{ TraceFlags: 0xff, }, wantHeaders: map[string]string{ - propagators.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", - propagators.B3SpanIDHeader: "0000000000000003", - propagators.B3SampledHeader: "1", + propagation.B3TraceIDHeader: "4bf92f3577b34da6a3ce929d0e0e4736", + propagation.B3SpanIDHeader: "0000000000000003", + propagation.B3SampledHeader: "1", }, doNotWantHeaders: []string{ - propagators.B3ParentSpanIDHeader, + propagation.B3ParentSpanIDHeader, }, }, } @@ -500,13 +500,13 @@ var injectB3SingleleHeader = []injectTest{ TraceFlags: core.TraceFlagsSampled, }, wantHeaders: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-0000000000000001-1", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-0000000000000001-1", }, doNotWantHeaders: []string{ - propagators.B3TraceIDHeader, - propagators.B3SpanIDHeader, - propagators.B3SampledHeader, - propagators.B3ParentSpanIDHeader, + propagation.B3TraceIDHeader, + propagation.B3SpanIDHeader, + propagation.B3SampledHeader, + propagation.B3ParentSpanIDHeader, }, }, { @@ -516,13 +516,13 @@ var injectB3SingleleHeader = []injectTest{ SpanID: spanID, }, wantHeaders: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-0000000000000002-0", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-0000000000000002-0", }, doNotWantHeaders: []string{ - propagators.B3TraceIDHeader, - propagators.B3SpanIDHeader, - propagators.B3SampledHeader, - propagators.B3ParentSpanIDHeader, + propagation.B3TraceIDHeader, + propagation.B3SpanIDHeader, + propagation.B3SampledHeader, + propagation.B3ParentSpanIDHeader, }, }, { @@ -533,13 +533,13 @@ var injectB3SingleleHeader = []injectTest{ TraceFlags: 0xff, }, wantHeaders: map[string]string{ - propagators.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-0000000000000003-1", + propagation.B3SingleHeader: "4bf92f3577b34da6a3ce929d0e0e4736-0000000000000003-1", }, doNotWantHeaders: []string{ - propagators.B3TraceIDHeader, - propagators.B3SpanIDHeader, - propagators.B3SampledHeader, - propagators.B3ParentSpanIDHeader, + propagation.B3TraceIDHeader, + propagation.B3SpanIDHeader, + propagation.B3SampledHeader, + propagation.B3ParentSpanIDHeader, }, }, } diff --git a/api/propagators/b3_propagator_test.go b/sdk/trace/propagation/b3_propagator_test.go similarity index 89% rename from api/propagators/b3_propagator_test.go rename to sdk/trace/propagation/b3_propagator_test.go index c043258a94b..2ba5cdb327b 100644 --- a/api/propagators/b3_propagator_test.go +++ b/sdk/trace/propagation/b3_propagator_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package propagators_test +package propagation_test import ( "context" @@ -21,9 +21,9 @@ import ( "github.com/google/go-cmp/cmp" - "go.opentelemetry.io/otel/api/propagators" "go.opentelemetry.io/otel/api/trace" mocktrace "go.opentelemetry.io/otel/internal/trace" + "go.opentelemetry.io/otel/sdk/trace/propagation" ) func TestExtractB3(t *testing.T) { @@ -55,7 +55,7 @@ func TestExtractB3(t *testing.T) { } for _, tg := range testGroup { - propagator := propagators.B3{SingleHeader: tg.singleHeader} + propagator := propagation.B3{SingleHeader: tg.singleHeader} for _, tt := range tg.tests { t.Run(tt.name, func(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) @@ -99,7 +99,7 @@ func TestInjectB3(t *testing.T) { for _, tg := range testGroup { id = 0 - propagator := propagators.B3{SingleHeader: tg.singleHeader} + propagator := propagation.B3{SingleHeader: tg.singleHeader} for _, tt := range tg.tests { t.Run(tt.name, func(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) @@ -129,11 +129,11 @@ func TestInjectB3(t *testing.T) { } func TestB3Propagator_GetAllKeys(t *testing.T) { - propagator := propagators.B3{SingleHeader: false} + propagator := propagation.B3{SingleHeader: false} want := []string{ - propagators.B3TraceIDHeader, - propagators.B3SpanIDHeader, - propagators.B3SampledHeader, + propagation.B3TraceIDHeader, + propagation.B3SpanIDHeader, + propagation.B3SampledHeader, } got := propagator.GetAllKeys() if diff := cmp.Diff(got, want); diff != "" { @@ -142,9 +142,9 @@ func TestB3Propagator_GetAllKeys(t *testing.T) { } func TestB3PropagatorWithSingleHeader_GetAllKeys(t *testing.T) { - propagator := propagators.B3{SingleHeader: true} + propagator := propagation.B3{SingleHeader: true} want := []string{ - propagators.B3SingleHeader, + propagation.B3SingleHeader, } got := propagator.GetAllKeys() if diff := cmp.Diff(got, want); diff != "" { diff --git a/api/propagators/doc.go b/sdk/trace/propagation/doc.go similarity index 75% rename from api/propagators/doc.go rename to sdk/trace/propagation/doc.go index 5c7c9816941..26dbff20adb 100644 --- a/api/propagators/doc.go +++ b/sdk/trace/propagation/doc.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package propagators contains interface definition for BinaryFormat and -// TextFormat propagators and implementation of propagators for different +// Package propagation contains interface definition for BinaryFormat and +// TextFormat propagation and implementation of propagation for different // format and suppliers. -package propagators // import "go.opentelemetry.io/otel/api/propagators" +package propagation // import "go.opentelemetry.io/otel/sdk/trace/propagation" diff --git a/api/propagators/trace_context_propagator.go b/sdk/trace/propagation/trace_context_propagator.go similarity index 99% rename from api/propagators/trace_context_propagator.go rename to sdk/trace/propagation/trace_context_propagator.go index 073aa390060..07fa000e74d 100644 --- a/api/propagators/trace_context_propagator.go +++ b/sdk/trace/propagation/trace_context_propagator.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package propagators +package propagation import ( "context" diff --git a/api/propagators/trace_context_propagator_benchmark_test.go b/sdk/trace/propagation/trace_context_propagator_benchmark_test.go similarity index 99% rename from api/propagators/trace_context_propagator_benchmark_test.go rename to sdk/trace/propagation/trace_context_propagator_benchmark_test.go index 7086b281072..3b1e9cd9050 100644 --- a/api/propagators/trace_context_propagator_benchmark_test.go +++ b/sdk/trace/propagation/trace_context_propagator_benchmark_test.go @@ -1,4 +1,4 @@ -package propagators +package propagation import ( "context" diff --git a/api/propagators/trace_context_propagator_test.go b/sdk/trace/propagation/trace_context_propagator_test.go similarity index 97% rename from api/propagators/trace_context_propagator_test.go rename to sdk/trace/propagation/trace_context_propagator_test.go index e9ffcd6aeb1..68e5ea64a77 100644 --- a/api/propagators/trace_context_propagator_test.go +++ b/sdk/trace/propagation/trace_context_propagator_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package propagators_test +package propagation_test import ( "context" @@ -25,9 +25,9 @@ import ( "go.opentelemetry.io/otel/api/core" dctx "go.opentelemetry.io/otel/api/distributedcontext" "go.opentelemetry.io/otel/api/key" - "go.opentelemetry.io/otel/api/propagators" "go.opentelemetry.io/otel/api/trace" mocktrace "go.opentelemetry.io/otel/internal/trace" + "go.opentelemetry.io/otel/sdk/trace/propagation" ) var ( @@ -46,7 +46,7 @@ func mustSpanIDFromHex(s string) (t core.SpanID) { } func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { - var propagator propagators.TraceContext + var propagator propagation.TraceContext tests := []struct { name string header string @@ -139,7 +139,7 @@ func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { } func TestExtractInvalidTraceContextFromHTTPReq(t *testing.T) { - var propagator propagators.TraceContext + var propagator propagation.TraceContext wantSc := core.EmptySpanContext() tests := []struct { name string @@ -231,7 +231,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { Sampled: false, StartSpanID: &id, } - var propagator propagators.TraceContext + var propagator propagation.TraceContext tests := []struct { name string sc core.SpanContext @@ -287,7 +287,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { } func TestExtractValidDistributedContextFromHTTPReq(t *testing.T) { - propagator := propagators.TraceContext{} + propagator := propagation.TraceContext{} tests := []struct { name string header string @@ -375,7 +375,7 @@ func TestExtractValidDistributedContextFromHTTPReq(t *testing.T) { } func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { - propagator := propagators.TraceContext{} + propagator := propagation.TraceContext{} tests := []struct { name string header string @@ -401,7 +401,7 @@ func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { } func TestInjectCorrelationContextToHTTPReq(t *testing.T) { - propagator := propagators.TraceContext{} + propagator := propagation.TraceContext{} tests := []struct { name string kvs []core.KeyValue @@ -475,7 +475,7 @@ func TestInjectCorrelationContextToHTTPReq(t *testing.T) { } func TestTraceContextPropagator_GetAllKeys(t *testing.T) { - var propagator propagators.TraceContext + var propagator propagation.TraceContext want := []string{"Traceparent", "Correlation-Context"} got := propagator.GetAllKeys() if diff := cmp.Diff(got, want); diff != "" { From 2fa23584e78e96b996ddedc4b47f2eb6819fc148 Mon Sep 17 00:00:00 2001 From: jmacd Date: Tue, 10 Dec 2019 18:57:50 -0800 Subject: [PATCH 07/21] api/trace/propagation, that is --- {sdk => api}/trace/propagation/b3_propagator.go | 0 .../trace/propagation/b3_propagator_benchmark_test.go | 2 +- {sdk => api}/trace/propagation/b3_propagator_data_test.go | 2 +- {sdk => api}/trace/propagation/b3_propagator_test.go | 2 +- {sdk => api}/trace/propagation/doc.go | 2 +- {sdk => api}/trace/propagation/trace_context_propagator.go | 0 .../propagation/trace_context_propagator_benchmark_test.go | 0 .../trace/propagation/trace_context_propagator_test.go | 2 +- plugin/grpctrace/grpctrace.go | 2 +- plugin/httptrace/httptrace.go | 2 +- plugin/othttp/handler.go | 4 ++-- plugin/othttp/handler_test.go | 2 +- 12 files changed, 10 insertions(+), 10 deletions(-) rename {sdk => api}/trace/propagation/b3_propagator.go (100%) rename {sdk => api}/trace/propagation/b3_propagator_benchmark_test.go (98%) rename {sdk => api}/trace/propagation/b3_propagator_data_test.go (99%) rename {sdk => api}/trace/propagation/b3_propagator_test.go (98%) rename {sdk => api}/trace/propagation/doc.go (92%) rename {sdk => api}/trace/propagation/trace_context_propagator.go (100%) rename {sdk => api}/trace/propagation/trace_context_propagator_benchmark_test.go (100%) rename {sdk => api}/trace/propagation/trace_context_propagator_test.go (99%) diff --git a/sdk/trace/propagation/b3_propagator.go b/api/trace/propagation/b3_propagator.go similarity index 100% rename from sdk/trace/propagation/b3_propagator.go rename to api/trace/propagation/b3_propagator.go diff --git a/sdk/trace/propagation/b3_propagator_benchmark_test.go b/api/trace/propagation/b3_propagator_benchmark_test.go similarity index 98% rename from sdk/trace/propagation/b3_propagator_benchmark_test.go rename to api/trace/propagation/b3_propagator_benchmark_test.go index a1e3629d31d..44b4d1fb2e1 100644 --- a/sdk/trace/propagation/b3_propagator_benchmark_test.go +++ b/api/trace/propagation/b3_propagator_benchmark_test.go @@ -20,8 +20,8 @@ import ( "testing" "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" - "go.opentelemetry.io/otel/sdk/trace/propagation" ) func BenchmarkExtractB3(b *testing.B) { diff --git a/sdk/trace/propagation/b3_propagator_data_test.go b/api/trace/propagation/b3_propagator_data_test.go similarity index 99% rename from sdk/trace/propagation/b3_propagator_data_test.go rename to api/trace/propagation/b3_propagator_data_test.go index dc496a2bc56..6fdf78dd808 100644 --- a/sdk/trace/propagation/b3_propagator_data_test.go +++ b/api/trace/propagation/b3_propagator_data_test.go @@ -16,7 +16,7 @@ package propagation_test import ( "go.opentelemetry.io/otel/api/core" - "go.opentelemetry.io/otel/sdk/trace/propagation" + "go.opentelemetry.io/otel/api/trace/propagation" ) type extractTest struct { diff --git a/sdk/trace/propagation/b3_propagator_test.go b/api/trace/propagation/b3_propagator_test.go similarity index 98% rename from sdk/trace/propagation/b3_propagator_test.go rename to api/trace/propagation/b3_propagator_test.go index 2ba5cdb327b..a3adf0deb04 100644 --- a/sdk/trace/propagation/b3_propagator_test.go +++ b/api/trace/propagation/b3_propagator_test.go @@ -22,8 +22,8 @@ import ( "github.com/google/go-cmp/cmp" "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" - "go.opentelemetry.io/otel/sdk/trace/propagation" ) func TestExtractB3(t *testing.T) { diff --git a/sdk/trace/propagation/doc.go b/api/trace/propagation/doc.go similarity index 92% rename from sdk/trace/propagation/doc.go rename to api/trace/propagation/doc.go index 26dbff20adb..91a352d461a 100644 --- a/sdk/trace/propagation/doc.go +++ b/api/trace/propagation/doc.go @@ -15,4 +15,4 @@ // Package propagation contains interface definition for BinaryFormat and // TextFormat propagation and implementation of propagation for different // format and suppliers. -package propagation // import "go.opentelemetry.io/otel/sdk/trace/propagation" +package propagation // import "go.opentelemetry.io/otel/api/trace/propagation" diff --git a/sdk/trace/propagation/trace_context_propagator.go b/api/trace/propagation/trace_context_propagator.go similarity index 100% rename from sdk/trace/propagation/trace_context_propagator.go rename to api/trace/propagation/trace_context_propagator.go diff --git a/sdk/trace/propagation/trace_context_propagator_benchmark_test.go b/api/trace/propagation/trace_context_propagator_benchmark_test.go similarity index 100% rename from sdk/trace/propagation/trace_context_propagator_benchmark_test.go rename to api/trace/propagation/trace_context_propagator_benchmark_test.go diff --git a/sdk/trace/propagation/trace_context_propagator_test.go b/api/trace/propagation/trace_context_propagator_test.go similarity index 99% rename from sdk/trace/propagation/trace_context_propagator_test.go rename to api/trace/propagation/trace_context_propagator_test.go index 68e5ea64a77..e36d561a43c 100644 --- a/sdk/trace/propagation/trace_context_propagator_test.go +++ b/api/trace/propagation/trace_context_propagator_test.go @@ -26,8 +26,8 @@ import ( dctx "go.opentelemetry.io/otel/api/distributedcontext" "go.opentelemetry.io/otel/api/key" "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" - "go.opentelemetry.io/otel/sdk/trace/propagation" ) var ( diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go index c22c6f2fe45..63aaa9998b8 100644 --- a/plugin/grpctrace/grpctrace.go +++ b/plugin/grpctrace/grpctrace.go @@ -21,7 +21,7 @@ import ( "google.golang.org/grpc/metadata" "go.opentelemetry.io/otel/api/core" - "go.opentelemetry.io/otel/sdk/trace/propagation" + "go.opentelemetry.io/otel/api/trace/propagation" ) var ( diff --git a/plugin/httptrace/httptrace.go b/plugin/httptrace/httptrace.go index 7601972f94d..a643ce7cb87 100644 --- a/plugin/httptrace/httptrace.go +++ b/plugin/httptrace/httptrace.go @@ -20,7 +20,7 @@ import ( "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/key" - "go.opentelemetry.io/otel/sdk/trace/propagation" + "go.opentelemetry.io/otel/api/trace/propagation" ) const ( diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index 1d9d008e1b0..eec3ad72172 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -22,7 +22,7 @@ import ( "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/global" "go.opentelemetry.io/otel/api/trace" - sdkpropagation "go.opentelemetry.io/otel/sdk/trace/propagation" + sdkpropagation "go.opentelemetry.io/otel/api/trace/propagation" ) var _ http.Handler = &Handler{} @@ -80,7 +80,7 @@ func WithPublicEndpoint() Option { // WithPropagator configures the Handler with a specific propagator. If this // option isn't specificed then -// go.opentelemetry.io/otel/sdk/trace/propagation.TraceContext is used. +// go.opentelemetry.io/otel/api/trace/propagation.TraceContext is used. func WithPropagator(p propagation.HTTPPropagator) Option { return func(h *Handler) { h.prop = p diff --git a/plugin/othttp/handler_test.go b/plugin/othttp/handler_test.go index 0336a6b6373..ea9bf222a48 100644 --- a/plugin/othttp/handler_test.go +++ b/plugin/othttp/handler_test.go @@ -20,7 +20,7 @@ import ( "net/http/httptest" "testing" - "go.opentelemetry.io/otel/sdk/trace/propagation" + "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" ) From 2cab8c813088ff81da39fc733d58904c4295e110 Mon Sep 17 00:00:00 2001 From: jmacd Date: Tue, 10 Dec 2019 21:53:17 -0800 Subject: [PATCH 08/21] Set the default to W3C --- api/global/global.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/api/global/global.go b/api/global/global.go index 12163eb0dcd..eac6e5e305a 100644 --- a/api/global/global.go +++ b/api/global/global.go @@ -20,6 +20,7 @@ import ( "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/metric" "go.opentelemetry.io/otel/api/trace" + tracePropagation "go.opentelemetry.io/otel/api/trace/propagation" ) type ( @@ -40,6 +41,8 @@ var ( globalTracer atomic.Value globalMeter atomic.Value globalPropagators atomic.Value + + defaultPropagators = getDefaultPropagators() ) // TraceProvider returns the registered global trace provider. @@ -81,10 +84,20 @@ func Propagators() propagation.Propagators { if gp := globalPropagators.Load(); gp != nil { return gp.(propagators).pr } - return propagation.NoopPropagators{} + return defaultPropagators } // SetPropagators registers `p` as the global propagators instance. func SetPropagators(p propagation.Propagators) { globalPropagators.Store(propagators{pr: p}) } + +// getDefaultPropagators returns a default Propagators, configured +// with W3C trace context propagation. +func getDefaultPropagators() propagation.Propagators { + inex := tracePropagation.TraceContext{} + return propagation.New( + propagation.WithExtractors(inex), + propagation.WithInjectors(inex), + ) +} From 1d627a5bb4377e9df91013cacf9a6a2fd2a1bf65 Mon Sep 17 00:00:00 2001 From: jmacd Date: Tue, 10 Dec 2019 21:53:27 -0800 Subject: [PATCH 09/21] Let Extract return Context --- api/context/propagation/propagation.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/api/context/propagation/propagation.go b/api/context/propagation/propagation.go index 942f846897e..daff46ba5c3 100644 --- a/api/context/propagation/propagation.go +++ b/api/context/propagation/propagation.go @@ -16,9 +16,6 @@ package propagation import ( "context" - - "go.opentelemetry.io/otel/api/core" - dctx "go.opentelemetry.io/otel/api/distributedcontext" ) // HTTPSupplier is implemented by http.Headers. @@ -33,7 +30,7 @@ type HTTPExtractor interface { // and returns it and a dctx of correlated context. If no // SpanContext was retrieved OR if the retrieved SpanContext // is invalid then an empty SpanContext is returned. - Extract(context.Context, HTTPSupplier) (core.SpanContext, dctx.Map) + Extract(context.Context, HTTPSupplier) context.Context } type HTTPInjector interface { From 8705dd407bc79b85e8cd7a07fec8ab333160ada2 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 00:18:46 -0800 Subject: [PATCH 10/21] Builds, test fails (accidental grpc del) --- .../baggage}/map.go | 2 +- .../baggage}/map_test.go | 5 +- .../baggage/propagation/propagation.go | 110 ++++++ api/context/propagation/propagation.go | 16 + api/distributedcontext/context.go | 56 --- api/trace/propagation/b3_propagator.go | 30 +- .../b3_propagator_benchmark_test.go | 2 +- api/trace/propagation/b3_propagator_test.go | 2 +- api/trace/propagation/context.go | 24 ++ .../propagation/trace_context_propagator.go | 96 +---- .../trace_context_propagator_test.go | 372 +++++++++--------- bridge/opentracing/internal/mock.go | 23 +- plugin/grpctrace/grpctrace.go | 64 --- plugin/httptrace/httptrace.go | 15 +- plugin/othttp/handler.go | 21 +- plugin/othttp/wrap.go | 9 +- 16 files changed, 407 insertions(+), 440 deletions(-) rename api/{distributedcontext => context/baggage}/map.go (98%) rename api/{distributedcontext => context/baggage}/map_test.go (97%) create mode 100644 api/context/baggage/propagation/propagation.go delete mode 100644 api/distributedcontext/context.go create mode 100644 api/trace/propagation/context.go delete mode 100644 plugin/grpctrace/grpctrace.go diff --git a/api/distributedcontext/map.go b/api/context/baggage/map.go similarity index 98% rename from api/distributedcontext/map.go rename to api/context/baggage/map.go index 8dff15689ed..15b10c2e165 100644 --- a/api/distributedcontext/map.go +++ b/api/context/baggage/map.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package distributedcontext +package baggage import ( "go.opentelemetry.io/otel/api/core" diff --git a/api/distributedcontext/map_test.go b/api/context/baggage/map_test.go similarity index 97% rename from api/distributedcontext/map_test.go rename to api/context/baggage/map_test.go index 15aed53f158..ca3461cdea4 100644 --- a/api/distributedcontext/map_test.go +++ b/api/context/baggage/map_test.go @@ -12,12 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -package distributedcontext +package baggage import ( "fmt" "testing" + "go.opentelemetry.io/otel/api/context/baggage" "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/key" ) @@ -25,7 +26,7 @@ import ( func TestMap(t *testing.T) { for _, testcase := range []struct { name string - value MapUpdate + value baggage.MapUpdate init []int wantKVs []core.KeyValue }{ diff --git a/api/context/baggage/propagation/propagation.go b/api/context/baggage/propagation/propagation.go new file mode 100644 index 00000000000..37bc9e484b7 --- /dev/null +++ b/api/context/baggage/propagation/propagation.go @@ -0,0 +1,110 @@ +package propagation + +import ( + "context" + "net/url" + "strings" + + "go.opentelemetry.io/otel/api/context/baggage" + "go.opentelemetry.io/otel/api/context/propagation" + "go.opentelemetry.io/otel/api/core" + "go.opentelemetry.io/otel/api/key" +) + +type ctxEntriesType struct{} + +var ( + CorrelationContextHeader = "Correlation-Context" + + ctxEntriesKey = &ctxEntriesType{} +) + +// CorrelationContext propagates Key:Values in W3C TraceContext format. +type CorrelationContext struct{} + +var _ propagation.HTTPPropagator = CorrelationContext{} + +func WithMap(ctx context.Context, m baggage.Map) context.Context { + return context.WithValue(ctx, ctxEntriesKey, m) +} + +func NewContext(ctx context.Context, keyvalues ...core.KeyValue) context.Context { + return WithMap(ctx, FromContext(ctx).Apply(baggage.MapUpdate{ + MultiKV: keyvalues, + })) +} + +func FromContext(ctx context.Context) baggage.Map { + if m, ok := ctx.Value(ctxEntriesKey).(baggage.Map); ok { + return m + } + return baggage.NewEmptyMap() +} + +func (CorrelationContext) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { + correlationCtx := FromContext(ctx) + firstIter := true + var headerValueBuilder strings.Builder + correlationCtx.Foreach(func(kv core.KeyValue) bool { + if !firstIter { + headerValueBuilder.WriteRune(',') + } + firstIter = false + headerValueBuilder.WriteString(url.QueryEscape(strings.TrimSpace((string)(kv.Key)))) + headerValueBuilder.WriteRune('=') + headerValueBuilder.WriteString(url.QueryEscape(strings.TrimSpace(kv.Value.Emit()))) + return true + }) + if headerValueBuilder.Len() > 0 { + headerString := headerValueBuilder.String() + supplier.Set(CorrelationContextHeader, headerString) + } +} + +func (CorrelationContext) Extract(ctx context.Context, supplier propagation.HTTPSupplier) context.Context { + correlationContext := supplier.Get(CorrelationContextHeader) + if correlationContext == "" { + return WithMap(ctx, baggage.NewEmptyMap()) + } + + contextValues := strings.Split(correlationContext, ",") + keyValues := make([]core.KeyValue, 0, len(contextValues)) + for _, contextValue := range contextValues { + valueAndProps := strings.Split(contextValue, ";") + if len(valueAndProps) < 1 { + continue + } + nameValue := strings.Split(valueAndProps[0], "=") + if len(nameValue) < 2 { + continue + } + name, err := url.QueryUnescape(nameValue[0]) + if err != nil { + continue + } + trimmedName := strings.TrimSpace(name) + value, err := url.QueryUnescape(nameValue[1]) + if err != nil { + continue + } + trimmedValue := strings.TrimSpace(value) + + // TODO (skaris): properties defiend https://w3c.github.io/correlation-context/, are currently + // just put as part of the value. + var trimmedValueWithProps strings.Builder + trimmedValueWithProps.WriteString(trimmedValue) + for _, prop := range valueAndProps[1:] { + trimmedValueWithProps.WriteRune(';') + trimmedValueWithProps.WriteString(prop) + } + + keyValues = append(keyValues, key.New(trimmedName).String(trimmedValueWithProps.String())) + } + return WithMap(ctx, baggage.NewMap(baggage.MapUpdate{ + MultiKV: keyValues, + })) +} + +func (CorrelationContext) GetAllKeys() []string { + return []string{CorrelationContextHeader} +} diff --git a/api/context/propagation/propagation.go b/api/context/propagation/propagation.go index daff46ba5c3..673f3073630 100644 --- a/api/context/propagation/propagation.go +++ b/api/context/propagation/propagation.go @@ -56,6 +56,9 @@ type Propagators interface { type HTTPPropagator interface { HTTPInjector HTTPExtractor + + // GetAllKeys returns the HTTP header names used. + GetAllKeys() []string } type Option func(*Config) @@ -98,3 +101,16 @@ type NoopPropagators struct{} func (NoopPropagators) HTTPExtractors() []HTTPExtractor { return nil } func (NoopPropagators) HTTPInjectors() []HTTPInjector { return nil } + +func Extract(ctx context.Context, props Propagators, supplier HTTPSupplier) context.Context { + for _, ex := range props.HTTPExtractors() { + ctx = ex.Extract(ctx, supplier) + } + return ctx +} + +func Inject(ctx context.Context, props Propagators, supplier HTTPSupplier) { + for _, in := range props.HTTPInjectors() { + in.Inject(ctx, supplier) + } +} diff --git a/api/distributedcontext/context.go b/api/distributedcontext/context.go deleted file mode 100644 index e1e62ff4f8e..00000000000 --- a/api/distributedcontext/context.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2019, OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package distributedcontext - -import ( - "context" - "runtime/pprof" - - "go.opentelemetry.io/otel/api/core" -) - -type ctxEntriesType struct{} - -var ( - ctxEntriesKey = &ctxEntriesType{} -) - -func WithMap(ctx context.Context, m Map) context.Context { - return context.WithValue(ctx, ctxEntriesKey, m) -} - -func NewContext(ctx context.Context, keyvalues ...core.KeyValue) context.Context { - return WithMap(ctx, FromContext(ctx).Apply(MapUpdate{ - MultiKV: keyvalues, - })) -} - -func FromContext(ctx context.Context) Map { - if m, ok := ctx.Value(ctxEntriesKey).(Map); ok { - return m - } - return NewEmptyMap() -} - -// Note: the golang pprof.Do API forces this memory allocation, we -// should file an issue about that. (There's a TODO in the source.) -func Do(ctx context.Context, f func(ctx context.Context)) { - m := FromContext(ctx) - keyvals := make([]string, 0, 2*len(m.m)) - for k, v := range m.m { - keyvals = append(keyvals, string(k), v.value.Emit()) - } - pprof.Do(ctx, pprof.Labels(keyvals...), f) -} diff --git a/api/trace/propagation/b3_propagator.go b/api/trace/propagation/b3_propagator.go index 3b08ed37447..f899e440a4a 100644 --- a/api/trace/propagation/b3_propagator.go +++ b/api/trace/propagation/b3_propagator.go @@ -21,7 +21,6 @@ import ( "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" - dctx "go.opentelemetry.io/otel/api/distributedcontext" "go.opentelemetry.io/otel/api/trace" ) @@ -77,21 +76,17 @@ func (b3 B3) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { } // Extract retrieves B3 Headers from the supplier -func (b3 B3) Extract(ctx context.Context, supplier propagation.HTTPSupplier) (core.SpanContext, dctx.Map) { +func (b3 B3) Extract(ctx context.Context, supplier propagation.HTTPSupplier) context.Context { + var sc core.SpanContext if b3.SingleHeader { - return b3.extractSingleHeader(supplier), dctx.NewEmptyMap() + sc = b3.extractSingleHeader(ctx, supplier) + } else { + sc = b3.extract(ctx, supplier) } - return b3.extract(supplier), dctx.NewEmptyMap() + return WithSpanContext(ctx, sc) } -func (b3 B3) GetAllKeys() []string { - if b3.SingleHeader { - return []string{B3SingleHeader} - } - return []string{B3TraceIDHeader, B3SpanIDHeader, B3SampledHeader} -} - -func (b3 B3) extract(supplier propagation.HTTPSupplier) core.SpanContext { +func (b3 B3) extract(ctx context.Context, supplier propagation.HTTPSupplier) core.SpanContext { tid, err := core.TraceIDFromHex(supplier.Get(B3TraceIDHeader)) if err != nil { return core.EmptySpanContext() @@ -126,10 +121,10 @@ func (b3 B3) extract(supplier propagation.HTTPSupplier) core.SpanContext { return sc } -func (b3 B3) extractSingleHeader(supplier propagation.HTTPSupplier) core.SpanContext { +func (b3 B3) extractSingleHeader(ctx context.Context, supplier propagation.HTTPSupplier) core.SpanContext { h := supplier.Get(B3SingleHeader) if h == "" || h == "0" { - core.EmptySpanContext() + return core.EmptySpanContext() } sc := core.SpanContext{} parts := strings.Split(h, "-") @@ -203,3 +198,10 @@ func (b3 B3) extracDebugFlag(debug string) (flag byte, ok bool) { } return 0, false } + +func (b3 B3) GetAllKeys() []string { + if b3.SingleHeader { + return []string{B3SingleHeader} + } + return []string{B3TraceIDHeader, B3SpanIDHeader, B3SampledHeader} +} diff --git a/api/trace/propagation/b3_propagator_benchmark_test.go b/api/trace/propagation/b3_propagator_benchmark_test.go index 44b4d1fb2e1..23121faea03 100644 --- a/api/trace/propagation/b3_propagator_benchmark_test.go +++ b/api/trace/propagation/b3_propagator_benchmark_test.go @@ -64,7 +64,7 @@ func BenchmarkExtractB3(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - _, _ = propagator.Extract(ctx, req.Header) + _ = propagator.Extract(ctx, req.Header) } }) } diff --git a/api/trace/propagation/b3_propagator_test.go b/api/trace/propagation/b3_propagator_test.go index a3adf0deb04..cde766ac318 100644 --- a/api/trace/propagation/b3_propagator_test.go +++ b/api/trace/propagation/b3_propagator_test.go @@ -64,7 +64,7 @@ func TestExtractB3(t *testing.T) { } ctx := context.Background() - gotSc, _ := propagator.Extract(ctx, req.Header) + gotSc := propagator.Extract(ctx, req.Header) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("%s: %s: -got +want %s", tg.name, tt.name, diff) } diff --git a/api/trace/propagation/context.go b/api/trace/propagation/context.go new file mode 100644 index 00000000000..9137bb9c60b --- /dev/null +++ b/api/trace/propagation/context.go @@ -0,0 +1,24 @@ +package propagation + +import ( + "context" + + "go.opentelemetry.io/otel/api/core" +) + +type spanContextType struct{} + +var ( + spanContextKey = &spanContextType{} +) + +func WithSpanContext(ctx context.Context, sc core.SpanContext) context.Context { + return context.WithValue(ctx, spanContextKey, sc) +} + +func FromContext(ctx context.Context) core.SpanContext { + if sc, ok := ctx.Value(spanContextKey).(core.SpanContext); ok { + return sc + } + return core.EmptySpanContext() +} diff --git a/api/trace/propagation/trace_context_propagator.go b/api/trace/propagation/trace_context_propagator.go index 07fa000e74d..1a769645798 100644 --- a/api/trace/propagation/trace_context_propagator.go +++ b/api/trace/propagation/trace_context_propagator.go @@ -18,14 +18,11 @@ import ( "context" "encoding/hex" "fmt" - "net/url" "regexp" "strings" "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" - dctx "go.opentelemetry.io/otel/api/distributedcontext" - "go.opentelemetry.io/otel/api/key" "go.opentelemetry.io/otel/api/trace" ) @@ -44,43 +41,24 @@ var traceCtxRegExp = regexp.MustCompile("^[0-9a-f]{2}-[a-f0-9]{32}-[a-f0-9]{16}- func (hp TraceContext) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { sc := trace.CurrentSpan(ctx).SpanContext() - if sc.IsValid() { - h := fmt.Sprintf("%.2x-%s-%.16x-%.2x", - supportedVersion, - sc.TraceIDString(), - sc.SpanID, - sc.TraceFlags&core.TraceFlagsSampled) - supplier.Set(TraceparentHeader, h) - } - - correlationCtx := dctx.FromContext(ctx) - firstIter := true - var headerValueBuilder strings.Builder - correlationCtx.Foreach(func(kv core.KeyValue) bool { - if !firstIter { - headerValueBuilder.WriteRune(',') - } - firstIter = false - headerValueBuilder.WriteString(url.QueryEscape(strings.TrimSpace((string)(kv.Key)))) - headerValueBuilder.WriteRune('=') - headerValueBuilder.WriteString(url.QueryEscape(strings.TrimSpace(kv.Value.Emit()))) - return true - }) - if headerValueBuilder.Len() > 0 { - headerString := headerValueBuilder.String() - supplier.Set(CorrelationContextHeader, headerString) - } + if !sc.IsValid() { + return + } + h := fmt.Sprintf("%.2x-%s-%.16x-%.2x", + supportedVersion, + sc.TraceIDString(), + sc.SpanID, + sc.TraceFlags&core.TraceFlagsSampled) + supplier.Set(TraceparentHeader, h) } -func (hp TraceContext) Extract( +func (tc TraceContext) Extract( ctx context.Context, supplier propagation.HTTPSupplier, -) (core.SpanContext, dctx.Map) { - return hp.extractSpanContext(ctx, supplier), hp.extractCorrelationCtx(ctx, supplier) +) context.Context { + return WithSpanContext(ctx, tc.extract(supplier)) } -func (hp TraceContext) extractSpanContext( - ctx context.Context, supplier propagation.HTTPSupplier, -) core.SpanContext { +func (TraceContext) extract(supplier propagation.HTTPSupplier) core.SpanContext { h := supplier.Get(TraceparentHeader) if h == "" { return core.EmptySpanContext() @@ -147,50 +125,6 @@ func (hp TraceContext) extractSpanContext( return sc } -func (hp TraceContext) extractCorrelationCtx(ctx context.Context, supplier propagation.HTTPSupplier) dctx.Map { - correlationContext := supplier.Get(CorrelationContextHeader) - if correlationContext == "" { - return dctx.NewEmptyMap() - } - - contextValues := strings.Split(correlationContext, ",") - keyValues := make([]core.KeyValue, 0, len(contextValues)) - for _, contextValue := range contextValues { - valueAndProps := strings.Split(contextValue, ";") - if len(valueAndProps) < 1 { - continue - } - nameValue := strings.Split(valueAndProps[0], "=") - if len(nameValue) < 2 { - continue - } - name, err := url.QueryUnescape(nameValue[0]) - if err != nil { - continue - } - trimmedName := strings.TrimSpace(name) - value, err := url.QueryUnescape(nameValue[1]) - if err != nil { - continue - } - trimmedValue := strings.TrimSpace(value) - - // TODO (skaris): properties defiend https://w3c.github.io/correlation-context/, are currently - // just put as part of the value. - var trimmedValueWithProps strings.Builder - trimmedValueWithProps.WriteString(trimmedValue) - for _, prop := range valueAndProps[1:] { - trimmedValueWithProps.WriteRune(';') - trimmedValueWithProps.WriteString(prop) - } - - keyValues = append(keyValues, key.New(trimmedName).String(trimmedValueWithProps.String())) - } - return dctx.NewMap(dctx.MapUpdate{ - MultiKV: keyValues, - }) -} - -func (hp TraceContext) GetAllKeys() []string { - return []string{TraceparentHeader, CorrelationContextHeader} +func (TraceContext) GetAllKeys() []string { + return []string{TraceparentHeader} } diff --git a/api/trace/propagation/trace_context_propagator_test.go b/api/trace/propagation/trace_context_propagator_test.go index e36d561a43c..f1864d09a4c 100644 --- a/api/trace/propagation/trace_context_propagator_test.go +++ b/api/trace/propagation/trace_context_propagator_test.go @@ -17,14 +17,11 @@ package propagation_test import ( "context" "net/http" - "strings" "testing" "github.com/google/go-cmp/cmp" "go.opentelemetry.io/otel/api/core" - dctx "go.opentelemetry.io/otel/api/distributedcontext" - "go.opentelemetry.io/otel/api/key" "go.opentelemetry.io/otel/api/trace" "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" @@ -130,7 +127,7 @@ func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { req.Header.Set("traceparent", tt.header) ctx := context.Background() - gotSc, _ := propagator.Extract(ctx, req.Header) + gotSc := propagator.Extract(ctx, req.Header) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -217,7 +214,7 @@ func TestExtractInvalidTraceContextFromHTTPReq(t *testing.T) { req.Header.Set("traceparent", tt.header) ctx := context.Background() - gotSc, _ := propagator.Extract(ctx, req.Header) + gotSc := propagator.Extract(ctx, req.Header) if diff := cmp.Diff(gotSc, wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -286,197 +283,200 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { } } -func TestExtractValidDistributedContextFromHTTPReq(t *testing.T) { - propagator := propagation.TraceContext{} - tests := []struct { - name string - header string - wantKVs []core.KeyValue - }{ - { - name: "valid w3cHeader", - header: "key1=val1,key2=val2", - wantKVs: []core.KeyValue{ - key.New("key1").String("val1"), - key.New("key2").String("val2"), - }, - }, - { - name: "valid w3cHeader with spaces", - header: "key1 = val1, key2 =val2 ", - wantKVs: []core.KeyValue{ - key.New("key1").String("val1"), - key.New("key2").String("val2"), - }, - }, - { - name: "valid w3cHeader with properties", - header: "key1=val1,key2=val2;prop=1", - wantKVs: []core.KeyValue{ - key.New("key1").String("val1"), - key.New("key2").String("val2;prop=1"), - }, - }, - { - name: "valid header with url-escaped comma", - header: "key1=val1,key2=val2%2Cval3", - wantKVs: []core.KeyValue{ - key.New("key1").String("val1"), - key.New("key2").String("val2,val3"), - }, - }, - { - name: "valid header with an invalid header", - header: "key1=val1,key2=val2,a,val3", - wantKVs: []core.KeyValue{ - key.New("key1").String("val1"), - key.New("key2").String("val2"), - }, - }, - { - name: "valid header with no value", - header: "key1=,key2=val2", - wantKVs: []core.KeyValue{ - key.New("key1").String(""), - key.New("key2").String("val2"), - }, - }, - } +// TODO move these to baggage - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - req, _ := http.NewRequest("GET", "http://example.com", nil) - req.Header.Set("Correlation-Context", tt.header) +// func TestExtractValidDistributedContextFromHTTPReq(t *testing.T) { - ctx := context.Background() - _, gotCorCtx := propagator.Extract(ctx, req.Header) - wantCorCtx := dctx.NewMap(dctx.MapUpdate{MultiKV: tt.wantKVs}) - if gotCorCtx.Len() != wantCorCtx.Len() { - t.Errorf( - "Got and Want CorCtx are not the same size %d != %d", - gotCorCtx.Len(), - wantCorCtx.Len(), - ) - } - totalDiff := "" - wantCorCtx.Foreach(func(kv core.KeyValue) bool { - val, _ := gotCorCtx.Value(kv.Key) - diff := cmp.Diff(kv, core.KeyValue{Key: kv.Key, Value: val}, cmp.AllowUnexported(core.Value{})) - if diff != "" { - totalDiff += diff + "\n" - } - return true - }) - if totalDiff != "" { - t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, totalDiff) - } - }) - } -} +// propagator := propagation.TraceContext{} +// tests := []struct { +// name string +// header string +// wantKVs []core.KeyValue +// }{ +// { +// name: "valid w3cHeader", +// header: "key1=val1,key2=val2", +// wantKVs: []core.KeyValue{ +// key.New("key1").String("val1"), +// key.New("key2").String("val2"), +// }, +// }, +// { +// name: "valid w3cHeader with spaces", +// header: "key1 = val1, key2 =val2 ", +// wantKVs: []core.KeyValue{ +// key.New("key1").String("val1"), +// key.New("key2").String("val2"), +// }, +// }, +// { +// name: "valid w3cHeader with properties", +// header: "key1=val1,key2=val2;prop=1", +// wantKVs: []core.KeyValue{ +// key.New("key1").String("val1"), +// key.New("key2").String("val2;prop=1"), +// }, +// }, +// { +// name: "valid header with url-escaped comma", +// header: "key1=val1,key2=val2%2Cval3", +// wantKVs: []core.KeyValue{ +// key.New("key1").String("val1"), +// key.New("key2").String("val2,val3"), +// }, +// }, +// { +// name: "valid header with an invalid header", +// header: "key1=val1,key2=val2,a,val3", +// wantKVs: []core.KeyValue{ +// key.New("key1").String("val1"), +// key.New("key2").String("val2"), +// }, +// }, +// { +// name: "valid header with no value", +// header: "key1=,key2=val2", +// wantKVs: []core.KeyValue{ +// key.New("key1").String(""), +// key.New("key2").String("val2"), +// }, +// }, +// } -func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { - propagator := propagation.TraceContext{} - tests := []struct { - name string - header string - }{ - { - name: "no key values", - header: "header1", - }, - } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// req, _ := http.NewRequest("GET", "http://example.com", nil) +// req.Header.Set("Correlation-Context", tt.header) - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - req, _ := http.NewRequest("GET", "http://example.com", nil) - req.Header.Set("Correlation-Context", tt.header) +// ctx := context.Background() +// _, gotCorCtx := propagator.Extract(ctx, req.Header) +// wantCorCtx := dctx.NewMap(dctx.MapUpdate{MultiKV: tt.wantKVs}) +// if gotCorCtx.Len() != wantCorCtx.Len() { +// t.Errorf( +// "Got and Want CorCtx are not the same size %d != %d", +// gotCorCtx.Len(), +// wantCorCtx.Len(), +// ) +// } +// totalDiff := "" +// wantCorCtx.Foreach(func(kv core.KeyValue) bool { +// val, _ := gotCorCtx.Value(kv.Key) +// diff := cmp.Diff(kv, core.KeyValue{Key: kv.Key, Value: val}, cmp.AllowUnexported(core.Value{})) +// if diff != "" { +// totalDiff += diff + "\n" +// } +// return true +// }) +// if totalDiff != "" { +// t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, totalDiff) +// } +// }) +// } +// } - ctx := context.Background() - _, gotCorCtx := propagator.Extract(ctx, req.Header) - if gotCorCtx.Len() != 0 { - t.Errorf("Got and Want CorCtx are not the same size %d != %d", gotCorCtx.Len(), 0) - } - }) - } -} +// func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { +// propagator := propagation.TraceContext{} +// tests := []struct { +// name string +// header string +// }{ +// { +// name: "no key values", +// header: "header1", +// }, +// } -func TestInjectCorrelationContextToHTTPReq(t *testing.T) { - propagator := propagation.TraceContext{} - tests := []struct { - name string - kvs []core.KeyValue - wantInHeader []string - wantedLen int - }{ - { - name: "two simple values", - kvs: []core.KeyValue{ - key.New("key1").String("val1"), - key.New("key2").String("val2"), - }, - wantInHeader: []string{"key1=val1", "key2=val2"}, - }, - { - name: "two values with escaped chars", - kvs: []core.KeyValue{ - key.New("key1").String("val1,val2"), - key.New("key2").String("val3=4"), - }, - wantInHeader: []string{"key1=val1%2Cval2", "key2=val3%3D4"}, - }, - { - name: "values of non-string types", - kvs: []core.KeyValue{ - key.New("key1").Bool(true), - key.New("key2").Int(123), - key.New("key3").Int64(123), - key.New("key4").Int32(123), - key.New("key5").Uint(123), - key.New("key6").Uint32(123), - key.New("key7").Uint64(123), - key.New("key8").Float64(123.567), - key.New("key9").Float32(123.567), - }, - wantInHeader: []string{ - "key1=true", - "key2=123", - "key3=123", - "key4=123", - "key5=123", - "key6=123", - "key7=123", - "key8=123.567", - "key9=123.567", - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - req, _ := http.NewRequest("GET", "http://example.com", nil) - ctx := dctx.WithMap(context.Background(), dctx.NewMap(dctx.MapUpdate{MultiKV: tt.kvs})) - propagator.Inject(ctx, req.Header) +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// req, _ := http.NewRequest("GET", "http://example.com", nil) +// req.Header.Set("Correlation-Context", tt.header) - gotHeader := req.Header.Get("Correlation-Context") - wantedLen := len(strings.Join(tt.wantInHeader, ",")) - if wantedLen != len(gotHeader) { - t.Errorf( - "%s: Inject Correlation-Context incorrect length %d != %d.", tt.name, tt.wantedLen, len(gotHeader), - ) - } - for _, inHeader := range tt.wantInHeader { - if !strings.Contains(gotHeader, inHeader) { - t.Errorf( - "%s: Inject Correlation-Context missing part of header: %s in %s", tt.name, inHeader, gotHeader, - ) - } - } - }) - } -} +// ctx := context.Background() +// gotCorCtx := propagator.Extract(ctx, req.Header) +// if gotCorCtx.Len() != 0 { +// t.Errorf("Got and Want CorCtx are not the same size %d != %d", gotCorCtx.Len(), 0) +// } +// }) +// } +// } + +// func TestInjectCorrelationContextToHTTPReq(t *testing.T) { +// propagator := propagation.TraceContext{} +// tests := []struct { +// name string +// kvs []core.KeyValue +// wantInHeader []string +// wantedLen int +// }{ +// { +// name: "two simple values", +// kvs: []core.KeyValue{ +// key.New("key1").String("val1"), +// key.New("key2").String("val2"), +// }, +// wantInHeader: []string{"key1=val1", "key2=val2"}, +// }, +// { +// name: "two values with escaped chars", +// kvs: []core.KeyValue{ +// key.New("key1").String("val1,val2"), +// key.New("key2").String("val3=4"), +// }, +// wantInHeader: []string{"key1=val1%2Cval2", "key2=val3%3D4"}, +// }, +// { +// name: "values of non-string types", +// kvs: []core.KeyValue{ +// key.New("key1").Bool(true), +// key.New("key2").Int(123), +// key.New("key3").Int64(123), +// key.New("key4").Int32(123), +// key.New("key5").Uint(123), +// key.New("key6").Uint32(123), +// key.New("key7").Uint64(123), +// key.New("key8").Float64(123.567), +// key.New("key9").Float32(123.567), +// }, +// wantInHeader: []string{ +// "key1=true", +// "key2=123", +// "key3=123", +// "key4=123", +// "key5=123", +// "key6=123", +// "key7=123", +// "key8=123.567", +// "key9=123.567", +// }, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// req, _ := http.NewRequest("GET", "http://example.com", nil) +// ctx := dctx.WithMap(context.Background(), dctx.NewMap(dctx.MapUpdate{MultiKV: tt.kvs})) +// propagator.Inject(ctx, req.Header) + +// gotHeader := req.Header.Get("Correlation-Context") +// wantedLen := len(strings.Join(tt.wantInHeader, ",")) +// if wantedLen != len(gotHeader) { +// t.Errorf( +// "%s: Inject Correlation-Context incorrect length %d != %d.", tt.name, tt.wantedLen, len(gotHeader), +// ) +// } +// for _, inHeader := range tt.wantInHeader { +// if !strings.Contains(gotHeader, inHeader) { +// t.Errorf( +// "%s: Inject Correlation-Context missing part of header: %s in %s", tt.name, inHeader, gotHeader, +// ) +// } +// } +// }) +// } +// } func TestTraceContextPropagator_GetAllKeys(t *testing.T) { var propagator propagation.TraceContext - want := []string{"Traceparent", "Correlation-Context"} + want := []string{"Traceparent"} got := propagator.GetAllKeys() if diff := cmp.Diff(got, want); diff != "" { t.Errorf("GetAllKeys: -got +want %s", diff) diff --git a/bridge/opentracing/internal/mock.go b/bridge/opentracing/internal/mock.go index 741b1d4cde9..d83553a8033 100644 --- a/bridge/opentracing/internal/mock.go +++ b/bridge/opentracing/internal/mock.go @@ -22,8 +22,9 @@ import ( "google.golang.org/grpc/codes" + otelbaggage "go.opentelemetry.io/otel/api/context/baggage" + otelctxprop "go.opentelemetry.io/otel/api/context/baggage/propagation" otelcore "go.opentelemetry.io/otel/api/core" - oteldctx "go.opentelemetry.io/otel/api/distributedcontext" otelkey "go.opentelemetry.io/otel/api/key" oteltrace "go.opentelemetry.io/otel/api/trace" @@ -44,7 +45,7 @@ type MockContextKeyValue struct { } type MockTracer struct { - Resources oteldctx.Map + Resources otelbaggage.Map FinishedSpans []*MockSpan SpareTraceIDs []otelcore.TraceID SpareSpanIDs []otelcore.SpanID @@ -59,7 +60,7 @@ var _ migration.DeferredContextSetupTracerExtension = &MockTracer{} func NewMockTracer() *MockTracer { return &MockTracer{ - Resources: oteldctx.NewEmptyMap(), + Resources: otelbaggage.NewEmptyMap(), FinishedSpans: nil, SpareTraceIDs: nil, SpareSpanIDs: nil, @@ -94,7 +95,7 @@ func (t *MockTracer) Start(ctx context.Context, name string, opts ...oteltrace.S officialTracer: t, spanContext: spanContext, recording: spanOpts.Record, - Attributes: oteldctx.NewMap(oteldctx.MapUpdate{ + Attributes: otelbaggage.NewMap(otelbaggage.MapUpdate{ MultiKV: spanOpts.Attributes, }), StartTime: startTime, @@ -193,10 +194,10 @@ func (t *MockTracer) DeferredContextSetupHook(ctx context.Context, span oteltrac } type MockEvent struct { - CtxAttributes oteldctx.Map + CtxAttributes otelbaggage.Map Timestamp time.Time Msg string - Attributes oteldctx.Map + Attributes otelbaggage.Map } type MockSpan struct { @@ -206,7 +207,7 @@ type MockSpan struct { SpanKind oteltrace.SpanKind recording bool - Attributes oteldctx.Map + Attributes otelbaggage.Map StartTime time.Time EndTime time.Time ParentSpanID otelcore.SpanID @@ -237,12 +238,12 @@ func (s *MockSpan) SetError(v bool) { } func (s *MockSpan) SetAttributes(attributes ...otelcore.KeyValue) { - s.applyUpdate(oteldctx.MapUpdate{ + s.applyUpdate(otelbaggage.MapUpdate{ MultiKV: attributes, }) } -func (s *MockSpan) applyUpdate(update oteldctx.MapUpdate) { +func (s *MockSpan) applyUpdate(update otelbaggage.MapUpdate) { s.Attributes = s.Attributes.Apply(update) } @@ -274,10 +275,10 @@ func (s *MockSpan) AddEvent(ctx context.Context, msg string, attrs ...otelcore.K func (s *MockSpan) AddEventWithTimestamp(ctx context.Context, timestamp time.Time, msg string, attrs ...otelcore.KeyValue) { s.Events = append(s.Events, MockEvent{ - CtxAttributes: oteldctx.FromContext(ctx), + CtxAttributes: otelctxprop.FromContext(ctx), Timestamp: timestamp, Msg: msg, - Attributes: oteldctx.NewMap(oteldctx.MapUpdate{ + Attributes: otelbaggage.NewMap(otelbaggage.MapUpdate{ MultiKV: attrs, }), }) diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go deleted file mode 100644 index 63aaa9998b8..00000000000 --- a/plugin/grpctrace/grpctrace.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2019, OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package grpctrace - -import ( - "context" - "strings" - - "google.golang.org/grpc/metadata" - - "go.opentelemetry.io/otel/api/core" - "go.opentelemetry.io/otel/api/trace/propagation" -) - -var ( - propagator = propagation.TraceContext{} -) - -type metadataSupplier struct { - metadata *metadata.MD -} - -func (s *metadataSupplier) Get(key string) string { - values := s.metadata.Get(key) - return strings.Join(values, ",") -} - -func (s *metadataSupplier) Set(key string, value string) { - s.metadata.Append(key, value) -} - -// Inject injects the gRPC call metadata into the Span -func Inject(ctx context.Context, metadata *metadata.MD) { - propagator.Inject(ctx, &metadataSupplier{ - metadata: metadata, - }) -} - -// Extract returns the Context Entries and SpanContext that were encoded by Inject. -func Extract(ctx context.Context, metadata *metadata.MD) ([]core.KeyValue, core.SpanContext) { - spanContext, correlationCtx := propagator.Extract(ctx, &metadataSupplier{ - metadata: metadata, - }) - - var correlationCtxKVs []core.KeyValue - correlationCtx.Foreach(func(kv core.KeyValue) bool { - correlationCtxKVs = append(correlationCtxKVs, kv) - return true - }) - - return correlationCtxKVs, spanContext -} diff --git a/plugin/httptrace/httptrace.go b/plugin/httptrace/httptrace.go index a643ce7cb87..f28ab3c36d0 100644 --- a/plugin/httptrace/httptrace.go +++ b/plugin/httptrace/httptrace.go @@ -18,9 +18,12 @@ import ( "context" "net/http" + bpropagation "go.opentelemetry.io/otel/api/context/baggage/propagation" + "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" + "go.opentelemetry.io/otel/api/global" "go.opentelemetry.io/otel/api/key" - "go.opentelemetry.io/otel/api/trace/propagation" + tpropagation "go.opentelemetry.io/otel/api/trace/propagation" ) const ( @@ -30,13 +33,11 @@ const ( var ( HostKey = key.New("http.host") URLKey = key.New("http.url") - - propagator = propagation.TraceContext{} ) // Returns the Attributes, Context Entries, and SpanContext that were encoded by Inject. func Extract(ctx context.Context, req *http.Request) ([]core.KeyValue, []core.KeyValue, core.SpanContext) { - sc, correlationCtx := propagator.Extract(ctx, req.Header) + ctx = propagation.Extract(ctx, global.Propagators(), req.Header) attrs := []core.KeyValue{ URLKey.String(req.URL.String()), @@ -44,14 +45,14 @@ func Extract(ctx context.Context, req *http.Request) ([]core.KeyValue, []core.Ke } var correlationCtxKVs []core.KeyValue - correlationCtx.Foreach(func(kv core.KeyValue) bool { + bpropagation.FromContext(ctx).Foreach(func(kv core.KeyValue) bool { correlationCtxKVs = append(correlationCtxKVs, kv) return true }) - return attrs, correlationCtxKVs, sc + return attrs, correlationCtxKVs, tpropagation.FromContext(ctx) } func Inject(ctx context.Context, req *http.Request) { - propagator.Inject(ctx, req.Header) + propagation.Inject(ctx, global.Propagators(), req.Header) } diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index eec3ad72172..1bdad7438a7 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -22,7 +22,7 @@ import ( "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/global" "go.opentelemetry.io/otel/api/trace" - sdkpropagation "go.opentelemetry.io/otel/api/trace/propagation" + tpropagation "go.opentelemetry.io/otel/api/trace/propagation" ) var _ http.Handler = &Handler{} @@ -51,7 +51,7 @@ type Handler struct { handler http.Handler tracer trace.Tracer - prop propagation.HTTPPropagator + props propagation.Propagators spanStartOptions []trace.StartOption public bool readEvent bool @@ -78,12 +78,12 @@ func WithPublicEndpoint() Option { } } -// WithPropagator configures the Handler with a specific propagator. If this -// option isn't specificed then -// go.opentelemetry.io/otel/api/trace/propagation.TraceContext is used. -func WithPropagator(p propagation.HTTPPropagator) Option { +// WithPropagators configures the Handler with specific propagators. If this +// option isn't specified then +// go.opentelemetry.io/otel/api/global/Propagators are used. +func WithPropagators(ps propagation.Propagators) Option { return func(h *Handler) { - h.prop = p + h.props = ps } } @@ -131,7 +131,7 @@ func NewHandler(handler http.Handler, operation string, opts ...Option) http.Han h := Handler{handler: handler, operation: operation} defaultOpts := []Option{ WithTracer(global.TraceProvider().Tracer("go.opentelemetry.io/plugin/othttp")), - WithPropagator(sdkpropagation.TraceContext{}), + WithPropagators(global.Propagators()), WithSpanOptions(trace.WithSpanKind(trace.SpanKindServer)), } @@ -146,7 +146,8 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { opts := append([]trace.StartOption{}, h.spanStartOptions...) // start with the configured options // TODO: do something with the correlation context - sc, _ := h.prop.Extract(r.Context(), r.Header) + ctx := propagation.Extract(r.Context(), h.props, r.Header) + sc := tpropagation.FromContext(ctx) if sc.IsValid() { // not a valid span context, so no link / parent relationship to establish var opt trace.StartOption if h.public { @@ -178,7 +179,7 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } - rww := &respWriterWrapper{ResponseWriter: w, record: writeRecordFunc, ctx: ctx, injector: h.prop} + rww := &respWriterWrapper{ResponseWriter: w, record: writeRecordFunc, ctx: ctx, props: h.props} // Setup basic span attributes before calling handler.ServeHTTP so that they // are available to be mutated by the handler if needed. diff --git a/plugin/othttp/wrap.go b/plugin/othttp/wrap.go index 890dfeef2d1..5d0f84fd228 100644 --- a/plugin/othttp/wrap.go +++ b/plugin/othttp/wrap.go @@ -49,10 +49,6 @@ func (w *bodyWrapper) Close() error { var _ http.ResponseWriter = &respWriterWrapper{} -type injector interface { - Inject(context.Context, propagation.HTTPSupplier) -} - // respWriterWrapper wraps a http.ResponseWriter in order to track the number of // bytes written, the last error, and to catch the returned statusCode // TODO: The wrapped http.ResponseWriter doesn't implement any of the optional @@ -64,7 +60,8 @@ type respWriterWrapper struct { // used to inject the header ctx context.Context - injector + + props propagation.Propagators written int64 statusCode int @@ -95,6 +92,6 @@ func (w *respWriterWrapper) WriteHeader(statusCode int) { } w.wroteHeader = true w.statusCode = statusCode - w.injector.Inject(w.ctx, w.Header()) + propagation.Inject(w.ctx, w.props, w.Header()) w.ResponseWriter.WriteHeader(statusCode) } From e51503df2f27137a5ccbcb93b338d14619ecb5f2 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 00:50:21 -0800 Subject: [PATCH 11/21] Restore tests --- api/context/baggage/map_test.go | 3 +- api/trace/propagation/b3_propagator_test.go | 27 ++++---- .../trace_context_propagator_test.go | 19 +++--- plugin/grpctrace/grpctrace.go | 64 +++++++++++++++++++ 4 files changed, 92 insertions(+), 21 deletions(-) create mode 100644 plugin/grpctrace/grpctrace.go diff --git a/api/context/baggage/map_test.go b/api/context/baggage/map_test.go index ca3461cdea4..4fe1e5b2645 100644 --- a/api/context/baggage/map_test.go +++ b/api/context/baggage/map_test.go @@ -18,7 +18,6 @@ import ( "fmt" "testing" - "go.opentelemetry.io/otel/api/context/baggage" "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/key" ) @@ -26,7 +25,7 @@ import ( func TestMap(t *testing.T) { for _, testcase := range []struct { name string - value baggage.MapUpdate + value MapUpdate init []int wantKVs []core.KeyValue }{ diff --git a/api/trace/propagation/b3_propagator_test.go b/api/trace/propagation/b3_propagator_test.go index cde766ac318..015ff746ea4 100644 --- a/api/trace/propagation/b3_propagator_test.go +++ b/api/trace/propagation/b3_propagator_test.go @@ -21,8 +21,9 @@ import ( "github.com/google/go-cmp/cmp" + "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/trace" - "go.opentelemetry.io/otel/api/trace/propagation" + tpropagation "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" ) @@ -55,7 +56,9 @@ func TestExtractB3(t *testing.T) { } for _, tg := range testGroup { - propagator := propagation.B3{SingleHeader: tg.singleHeader} + propagator := tpropagation.B3{SingleHeader: tg.singleHeader} + props := propagation.New(propagation.WithExtractors(propagator)) + for _, tt := range tg.tests { t.Run(tt.name, func(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) @@ -64,7 +67,8 @@ func TestExtractB3(t *testing.T) { } ctx := context.Background() - gotSc := propagator.Extract(ctx, req.Header) + ctx = propagation.Extract(ctx, props, req.Header) + gotSc := tpropagation.FromContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("%s: %s: -got +want %s", tg.name, tt.name, diff) } @@ -99,7 +103,8 @@ func TestInjectB3(t *testing.T) { for _, tg := range testGroup { id = 0 - propagator := propagation.B3{SingleHeader: tg.singleHeader} + propagator := tpropagation.B3{SingleHeader: tg.singleHeader} + props := propagation.New(propagation.WithInjectors(propagator)) for _, tt := range tg.tests { t.Run(tt.name, func(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) @@ -109,7 +114,7 @@ func TestInjectB3(t *testing.T) { } else { ctx, _ = mockTracer.Start(ctx, "inject") } - propagator.Inject(ctx, req.Header) + propagation.Inject(ctx, props, req.Header) for h, v := range tt.wantHeaders { got, want := req.Header.Get(h), v @@ -129,11 +134,11 @@ func TestInjectB3(t *testing.T) { } func TestB3Propagator_GetAllKeys(t *testing.T) { - propagator := propagation.B3{SingleHeader: false} + propagator := tpropagation.B3{SingleHeader: false} want := []string{ - propagation.B3TraceIDHeader, - propagation.B3SpanIDHeader, - propagation.B3SampledHeader, + tpropagation.B3TraceIDHeader, + tpropagation.B3SpanIDHeader, + tpropagation.B3SampledHeader, } got := propagator.GetAllKeys() if diff := cmp.Diff(got, want); diff != "" { @@ -142,9 +147,9 @@ func TestB3Propagator_GetAllKeys(t *testing.T) { } func TestB3PropagatorWithSingleHeader_GetAllKeys(t *testing.T) { - propagator := propagation.B3{SingleHeader: true} + propagator := tpropagation.B3{SingleHeader: true} want := []string{ - propagation.B3SingleHeader, + tpropagation.B3SingleHeader, } got := propagator.GetAllKeys() if diff := cmp.Diff(got, want); diff != "" { diff --git a/api/trace/propagation/trace_context_propagator_test.go b/api/trace/propagation/trace_context_propagator_test.go index f1864d09a4c..b8e89e42960 100644 --- a/api/trace/propagation/trace_context_propagator_test.go +++ b/api/trace/propagation/trace_context_propagator_test.go @@ -21,9 +21,10 @@ import ( "github.com/google/go-cmp/cmp" + "go.opentelemetry.io/otel/api/context/propagation" "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/trace" - "go.opentelemetry.io/otel/api/trace/propagation" + tpropagation "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" ) @@ -43,7 +44,7 @@ func mustSpanIDFromHex(s string) (t core.SpanID) { } func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { - var propagator propagation.TraceContext + props := propagation.New(propagation.WithExtractors(tpropagation.TraceContext{})) tests := []struct { name string header string @@ -127,7 +128,8 @@ func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { req.Header.Set("traceparent", tt.header) ctx := context.Background() - gotSc := propagator.Extract(ctx, req.Header) + ctx = propagation.Extract(ctx, props, req.Header) + gotSc := tpropagation.FromContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -136,8 +138,8 @@ func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { } func TestExtractInvalidTraceContextFromHTTPReq(t *testing.T) { - var propagator propagation.TraceContext wantSc := core.EmptySpanContext() + props := propagation.New(propagation.WithExtractors(tpropagation.TraceContext{})) tests := []struct { name string header string @@ -214,7 +216,8 @@ func TestExtractInvalidTraceContextFromHTTPReq(t *testing.T) { req.Header.Set("traceparent", tt.header) ctx := context.Background() - gotSc := propagator.Extract(ctx, req.Header) + ctx = propagation.Extract(ctx, props, req.Header) + gotSc := tpropagation.FromContext(ctx) if diff := cmp.Diff(gotSc, wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -228,7 +231,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { Sampled: false, StartSpanID: &id, } - var propagator propagation.TraceContext + props := propagation.New(propagation.WithInjectors(tpropagation.TraceContext{})) tests := []struct { name string sc core.SpanContext @@ -273,7 +276,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { if tt.sc.IsValid() { ctx, _ = mockTracer.Start(ctx, "inject", trace.ChildOf(tt.sc)) } - propagator.Inject(ctx, req.Header) + propagation.Inject(ctx, props, req.Header) gotHeader := req.Header.Get("traceparent") if diff := cmp.Diff(gotHeader, tt.wantHeader); diff != "" { @@ -475,7 +478,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { // } func TestTraceContextPropagator_GetAllKeys(t *testing.T) { - var propagator propagation.TraceContext + var propagator tpropagation.TraceContext want := []string{"Traceparent"} got := propagator.GetAllKeys() if diff := cmp.Diff(got, want); diff != "" { diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go new file mode 100644 index 00000000000..b8411094867 --- /dev/null +++ b/plugin/grpctrace/grpctrace.go @@ -0,0 +1,64 @@ +// Copyright 2019, OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grpctrace + +import ( + "context" + "strings" + + "google.golang.org/grpc/metadata" + + bpropagation "go.opentelemetry.io/otel/api/context/baggage/propagation" + "go.opentelemetry.io/otel/api/context/propagation" + "go.opentelemetry.io/otel/api/core" + "go.opentelemetry.io/otel/api/global" + tpropagation "go.opentelemetry.io/otel/api/trace/propagation" +) + +type metadataSupplier struct { + metadata *metadata.MD +} + +func (s *metadataSupplier) Get(key string) string { + values := s.metadata.Get(key) + return strings.Join(values, ",") +} + +func (s *metadataSupplier) Set(key string, value string) { + s.metadata.Append(key, value) +} + +// Inject injects the gRPC call metadata into the Span +func Inject(ctx context.Context, metadata *metadata.MD) { + propagation.Inject(ctx, global.Propagators(), &metadataSupplier{ + metadata: metadata, + }) +} + +// Extract returns the Context Entries and SpanContext that were encoded by Inject. +func Extract(ctx context.Context, metadata *metadata.MD) ([]core.KeyValue, core.SpanContext) { + ctx = propagation.Extract(ctx, global.Propagators(), &metadataSupplier{ + metadata: metadata, + }) + + spanContext := tpropagation.FromContext(ctx) + var correlationCtxKVs []core.KeyValue + bpropagation.FromContext(ctx).Foreach(func(kv core.KeyValue) bool { + correlationCtxKVs = append(correlationCtxKVs, kv) + return true + }) + + return correlationCtxKVs, spanContext +} From af23712f42dd7b89ec69c43bca34564456bd9b65 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 00:58:44 -0800 Subject: [PATCH 12/21] Restore baggage tests --- .../baggage/propagation/propagation_test.go | 214 ++++++++++++++++++ .../trace_context_propagator_test.go | 191 ---------------- 2 files changed, 214 insertions(+), 191 deletions(-) create mode 100644 api/context/baggage/propagation/propagation_test.go diff --git a/api/context/baggage/propagation/propagation_test.go b/api/context/baggage/propagation/propagation_test.go new file mode 100644 index 00000000000..591d1027a0d --- /dev/null +++ b/api/context/baggage/propagation/propagation_test.go @@ -0,0 +1,214 @@ +package propagation_test + +import ( + "context" + "net/http" + "strings" + "testing" + + "github.com/google/go-cmp/cmp" + "go.opentelemetry.io/otel/api/context/baggage" + bpropagation "go.opentelemetry.io/otel/api/context/baggage/propagation" + "go.opentelemetry.io/otel/api/context/propagation" + "go.opentelemetry.io/otel/api/core" + "go.opentelemetry.io/otel/api/key" +) + +func TestExtractValidDistributedContextFromHTTPReq(t *testing.T) { + props := propagation.New(propagation.WithExtractors(bpropagation.CorrelationContext{})) + tests := []struct { + name string + header string + wantKVs []core.KeyValue + }{ + { + name: "valid w3cHeader", + header: "key1=val1,key2=val2", + wantKVs: []core.KeyValue{ + key.New("key1").String("val1"), + key.New("key2").String("val2"), + }, + }, + { + name: "valid w3cHeader with spaces", + header: "key1 = val1, key2 =val2 ", + wantKVs: []core.KeyValue{ + key.New("key1").String("val1"), + key.New("key2").String("val2"), + }, + }, + { + name: "valid w3cHeader with properties", + header: "key1=val1,key2=val2;prop=1", + wantKVs: []core.KeyValue{ + key.New("key1").String("val1"), + key.New("key2").String("val2;prop=1"), + }, + }, + { + name: "valid header with url-escaped comma", + header: "key1=val1,key2=val2%2Cval3", + wantKVs: []core.KeyValue{ + key.New("key1").String("val1"), + key.New("key2").String("val2,val3"), + }, + }, + { + name: "valid header with an invalid header", + header: "key1=val1,key2=val2,a,val3", + wantKVs: []core.KeyValue{ + key.New("key1").String("val1"), + key.New("key2").String("val2"), + }, + }, + { + name: "valid header with no value", + header: "key1=,key2=val2", + wantKVs: []core.KeyValue{ + key.New("key1").String(""), + key.New("key2").String("val2"), + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req, _ := http.NewRequest("GET", "http://example.com", nil) + req.Header.Set("Correlation-Context", tt.header) + + ctx := context.Background() + ctx = propagation.Extract(ctx, props, req.Header) + gotCorCtx := bpropagation.FromContext(ctx) + wantCorCtx := baggage.NewMap(baggage.MapUpdate{MultiKV: tt.wantKVs}) + if gotCorCtx.Len() != wantCorCtx.Len() { + t.Errorf( + "Got and Want CorCtx are not the same size %d != %d", + gotCorCtx.Len(), + wantCorCtx.Len(), + ) + } + totalDiff := "" + wantCorCtx.Foreach(func(kv core.KeyValue) bool { + val, _ := gotCorCtx.Value(kv.Key) + diff := cmp.Diff(kv, core.KeyValue{Key: kv.Key, Value: val}, cmp.AllowUnexported(core.Value{})) + if diff != "" { + totalDiff += diff + "\n" + } + return true + }) + if totalDiff != "" { + t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, totalDiff) + } + }) + } +} + +func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { + props := propagation.New(propagation.WithExtractors(bpropagation.CorrelationContext{})) + tests := []struct { + name string + header string + }{ + { + name: "no key values", + header: "header1", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req, _ := http.NewRequest("GET", "http://example.com", nil) + req.Header.Set("Correlation-Context", tt.header) + + ctx := context.Background() + ctx = propagation.Extract(ctx, props, req.Header) + gotCorCtx := bpropagation.FromContext(ctx) + if gotCorCtx.Len() != 0 { + t.Errorf("Got and Want CorCtx are not the same size %d != %d", gotCorCtx.Len(), 0) + } + }) + } +} + +func TestInjectCorrelationContextToHTTPReq(t *testing.T) { + props := propagation.New(propagation.WithInjectors(bpropagation.CorrelationContext{})) + tests := []struct { + name string + kvs []core.KeyValue + wantInHeader []string + wantedLen int + }{ + { + name: "two simple values", + kvs: []core.KeyValue{ + key.New("key1").String("val1"), + key.New("key2").String("val2"), + }, + wantInHeader: []string{"key1=val1", "key2=val2"}, + }, + { + name: "two values with escaped chars", + kvs: []core.KeyValue{ + key.New("key1").String("val1,val2"), + key.New("key2").String("val3=4"), + }, + wantInHeader: []string{"key1=val1%2Cval2", "key2=val3%3D4"}, + }, + { + name: "values of non-string types", + kvs: []core.KeyValue{ + key.New("key1").Bool(true), + key.New("key2").Int(123), + key.New("key3").Int64(123), + key.New("key4").Int32(123), + key.New("key5").Uint(123), + key.New("key6").Uint32(123), + key.New("key7").Uint64(123), + key.New("key8").Float64(123.567), + key.New("key9").Float32(123.567), + }, + wantInHeader: []string{ + "key1=true", + "key2=123", + "key3=123", + "key4=123", + "key5=123", + "key6=123", + "key7=123", + "key8=123.567", + "key9=123.567", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + req, _ := http.NewRequest("GET", "http://example.com", nil) + ctx := bpropagation.WithMap(context.Background(), baggage.NewMap(baggage.MapUpdate{MultiKV: tt.kvs})) + propagation.Inject(ctx, props, req.Header) + + gotHeader := req.Header.Get("Correlation-Context") + wantedLen := len(strings.Join(tt.wantInHeader, ",")) + if wantedLen != len(gotHeader) { + t.Errorf( + "%s: Inject Correlation-Context incorrect length %d != %d.", tt.name, tt.wantedLen, len(gotHeader), + ) + } + for _, inHeader := range tt.wantInHeader { + if !strings.Contains(gotHeader, inHeader) { + t.Errorf( + "%s: Inject Correlation-Context missing part of header: %s in %s", tt.name, inHeader, gotHeader, + ) + } + } + }) + } +} + +func TestTraceContextPropagator_GetAllKeys(t *testing.T) { + var propagator bpropagation.CorrelationContext + want := []string{"Correlation-Context"} + got := propagator.GetAllKeys() + if diff := cmp.Diff(got, want); diff != "" { + t.Errorf("GetAllKeys: -got +want %s", diff) + } +} diff --git a/api/trace/propagation/trace_context_propagator_test.go b/api/trace/propagation/trace_context_propagator_test.go index b8e89e42960..e38d37ca2b0 100644 --- a/api/trace/propagation/trace_context_propagator_test.go +++ b/api/trace/propagation/trace_context_propagator_test.go @@ -286,197 +286,6 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { } } -// TODO move these to baggage - -// func TestExtractValidDistributedContextFromHTTPReq(t *testing.T) { - -// propagator := propagation.TraceContext{} -// tests := []struct { -// name string -// header string -// wantKVs []core.KeyValue -// }{ -// { -// name: "valid w3cHeader", -// header: "key1=val1,key2=val2", -// wantKVs: []core.KeyValue{ -// key.New("key1").String("val1"), -// key.New("key2").String("val2"), -// }, -// }, -// { -// name: "valid w3cHeader with spaces", -// header: "key1 = val1, key2 =val2 ", -// wantKVs: []core.KeyValue{ -// key.New("key1").String("val1"), -// key.New("key2").String("val2"), -// }, -// }, -// { -// name: "valid w3cHeader with properties", -// header: "key1=val1,key2=val2;prop=1", -// wantKVs: []core.KeyValue{ -// key.New("key1").String("val1"), -// key.New("key2").String("val2;prop=1"), -// }, -// }, -// { -// name: "valid header with url-escaped comma", -// header: "key1=val1,key2=val2%2Cval3", -// wantKVs: []core.KeyValue{ -// key.New("key1").String("val1"), -// key.New("key2").String("val2,val3"), -// }, -// }, -// { -// name: "valid header with an invalid header", -// header: "key1=val1,key2=val2,a,val3", -// wantKVs: []core.KeyValue{ -// key.New("key1").String("val1"), -// key.New("key2").String("val2"), -// }, -// }, -// { -// name: "valid header with no value", -// header: "key1=,key2=val2", -// wantKVs: []core.KeyValue{ -// key.New("key1").String(""), -// key.New("key2").String("val2"), -// }, -// }, -// } - -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// req, _ := http.NewRequest("GET", "http://example.com", nil) -// req.Header.Set("Correlation-Context", tt.header) - -// ctx := context.Background() -// _, gotCorCtx := propagator.Extract(ctx, req.Header) -// wantCorCtx := dctx.NewMap(dctx.MapUpdate{MultiKV: tt.wantKVs}) -// if gotCorCtx.Len() != wantCorCtx.Len() { -// t.Errorf( -// "Got and Want CorCtx are not the same size %d != %d", -// gotCorCtx.Len(), -// wantCorCtx.Len(), -// ) -// } -// totalDiff := "" -// wantCorCtx.Foreach(func(kv core.KeyValue) bool { -// val, _ := gotCorCtx.Value(kv.Key) -// diff := cmp.Diff(kv, core.KeyValue{Key: kv.Key, Value: val}, cmp.AllowUnexported(core.Value{})) -// if diff != "" { -// totalDiff += diff + "\n" -// } -// return true -// }) -// if totalDiff != "" { -// t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, totalDiff) -// } -// }) -// } -// } - -// func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { -// propagator := propagation.TraceContext{} -// tests := []struct { -// name string -// header string -// }{ -// { -// name: "no key values", -// header: "header1", -// }, -// } - -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// req, _ := http.NewRequest("GET", "http://example.com", nil) -// req.Header.Set("Correlation-Context", tt.header) - -// ctx := context.Background() -// gotCorCtx := propagator.Extract(ctx, req.Header) -// if gotCorCtx.Len() != 0 { -// t.Errorf("Got and Want CorCtx are not the same size %d != %d", gotCorCtx.Len(), 0) -// } -// }) -// } -// } - -// func TestInjectCorrelationContextToHTTPReq(t *testing.T) { -// propagator := propagation.TraceContext{} -// tests := []struct { -// name string -// kvs []core.KeyValue -// wantInHeader []string -// wantedLen int -// }{ -// { -// name: "two simple values", -// kvs: []core.KeyValue{ -// key.New("key1").String("val1"), -// key.New("key2").String("val2"), -// }, -// wantInHeader: []string{"key1=val1", "key2=val2"}, -// }, -// { -// name: "two values with escaped chars", -// kvs: []core.KeyValue{ -// key.New("key1").String("val1,val2"), -// key.New("key2").String("val3=4"), -// }, -// wantInHeader: []string{"key1=val1%2Cval2", "key2=val3%3D4"}, -// }, -// { -// name: "values of non-string types", -// kvs: []core.KeyValue{ -// key.New("key1").Bool(true), -// key.New("key2").Int(123), -// key.New("key3").Int64(123), -// key.New("key4").Int32(123), -// key.New("key5").Uint(123), -// key.New("key6").Uint32(123), -// key.New("key7").Uint64(123), -// key.New("key8").Float64(123.567), -// key.New("key9").Float32(123.567), -// }, -// wantInHeader: []string{ -// "key1=true", -// "key2=123", -// "key3=123", -// "key4=123", -// "key5=123", -// "key6=123", -// "key7=123", -// "key8=123.567", -// "key9=123.567", -// }, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// req, _ := http.NewRequest("GET", "http://example.com", nil) -// ctx := dctx.WithMap(context.Background(), dctx.NewMap(dctx.MapUpdate{MultiKV: tt.kvs})) -// propagator.Inject(ctx, req.Header) - -// gotHeader := req.Header.Get("Correlation-Context") -// wantedLen := len(strings.Join(tt.wantInHeader, ",")) -// if wantedLen != len(gotHeader) { -// t.Errorf( -// "%s: Inject Correlation-Context incorrect length %d != %d.", tt.name, tt.wantedLen, len(gotHeader), -// ) -// } -// for _, inHeader := range tt.wantInHeader { -// if !strings.Contains(gotHeader, inHeader) { -// t.Errorf( -// "%s: Inject Correlation-Context missing part of header: %s in %s", tt.name, inHeader, gotHeader, -// ) -// } -// } -// }) -// } -// } - func TestTraceContextPropagator_GetAllKeys(t *testing.T) { var propagator tpropagation.TraceContext want := []string{"Traceparent"} From a6e7161827f4ffec24411d5429a869cd9c521162 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 01:09:32 -0800 Subject: [PATCH 13/21] Rename Extract->ExtractHTTP etc --- .../baggage/propagation/propagation.go | 7 +++++ .../baggage/propagation/propagation_test.go | 6 ++-- api/context/propagation/propagation.go | 30 ++++++++++++++----- api/trace/propagation/b3_propagator_test.go | 4 +-- .../trace_context_propagator_test.go | 6 ++-- plugin/grpctrace/grpctrace.go | 4 +-- plugin/httptrace/httptrace.go | 4 +-- plugin/othttp/handler.go | 2 +- plugin/othttp/wrap.go | 2 +- 9 files changed, 44 insertions(+), 21 deletions(-) diff --git a/api/context/baggage/propagation/propagation.go b/api/context/baggage/propagation/propagation.go index 37bc9e484b7..12e9a2810cd 100644 --- a/api/context/baggage/propagation/propagation.go +++ b/api/context/baggage/propagation/propagation.go @@ -14,6 +14,7 @@ import ( type ctxEntriesType struct{} var ( + // CorrelationContextHeader is specified by W3C. CorrelationContextHeader = "Correlation-Context" ctxEntriesKey = &ctxEntriesType{} @@ -24,16 +25,19 @@ type CorrelationContext struct{} var _ propagation.HTTPPropagator = CorrelationContext{} +// WithMap enters a baggage.Map into a new Context. func WithMap(ctx context.Context, m baggage.Map) context.Context { return context.WithValue(ctx, ctxEntriesKey, m) } +// WithMap enters a key:value set into a new Context. func NewContext(ctx context.Context, keyvalues ...core.KeyValue) context.Context { return WithMap(ctx, FromContext(ctx).Apply(baggage.MapUpdate{ MultiKV: keyvalues, })) } +// FromContext gets the current baggage.Map from a Context. func FromContext(ctx context.Context) baggage.Map { if m, ok := ctx.Value(ctxEntriesKey).(baggage.Map); ok { return m @@ -41,6 +45,7 @@ func FromContext(ctx context.Context) baggage.Map { return baggage.NewEmptyMap() } +// Inject implements HTTPInjector. func (CorrelationContext) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { correlationCtx := FromContext(ctx) firstIter := true @@ -61,6 +66,7 @@ func (CorrelationContext) Inject(ctx context.Context, supplier propagation.HTTPS } } +// Inject implements HTTPExtractor. func (CorrelationContext) Extract(ctx context.Context, supplier propagation.HTTPSupplier) context.Context { correlationContext := supplier.Get(CorrelationContextHeader) if correlationContext == "" { @@ -105,6 +111,7 @@ func (CorrelationContext) Extract(ctx context.Context, supplier propagation.HTTP })) } +// GetAllKeys implements HTTPPropagator. func (CorrelationContext) GetAllKeys() []string { return []string{CorrelationContextHeader} } diff --git a/api/context/baggage/propagation/propagation_test.go b/api/context/baggage/propagation/propagation_test.go index 591d1027a0d..d5c3d45aa7e 100644 --- a/api/context/baggage/propagation/propagation_test.go +++ b/api/context/baggage/propagation/propagation_test.go @@ -77,7 +77,7 @@ func TestExtractValidDistributedContextFromHTTPReq(t *testing.T) { req.Header.Set("Correlation-Context", tt.header) ctx := context.Background() - ctx = propagation.Extract(ctx, props, req.Header) + ctx = propagation.ExtractHTTP(ctx, props, req.Header) gotCorCtx := bpropagation.FromContext(ctx) wantCorCtx := baggage.NewMap(baggage.MapUpdate{MultiKV: tt.wantKVs}) if gotCorCtx.Len() != wantCorCtx.Len() { @@ -121,7 +121,7 @@ func TestExtractInvalidDistributedContextFromHTTPReq(t *testing.T) { req.Header.Set("Correlation-Context", tt.header) ctx := context.Background() - ctx = propagation.Extract(ctx, props, req.Header) + ctx = propagation.ExtractHTTP(ctx, props, req.Header) gotCorCtx := bpropagation.FromContext(ctx) if gotCorCtx.Len() != 0 { t.Errorf("Got and Want CorCtx are not the same size %d != %d", gotCorCtx.Len(), 0) @@ -184,7 +184,7 @@ func TestInjectCorrelationContextToHTTPReq(t *testing.T) { t.Run(tt.name, func(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) ctx := bpropagation.WithMap(context.Background(), baggage.NewMap(baggage.MapUpdate{MultiKV: tt.kvs})) - propagation.Inject(ctx, props, req.Header) + propagation.InjectHTTP(ctx, props, req.Header) gotHeader := req.Header.Get("Correlation-Context") wantedLen := len(strings.Join(tt.wantInHeader, ",")) diff --git a/api/context/propagation/propagation.go b/api/context/propagation/propagation.go index 673f3073630..b25068ec44c 100644 --- a/api/context/propagation/propagation.go +++ b/api/context/propagation/propagation.go @@ -24,6 +24,7 @@ type HTTPSupplier interface { Set(key string, value string) } +// HTTPExtractor extracts from a HTTPSupplier. type HTTPExtractor interface { // Extract method retrieves encoded SpanContext using supplier // from the associated carrier. It decodes the SpanContext @@ -33,6 +34,7 @@ type HTTPExtractor interface { Extract(context.Context, HTTPSupplier) context.Context } +// HTTPExtractor injects into a HTTPSupplier. type HTTPInjector interface { // Inject method retrieves current SpanContext from the ctx, // encodes it into propagator specific format and then injects @@ -43,16 +45,24 @@ type HTTPInjector interface { Inject(context.Context, HTTPSupplier) } +// Config contains the current set of extractors and injectors. type Config struct { httpEx []HTTPExtractor httpIn []HTTPInjector } +// Propagators is the interface to a set of injectors and extractors +// for all supported carrier formats. type Propagators interface { + // HTTPExtractors returns the configured extractors. HTTPExtractors() []HTTPExtractor + + // HTTPInjectors returns the configured injectors. HTTPInjectors() []HTTPInjector } +// HTTPPropagator is the interface to inject and extract to and from +// http.Headers. type HTTPPropagator interface { HTTPInjector HTTPExtractor @@ -61,12 +71,15 @@ type HTTPPropagator interface { GetAllKeys() []string } +// Option support passing configuration parameters to New(). type Option func(*Config) +// propagators is the default Propagators implementation. type propagators struct { config Config } +// New returns a standard Propagators implementation. func New(options ...Option) Propagators { config := Config{} for _, opt := range options { @@ -77,39 +90,42 @@ func New(options ...Option) Propagators { } } +// WithInjectors appends to the optional injector set. func WithInjectors(inj ...HTTPInjector) Option { return func(config *Config) { config.httpIn = append(config.httpIn, inj...) } } +// WithExtractors appends to the optional extractor set. func WithExtractors(ext ...HTTPExtractor) Option { return func(config *Config) { config.httpEx = append(config.httpEx, ext...) } } +// HTTPExtractors implements Propagators. func (p *propagators) HTTPExtractors() []HTTPExtractor { return p.config.httpEx } +// HTTPExtractors implements Propagators. func (p *propagators) HTTPInjectors() []HTTPInjector { return p.config.httpIn } -type NoopPropagators struct{} - -func (NoopPropagators) HTTPExtractors() []HTTPExtractor { return nil } -func (NoopPropagators) HTTPInjectors() []HTTPInjector { return nil } - -func Extract(ctx context.Context, props Propagators, supplier HTTPSupplier) context.Context { +// ExtractHTTP applies props.HTTPExtractors() to the supplier and +// returns the combined result Context. +func ExtractHTTP(ctx context.Context, props Propagators, supplier HTTPSupplier) context.Context { for _, ex := range props.HTTPExtractors() { ctx = ex.Extract(ctx, supplier) } return ctx } -func Inject(ctx context.Context, props Propagators, supplier HTTPSupplier) { +// ExtractHTTP applies props.HTTPInjectors() and returns the combined +// to the supplier. +func InjectHTTP(ctx context.Context, props Propagators, supplier HTTPSupplier) { for _, in := range props.HTTPInjectors() { in.Inject(ctx, supplier) } diff --git a/api/trace/propagation/b3_propagator_test.go b/api/trace/propagation/b3_propagator_test.go index 015ff746ea4..1cf5a8120e9 100644 --- a/api/trace/propagation/b3_propagator_test.go +++ b/api/trace/propagation/b3_propagator_test.go @@ -67,7 +67,7 @@ func TestExtractB3(t *testing.T) { } ctx := context.Background() - ctx = propagation.Extract(ctx, props, req.Header) + ctx = propagation.ExtractHTTP(ctx, props, req.Header) gotSc := tpropagation.FromContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("%s: %s: -got +want %s", tg.name, tt.name, diff) @@ -114,7 +114,7 @@ func TestInjectB3(t *testing.T) { } else { ctx, _ = mockTracer.Start(ctx, "inject") } - propagation.Inject(ctx, props, req.Header) + propagation.InjectHTTP(ctx, props, req.Header) for h, v := range tt.wantHeaders { got, want := req.Header.Get(h), v diff --git a/api/trace/propagation/trace_context_propagator_test.go b/api/trace/propagation/trace_context_propagator_test.go index e38d37ca2b0..edc34863733 100644 --- a/api/trace/propagation/trace_context_propagator_test.go +++ b/api/trace/propagation/trace_context_propagator_test.go @@ -128,7 +128,7 @@ func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { req.Header.Set("traceparent", tt.header) ctx := context.Background() - ctx = propagation.Extract(ctx, props, req.Header) + ctx = propagation.ExtractHTTP(ctx, props, req.Header) gotSc := tpropagation.FromContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) @@ -216,7 +216,7 @@ func TestExtractInvalidTraceContextFromHTTPReq(t *testing.T) { req.Header.Set("traceparent", tt.header) ctx := context.Background() - ctx = propagation.Extract(ctx, props, req.Header) + ctx = propagation.ExtractHTTP(ctx, props, req.Header) gotSc := tpropagation.FromContext(ctx) if diff := cmp.Diff(gotSc, wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) @@ -276,7 +276,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { if tt.sc.IsValid() { ctx, _ = mockTracer.Start(ctx, "inject", trace.ChildOf(tt.sc)) } - propagation.Inject(ctx, props, req.Header) + propagation.InjectHTTP(ctx, props, req.Header) gotHeader := req.Header.Get("traceparent") if diff := cmp.Diff(gotHeader, tt.wantHeader); diff != "" { diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go index b8411094867..e45e2aa264b 100644 --- a/plugin/grpctrace/grpctrace.go +++ b/plugin/grpctrace/grpctrace.go @@ -42,14 +42,14 @@ func (s *metadataSupplier) Set(key string, value string) { // Inject injects the gRPC call metadata into the Span func Inject(ctx context.Context, metadata *metadata.MD) { - propagation.Inject(ctx, global.Propagators(), &metadataSupplier{ + propagation.InjectHTTP(ctx, global.Propagators(), &metadataSupplier{ metadata: metadata, }) } // Extract returns the Context Entries and SpanContext that were encoded by Inject. func Extract(ctx context.Context, metadata *metadata.MD) ([]core.KeyValue, core.SpanContext) { - ctx = propagation.Extract(ctx, global.Propagators(), &metadataSupplier{ + ctx = propagation.ExtractHTTP(ctx, global.Propagators(), &metadataSupplier{ metadata: metadata, }) diff --git a/plugin/httptrace/httptrace.go b/plugin/httptrace/httptrace.go index f28ab3c36d0..8ef33d44378 100644 --- a/plugin/httptrace/httptrace.go +++ b/plugin/httptrace/httptrace.go @@ -37,7 +37,7 @@ var ( // Returns the Attributes, Context Entries, and SpanContext that were encoded by Inject. func Extract(ctx context.Context, req *http.Request) ([]core.KeyValue, []core.KeyValue, core.SpanContext) { - ctx = propagation.Extract(ctx, global.Propagators(), req.Header) + ctx = propagation.ExtractHTTP(ctx, global.Propagators(), req.Header) attrs := []core.KeyValue{ URLKey.String(req.URL.String()), @@ -54,5 +54,5 @@ func Extract(ctx context.Context, req *http.Request) ([]core.KeyValue, []core.Ke } func Inject(ctx context.Context, req *http.Request) { - propagation.Inject(ctx, global.Propagators(), req.Header) + propagation.InjectHTTP(ctx, global.Propagators(), req.Header) } diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index 1bdad7438a7..4cd91dbe27f 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -146,7 +146,7 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { opts := append([]trace.StartOption{}, h.spanStartOptions...) // start with the configured options // TODO: do something with the correlation context - ctx := propagation.Extract(r.Context(), h.props, r.Header) + ctx := propagation.ExtractHTTP(r.Context(), h.props, r.Header) sc := tpropagation.FromContext(ctx) if sc.IsValid() { // not a valid span context, so no link / parent relationship to establish var opt trace.StartOption diff --git a/plugin/othttp/wrap.go b/plugin/othttp/wrap.go index 5d0f84fd228..194abbd9253 100644 --- a/plugin/othttp/wrap.go +++ b/plugin/othttp/wrap.go @@ -92,6 +92,6 @@ func (w *respWriterWrapper) WriteHeader(statusCode int) { } w.wroteHeader = true w.statusCode = statusCode - propagation.Inject(w.ctx, w.props, w.Header()) + propagation.InjectHTTP(w.ctx, w.props, w.Header()) w.ResponseWriter.WriteHeader(statusCode) } From 7be99051f7c73f3c26de9caaba96f95fc8c4d70d Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 01:11:05 -0800 Subject: [PATCH 14/21] Comments --- api/context/baggage/map.go | 2 ++ api/trace/propagation/context.go | 2 ++ 2 files changed, 4 insertions(+) diff --git a/api/context/baggage/map.go b/api/context/baggage/map.go index 15b10c2e165..ab981f2dbe0 100644 --- a/api/context/baggage/map.go +++ b/api/context/baggage/map.go @@ -18,6 +18,8 @@ import ( "go.opentelemetry.io/otel/api/core" ) +// TODO Comments needed! This was formerly known as distributedcontext.Map + type entry struct { value core.Value } diff --git a/api/trace/propagation/context.go b/api/trace/propagation/context.go index 9137bb9c60b..bb5fd1a8c7b 100644 --- a/api/trace/propagation/context.go +++ b/api/trace/propagation/context.go @@ -12,10 +12,12 @@ var ( spanContextKey = &spanContextType{} ) +// WithSpanContext enters a core.SpanContext into a new Context. func WithSpanContext(ctx context.Context, sc core.SpanContext) context.Context { return context.WithValue(ctx, spanContextKey, sc) } +// FromContext gets the current core.SpanContext from a Context. func FromContext(ctx context.Context) core.SpanContext { if sc, ok := ctx.Value(spanContextKey).(core.SpanContext); ok { return sc From 1549fdf4992b1e1296fde802cb72f35d3564ae86 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 18:00:36 -0800 Subject: [PATCH 15/21] Get WithParent() tests working --- api/testharness/harness.go | 25 +- api/trace/api.go | 52 ++-- api/trace/current.go | 4 +- api/trace/propagation/b3_propagator.go | 2 +- .../b3_propagator_benchmark_test.go | 2 +- api/trace/propagation/b3_propagator_test.go | 4 +- api/trace/propagation/context.go | 10 +- .../propagation/trace_context_propagator.go | 2 +- ...trace_context_propagator_benchmark_test.go | 10 +- .../trace_context_propagator_test.go | 6 +- api/trace/testtrace/tracer.go | 15 +- api/trace/testtrace/tracer_test.go | 230 +++++++----------- bridge/opentracing/bridge.go | 58 +++-- bridge/opentracing/internal/mock.go | 11 +- internal/trace/mock_tracer.go | 8 +- internal/trace/parent/parent.go | 36 +++ plugin/grpctrace/grpctrace.go | 2 +- plugin/httptrace/httptrace.go | 2 +- plugin/othttp/handler.go | 11 +- plugin/othttp/handler_example_test.go | 2 +- sdk/trace/batch_span_processor_test.go | 4 +- sdk/trace/simple_span_processor_test.go | 4 +- sdk/trace/trace_test.go | 90 +++---- sdk/trace/tracer.go | 27 +- 24 files changed, 268 insertions(+), 349 deletions(-) create mode 100644 internal/trace/parent/parent.go diff --git a/api/testharness/harness.go b/api/testharness/harness.go index e82c1cc1b13..e99435594e5 100644 --- a/api/testharness/harness.go +++ b/api/testharness/harness.go @@ -21,11 +21,10 @@ import ( "testing" "time" - "google.golang.org/grpc/codes" - "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/trace" "go.opentelemetry.io/otel/internal/matchers" + "google.golang.org/grpc/codes" ) type Harness struct { @@ -125,30 +124,14 @@ func (h *Harness) TestTracer(subjectFactory func() trace.Tracer) { e.Expect(csc.SpanID).NotToEqual(psc.SpanID) }) - t.Run("propagates a parent's trace ID through `ChildOf`", func(t *testing.T) { - t.Parallel() - - e := matchers.NewExpecter(t) - subject := subjectFactory() - - _, parent := subject.Start(context.Background(), "parent") - _, child := subject.Start(context.Background(), "child", trace.ChildOf(parent.SpanContext())) - - psc := parent.SpanContext() - csc := child.SpanContext() - - e.Expect(csc.TraceID).ToEqual(psc.TraceID) - e.Expect(csc.SpanID).NotToEqual(psc.SpanID) - }) - - t.Run("propagates a parent's trace ID through `FollowsFrom`", func(t *testing.T) { + t.Run("propagates a parent's trace ID through `WithParent`", func(t *testing.T) { t.Parallel() e := matchers.NewExpecter(t) subject := subjectFactory() - _, parent := subject.Start(context.Background(), "parent") - _, child := subject.Start(context.Background(), "child", trace.FollowsFrom(parent.SpanContext())) + parentCtx, parent := subject.Start(context.Background(), "parent") + _, child := subject.Start(context.Background(), "child", trace.WithParent(parentCtx)) psc := parent.SpanContext() csc := child.SpanContext() diff --git a/api/trace/api.go b/api/trace/api.go index 9931f7fb7d1..cd9679b7a82 100644 --- a/api/trace/api.go +++ b/api/trace/api.go @@ -100,26 +100,11 @@ type StartConfig struct { Attributes []core.KeyValue StartTime time.Time Links []Link - Relation Relation Record bool + Parent context.Context SpanKind SpanKind } -// Relation is used to establish relationship between newly created span and the -// other span. The other span could be related as a parent or linked or any other -// future relationship type. -type Relation struct { - core.SpanContext - RelationshipType -} - -type RelationshipType int - -const ( - ChildOfRelationship RelationshipType = iota - FollowsFromRelationship -) - // Link is used to establish relationship between two spans within the same Trace or // across different Traces. Few examples of Link usage. // 1. Batch Processing: A batch of elements may contain elements associated with one @@ -189,6 +174,21 @@ func (sk SpanKind) String() string { } } +// WithParent explicitly sets the parent context. When the +// parent context is not set explicitly, it defaults to: +// 1. If a current upstream context is set +// a. If a current Span is set with the same trace_id, use the Span's +// SpanContext as parent. +// b. If the current Span belongs to a different trace_id, use the upstream +// context are parent. +// 2. If a current span is set and upstream context is not set, use its context. +// 3. If neither upstream nor span context is set, a new root. +func WithParent(ctx context.Context) StartOption { + return func(c *StartConfig) { + c.Parent = ctx + } +} + // WithStartTime sets the start time of the span to provided time t, when it is started. // In absence of this option, wall clock time is used as start time. // This option is typically used when starting of the span is delayed. @@ -216,26 +216,6 @@ func WithRecord() StartOption { } } -// ChildOf. TODO: do we need this?. -func ChildOf(sc core.SpanContext) StartOption { - return func(c *StartConfig) { - c.Relation = Relation{ - SpanContext: sc, - RelationshipType: ChildOfRelationship, - } - } -} - -// FollowsFrom. TODO: do we need this?. -func FollowsFrom(sc core.SpanContext) StartOption { - return func(c *StartConfig) { - c.Relation = Relation{ - SpanContext: sc, - RelationshipType: FollowsFromRelationship, - } - } -} - // LinkedTo allows instantiating a Span with initial Links. func LinkedTo(sc core.SpanContext, attrs ...core.KeyValue) StartOption { return func(c *StartConfig) { diff --git a/api/trace/current.go b/api/trace/current.go index c1ad829dcde..55cd2d56528 100644 --- a/api/trace/current.go +++ b/api/trace/current.go @@ -20,9 +20,7 @@ import ( type currentSpanKeyType struct{} -var ( - currentSpanKey = ¤tSpanKeyType{} -) +var currentSpanKey = ¤tSpanKeyType{} func ContextWithSpan(ctx context.Context, span Span) context.Context { return context.WithValue(ctx, currentSpanKey, span) diff --git a/api/trace/propagation/b3_propagator.go b/api/trace/propagation/b3_propagator.go index 8c6ea50ded5..a4156326e07 100644 --- a/api/trace/propagation/b3_propagator.go +++ b/api/trace/propagation/b3_propagator.go @@ -84,7 +84,7 @@ func (b3 B3) Extract(ctx context.Context, supplier propagation.HTTPSupplier) con } else { sc = b3.extract(ctx, supplier) } - return WithSpanContext(ctx, sc) + return WithUpstreamContext(ctx, sc) } func (b3 B3) extract(ctx context.Context, supplier propagation.HTTPSupplier) core.SpanContext { diff --git a/api/trace/propagation/b3_propagator_benchmark_test.go b/api/trace/propagation/b3_propagator_benchmark_test.go index 23121faea03..8589a40fe44 100644 --- a/api/trace/propagation/b3_propagator_benchmark_test.go +++ b/api/trace/propagation/b3_propagator_benchmark_test.go @@ -103,7 +103,7 @@ func BenchmarkInjectB3(b *testing.B) { req, _ := http.NewRequest("GET", "http://example.com", nil) ctx := context.Background() if tt.parentSc.IsValid() { - ctx, _ = mockTracer.Start(ctx, "inject", trace.ChildOf(tt.parentSc)) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(propagation.WithUpstreamContext(ctx, tt.parentSc))) } else { ctx, _ = mockTracer.Start(ctx, "inject") } diff --git a/api/trace/propagation/b3_propagator_test.go b/api/trace/propagation/b3_propagator_test.go index 1cf5a8120e9..71497b1e582 100644 --- a/api/trace/propagation/b3_propagator_test.go +++ b/api/trace/propagation/b3_propagator_test.go @@ -68,7 +68,7 @@ func TestExtractB3(t *testing.T) { ctx := context.Background() ctx = propagation.ExtractHTTP(ctx, props, req.Header) - gotSc := tpropagation.FromContext(ctx) + gotSc := tpropagation.UpstreamContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("%s: %s: -got +want %s", tg.name, tt.name, diff) } @@ -110,7 +110,7 @@ func TestInjectB3(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) ctx := context.Background() if tt.parentSc.IsValid() { - ctx, _ = mockTracer.Start(ctx, "inject", trace.ChildOf(tt.parentSc)) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithUpstreamContext(ctx, tt.parentSc))) } else { ctx, _ = mockTracer.Start(ctx, "inject") } diff --git a/api/trace/propagation/context.go b/api/trace/propagation/context.go index bb5fd1a8c7b..db922e8735f 100644 --- a/api/trace/propagation/context.go +++ b/api/trace/propagation/context.go @@ -8,17 +8,15 @@ import ( type spanContextType struct{} -var ( - spanContextKey = &spanContextType{} -) +var spanContextKey = &spanContextType{} -// WithSpanContext enters a core.SpanContext into a new Context. -func WithSpanContext(ctx context.Context, sc core.SpanContext) context.Context { +// WithUpstreamContext enters a core.SpanContext into a new Context. +func WithUpstreamContext(ctx context.Context, sc core.SpanContext) context.Context { return context.WithValue(ctx, spanContextKey, sc) } // FromContext gets the current core.SpanContext from a Context. -func FromContext(ctx context.Context) core.SpanContext { +func UpstreamContext(ctx context.Context) core.SpanContext { if sc, ok := ctx.Value(spanContextKey).(core.SpanContext); ok { return sc } diff --git a/api/trace/propagation/trace_context_propagator.go b/api/trace/propagation/trace_context_propagator.go index e5a2d317d4b..c6a0317bfb9 100644 --- a/api/trace/propagation/trace_context_propagator.go +++ b/api/trace/propagation/trace_context_propagator.go @@ -55,7 +55,7 @@ func (hp TraceContext) Inject(ctx context.Context, supplier propagation.HTTPSupp func (tc TraceContext) Extract( ctx context.Context, supplier propagation.HTTPSupplier, ) context.Context { - return WithSpanContext(ctx, tc.extract(supplier)) + return WithUpstreamContext(ctx, tc.extract(supplier)) } func (TraceContext) extract(supplier propagation.HTTPSupplier) core.SpanContext { diff --git a/api/trace/propagation/trace_context_propagator_benchmark_test.go b/api/trace/propagation/trace_context_propagator_benchmark_test.go index 3b1e9cd9050..30405d611ed 100644 --- a/api/trace/propagation/trace_context_propagator_benchmark_test.go +++ b/api/trace/propagation/trace_context_propagator_benchmark_test.go @@ -1,4 +1,4 @@ -package propagation +package propagation_test import ( "context" @@ -7,11 +7,13 @@ import ( "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" + tpropagation "go.opentelemetry.io/otel/api/trace/propagation" mocktrace "go.opentelemetry.io/otel/internal/trace" ) func BenchmarkInject(b *testing.B) { - var t TraceContext + var t propagation.TraceContext injectSubBenchmarks(b, func(ctx context.Context, b *testing.B) { req, _ := http.NewRequest("GET", "http://example.com", nil) @@ -39,7 +41,7 @@ func injectSubBenchmarks(b *testing.B, fn func(context.Context, *testing.B)) { TraceFlags: core.TraceFlagsSampled, } ctx := context.Background() - ctx, _ = mockTracer.Start(ctx, "inject", trace.ChildOf(sc)) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithUpstreamContext(ctx, sc))) fn(ctx, b) }) @@ -52,7 +54,7 @@ func injectSubBenchmarks(b *testing.B, fn func(context.Context, *testing.B)) { func BenchmarkExtract(b *testing.B) { extractSubBenchmarks(b, func(b *testing.B, req *http.Request) { - var propagator TraceContext + var propagator tpropagation.TraceContext ctx := context.Background() b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/api/trace/propagation/trace_context_propagator_test.go b/api/trace/propagation/trace_context_propagator_test.go index edc34863733..f44ce882dd8 100644 --- a/api/trace/propagation/trace_context_propagator_test.go +++ b/api/trace/propagation/trace_context_propagator_test.go @@ -129,7 +129,7 @@ func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { ctx := context.Background() ctx = propagation.ExtractHTTP(ctx, props, req.Header) - gotSc := tpropagation.FromContext(ctx) + gotSc := tpropagation.UpstreamContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -217,7 +217,7 @@ func TestExtractInvalidTraceContextFromHTTPReq(t *testing.T) { ctx := context.Background() ctx = propagation.ExtractHTTP(ctx, props, req.Header) - gotSc := tpropagation.FromContext(ctx) + gotSc := tpropagation.UpstreamContext(ctx) if diff := cmp.Diff(gotSc, wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -274,7 +274,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) ctx := context.Background() if tt.sc.IsValid() { - ctx, _ = mockTracer.Start(ctx, "inject", trace.ChildOf(tt.sc)) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithUpstreamContext(ctx, tt.sc))) } propagation.InjectHTTP(ctx, props, req.Header) diff --git a/api/trace/testtrace/tracer.go b/api/trace/testtrace/tracer.go index deb3221bf04..56594c636a1 100644 --- a/api/trace/testtrace/tracer.go +++ b/api/trace/testtrace/tracer.go @@ -16,11 +16,14 @@ package testtrace import ( "context" + "fmt" "sync" "time" "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/trace" + + "go.opentelemetry.io/otel/internal/trace/parent" ) var _ trace.Tracer = (*Tracer)(nil) @@ -52,10 +55,13 @@ func (t *Tracer) Start(ctx context.Context, name string, opts ...trace.StartOpti var traceID core.TraceID var parentSpanID core.SpanID - if parentSpanContext := c.Relation.SpanContext; parentSpanContext.IsValid() { - traceID = parentSpanContext.TraceID - parentSpanID = parentSpanContext.SpanID - } else if parentSpanContext := trace.SpanFromContext(ctx).SpanContext(); parentSpanContext.IsValid() { + fmt.Println("WTF", c.Parent) + + ctx, parentSpanContext, _ := parent.GetContext(ctx, c.Parent) + + fmt.Println("CTX", ctx, "PSX", parentSpanContext) + + if parentSpanContext.IsValid() { traceID = parentSpanContext.TraceID parentSpanID = parentSpanContext.SpanID } else { @@ -95,6 +101,7 @@ func (t *Tracer) Start(ctx context.Context, name string, opts ...trace.StartOpti t.spans = append(t.spans, span) t.lock.Unlock() + fmt.Println("HERE SpanCTX", span.SpanContext()) return trace.ContextWithSpan(ctx, span), span } diff --git a/api/trace/testtrace/tracer_test.go b/api/trace/testtrace/tracer_test.go index 3c7907fd8f1..5dae3cad1cc 100644 --- a/api/trace/testtrace/tracer_test.go +++ b/api/trace/testtrace/tracer_test.go @@ -20,7 +20,6 @@ import ( "testing" "time" - "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/testharness" "go.opentelemetry.io/otel/api/trace" "go.opentelemetry.io/otel/api/trace/testtrace" @@ -32,181 +31,138 @@ func TestTracer(t *testing.T) { return testtrace.NewTracer() }) - t.Run("#Start", func(t *testing.T) { - testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { - _, span := tracer.Start(context.Background(), name) + // t.Run("#Start", func(t *testing.T) { + // testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { + // _, span := tracer.Start(context.Background(), name) - return span, nil - }) + // return span, nil + // }) - t.Run("uses the start time from WithStartTime", func(t *testing.T) { - t.Parallel() + // t.Run("uses the start time from WithStartTime", func(t *testing.T) { + // t.Parallel() - e := matchers.NewExpecter(t) + // e := matchers.NewExpecter(t) - expectedStartTime := time.Now().AddDate(5, 0, 0) + // expectedStartTime := time.Now().AddDate(5, 0, 0) - subject := testtrace.NewTracer() - _, span := subject.Start(context.Background(), "test", trace.WithStartTime(expectedStartTime)) + // subject := testtrace.NewTracer() + // _, span := subject.Start(context.Background(), "test", trace.WithStartTime(expectedStartTime)) - testSpan, ok := span.(*testtrace.Span) - e.Expect(ok).ToBeTrue() + // testSpan, ok := span.(*testtrace.Span) + // e.Expect(ok).ToBeTrue() - e.Expect(testSpan.StartTime()).ToEqual(expectedStartTime) - }) + // e.Expect(testSpan.StartTime()).ToEqual(expectedStartTime) + // }) - t.Run("uses the attributes from WithAttributes", func(t *testing.T) { - t.Parallel() + // t.Run("uses the attributes from WithAttributes", func(t *testing.T) { + // t.Parallel() - e := matchers.NewExpecter(t) + // e := matchers.NewExpecter(t) - attr1 := core.Key("a").String("1") - attr2 := core.Key("b").String("2") + // attr1 := core.Key("a").String("1") + // attr2 := core.Key("b").String("2") - subject := testtrace.NewTracer() - _, span := subject.Start(context.Background(), "test", trace.WithAttributes(attr1, attr2)) + // subject := testtrace.NewTracer() + // _, span := subject.Start(context.Background(), "test", trace.WithAttributes(attr1, attr2)) - testSpan, ok := span.(*testtrace.Span) - e.Expect(ok).ToBeTrue() + // testSpan, ok := span.(*testtrace.Span) + // e.Expect(ok).ToBeTrue() - attributes := testSpan.Attributes() - e.Expect(attributes[attr1.Key]).ToEqual(attr1.Value) - e.Expect(attributes[attr2.Key]).ToEqual(attr2.Value) - }) + // attributes := testSpan.Attributes() + // e.Expect(attributes[attr1.Key]).ToEqual(attr1.Value) + // e.Expect(attributes[attr2.Key]).ToEqual(attr2.Value) + // }) - t.Run("uses the parent's span context from ChildOf", func(t *testing.T) { - t.Parallel() + // t.Run("uses the parent's span context from WithParent", func(t *testing.T) { + // t.Parallel() - e := matchers.NewExpecter(t) + // e := matchers.NewExpecter(t) - subject := testtrace.NewTracer() + // subject := testtrace.NewTracer() - _, parent := subject.Start(context.Background(), "parent") - parentSpanContext := parent.SpanContext() + // parent, parentSpan := subject.Start(context.Background(), "parent") + // parentSpanContext := parentSpan.SpanContext() - _, span := subject.Start(context.Background(), "child", trace.ChildOf(parentSpanContext)) + // _, span := subject.Start(context.Background(), "child", trace.WithParent(parent)) - testSpan, ok := span.(*testtrace.Span) - e.Expect(ok).ToBeTrue() + // testSpan, ok := span.(*testtrace.Span) + // e.Expect(ok).ToBeTrue() - childSpanContext := testSpan.SpanContext() - e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) - e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) - e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) - }) + // childSpanContext := testSpan.SpanContext() + // e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) + // e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) + // e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) + // }) - t.Run("defers to ChildOf if the provided context also contains a parent span", func(t *testing.T) { - t.Parallel() + // t.Run("defers to ChildOf if the provided context also contains a parent span", func(t *testing.T) { + // t.Parallel() - e := matchers.NewExpecter(t) + // e := matchers.NewExpecter(t) - subject := testtrace.NewTracer() + // subject := testtrace.NewTracer() - _, parent := subject.Start(context.Background(), "parent") - parentSpanContext := parent.SpanContext() + // parentCtx, parentSpan := subject.Start(context.Background(), "parent") + // parentSpanContext := parentSpan.SpanContext() - ctx, _ := subject.Start(context.Background(), "should be ignored") - _, span := subject.Start(ctx, "child", trace.ChildOf(parentSpanContext)) + // ctx, _ := subject.Start(context.Background(), "should be ignored") + // _, span := subject.Start(ctx, "child", trace.WithParent(parentCtx)) - testSpan, ok := span.(*testtrace.Span) - e.Expect(ok).ToBeTrue() + // testSpan, ok := span.(*testtrace.Span) + // e.Expect(ok).ToBeTrue() - childSpanContext := testSpan.SpanContext() - e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) - e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) - e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) - }) + // childSpanContext := testSpan.SpanContext() + // e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) + // e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) + // e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) + // }) - t.Run("uses the parent's span context from FollowsFrom", func(t *testing.T) { - t.Parallel() + // t.Run("uses the links provided through LinkedTo", func(t *testing.T) { + // t.Parallel() - e := matchers.NewExpecter(t) + // e := matchers.NewExpecter(t) - subject := testtrace.NewTracer() + // subject := testtrace.NewTracer() - _, parent := subject.Start(context.Background(), "parent") - parentSpanContext := parent.SpanContext() + // _, span := subject.Start(context.Background(), "link1") + // link1 := trace.Link{ + // SpanContext: span.SpanContext(), + // Attributes: []core.KeyValue{ + // core.Key("a").String("1"), + // }, + // } - _, span := subject.Start(context.Background(), "child", trace.FollowsFrom(parentSpanContext)) + // _, span = subject.Start(context.Background(), "link2") + // link2 := trace.Link{ + // SpanContext: span.SpanContext(), + // Attributes: []core.KeyValue{ + // core.Key("b").String("2"), + // }, + // } - testSpan, ok := span.(*testtrace.Span) - e.Expect(ok).ToBeTrue() + // _, span = subject.Start(context.Background(), "test", trace.LinkedTo(link1.SpanContext, link1.Attributes...), trace.LinkedTo(link2.SpanContext, link2.Attributes...)) - childSpanContext := testSpan.SpanContext() - e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) - e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) - e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) - }) + // testSpan, ok := span.(*testtrace.Span) + // e.Expect(ok).ToBeTrue() - t.Run("defers to FollowsFrom if the provided context also contains a parent span", func(t *testing.T) { - t.Parallel() + // links := testSpan.Links() + // e.Expect(links[link1.SpanContext]).ToEqual(link1.Attributes) + // e.Expect(links[link2.SpanContext]).ToEqual(link2.Attributes) + // }) + // }) - e := matchers.NewExpecter(t) + // t.Run("#WithSpan", func(t *testing.T) { + // testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { + // var span trace.Span - subject := testtrace.NewTracer() + // err := tracer.WithSpan(context.Background(), name, func(ctx context.Context) error { + // span = trace.SpanFromContext(ctx) - _, parent := subject.Start(context.Background(), "parent") - parentSpanContext := parent.SpanContext() + // return nil + // }) - ctx, _ := subject.Start(context.Background(), "should be ignored") - _, span := subject.Start(ctx, "child", trace.FollowsFrom(parentSpanContext)) - - testSpan, ok := span.(*testtrace.Span) - e.Expect(ok).ToBeTrue() - - childSpanContext := testSpan.SpanContext() - e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) - e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) - e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) - }) - - t.Run("uses the links provided through LinkedTo", func(t *testing.T) { - t.Parallel() - - e := matchers.NewExpecter(t) - - subject := testtrace.NewTracer() - - _, span := subject.Start(context.Background(), "link1") - link1 := trace.Link{ - SpanContext: span.SpanContext(), - Attributes: []core.KeyValue{ - core.Key("a").String("1"), - }, - } - - _, span = subject.Start(context.Background(), "link2") - link2 := trace.Link{ - SpanContext: span.SpanContext(), - Attributes: []core.KeyValue{ - core.Key("b").String("2"), - }, - } - - _, span = subject.Start(context.Background(), "test", trace.LinkedTo(link1.SpanContext, link1.Attributes...), trace.LinkedTo(link2.SpanContext, link2.Attributes...)) - - testSpan, ok := span.(*testtrace.Span) - e.Expect(ok).ToBeTrue() - - links := testSpan.Links() - e.Expect(links[link1.SpanContext]).ToEqual(link1.Attributes) - e.Expect(links[link2.SpanContext]).ToEqual(link2.Attributes) - }) - }) - - t.Run("#WithSpan", func(t *testing.T) { - testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { - var span trace.Span - - err := tracer.WithSpan(context.Background(), name, func(ctx context.Context) error { - span = trace.SpanFromContext(ctx) - - return nil - }) - - return span, err - }) - }) + // return span, err + // }) + // }) } func testTracedSpan(t *testing.T, fn func(tracer trace.Tracer, name string) (trace.Span, error)) { diff --git a/bridge/opentracing/bridge.go b/bridge/opentracing/bridge.go index 62a0ceb2ec9..e18e535a3bc 100644 --- a/bridge/opentracing/bridge.go +++ b/bridge/opentracing/bridge.go @@ -27,16 +27,18 @@ import ( otext "github.com/opentracing/opentracing-go/ext" otlog "github.com/opentracing/opentracing-go/log" + "go.opentelemetry.io/otel/api/context/baggage" + "go.opentelemetry.io/otel/api/core" otelcore "go.opentelemetry.io/otel/api/core" + "go.opentelemetry.io/otel/api/key" oteltrace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" "go.opentelemetry.io/otel/bridge/opentracing/migration" ) type bridgeSpanContext struct { - // TODO: have a look at the java implementation of the shim to - // see what do they do with the baggage items - baggageItems map[string]string + baggageItems baggage.Map otelSpanContext otelcore.SpanContext } @@ -44,7 +46,7 @@ var _ ot.SpanContext = &bridgeSpanContext{} func newBridgeSpanContext(otelSpanContext otelcore.SpanContext, parentOtSpanContext ot.SpanContext) *bridgeSpanContext { bCtx := &bridgeSpanContext{ - baggageItems: nil, + baggageItems: baggage.NewEmptyMap(), otelSpanContext: otelSpanContext, } if parentOtSpanContext != nil { @@ -57,24 +59,20 @@ func newBridgeSpanContext(otelSpanContext otelcore.SpanContext, parentOtSpanCont } func (c *bridgeSpanContext) ForeachBaggageItem(handler func(k, v string) bool) { - for k, v := range c.baggageItems { - if !handler(k, v) { - break - } - } + c.baggageItems.Foreach(func(kv core.KeyValue) bool { + return handler(string(kv.Key), kv.Value.Emit()) + }) } func (c *bridgeSpanContext) setBaggageItem(restrictedKey, value string) { - if c.baggageItems == nil { - c.baggageItems = make(map[string]string) - } crk := http.CanonicalHeaderKey(restrictedKey) - c.baggageItems[crk] = value + c.baggageItems.Apply(baggage.MapUpdate{SingleKV: key.New(crk).String(value)}) } func (c *bridgeSpanContext) baggageItem(restrictedKey string) string { crk := http.CanonicalHeaderKey(restrictedKey) - return c.baggageItems[crk] + val, _ := c.baggageItems.Value(key.New(crk)) + return val.Emit() } type bridgeSpan struct { @@ -309,15 +307,16 @@ func (t *BridgeTracer) StartSpan(operationName string, opts ...ot.StartSpanOptio for _, opt := range opts { opt.Apply(&sso) } - // TODO: handle links, needs SpanData to be in the API first? + // TODO: handle links bRelation, _ := otSpanReferencesToBridgeRelationAndLinks(sso.References) attributes, kind, hadTrueErrorTag := otTagsToOtelAttributesKindAndError(sso.Tags) checkCtx := migration.WithDeferredSetup(context.Background()) checkCtx2, otelSpan := t.setTracer.tracer().Start(checkCtx, operationName, func(opts *oteltrace.StartConfig) { opts.Attributes = attributes opts.StartTime = sso.StartTime - opts.Relation = bRelation.ToOtelRelation() + opts.Parent = bRelation.ToOtelParent() opts.Record = true + opts.Links = nil // TODO: handle links opts.SpanKind = kind }) if checkCtx != checkCtx2 { @@ -442,17 +441,21 @@ func otTagToOtelCoreKey(k string) otelcore.Key { type bridgeRelation struct { spanContext *bridgeSpanContext - relationshipType oteltrace.RelationshipType + relationshipType ot.SpanReferenceType } -func (r bridgeRelation) ToOtelRelation() oteltrace.Relation { +func (r bridgeRelation) ToOtelParent() context.Context { + ctx := context.Background() if r.spanContext == nil { - return oteltrace.Relation{} - } - return oteltrace.Relation{ - SpanContext: r.spanContext.otelSpanContext, - RelationshipType: r.relationshipType, + return ctx } + ctx = propagation.WithUpstreamContext(ctx, core.SpanContext{ + TraceID: r.spanContext.otelSpanContext.TraceID, + SpanID: r.spanContext.otelSpanContext.SpanID, + // TODO: Flags + }) + // TODO: relationshipType + return ctx } func otSpanReferencesToBridgeRelationAndLinks(references []ot.SpanReference) (bridgeRelation, []*bridgeSpanContext) { @@ -462,7 +465,7 @@ func otSpanReferencesToBridgeRelationAndLinks(references []ot.SpanReference) (br first := references[0] relation := bridgeRelation{ spanContext: mustGetBridgeSpanContext(first.ReferencedContext), - relationshipType: otSpanReferenceTypeToOtelRelationshipType(first.Type), + relationshipType: first.Type, } var links []*bridgeSpanContext for _, reference := range references[1:] { @@ -479,12 +482,13 @@ func mustGetBridgeSpanContext(ctx ot.SpanContext) *bridgeSpanContext { return ourCtx } -func otSpanReferenceTypeToOtelRelationshipType(srt ot.SpanReferenceType) oteltrace.RelationshipType { +func otSpanReferenceTypeToOtelRelationshipType(srt ot.SpanReferenceType) oteltrace.SpanKind { + // TODO: Check out this logic switch srt { case ot.ChildOfRef: - return oteltrace.ChildOfRelationship + return oteltrace.SpanKindServer case ot.FollowsFromRef: - return oteltrace.FollowsFromRelationship + return oteltrace.SpanKindProducer default: panic("fix yer code, it uses bogus opentracing reference type") } diff --git a/bridge/opentracing/internal/mock.go b/bridge/opentracing/internal/mock.go index 0d3c92c9ea8..d50ee19a0aa 100644 --- a/bridge/opentracing/internal/mock.go +++ b/bridge/opentracing/internal/mock.go @@ -27,6 +27,7 @@ import ( otelcore "go.opentelemetry.io/otel/api/core" otelkey "go.opentelemetry.io/otel/api/key" oteltrace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/internal/trace/parent" "go.opentelemetry.io/otel/bridge/opentracing/migration" ) @@ -147,14 +148,8 @@ func (t *MockTracer) getParentSpanID(ctx context.Context, spanOpts *oteltrace.St } func (t *MockTracer) getParentSpanContext(ctx context.Context, spanOpts *oteltrace.StartConfig) otelcore.SpanContext { - if spanOpts.Relation.RelationshipType == oteltrace.ChildOfRelationship && - spanOpts.Relation.SpanContext.IsValid() { - return spanOpts.Relation.SpanContext - } - if parentSpanContext := oteltrace.SpanFromContext(ctx).SpanContext(); parentSpanContext.IsValid() { - return parentSpanContext - } - return otelcore.EmptySpanContext() + _, spanCtx, _ := parent.GetContext(ctx, spanOpts.Parent) + return spanCtx } func (t *MockTracer) getSpanID() otelcore.SpanID { diff --git a/internal/trace/mock_tracer.go b/internal/trace/mock_tracer.go index d6d033d03be..af04e034dec 100644 --- a/internal/trace/mock_tracer.go +++ b/internal/trace/mock_tracer.go @@ -22,6 +22,7 @@ import ( "go.opentelemetry.io/otel/api/core" apitrace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/internal/trace/parent" ) // MockTracer is a simple tracer used for testing purpose only. @@ -54,14 +55,17 @@ func (mt *MockTracer) Start(ctx context.Context, name string, o ...apitrace.Star } var span *MockSpan var sc core.SpanContext - if !opts.Relation.SpanContext.IsValid() { + + ctx, parentSpanContext, _ := parent.GetContext(ctx, opts.Parent) + + if !parentSpanContext.IsValid() { sc = core.SpanContext{} _, _ = rand.Read(sc.TraceID[:]) if mt.Sampled { sc.TraceFlags = core.TraceFlagsSampled } } else { - sc = opts.Relation.SpanContext + sc = parentSpanContext } binary.BigEndian.PutUint64(sc.SpanID[:], atomic.AddUint64(mt.StartSpanID, 1)) diff --git a/internal/trace/parent/parent.go b/internal/trace/parent/parent.go new file mode 100644 index 00000000000..8985c4bc0f6 --- /dev/null +++ b/internal/trace/parent/parent.go @@ -0,0 +1,36 @@ +package parent + +import ( + "context" + + "go.opentelemetry.io/otel/api/core" + "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" +) + +func getEffective(ctx context.Context) core.SpanContext { + if ctx == nil { + return core.EmptySpanContext() + } + rctx := propagation.UpstreamContext(ctx) + sctx := trace.SpanFromContext(ctx).SpanContext() + + if rctx.IsValid() && sctx.IsValid() && rctx.TraceID == sctx.TraceID { + return sctx + } + if rctx.IsValid() { + return rctx + } + return sctx +} + +func GetContext(ctx, parent context.Context) (context.Context, core.SpanContext, bool) { + pctx := getEffective(parent) + sctx := getEffective(ctx) + + if pctx.IsValid() { + return parent, pctx, true + } + + return ctx, sctx, false +} diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go index e45e2aa264b..5d082bebc1a 100644 --- a/plugin/grpctrace/grpctrace.go +++ b/plugin/grpctrace/grpctrace.go @@ -53,7 +53,7 @@ func Extract(ctx context.Context, metadata *metadata.MD) ([]core.KeyValue, core. metadata: metadata, }) - spanContext := tpropagation.FromContext(ctx) + spanContext := tpropagation.UpstreamContext(ctx) var correlationCtxKVs []core.KeyValue bpropagation.FromContext(ctx).Foreach(func(kv core.KeyValue) bool { correlationCtxKVs = append(correlationCtxKVs, kv) diff --git a/plugin/httptrace/httptrace.go b/plugin/httptrace/httptrace.go index 8ef33d44378..004c410fd1d 100644 --- a/plugin/httptrace/httptrace.go +++ b/plugin/httptrace/httptrace.go @@ -50,7 +50,7 @@ func Extract(ctx context.Context, req *http.Request) ([]core.KeyValue, []core.Ke return true }) - return attrs, correlationCtxKVs, tpropagation.FromContext(ctx) + return attrs, correlationCtxKVs, tpropagation.UpstreamContext(ctx) } func Inject(ctx context.Context, req *http.Request) { diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index f31d73ec5ea..3d44cd3633c 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -145,17 +145,17 @@ func NewHandler(handler http.Handler, operation string, opts ...Option) http.Han func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { opts := append([]trace.StartOption{}, h.spanStartOptions...) // start with the configured options - // TODO: do something with the correlation context ctx := propagation.ExtractHTTP(r.Context(), h.props, r.Header) - sc := tpropagation.FromContext(ctx) - if sc.IsValid() { // not a valid span context, so no link / parent relationship to establish + + // not a valid span context, so no link / parent relationship to establish + if sc := tpropagation.UpstreamContext(ctx); sc.IsValid() { var opt trace.StartOption if h.public { // If the endpoint is a public endpoint, it should start a new trace // and incoming remote sctx should be added as a link. opt = trace.LinkedTo(sc) } else { // not a private endpoint, so assume child relationship - opt = trace.ChildOf(sc) + opt = trace.WithParent(ctx) } opts = append(opts, opt) } @@ -223,8 +223,7 @@ func setAfterServeAttributes(span trace.Span, read, wrote, statusCode int64, rer func WithRouteTag(route string, h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { span := trace.SpanFromContext(r.Context()) - //TODO: Why doesn't tag.Upsert work? span.SetAttributes(RouteKey.String(route)) - h.ServeHTTP(w, r.WithContext(trace.ContextWithSpan(r.Context(), span))) + h.ServeHTTP(w, r) }) } diff --git a/plugin/othttp/handler_example_test.go b/plugin/othttp/handler_example_test.go index c41300bbf51..2e4ffc0ff03 100644 --- a/plugin/othttp/handler_example_test.go +++ b/plugin/othttp/handler_example_test.go @@ -76,7 +76,7 @@ func ExampleNewHandler() { func(w http.ResponseWriter, r *http.Request) { ctx := r.Context() var name string - // Wrap another function in it's own span + // Wrap another function in its own span if err := trace.SpanFromContext(ctx).Tracer().WithSpan(ctx, "figureOutName", func(ctx context.Context) error { var err error diff --git a/sdk/trace/batch_span_processor_test.go b/sdk/trace/batch_span_processor_test.go index 4c87894d1af..506858b0c41 100644 --- a/sdk/trace/batch_span_processor_test.go +++ b/sdk/trace/batch_span_processor_test.go @@ -23,6 +23,7 @@ import ( "go.opentelemetry.io/otel/api/core" apitrace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" export "go.opentelemetry.io/otel/sdk/export/trace" sdktrace "go.opentelemetry.io/otel/sdk/trace" ) @@ -183,11 +184,12 @@ func createAndRegisterBatchSP(t *testing.T, option testOption, te *testBatchExpo } func generateSpan(t *testing.T, tr apitrace.Tracer, option testOption) { + ctx := context.Background() sc := getSpanContext() for i := 0; i < option.genNumSpans; i++ { binary.BigEndian.PutUint64(sc.TraceID[0:8], uint64(i+1)) - _, span := tr.Start(context.Background(), option.name, apitrace.ChildOf(sc)) + _, span := tr.Start(ctx, option.name, apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc))) span.End() } } diff --git a/sdk/trace/simple_span_processor_test.go b/sdk/trace/simple_span_processor_test.go index 8d57f5cfb90..6c8bf3b0721 100644 --- a/sdk/trace/simple_span_processor_test.go +++ b/sdk/trace/simple_span_processor_test.go @@ -20,6 +20,7 @@ import ( "go.opentelemetry.io/otel/api/core" apitrace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" export "go.opentelemetry.io/otel/sdk/export/trace" sdktrace "go.opentelemetry.io/otel/sdk/trace" ) @@ -65,7 +66,8 @@ func TestSimpleSpanProcessorOnEnd(t *testing.T) { SpanID: sid, TraceFlags: 0x1, } - _, span := tr.Start(context.Background(), "OnEnd", apitrace.ChildOf(sc)) + ctx := context.Background() + _, span := tr.Start(ctx, "OnEnd", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc))) span.End() wantTraceID := tid diff --git a/sdk/trace/trace_test.go b/sdk/trace/trace_test.go index 2298132258d..1996e9deb30 100644 --- a/sdk/trace/trace_test.go +++ b/sdk/trace/trace_test.go @@ -31,6 +31,7 @@ import ( "go.opentelemetry.io/otel/api/testharness" "go.opentelemetry.io/otel/api/trace" apitrace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/api/trace/propagation" export "go.opentelemetry.io/otel/sdk/export/trace" ) @@ -176,6 +177,7 @@ func TestSampling(t *testing.T) { var sampled int for i := 0; i < total; i++ { var opts []apitrace.StartOption + ctx := context.Background() if tc.parent { psc := core.SpanContext{ TraceID: idg.NewTraceID(), @@ -184,9 +186,9 @@ func TestSampling(t *testing.T) { if tc.sampledParent { psc.TraceFlags = core.TraceFlagsSampled } - opts = append(opts, apitrace.ChildOf(psc)) + opts = append(opts, apitrace.WithParent(propagation.WithUpstreamContext(ctx, psc))) } - _, span := tr.Start(context.Background(), "test", opts...) + _, span := tr.Start(ctx, "test", opts...) if span.SpanContext().IsSampled() { sampled++ } @@ -211,18 +213,19 @@ func TestSampling(t *testing.T) { func TestStartSpanWithChildOf(t *testing.T) { tp, _ := NewProvider() tr := tp.Tracer("SpanWith ChildOf") + ctx := context.Background() sc1 := core.SpanContext{ TraceID: tid, SpanID: sid, TraceFlags: 0x0, } - _, s1 := tr.Start(context.Background(), "span1-unsampled-parent1", apitrace.ChildOf(sc1)) + _, s1 := tr.Start(ctx, "span1-unsampled-parent1", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc1))) if err := checkChild(sc1, s1); err != nil { t.Error(err) } - _, s2 := tr.Start(context.Background(), "span2-unsampled-parent1", apitrace.ChildOf(sc1)) + _, s2 := tr.Start(ctx, "span2-unsampled-parent1", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc1))) if err := checkChild(sc1, s2); err != nil { t.Error(err) } @@ -233,54 +236,12 @@ func TestStartSpanWithChildOf(t *testing.T) { TraceFlags: 0x1, //Tracestate: testTracestate, } - _, s3 := tr.Start(context.Background(), "span3-sampled-parent2", apitrace.ChildOf(sc2)) + _, s3 := tr.Start(context.Background(), "span3-sampled-parent2", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc2))) if err := checkChild(sc2, s3); err != nil { t.Error(err) } - ctx, s4 := tr.Start(context.Background(), "span4-sampled-parent2", apitrace.ChildOf(sc2)) - if err := checkChild(sc2, s4); err != nil { - t.Error(err) - } - - s4Sc := s4.SpanContext() - _, s5 := tr.Start(ctx, "span5-implicit-childof-span4") - if err := checkChild(s4Sc, s5); err != nil { - t.Error(err) - } -} - -func TestStartSpanWithFollowsFrom(t *testing.T) { - tp, _ := NewProvider() - tr := tp.Tracer("SpanWith FollowsFrom") - - sc1 := core.SpanContext{ - TraceID: tid, - SpanID: sid, - TraceFlags: 0x0, - } - _, s1 := tr.Start(context.Background(), "span1-unsampled-parent1", apitrace.FollowsFrom(sc1)) - if err := checkChild(sc1, s1); err != nil { - t.Error(err) - } - - _, s2 := tr.Start(context.Background(), "span2-unsampled-parent1", apitrace.FollowsFrom(sc1)) - if err := checkChild(sc1, s2); err != nil { - t.Error(err) - } - - sc2 := core.SpanContext{ - TraceID: tid, - SpanID: sid, - TraceFlags: 0x1, - //Tracestate: testTracestate, - } - _, s3 := tr.Start(context.Background(), "span3-sampled-parent2", apitrace.FollowsFrom(sc2)) - if err := checkChild(sc2, s3); err != nil { - t.Error(err) - } - - ctx, s4 := tr.Start(context.Background(), "span4-sampled-parent2", apitrace.FollowsFrom(sc2)) + ctx, s4 := tr.Start(context.Background(), "span4-sampled-parent2", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc2))) if err := checkChild(sc2, s4); err != nil { t.Error(err) } @@ -574,14 +535,15 @@ func TestLinksOverLimit(t *testing.T) { func TestSetSpanName(t *testing.T) { te := &testExporter{} tp, _ := NewProvider(WithSyncer(te)) + ctx := context.Background() want := "SetSpanName/SpanName-1" - _, span := tp.Tracer("SetSpanName").Start(context.Background(), "SpanName-1", - apitrace.ChildOf(core.SpanContext{ + _, span := tp.Tracer("SetSpanName").Start(ctx, "SpanName-1", + apitrace.WithParent(propagation.WithUpstreamContext(ctx, core.SpanContext{ TraceID: tid, SpanID: sid, TraceFlags: 1, - }), + })), ) got, err := endSpan(te, span) if err != nil { @@ -662,11 +624,12 @@ func startSpan(tp *Provider, trName string, args ...apitrace.StartOption) apitra } // startNamed Span is a test utility func that starts a span with a -// passed name and with ChildOf option. remote span context contains +// passed name and with WithParent option. remote span context contains // TraceFlags with sampled bit set. This allows the span to be // automatically sampled. func startNamedSpan(tp *Provider, trName, name string, args ...apitrace.StartOption) apitrace.Span { - args = append(args, apitrace.ChildOf(remoteSpanContext()), apitrace.WithRecord()) + ctx := context.Background() + args = append(args, apitrace.WithParent(propagation.WithUpstreamContext(ctx, remoteSpanContext())), apitrace.WithRecord()) _, span := tp.Tracer(trName).Start( context.Background(), name, @@ -678,7 +641,7 @@ func startNamedSpan(tp *Provider, trName, name string, args ...apitrace.StartOpt // endSpan is a test utility function that ends the span in the context and // returns the exported export.SpanData. // It requires that span be sampled using one of these methods -// 1. Passing parent span context using ChildOf option +// 1. Passing parent span context using WithParent option // 2. Use WithSampler(AlwaysSample()) // 3. Configuring AlwaysSample() as default sampler // @@ -739,9 +702,10 @@ func TestEndSpanTwice(t *testing.T) { func TestStartSpanAfterEnd(t *testing.T) { spans := make(fakeExporter) tp, _ := NewProvider(WithConfig(Config{DefaultSampler: AlwaysSample()}), WithSyncer(spans)) + ctx := context.Background() tr := tp.Tracer("SpanAfterEnd") - ctx, span0 := tr.Start(context.Background(), "parent", apitrace.ChildOf(remoteSpanContext())) + ctx, span0 := tr.Start(ctx, "parent", apitrace.WithParent(propagation.WithUpstreamContext(ctx, remoteSpanContext()))) ctx1, span1 := tr.Start(ctx, "span-1") span1.End() // Start a new span with the context containing span-1 @@ -820,16 +784,18 @@ func TestExecutionTracerTaskEnd(t *testing.T) { tID, _ := core.TraceIDFromHex("0102030405060708090a0b0c0d0e0f") sID, _ := core.SpanIDFromHex("0001020304050607") + ctx := context.Background() _, apiSpan = tr.Start( - context.Background(), + ctx, "foo", - apitrace.ChildOf( - core.SpanContext{ - TraceID: tID, - SpanID: sID, - TraceFlags: 0, - }, + apitrace.WithParent( + propagation.WithUpstreamContext(ctx, + core.SpanContext{ + TraceID: tID, + SpanID: sID, + TraceFlags: 0, + }), ), ) s = apiSpan.(*span) diff --git a/sdk/trace/tracer.go b/sdk/trace/tracer.go index 0832d392a24..606e9380ab6 100644 --- a/sdk/trace/tracer.go +++ b/sdk/trace/tracer.go @@ -17,8 +17,8 @@ package trace import ( "context" - "go.opentelemetry.io/otel/api/core" apitrace "go.opentelemetry.io/otel/api/trace" + "go.opentelemetry.io/otel/internal/trace/parent" ) type tracer struct { @@ -30,34 +30,21 @@ var _ apitrace.Tracer = &tracer{} func (tr *tracer) Start(ctx context.Context, name string, o ...apitrace.StartOption) (context.Context, apitrace.Span) { var opts apitrace.StartConfig - var parent core.SpanContext - var remoteParent bool - //TODO [rghetia] : Add new option for parent. If parent is configured then use that parent. for _, op := range o { op(&opts) } - if relation := opts.Relation; relation.SpanContext != core.EmptySpanContext() { - switch relation.RelationshipType { - case apitrace.ChildOfRelationship, apitrace.FollowsFromRelationship: - parent = relation.SpanContext - remoteParent = true - default: - // Future relationship types may have different behavior, - // e.g., adding a `Link` instead of setting the `parent` - } - } else { - if p := apitrace.SpanFromContext(ctx); p != nil { - if sdkSpan, ok := p.(*span); ok { - sdkSpan.addChild() - parent = sdkSpan.spanContext - } + ctx, parentSpanContext, remoteParent := parent.GetContext(ctx, opts.Parent) + + if p := apitrace.SpanFromContext(ctx); p != nil { + if sdkSpan, ok := p.(*span); ok { + sdkSpan.addChild() } } spanName := tr.spanNameWithPrefix(name) - span := startSpanInternal(tr, spanName, parent, remoteParent, opts) + span := startSpanInternal(tr, spanName, parentSpanContext, remoteParent, opts) for _, l := range opts.Links { span.addLink(l) } From 77d179bc4123cbc2250f36f3c14d460f134911d9 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 18:03:06 -0800 Subject: [PATCH 16/21] Rename Upstream->Remote --- api/trace/propagation/b3_propagator.go | 2 +- .../b3_propagator_benchmark_test.go | 2 +- api/trace/propagation/b3_propagator_test.go | 4 ++-- api/trace/propagation/context.go | 16 ++++++++-------- .../propagation/trace_context_propagator.go | 2 +- .../trace_context_propagator_benchmark_test.go | 2 +- .../trace_context_propagator_test.go | 6 +++--- bridge/opentracing/bridge.go | 2 +- internal/trace/parent/parent.go | 2 +- plugin/grpctrace/grpctrace.go | 2 +- plugin/httptrace/httptrace.go | 2 +- plugin/othttp/handler.go | 2 +- sdk/trace/batch_span_processor_test.go | 2 +- sdk/trace/simple_span_processor_test.go | 2 +- sdk/trace/trace_test.go | 18 +++++++++--------- 15 files changed, 33 insertions(+), 33 deletions(-) diff --git a/api/trace/propagation/b3_propagator.go b/api/trace/propagation/b3_propagator.go index a4156326e07..2285fd150b3 100644 --- a/api/trace/propagation/b3_propagator.go +++ b/api/trace/propagation/b3_propagator.go @@ -84,7 +84,7 @@ func (b3 B3) Extract(ctx context.Context, supplier propagation.HTTPSupplier) con } else { sc = b3.extract(ctx, supplier) } - return WithUpstreamContext(ctx, sc) + return WithRemoteContext(ctx, sc) } func (b3 B3) extract(ctx context.Context, supplier propagation.HTTPSupplier) core.SpanContext { diff --git a/api/trace/propagation/b3_propagator_benchmark_test.go b/api/trace/propagation/b3_propagator_benchmark_test.go index 8589a40fe44..500a44912bd 100644 --- a/api/trace/propagation/b3_propagator_benchmark_test.go +++ b/api/trace/propagation/b3_propagator_benchmark_test.go @@ -103,7 +103,7 @@ func BenchmarkInjectB3(b *testing.B) { req, _ := http.NewRequest("GET", "http://example.com", nil) ctx := context.Background() if tt.parentSc.IsValid() { - ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(propagation.WithUpstreamContext(ctx, tt.parentSc))) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(propagation.WithRemoteContext(ctx, tt.parentSc))) } else { ctx, _ = mockTracer.Start(ctx, "inject") } diff --git a/api/trace/propagation/b3_propagator_test.go b/api/trace/propagation/b3_propagator_test.go index 71497b1e582..654db3513e8 100644 --- a/api/trace/propagation/b3_propagator_test.go +++ b/api/trace/propagation/b3_propagator_test.go @@ -68,7 +68,7 @@ func TestExtractB3(t *testing.T) { ctx := context.Background() ctx = propagation.ExtractHTTP(ctx, props, req.Header) - gotSc := tpropagation.UpstreamContext(ctx) + gotSc := tpropagation.RemoteContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("%s: %s: -got +want %s", tg.name, tt.name, diff) } @@ -110,7 +110,7 @@ func TestInjectB3(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) ctx := context.Background() if tt.parentSc.IsValid() { - ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithUpstreamContext(ctx, tt.parentSc))) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithRemoteContext(ctx, tt.parentSc))) } else { ctx, _ = mockTracer.Start(ctx, "inject") } diff --git a/api/trace/propagation/context.go b/api/trace/propagation/context.go index db922e8735f..cff7c1d3935 100644 --- a/api/trace/propagation/context.go +++ b/api/trace/propagation/context.go @@ -6,18 +6,18 @@ import ( "go.opentelemetry.io/otel/api/core" ) -type spanContextType struct{} +type remoteContextType struct{} -var spanContextKey = &spanContextType{} +var remoteContextKey = &remoteContextType{} -// WithUpstreamContext enters a core.SpanContext into a new Context. -func WithUpstreamContext(ctx context.Context, sc core.SpanContext) context.Context { - return context.WithValue(ctx, spanContextKey, sc) +// WithRemoteContext enters a core.SpanContext into a new Context. +func WithRemoteContext(ctx context.Context, sc core.SpanContext) context.Context { + return context.WithValue(ctx, remoteContextKey, sc) } -// FromContext gets the current core.SpanContext from a Context. -func UpstreamContext(ctx context.Context) core.SpanContext { - if sc, ok := ctx.Value(spanContextKey).(core.SpanContext); ok { +// RemoteContext gets the current core.SpanContext from a Context. +func RemoteContext(ctx context.Context) core.SpanContext { + if sc, ok := ctx.Value(remoteContextKey).(core.SpanContext); ok { return sc } return core.EmptySpanContext() diff --git a/api/trace/propagation/trace_context_propagator.go b/api/trace/propagation/trace_context_propagator.go index c6a0317bfb9..c7183171887 100644 --- a/api/trace/propagation/trace_context_propagator.go +++ b/api/trace/propagation/trace_context_propagator.go @@ -55,7 +55,7 @@ func (hp TraceContext) Inject(ctx context.Context, supplier propagation.HTTPSupp func (tc TraceContext) Extract( ctx context.Context, supplier propagation.HTTPSupplier, ) context.Context { - return WithUpstreamContext(ctx, tc.extract(supplier)) + return WithRemoteContext(ctx, tc.extract(supplier)) } func (TraceContext) extract(supplier propagation.HTTPSupplier) core.SpanContext { diff --git a/api/trace/propagation/trace_context_propagator_benchmark_test.go b/api/trace/propagation/trace_context_propagator_benchmark_test.go index 30405d611ed..6722b2d11c4 100644 --- a/api/trace/propagation/trace_context_propagator_benchmark_test.go +++ b/api/trace/propagation/trace_context_propagator_benchmark_test.go @@ -41,7 +41,7 @@ func injectSubBenchmarks(b *testing.B, fn func(context.Context, *testing.B)) { TraceFlags: core.TraceFlagsSampled, } ctx := context.Background() - ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithUpstreamContext(ctx, sc))) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithRemoteContext(ctx, sc))) fn(ctx, b) }) diff --git a/api/trace/propagation/trace_context_propagator_test.go b/api/trace/propagation/trace_context_propagator_test.go index f44ce882dd8..55fcbf0df68 100644 --- a/api/trace/propagation/trace_context_propagator_test.go +++ b/api/trace/propagation/trace_context_propagator_test.go @@ -129,7 +129,7 @@ func TestExtractValidTraceContextFromHTTPReq(t *testing.T) { ctx := context.Background() ctx = propagation.ExtractHTTP(ctx, props, req.Header) - gotSc := tpropagation.UpstreamContext(ctx) + gotSc := tpropagation.RemoteContext(ctx) if diff := cmp.Diff(gotSc, tt.wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -217,7 +217,7 @@ func TestExtractInvalidTraceContextFromHTTPReq(t *testing.T) { ctx := context.Background() ctx = propagation.ExtractHTTP(ctx, props, req.Header) - gotSc := tpropagation.UpstreamContext(ctx) + gotSc := tpropagation.RemoteContext(ctx) if diff := cmp.Diff(gotSc, wantSc); diff != "" { t.Errorf("Extract Tracecontext: %s: -got +want %s", tt.name, diff) } @@ -274,7 +274,7 @@ func TestInjectTraceContextToHTTPReq(t *testing.T) { req, _ := http.NewRequest("GET", "http://example.com", nil) ctx := context.Background() if tt.sc.IsValid() { - ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithUpstreamContext(ctx, tt.sc))) + ctx, _ = mockTracer.Start(ctx, "inject", trace.WithParent(tpropagation.WithRemoteContext(ctx, tt.sc))) } propagation.InjectHTTP(ctx, props, req.Header) diff --git a/bridge/opentracing/bridge.go b/bridge/opentracing/bridge.go index e18e535a3bc..2a03917ed71 100644 --- a/bridge/opentracing/bridge.go +++ b/bridge/opentracing/bridge.go @@ -449,7 +449,7 @@ func (r bridgeRelation) ToOtelParent() context.Context { if r.spanContext == nil { return ctx } - ctx = propagation.WithUpstreamContext(ctx, core.SpanContext{ + ctx = propagation.WithRemoteContext(ctx, core.SpanContext{ TraceID: r.spanContext.otelSpanContext.TraceID, SpanID: r.spanContext.otelSpanContext.SpanID, // TODO: Flags diff --git a/internal/trace/parent/parent.go b/internal/trace/parent/parent.go index 8985c4bc0f6..e593aaa93e8 100644 --- a/internal/trace/parent/parent.go +++ b/internal/trace/parent/parent.go @@ -12,7 +12,7 @@ func getEffective(ctx context.Context) core.SpanContext { if ctx == nil { return core.EmptySpanContext() } - rctx := propagation.UpstreamContext(ctx) + rctx := propagation.RemoteContext(ctx) sctx := trace.SpanFromContext(ctx).SpanContext() if rctx.IsValid() && sctx.IsValid() && rctx.TraceID == sctx.TraceID { diff --git a/plugin/grpctrace/grpctrace.go b/plugin/grpctrace/grpctrace.go index 5d082bebc1a..86054b9284a 100644 --- a/plugin/grpctrace/grpctrace.go +++ b/plugin/grpctrace/grpctrace.go @@ -53,7 +53,7 @@ func Extract(ctx context.Context, metadata *metadata.MD) ([]core.KeyValue, core. metadata: metadata, }) - spanContext := tpropagation.UpstreamContext(ctx) + spanContext := tpropagation.RemoteContext(ctx) var correlationCtxKVs []core.KeyValue bpropagation.FromContext(ctx).Foreach(func(kv core.KeyValue) bool { correlationCtxKVs = append(correlationCtxKVs, kv) diff --git a/plugin/httptrace/httptrace.go b/plugin/httptrace/httptrace.go index 004c410fd1d..f62dc2f19c9 100644 --- a/plugin/httptrace/httptrace.go +++ b/plugin/httptrace/httptrace.go @@ -50,7 +50,7 @@ func Extract(ctx context.Context, req *http.Request) ([]core.KeyValue, []core.Ke return true }) - return attrs, correlationCtxKVs, tpropagation.UpstreamContext(ctx) + return attrs, correlationCtxKVs, tpropagation.RemoteContext(ctx) } func Inject(ctx context.Context, req *http.Request) { diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index 3d44cd3633c..7128976a31a 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -148,7 +148,7 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ctx := propagation.ExtractHTTP(r.Context(), h.props, r.Header) // not a valid span context, so no link / parent relationship to establish - if sc := tpropagation.UpstreamContext(ctx); sc.IsValid() { + if sc := tpropagation.RemoteContext(ctx); sc.IsValid() { var opt trace.StartOption if h.public { // If the endpoint is a public endpoint, it should start a new trace diff --git a/sdk/trace/batch_span_processor_test.go b/sdk/trace/batch_span_processor_test.go index 506858b0c41..c49b5edd20e 100644 --- a/sdk/trace/batch_span_processor_test.go +++ b/sdk/trace/batch_span_processor_test.go @@ -189,7 +189,7 @@ func generateSpan(t *testing.T, tr apitrace.Tracer, option testOption) { for i := 0; i < option.genNumSpans; i++ { binary.BigEndian.PutUint64(sc.TraceID[0:8], uint64(i+1)) - _, span := tr.Start(ctx, option.name, apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc))) + _, span := tr.Start(ctx, option.name, apitrace.WithParent(propagation.WithRemoteContext(ctx, sc))) span.End() } } diff --git a/sdk/trace/simple_span_processor_test.go b/sdk/trace/simple_span_processor_test.go index 6c8bf3b0721..8b3edde4627 100644 --- a/sdk/trace/simple_span_processor_test.go +++ b/sdk/trace/simple_span_processor_test.go @@ -67,7 +67,7 @@ func TestSimpleSpanProcessorOnEnd(t *testing.T) { TraceFlags: 0x1, } ctx := context.Background() - _, span := tr.Start(ctx, "OnEnd", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc))) + _, span := tr.Start(ctx, "OnEnd", apitrace.WithParent(propagation.WithRemoteContext(ctx, sc))) span.End() wantTraceID := tid diff --git a/sdk/trace/trace_test.go b/sdk/trace/trace_test.go index 1996e9deb30..d7868b76bf9 100644 --- a/sdk/trace/trace_test.go +++ b/sdk/trace/trace_test.go @@ -186,7 +186,7 @@ func TestSampling(t *testing.T) { if tc.sampledParent { psc.TraceFlags = core.TraceFlagsSampled } - opts = append(opts, apitrace.WithParent(propagation.WithUpstreamContext(ctx, psc))) + opts = append(opts, apitrace.WithParent(propagation.WithRemoteContext(ctx, psc))) } _, span := tr.Start(ctx, "test", opts...) if span.SpanContext().IsSampled() { @@ -220,12 +220,12 @@ func TestStartSpanWithChildOf(t *testing.T) { SpanID: sid, TraceFlags: 0x0, } - _, s1 := tr.Start(ctx, "span1-unsampled-parent1", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc1))) + _, s1 := tr.Start(ctx, "span1-unsampled-parent1", apitrace.WithParent(propagation.WithRemoteContext(ctx, sc1))) if err := checkChild(sc1, s1); err != nil { t.Error(err) } - _, s2 := tr.Start(ctx, "span2-unsampled-parent1", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc1))) + _, s2 := tr.Start(ctx, "span2-unsampled-parent1", apitrace.WithParent(propagation.WithRemoteContext(ctx, sc1))) if err := checkChild(sc1, s2); err != nil { t.Error(err) } @@ -236,12 +236,12 @@ func TestStartSpanWithChildOf(t *testing.T) { TraceFlags: 0x1, //Tracestate: testTracestate, } - _, s3 := tr.Start(context.Background(), "span3-sampled-parent2", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc2))) + _, s3 := tr.Start(context.Background(), "span3-sampled-parent2", apitrace.WithParent(propagation.WithRemoteContext(ctx, sc2))) if err := checkChild(sc2, s3); err != nil { t.Error(err) } - ctx, s4 := tr.Start(context.Background(), "span4-sampled-parent2", apitrace.WithParent(propagation.WithUpstreamContext(ctx, sc2))) + ctx, s4 := tr.Start(context.Background(), "span4-sampled-parent2", apitrace.WithParent(propagation.WithRemoteContext(ctx, sc2))) if err := checkChild(sc2, s4); err != nil { t.Error(err) } @@ -539,7 +539,7 @@ func TestSetSpanName(t *testing.T) { want := "SetSpanName/SpanName-1" _, span := tp.Tracer("SetSpanName").Start(ctx, "SpanName-1", - apitrace.WithParent(propagation.WithUpstreamContext(ctx, core.SpanContext{ + apitrace.WithParent(propagation.WithRemoteContext(ctx, core.SpanContext{ TraceID: tid, SpanID: sid, TraceFlags: 1, @@ -629,7 +629,7 @@ func startSpan(tp *Provider, trName string, args ...apitrace.StartOption) apitra // automatically sampled. func startNamedSpan(tp *Provider, trName, name string, args ...apitrace.StartOption) apitrace.Span { ctx := context.Background() - args = append(args, apitrace.WithParent(propagation.WithUpstreamContext(ctx, remoteSpanContext())), apitrace.WithRecord()) + args = append(args, apitrace.WithParent(propagation.WithRemoteContext(ctx, remoteSpanContext())), apitrace.WithRecord()) _, span := tp.Tracer(trName).Start( context.Background(), name, @@ -705,7 +705,7 @@ func TestStartSpanAfterEnd(t *testing.T) { ctx := context.Background() tr := tp.Tracer("SpanAfterEnd") - ctx, span0 := tr.Start(ctx, "parent", apitrace.WithParent(propagation.WithUpstreamContext(ctx, remoteSpanContext()))) + ctx, span0 := tr.Start(ctx, "parent", apitrace.WithParent(propagation.WithRemoteContext(ctx, remoteSpanContext()))) ctx1, span1 := tr.Start(ctx, "span-1") span1.End() // Start a new span with the context containing span-1 @@ -790,7 +790,7 @@ func TestExecutionTracerTaskEnd(t *testing.T) { ctx, "foo", apitrace.WithParent( - propagation.WithUpstreamContext(ctx, + propagation.WithRemoteContext(ctx, core.SpanContext{ TraceID: tID, SpanID: sID, From 8bb34c507653a07708270335ecf51341c62c9d07 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 18:07:41 -0800 Subject: [PATCH 17/21] Restore tests --- .../baggage/propagation/propagation.go | 8 +- api/trace/testtrace/tracer_test.go | 187 +++++++++--------- 2 files changed, 98 insertions(+), 97 deletions(-) diff --git a/api/context/baggage/propagation/propagation.go b/api/context/baggage/propagation/propagation.go index 12e9a2810cd..713eae61776 100644 --- a/api/context/baggage/propagation/propagation.go +++ b/api/context/baggage/propagation/propagation.go @@ -11,13 +11,13 @@ import ( "go.opentelemetry.io/otel/api/key" ) -type ctxEntriesType struct{} +type correlationsType struct{} var ( // CorrelationContextHeader is specified by W3C. CorrelationContextHeader = "Correlation-Context" - ctxEntriesKey = &ctxEntriesType{} + correlationsKey = &correlationsType{} ) // CorrelationContext propagates Key:Values in W3C TraceContext format. @@ -27,7 +27,7 @@ var _ propagation.HTTPPropagator = CorrelationContext{} // WithMap enters a baggage.Map into a new Context. func WithMap(ctx context.Context, m baggage.Map) context.Context { - return context.WithValue(ctx, ctxEntriesKey, m) + return context.WithValue(ctx, correlationsKey, m) } // WithMap enters a key:value set into a new Context. @@ -39,7 +39,7 @@ func NewContext(ctx context.Context, keyvalues ...core.KeyValue) context.Context // FromContext gets the current baggage.Map from a Context. func FromContext(ctx context.Context) baggage.Map { - if m, ok := ctx.Value(ctxEntriesKey).(baggage.Map); ok { + if m, ok := ctx.Value(correlationsKey).(baggage.Map); ok { return m } return baggage.NewEmptyMap() diff --git a/api/trace/testtrace/tracer_test.go b/api/trace/testtrace/tracer_test.go index 5dae3cad1cc..28acf7b75f6 100644 --- a/api/trace/testtrace/tracer_test.go +++ b/api/trace/testtrace/tracer_test.go @@ -20,6 +20,7 @@ import ( "testing" "time" + "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/testharness" "go.opentelemetry.io/otel/api/trace" "go.opentelemetry.io/otel/api/trace/testtrace" @@ -31,138 +32,138 @@ func TestTracer(t *testing.T) { return testtrace.NewTracer() }) - // t.Run("#Start", func(t *testing.T) { - // testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { - // _, span := tracer.Start(context.Background(), name) + t.Run("#Start", func(t *testing.T) { + testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { + _, span := tracer.Start(context.Background(), name) - // return span, nil - // }) + return span, nil + }) - // t.Run("uses the start time from WithStartTime", func(t *testing.T) { - // t.Parallel() + t.Run("uses the start time from WithStartTime", func(t *testing.T) { + t.Parallel() - // e := matchers.NewExpecter(t) + e := matchers.NewExpecter(t) - // expectedStartTime := time.Now().AddDate(5, 0, 0) + expectedStartTime := time.Now().AddDate(5, 0, 0) - // subject := testtrace.NewTracer() - // _, span := subject.Start(context.Background(), "test", trace.WithStartTime(expectedStartTime)) + subject := testtrace.NewTracer() + _, span := subject.Start(context.Background(), "test", trace.WithStartTime(expectedStartTime)) - // testSpan, ok := span.(*testtrace.Span) - // e.Expect(ok).ToBeTrue() + testSpan, ok := span.(*testtrace.Span) + e.Expect(ok).ToBeTrue() - // e.Expect(testSpan.StartTime()).ToEqual(expectedStartTime) - // }) + e.Expect(testSpan.StartTime()).ToEqual(expectedStartTime) + }) - // t.Run("uses the attributes from WithAttributes", func(t *testing.T) { - // t.Parallel() + t.Run("uses the attributes from WithAttributes", func(t *testing.T) { + t.Parallel() - // e := matchers.NewExpecter(t) + e := matchers.NewExpecter(t) - // attr1 := core.Key("a").String("1") - // attr2 := core.Key("b").String("2") + attr1 := core.Key("a").String("1") + attr2 := core.Key("b").String("2") - // subject := testtrace.NewTracer() - // _, span := subject.Start(context.Background(), "test", trace.WithAttributes(attr1, attr2)) + subject := testtrace.NewTracer() + _, span := subject.Start(context.Background(), "test", trace.WithAttributes(attr1, attr2)) - // testSpan, ok := span.(*testtrace.Span) - // e.Expect(ok).ToBeTrue() + testSpan, ok := span.(*testtrace.Span) + e.Expect(ok).ToBeTrue() - // attributes := testSpan.Attributes() - // e.Expect(attributes[attr1.Key]).ToEqual(attr1.Value) - // e.Expect(attributes[attr2.Key]).ToEqual(attr2.Value) - // }) + attributes := testSpan.Attributes() + e.Expect(attributes[attr1.Key]).ToEqual(attr1.Value) + e.Expect(attributes[attr2.Key]).ToEqual(attr2.Value) + }) - // t.Run("uses the parent's span context from WithParent", func(t *testing.T) { - // t.Parallel() + t.Run("uses the parent's span context from WithParent", func(t *testing.T) { + t.Parallel() - // e := matchers.NewExpecter(t) + e := matchers.NewExpecter(t) - // subject := testtrace.NewTracer() + subject := testtrace.NewTracer() - // parent, parentSpan := subject.Start(context.Background(), "parent") - // parentSpanContext := parentSpan.SpanContext() + parent, parentSpan := subject.Start(context.Background(), "parent") + parentSpanContext := parentSpan.SpanContext() - // _, span := subject.Start(context.Background(), "child", trace.WithParent(parent)) + _, span := subject.Start(context.Background(), "child", trace.WithParent(parent)) - // testSpan, ok := span.(*testtrace.Span) - // e.Expect(ok).ToBeTrue() + testSpan, ok := span.(*testtrace.Span) + e.Expect(ok).ToBeTrue() - // childSpanContext := testSpan.SpanContext() - // e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) - // e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) - // e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) - // }) + childSpanContext := testSpan.SpanContext() + e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) + e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) + e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) + }) - // t.Run("defers to ChildOf if the provided context also contains a parent span", func(t *testing.T) { - // t.Parallel() + t.Run("defers to ChildOf if the provided context also contains a parent span", func(t *testing.T) { + t.Parallel() - // e := matchers.NewExpecter(t) + e := matchers.NewExpecter(t) - // subject := testtrace.NewTracer() + subject := testtrace.NewTracer() - // parentCtx, parentSpan := subject.Start(context.Background(), "parent") - // parentSpanContext := parentSpan.SpanContext() + parentCtx, parentSpan := subject.Start(context.Background(), "parent") + parentSpanContext := parentSpan.SpanContext() - // ctx, _ := subject.Start(context.Background(), "should be ignored") - // _, span := subject.Start(ctx, "child", trace.WithParent(parentCtx)) + ctx, _ := subject.Start(context.Background(), "should be ignored") + _, span := subject.Start(ctx, "child", trace.WithParent(parentCtx)) - // testSpan, ok := span.(*testtrace.Span) - // e.Expect(ok).ToBeTrue() + testSpan, ok := span.(*testtrace.Span) + e.Expect(ok).ToBeTrue() - // childSpanContext := testSpan.SpanContext() - // e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) - // e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) - // e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) - // }) + childSpanContext := testSpan.SpanContext() + e.Expect(childSpanContext.TraceID).ToEqual(parentSpanContext.TraceID) + e.Expect(childSpanContext.SpanID).NotToEqual(parentSpanContext.SpanID) + e.Expect(testSpan.ParentSpanID()).ToEqual(parentSpanContext.SpanID) + }) - // t.Run("uses the links provided through LinkedTo", func(t *testing.T) { - // t.Parallel() + t.Run("uses the links provided through LinkedTo", func(t *testing.T) { + t.Parallel() - // e := matchers.NewExpecter(t) + e := matchers.NewExpecter(t) - // subject := testtrace.NewTracer() + subject := testtrace.NewTracer() - // _, span := subject.Start(context.Background(), "link1") - // link1 := trace.Link{ - // SpanContext: span.SpanContext(), - // Attributes: []core.KeyValue{ - // core.Key("a").String("1"), - // }, - // } + _, span := subject.Start(context.Background(), "link1") + link1 := trace.Link{ + SpanContext: span.SpanContext(), + Attributes: []core.KeyValue{ + core.Key("a").String("1"), + }, + } - // _, span = subject.Start(context.Background(), "link2") - // link2 := trace.Link{ - // SpanContext: span.SpanContext(), - // Attributes: []core.KeyValue{ - // core.Key("b").String("2"), - // }, - // } + _, span = subject.Start(context.Background(), "link2") + link2 := trace.Link{ + SpanContext: span.SpanContext(), + Attributes: []core.KeyValue{ + core.Key("b").String("2"), + }, + } - // _, span = subject.Start(context.Background(), "test", trace.LinkedTo(link1.SpanContext, link1.Attributes...), trace.LinkedTo(link2.SpanContext, link2.Attributes...)) + _, span = subject.Start(context.Background(), "test", trace.LinkedTo(link1.SpanContext, link1.Attributes...), trace.LinkedTo(link2.SpanContext, link2.Attributes...)) - // testSpan, ok := span.(*testtrace.Span) - // e.Expect(ok).ToBeTrue() + testSpan, ok := span.(*testtrace.Span) + e.Expect(ok).ToBeTrue() - // links := testSpan.Links() - // e.Expect(links[link1.SpanContext]).ToEqual(link1.Attributes) - // e.Expect(links[link2.SpanContext]).ToEqual(link2.Attributes) - // }) - // }) + links := testSpan.Links() + e.Expect(links[link1.SpanContext]).ToEqual(link1.Attributes) + e.Expect(links[link2.SpanContext]).ToEqual(link2.Attributes) + }) + }) - // t.Run("#WithSpan", func(t *testing.T) { - // testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { - // var span trace.Span + t.Run("#WithSpan", func(t *testing.T) { + testTracedSpan(t, func(tracer trace.Tracer, name string) (trace.Span, error) { + var span trace.Span - // err := tracer.WithSpan(context.Background(), name, func(ctx context.Context) error { - // span = trace.SpanFromContext(ctx) + err := tracer.WithSpan(context.Background(), name, func(ctx context.Context) error { + span = trace.SpanFromContext(ctx) - // return nil - // }) + return nil + }) - // return span, err - // }) - // }) + return span, err + }) + }) } func testTracedSpan(t *testing.T, fn func(tracer trace.Tracer, name string) (trace.Span, error)) { From 43fc8fdc06ba86bead17fb2bf5094ec2d4961274 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 18:18:02 -0800 Subject: [PATCH 18/21] Logic fix--needs testing --- internal/trace/parent/parent.go | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/internal/trace/parent/parent.go b/internal/trace/parent/parent.go index e593aaa93e8..051248e8486 100644 --- a/internal/trace/parent/parent.go +++ b/internal/trace/parent/parent.go @@ -8,29 +8,27 @@ import ( "go.opentelemetry.io/otel/api/trace/propagation" ) -func getEffective(ctx context.Context) core.SpanContext { +func getEffective(ctx context.Context) (core.SpanContext, bool) { if ctx == nil { - return core.EmptySpanContext() + return core.EmptySpanContext(), false } rctx := propagation.RemoteContext(ctx) sctx := trace.SpanFromContext(ctx).SpanContext() if rctx.IsValid() && sctx.IsValid() && rctx.TraceID == sctx.TraceID { - return sctx + return sctx, false } if rctx.IsValid() { - return rctx + return rctx, true } - return sctx + return sctx, false } func GetContext(ctx, parent context.Context) (context.Context, core.SpanContext, bool) { - pctx := getEffective(parent) - sctx := getEffective(ctx) - - if pctx.IsValid() { - return parent, pctx, true + if pctx, remote := getEffective(parent); pctx.IsValid() { + return parent, pctx, remote } - return ctx, sctx, false + sctx, remote := getEffective(ctx) + return ctx, sctx, remote } From 9ac511529d67c5dca9db685d2e1d3dc6daf50562 Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 11 Dec 2019 18:19:29 -0800 Subject: [PATCH 19/21] Remote fmt --- api/trace/testtrace/tracer.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/api/trace/testtrace/tracer.go b/api/trace/testtrace/tracer.go index 56594c636a1..e33f7bb5016 100644 --- a/api/trace/testtrace/tracer.go +++ b/api/trace/testtrace/tracer.go @@ -16,7 +16,6 @@ package testtrace import ( "context" - "fmt" "sync" "time" @@ -55,12 +54,8 @@ func (t *Tracer) Start(ctx context.Context, name string, opts ...trace.StartOpti var traceID core.TraceID var parentSpanID core.SpanID - fmt.Println("WTF", c.Parent) - ctx, parentSpanContext, _ := parent.GetContext(ctx, c.Parent) - fmt.Println("CTX", ctx, "PSX", parentSpanContext) - if parentSpanContext.IsValid() { traceID = parentSpanContext.TraceID parentSpanID = parentSpanContext.SpanID @@ -101,7 +96,6 @@ func (t *Tracer) Start(ctx context.Context, name string, opts ...trace.StartOpti t.spans = append(t.spans, span) t.lock.Unlock() - fmt.Println("HERE SpanCTX", span.SpanContext()) return trace.ContextWithSpan(ctx, span), span } From 9a8d9e0c16abd5bc7f894fb4d2ec7772bc33b08c Mon Sep 17 00:00:00 2001 From: jmacd Date: Fri, 13 Dec 2019 10:01:55 -0800 Subject: [PATCH 20/21] Changes to match mwear's current proposal --- internal/trace/parent/parent.go | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/internal/trace/parent/parent.go b/internal/trace/parent/parent.go index 051248e8486..897245ea0e2 100644 --- a/internal/trace/parent/parent.go +++ b/internal/trace/parent/parent.go @@ -9,23 +9,15 @@ import ( ) func getEffective(ctx context.Context) (core.SpanContext, bool) { - if ctx == nil { - return core.EmptySpanContext(), false - } - rctx := propagation.RemoteContext(ctx) - sctx := trace.SpanFromContext(ctx).SpanContext() - - if rctx.IsValid() && sctx.IsValid() && rctx.TraceID == sctx.TraceID { + if sctx := trace.SpanFromContext(ctx).SpanContext(); sctx.IsValid() { return sctx, false } - if rctx.IsValid() { - return rctx, true - } - return sctx, false + return propagation.RemoteContext(ctx), true } func GetContext(ctx, parent context.Context) (context.Context, core.SpanContext, bool) { - if pctx, remote := getEffective(parent); pctx.IsValid() { + if parent != nil { + pctx, remote := getEffective(parent) return parent, pctx, remote } From a9291334ba1836c6a29cb5907dbfde084f4dbb8d Mon Sep 17 00:00:00 2001 From: jmacd Date: Wed, 18 Dec 2019 13:11:45 -0800 Subject: [PATCH 21/21] Checkpoint --- api/context/baggage/propagation/propagation_test.go | 1 + api/testharness/harness.go | 3 ++- api/trace/propagation/trace_context_propagator.go | 2 +- bridge/opentracing/bridge.go | 12 ------------ example/basic/go.sum | 10 ++++++++-- example/basic/main.go | 13 ++++++------- example/grpc/go.mod | 2 +- example/grpc/go.sum | 10 ++++++++-- example/grpc/middleware/tracing/tracing.go | 5 +++-- example/http-stackdriver/go.mod | 2 +- example/http-stackdriver/go.sum | 9 +++++++-- example/http/go.mod | 2 +- example/http/go.sum | 10 ++++++++-- example/jaeger/go.sum | 10 ++++++++-- example/namedtracer/go.sum | 10 ++++++++-- example/prometheus/go.sum | 11 +++++++++-- exporter/metric/prometheus/go.sum | 10 ++++++++-- exporter/trace/jaeger/go.mod | 2 +- exporter/trace/jaeger/go.sum | 10 ++++++++-- exporter/trace/stackdriver/go.mod | 2 +- exporter/trace/stackdriver/go.sum | 9 +++++++-- go.mod | 2 +- go.sum | 11 ++++++++--- 23 files changed, 106 insertions(+), 52 deletions(-) diff --git a/api/context/baggage/propagation/propagation_test.go b/api/context/baggage/propagation/propagation_test.go index d5c3d45aa7e..99c24435450 100644 --- a/api/context/baggage/propagation/propagation_test.go +++ b/api/context/baggage/propagation/propagation_test.go @@ -7,6 +7,7 @@ import ( "testing" "github.com/google/go-cmp/cmp" + "go.opentelemetry.io/otel/api/context/baggage" bpropagation "go.opentelemetry.io/otel/api/context/baggage/propagation" "go.opentelemetry.io/otel/api/context/propagation" diff --git a/api/testharness/harness.go b/api/testharness/harness.go index e99435594e5..0e3d5d65bfb 100644 --- a/api/testharness/harness.go +++ b/api/testharness/harness.go @@ -21,10 +21,11 @@ import ( "testing" "time" + "google.golang.org/grpc/codes" + "go.opentelemetry.io/otel/api/core" "go.opentelemetry.io/otel/api/trace" "go.opentelemetry.io/otel/internal/matchers" - "google.golang.org/grpc/codes" ) type Harness struct { diff --git a/api/trace/propagation/trace_context_propagator.go b/api/trace/propagation/trace_context_propagator.go index c7183171887..8b7d262f429 100644 --- a/api/trace/propagation/trace_context_propagator.go +++ b/api/trace/propagation/trace_context_propagator.go @@ -39,7 +39,7 @@ type TraceContext struct{} var _ propagation.HTTPPropagator = TraceContext{} var traceCtxRegExp = regexp.MustCompile("^[0-9a-f]{2}-[a-f0-9]{32}-[a-f0-9]{16}-[a-f0-9]{2}-?") -func (hp TraceContext) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { +func (TraceContext) Inject(ctx context.Context, supplier propagation.HTTPSupplier) { sc := trace.SpanFromContext(ctx).SpanContext() if !sc.IsValid() { return diff --git a/bridge/opentracing/bridge.go b/bridge/opentracing/bridge.go index 2a03917ed71..a3f80e093cd 100644 --- a/bridge/opentracing/bridge.go +++ b/bridge/opentracing/bridge.go @@ -482,18 +482,6 @@ func mustGetBridgeSpanContext(ctx ot.SpanContext) *bridgeSpanContext { return ourCtx } -func otSpanReferenceTypeToOtelRelationshipType(srt ot.SpanReferenceType) oteltrace.SpanKind { - // TODO: Check out this logic - switch srt { - case ot.ChildOfRef: - return oteltrace.SpanKindServer - case ot.FollowsFromRef: - return oteltrace.SpanKindProducer - default: - panic("fix yer code, it uses bogus opentracing reference type") - } -} - // TODO: these headers are most likely bogus var ( traceIDHeader = http.CanonicalHeaderKey("x-otelbridge-trace-id") diff --git a/example/basic/go.sum b/example/basic/go.sum index ee2fea89a7f..000605cb891 100644 --- a/example/basic/go.sum +++ b/example/basic/go.sum @@ -13,6 +13,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -28,6 +29,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -147,6 +150,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -272,12 +276,14 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/example/basic/main.go b/example/basic/main.go index 7950e8026fe..5b1b37e906c 100644 --- a/example/basic/main.go +++ b/example/basic/main.go @@ -19,12 +19,12 @@ import ( "log" "time" - "go.opentelemetry.io/otel/api/distributedcontext" + "go.opentelemetry.io/otel/api/context/baggage/propagation" "go.opentelemetry.io/otel/api/global" "go.opentelemetry.io/otel/api/key" "go.opentelemetry.io/otel/api/metric" "go.opentelemetry.io/otel/api/trace" - metricstdout "go.opentelemetry.io/otel/exporter/metric/stdout" + dogstatsd "go.opentelemetry.io/otel/exporter/metric/dogstatsd" tracestdout "go.opentelemetry.io/otel/exporter/trace/stdout" metricsdk "go.opentelemetry.io/otel/sdk/metric" "go.opentelemetry.io/otel/sdk/metric/batcher/defaultkeys" @@ -58,9 +58,8 @@ func initTracer() { func initMeter() *push.Controller { selector := simple.NewWithExactMeasure() - exporter, err := metricstdout.New(metricstdout.Options{ - Quantiles: []float64{0.5, 0.9, 0.99}, - PrettyPrint: false, + exporter, err := dogstatsd.New(dogstatsd.Config{ + URL: "udp://127.0.0.1:8200", }) if err != nil { log.Panicf("failed to initialize metric stdout exporter %v", err) @@ -92,7 +91,7 @@ func main() { ctx := context.Background() - ctx = distributedcontext.NewContext(ctx, + ctx = propagation.NewContext(ctx, fooKey.String("foo1"), barKey.String("bar1"), ) @@ -115,7 +114,7 @@ func main() { meter.RecordBatch( // Note: call-site variables added as context Entries: - distributedcontext.NewContext(ctx, anotherKey.String("xyz")), + propagation.NewContext(ctx, anotherKey.String("xyz")), commonLabels, oneMetric.Measurement(1.0), diff --git a/example/grpc/go.mod b/example/grpc/go.mod index ac03cbdc308..919797fc85a 100644 --- a/example/grpc/go.mod +++ b/example/grpc/go.mod @@ -7,5 +7,5 @@ replace go.opentelemetry.io/otel => ../.. require ( github.com/golang/protobuf v1.3.2 go.opentelemetry.io/otel v0.2.0 - google.golang.org/grpc v1.24.0 + google.golang.org/grpc v1.25.1 ) diff --git a/example/grpc/go.sum b/example/grpc/go.sum index 46a8fdb8027..324c268da2f 100644 --- a/example/grpc/go.sum +++ b/example/grpc/go.sum @@ -11,6 +11,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -26,6 +27,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -143,6 +146,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -269,12 +273,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/example/grpc/middleware/tracing/tracing.go b/example/grpc/middleware/tracing/tracing.go index b737773ec53..cca5c87ae66 100644 --- a/example/grpc/middleware/tracing/tracing.go +++ b/example/grpc/middleware/tracing/tracing.go @@ -26,8 +26,9 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + "go.opentelemetry.io/otel/api/context/baggage" + "go.opentelemetry.io/otel/api/context/baggage/propagation" "go.opentelemetry.io/otel/api/core" - "go.opentelemetry.io/otel/api/distributedcontext" "go.opentelemetry.io/otel/api/global" "go.opentelemetry.io/otel/api/key" "go.opentelemetry.io/otel/api/trace" @@ -39,7 +40,7 @@ func UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.Una metadataCopy := requestMetadata.Copy() entries, spanCtx := grpctrace.Extract(ctx, &metadataCopy) - ctx = distributedcontext.WithMap(ctx, distributedcontext.NewMap(distributedcontext.MapUpdate{ + ctx = propagation.WithMap(ctx, baggage.NewMap(baggage.MapUpdate{ MultiKV: entries, })) diff --git a/example/http-stackdriver/go.mod b/example/http-stackdriver/go.mod index fbe415eda69..d894dc95df3 100644 --- a/example/http-stackdriver/go.mod +++ b/example/http-stackdriver/go.mod @@ -10,5 +10,5 @@ replace ( require ( go.opentelemetry.io/otel v0.2.0 go.opentelemetry.io/otel/exporter/trace/stackdriver v0.2.0 - google.golang.org/grpc v1.24.0 + google.golang.org/grpc v1.25.1 ) diff --git a/example/http-stackdriver/go.sum b/example/http-stackdriver/go.sum index 77fd6493622..ccea8a4c161 100644 --- a/example/http-stackdriver/go.sum +++ b/example/http-stackdriver/go.sum @@ -26,6 +26,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -41,6 +42,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -173,6 +176,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -365,8 +369,9 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/example/http/go.mod b/example/http/go.mod index 23f11185077..c185d41b0d3 100644 --- a/example/http/go.mod +++ b/example/http/go.mod @@ -6,5 +6,5 @@ replace go.opentelemetry.io/otel => ../.. require ( go.opentelemetry.io/otel v0.2.0 - google.golang.org/grpc v1.24.0 + google.golang.org/grpc v1.25.1 ) diff --git a/example/http/go.sum b/example/http/go.sum index 5dfc209f5fc..f987b9f6718 100644 --- a/example/http/go.sum +++ b/example/http/go.sum @@ -11,6 +11,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -26,6 +27,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -147,6 +150,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -275,12 +279,14 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= diff --git a/example/jaeger/go.sum b/example/jaeger/go.sum index f8788f8a827..4ae9b72960d 100644 --- a/example/jaeger/go.sum +++ b/example/jaeger/go.sum @@ -15,6 +15,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -30,6 +31,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -156,6 +159,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -300,13 +304,15 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/example/namedtracer/go.sum b/example/namedtracer/go.sum index 69a0e4af903..53e7d731de6 100644 --- a/example/namedtracer/go.sum +++ b/example/namedtracer/go.sum @@ -11,6 +11,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -26,6 +27,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -144,6 +147,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -269,12 +273,14 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/example/prometheus/go.sum b/example/prometheus/go.sum index 34e41077b9b..9adc8e93bb4 100644 --- a/example/prometheus/go.sum +++ b/example/prometheus/go.sum @@ -14,6 +14,7 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -29,6 +30,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -151,6 +154,8 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -278,12 +283,14 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/exporter/metric/prometheus/go.sum b/exporter/metric/prometheus/go.sum index bac20f55cca..085a8410f87 100644 --- a/exporter/metric/prometheus/go.sum +++ b/exporter/metric/prometheus/go.sum @@ -14,6 +14,7 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -29,6 +30,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -149,6 +152,8 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -274,12 +279,13 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/exporter/trace/jaeger/go.mod b/exporter/trace/jaeger/go.mod index 6f8842835a0..69f07e59c7e 100644 --- a/exporter/trace/jaeger/go.mod +++ b/exporter/trace/jaeger/go.mod @@ -10,5 +10,5 @@ require ( github.com/stretchr/testify v1.4.0 go.opentelemetry.io/otel v0.2.0 google.golang.org/api v0.11.0 - google.golang.org/grpc v1.24.0 + google.golang.org/grpc v1.25.1 ) diff --git a/exporter/trace/jaeger/go.sum b/exporter/trace/jaeger/go.sum index e6323aab293..64c6e2d281d 100644 --- a/exporter/trace/jaeger/go.sum +++ b/exporter/trace/jaeger/go.sum @@ -15,6 +15,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -30,6 +31,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -158,6 +161,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -303,13 +307,15 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/exporter/trace/stackdriver/go.mod b/exporter/trace/stackdriver/go.mod index 2e03801ba32..4fb5305da2f 100644 --- a/exporter/trace/stackdriver/go.mod +++ b/exporter/trace/stackdriver/go.mod @@ -12,5 +12,5 @@ require ( golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 google.golang.org/api v0.11.0 google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 - google.golang.org/grpc v1.24.0 + google.golang.org/grpc v1.25.1 ) diff --git a/exporter/trace/stackdriver/go.sum b/exporter/trace/stackdriver/go.sum index 4f8cc468197..515ea2cea40 100644 --- a/exporter/trace/stackdriver/go.sum +++ b/exporter/trace/stackdriver/go.sum @@ -25,6 +25,7 @@ github.com/benbjohnson/clock v1.0.0/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -40,6 +41,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -172,6 +175,7 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -362,8 +366,9 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/go.mod b/go.mod index 7e86c814ee9..c26ec0effea 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( golang.org/x/sys v0.0.0-20191010194322-b09406accb47 // indirect golang.org/x/tools v0.0.0-20191025174333-e96d959c4788 google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 // indirect - google.golang.org/grpc v1.24.0 + google.golang.org/grpc v1.25.1 mvdan.cc/unparam v0.0.0-20190917161559-b83a221c10a2 // indirect sourcegraph.com/sqs/pbtypes v1.0.0 // indirect ) diff --git a/go.sum b/go.sum index 2d3f1826c04..e2cae1fa738 100644 --- a/go.sum +++ b/go.sum @@ -17,6 +17,7 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bombsimon/wsl v1.2.5 h1:9gTOkIwVtoDZywvX802SDHokeX4kW1cKnV8ZTVAPkRs= github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -33,6 +34,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= @@ -210,6 +213,7 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -284,7 +288,6 @@ github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opentelemetry.io v0.1.0 h1:EANZoRCOP+A3faIlw/iN6YEWoYb1vleZRKm1EvH8T48= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -360,12 +363,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03 h1:4HYDjxeNXAOTv3o1N2tjo8UUSlhQgAD52FVkwxnWgM8= google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=