Skip to content

Commit d2a8b7f

Browse files
author
Andrew Kent
committed
Ensure tracer traceCounter is always shared with DDApi
1 parent 31b2e0f commit d2a8b7f

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public int compare(final TraceInterceptor o1, final TraceInterceptor o2) {
7474
});
7575
private final CodecRegistry registry;
7676

77-
private final AtomicInteger traceCount = new AtomicInteger(0);
77+
private final AtomicInteger traceCount;
7878

7979
/** By default, report to local agent and collect all traces. */
8080
public DDTracer() {
@@ -178,10 +178,14 @@ public void run() {
178178
registry = new CodecRegistry();
179179
registry.register(Format.Builtin.HTTP_HEADERS, new HTTPCodec(taggedHeaders));
180180
registry.register(Format.Builtin.TEXT_MAP, new HTTPCodec(taggedHeaders));
181-
if (this.writer instanceof DDAgentWriter && sampler instanceof DDApi.ResponseListener) {
181+
if (this.writer instanceof DDAgentWriter) {
182182
final DDApi api = ((DDAgentWriter) this.writer).getApi();
183-
api.addResponseListener((DDApi.ResponseListener) this.sampler);
184-
api.addTraceCounter(traceCount);
183+
traceCount = api.getTraceCounter();
184+
if (sampler instanceof DDApi.ResponseListener) {
185+
api.addResponseListener((DDApi.ResponseListener) this.sampler);
186+
}
187+
} else {
188+
traceCount = new AtomicInteger(0);
185189
}
186190

187191
registerClassLoader(ClassLoader.getSystemClassLoader());

dd-trace-ot/src/main/java/datadog/trace/common/writer/DDApi.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class DDApi {
3535
private final String tracesEndpoint;
3636
private final List<ResponseListener> responseListeners = new ArrayList<>();
3737

38-
private AtomicInteger traceCount;
38+
private final AtomicInteger traceCount = new AtomicInteger(0);
3939
private volatile long nextAllowedLogTime = 0;
4040

4141
private static final ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory());
@@ -59,8 +59,8 @@ public void addResponseListener(final ResponseListener listener) {
5959
}
6060
}
6161

62-
public void addTraceCounter(final AtomicInteger traceCount) {
63-
this.traceCount = traceCount;
62+
public AtomicInteger getTraceCounter() {
63+
return traceCount;
6464
}
6565

6666
/**

dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import datadog.opentracing.DDTracer
44
import datadog.trace.api.Config
55
import datadog.trace.common.sampling.AllSampler
66
import datadog.trace.common.sampling.RateByServiceSampler
7+
import datadog.trace.common.writer.DDAgentWriter
8+
import datadog.trace.common.writer.DDApi
79
import datadog.trace.common.writer.ListWriter
810
import datadog.trace.common.writer.LoggingWriter
911
import org.junit.Rule
@@ -112,4 +114,19 @@ class DDTracerTest extends Specification {
112114
tracer.writer == writer
113115
tracer.runtimeId.length() > 0
114116
}
117+
118+
def "Shares TraceCount with DDApi with #key = #value"() {
119+
setup:
120+
System.setProperty(PREFIX + key, value)
121+
final DDTracer tracer = new DDTracer(new Config())
122+
123+
expect:
124+
tracer.writer instanceof DDAgentWriter
125+
tracer.traceCount.is(((DDAgentWriter) tracer.writer).getApi().traceCount)
126+
127+
where:
128+
key | value
129+
Config.PRIORITY_SAMPLING | "true"
130+
Config.PRIORITY_SAMPLING | "false"
131+
}
115132
}

dd-trace-ot/src/test/groovy/datadog/trace/api/writer/DDApiTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import datadog.trace.common.writer.DDApi.ResponseListener
99
import org.msgpack.jackson.dataformat.MessagePackFactory
1010
import spock.lang.Specification
1111

12-
import java.util.concurrent.atomic.AtomicInteger
1312
import java.util.concurrent.atomic.AtomicReference
1413

1514
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
@@ -69,6 +68,7 @@ class DDApiTest extends Specification {
6968

7069
expect:
7170
client.tracesEndpoint == "http://localhost:${agent.address.port}/v0.4/traces"
71+
client.getTraceCounter().addAndGet(traces.size()) >= 0
7272
client.sendTraces(traces)
7373
agent.lastRequest.contentType == "application/msgpack"
7474
agent.lastRequest.headers.get("Datadog-Meta-Lang") == "java"
@@ -130,8 +130,8 @@ class DDApiTest extends Specification {
130130
}
131131
def client = new DDApi("localhost", agent.address.port)
132132
client.addResponseListener(responseListener)
133-
def traceCounter = new AtomicInteger(3)
134-
client.addTraceCounter(traceCounter)
133+
def traceCounter = client.getTraceCounter()
134+
traceCounter.set(3)
135135

136136
when:
137137
client.sendTraces([])

0 commit comments

Comments
 (0)