Skip to content

Commit

Permalink
Add Jaeger throttling config (#233)
Browse files Browse the repository at this point in the history
  • Loading branch information
isaachier authored and prashantv committed Jun 11, 2018
1 parent 2f9bbfd commit 539a20d
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 54 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Expand Up @@ -2,8 +2,8 @@ sudo: false
language: go

go:
- 1.8
- 1.9
- "1.9"
- "1.10"

env:
global:
Expand Down
91 changes: 56 additions & 35 deletions glide.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion glide.yaml
Expand Up @@ -17,7 +17,7 @@ import:
- package: github.com/opentracing/opentracing-go
version: ^1
- package: github.com/uber/jaeger-client-go
version: ^2.9
version: ^2.14
- package: go.uber.org/yarpc
version: ^1.21
testImport:
Expand Down
8 changes: 2 additions & 6 deletions integration_test.go
Expand Up @@ -89,13 +89,9 @@ func verifyBaggage(ctx context.Context) error {
return errors.New("missing span")
}

spanCtx, ok := span.Context().(jaeger.SpanContext)
if !ok {
if _, ok := span.Context().(jaeger.SpanContext); !ok {
return errors.New("trace context is not from jaeger")
}
if !spanCtx.IsDebug() {
return errors.New("span context is not configured to submit traces")
}

val := span.BaggageItem("baggagekey")
if val == "" {
Expand Down Expand Up @@ -169,7 +165,7 @@ func (yarpcHandler) Bar(ctx context.Context, arg *int32) (int32, error) {
}

func TestIntegrationProtocols(t *testing.T) {
tracer, closer := getTestTracer("foo")
tracer, closer := getTestTracerWithCredits(t, "foo", 5)
defer closer.Close()

cases := []struct {
Expand Down
43 changes: 36 additions & 7 deletions main.go
Expand Up @@ -40,6 +40,7 @@ import (
"github.com/opentracing/opentracing-go"
opentracing_ext "github.com/opentracing/opentracing-go/ext"
"github.com/uber/jaeger-client-go"
jaeger_config "github.com/uber/jaeger-client-go/config"
"github.com/uber/tchannel-go"
"go.uber.org/zap"
)
Expand Down Expand Up @@ -354,17 +355,45 @@ type noEnveloper interface {
WithoutEnvelopes() encoding.Serializer
}

func getTracer(opts Options, out output) (opentracing.Tracer, io.Closer) {
var (
tracer opentracing.Tracer = opentracing.NoopTracer{}
closer io.Closer
func createJaegerTracer(opts Options, out output) (opentracing.Tracer, io.Closer) {
// yab must set the `SynchronousInitialization` flag to indicate that
// the Jaeger client must fetch debug credits synchronously. In a
// short-lived process like yab, the Jaeger client cannot afford to
// postpone the credit request for later in time.
//
// In the event that no Jaeger agent is found, the client will silently
// ignore debug spans. This behavior is no different than past
// non-throttling behavior, seeing as no Jaeger agent is available to
// receive spans (debug or otherwise). In short, the value of `err` will be
// `nil` regardless of whether or not an agent is present and/or fails to
// dispense credits to the client synchronously.
tracer, closer, err := jaeger_config.Configuration{
ServiceName: opts.TOpts.CallerName,
Throttler: &jaeger_config.ThrottlerConfig{
SynchronousInitialization: true,
},
}.NewTracer(
// SamplingPriority overrides sampler decision when below
// throttling threshold. Better to use "always false" sampling and
// only enable the span when we have not hit the throttling
// threshold.
jaeger_config.Sampler(jaeger.NewConstSampler(false)),
jaeger_config.Reporter(jaeger.NewNullReporter()),
)
if err != nil {
out.Fatalf("Failed to create Jaeger tracer: %s", err.Error())
}
return tracer, closer
}

func getTracer(opts Options, out output) (opentracing.Tracer, io.Closer) {
if opts.TOpts.Jaeger && !opts.TOpts.NoJaeger {
tracer, closer = jaeger.NewTracer(opts.TOpts.CallerName, jaeger.NewConstSampler(true), jaeger.NewNullReporter())
} else if len(opts.ROpts.Baggage) > 0 {
return createJaegerTracer(opts, out)
}
if len(opts.ROpts.Baggage) > 0 {
out.Fatalf("To propagate baggage, you must opt-into a tracing client, i.e., --jaeger")
}
return tracer, closer
return opentracing.NoopTracer{}, nil
}

// withTransportSerializer may modify the serializer for the transport used.
Expand Down
2 changes: 1 addition & 1 deletion transport_test.go
Expand Up @@ -223,7 +223,7 @@ func TestGetTransportCallerName(t *testing.T) {
}

func TestGetTransportTraceEnabled(t *testing.T) {
tracer, closer := getTestTracer("foo")
tracer, closer := getTestTracer(t, "foo")
defer closer.Close()

s := newServer(t, withTracer(tracer))
Expand Down

0 comments on commit 539a20d

Please sign in to comment.