Skip to content

Commit

Permalink
ddtrace/tracer: Always count dropped p0 traces and spans (#1461)
Browse files Browse the repository at this point in the history
  • Loading branch information
ajgajg1134 committed Sep 9, 2022
1 parent e7087a1 commit dbd61fc
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 14 deletions.
25 changes: 12 additions & 13 deletions ddtrace/tracer/tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -334,25 +334,24 @@ func (t *tracer) sampleFinishedTrace(info *finishedTrace) {
if info.decision == decisionKeep {
return
}
if !t.rulesSampling.HasSpanRules() {
info.spans = nil
return
}
// if trace sampling decision is drop, we still want to send single spans
// unless there are no single span sampling rules defined
var kept []*span
for _, span := range info.spans {
if t.rulesSampling.SampleSpan(span) {
kept = append(kept, span)
if t.rulesSampling.HasSpanRules() {
// Apply sampling rules to individual spans in the trace.
for _, span := range info.spans {
if t.rulesSampling.SampleSpan(span) {
kept = append(kept, span)
}
}
if len(kept) > 0 && len(kept) < len(info.spans) {
// Some spans in the trace were kept, so a partial trace will be sent.
atomic.AddUint64(&t.partialTraces, 1)
}
}
atomic.AddUint64(&t.droppedP0Spans, uint64(len(info.spans)-len(kept)))
info.spans = kept
if len(kept) == 0 {
atomic.AddUint64(&t.droppedP0Traces, 1)
return // no spans matched the rules and were sampled
}
atomic.AddUint64(&t.partialTraces, 1)
atomic.AddUint64(&t.droppedP0Spans, uint64(len(info.spans)-len(kept)))
info.spans = kept
}

func (t *tracer) pushTrace(trace *finishedTrace) {
Expand Down
5 changes: 5 additions & 0 deletions ddtrace/tracer/tracer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,11 @@ func TestSamplingDecision(t *testing.T) {

t.Run("client_dropped", func(t *testing.T) {
tracer, _, _, stop := startTestTracer(t)
defer func() {
// Must check these after tracer is stopped to avoid flakiness
assert.Equal(t, uint64(1), tracer.droppedP0Traces)
assert.Equal(t, uint64(2), tracer.droppedP0Spans)
}()
defer stop()
tracer.config.agent.DropP0s = true
tracer.config.sampler = NewRateSampler(0)
Expand Down
2 changes: 1 addition & 1 deletion internal/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ package version
// Tag specifies the current release tag. It needs to be manually
// updated. A test checks that the value of Tag never points to a
// git tag that is older than HEAD.
const Tag = "v1.41.0"
const Tag = "v1.41.1"

0 comments on commit dbd61fc

Please sign in to comment.