diff options
author | Bogdan Drutu <bdrutu@google.com> | 2017-09-21 19:39:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-21 19:39:25 -0700 |
commit | 83fed9c3af641b227496ce96f9cc0b51b316df82 (patch) | |
tree | f773cb6e40f3b20d7ea9466fbd8429ea45e1e4f0 /impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java | |
parent | 17470b3517b4e76e6e618335a4a6cdb9f8d58773 (diff) | |
download | opencensus-java-83fed9c3af641b227496ce96f9cc0b51b316df82.tar.gz |
Change when we check the sampler. (#657)
* Change when we check the sampler.
* Fix comments.
* Deprecate setIsSampled without an argument.
Diffstat (limited to 'impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java')
-rw-r--r-- | impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java b/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java index b66a354f..3cee1def 100644 --- a/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java +++ b/impl_core/src/main/java/io/opencensus/implcore/trace/SpanBuilderImpl.java @@ -75,12 +75,8 @@ final class SpanBuilderImpl extends SpanBuilder { parentSpanId = parent.getSpanId(); traceOptionsBuilder = TraceOptions.builder(parent.getTraceOptions()); } - if (sampler == null) { - sampler = activeTraceParams.getSampler(); - } - if (sampler.shouldSample(parent, hasRemoteParent, traceId, spanId, name, parentLinks)) { - traceOptionsBuilder.setIsSampled(); - } + traceOptionsBuilder.setIsSampled(makeSamplingDecision( + parent, hasRemoteParent, name, sampler, parentLinks, traceId, spanId, activeTraceParams)); TraceOptions traceOptions = traceOptionsBuilder.build(); EnumSet<Span.Options> spanOptions = EnumSet.noneOf(Span.Options.class); if (traceOptions.isSampled() || Boolean.TRUE.equals(recordEvents)) { @@ -101,6 +97,30 @@ final class SpanBuilderImpl extends SpanBuilder { return span; } + private static boolean makeSamplingDecision( + @Nullable SpanContext parent, + @Nullable Boolean hasRemoteParent, + String name, + @Nullable Sampler sampler, + List<Span> parentLinks, + TraceId traceId, + SpanId spanId, + TraceParams activeTraceParams) { + // If users set a specific sampler in the SpanBuilder, use it. + if (sampler != null) { + return sampler.shouldSample(parent, hasRemoteParent, traceId, spanId, name, parentLinks); + } + // Use the default sampler if this is a root Span or this is an entry point Span (has remote + // parent). + if (Boolean.TRUE.equals(hasRemoteParent) || parent == null || !parent.isValid()) { + return activeTraceParams + .getSampler() + .shouldSample(parent, hasRemoteParent, traceId, spanId, name, parentLinks); + } + // Parent is always different than null because otherwise we use the default sampler. + return parent.getTraceOptions().isSampled(); + } + private static void linkSpans(Span span, List<Span> parentLinks) { if (!parentLinks.isEmpty()) { Link childLink = Link.fromSpanContext(span.getContext(), Type.CHILD_LINKED_SPAN); |