Merge pull request #571 from DataDog/ark/fix-trace-counts

Ensure tracer traceCounter is always shared with DDApi
This commit is contained in:
Andrew Kent 2018-11-16 17:05:57 +00:00 committed by GitHub
commit 7d0aa4693e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 10 deletions

View File

@ -74,7 +74,7 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
}); });
private final CodecRegistry registry; private final CodecRegistry registry;
private final AtomicInteger traceCount = new AtomicInteger(0); private final AtomicInteger traceCount;
/** By default, report to local agent and collect all traces. */ /** By default, report to local agent and collect all traces. */
public DDTracer() { public DDTracer() {
@ -178,10 +178,14 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
registry = new CodecRegistry(); registry = new CodecRegistry();
registry.register(Format.Builtin.HTTP_HEADERS, new HTTPCodec(taggedHeaders)); registry.register(Format.Builtin.HTTP_HEADERS, new HTTPCodec(taggedHeaders));
registry.register(Format.Builtin.TEXT_MAP, new HTTPCodec(taggedHeaders)); registry.register(Format.Builtin.TEXT_MAP, new HTTPCodec(taggedHeaders));
if (this.writer instanceof DDAgentWriter && sampler instanceof DDApi.ResponseListener) { if (this.writer instanceof DDAgentWriter) {
final DDApi api = ((DDAgentWriter) this.writer).getApi(); final DDApi api = ((DDAgentWriter) this.writer).getApi();
api.addResponseListener((DDApi.ResponseListener) this.sampler); traceCount = api.getTraceCounter();
api.addTraceCounter(traceCount); if (sampler instanceof DDApi.ResponseListener) {
api.addResponseListener((DDApi.ResponseListener) this.sampler);
}
} else {
traceCount = new AtomicInteger(0);
} }
registerClassLoader(ClassLoader.getSystemClassLoader()); registerClassLoader(ClassLoader.getSystemClassLoader());

View File

@ -35,7 +35,7 @@ public class DDApi {
private final String tracesEndpoint; private final String tracesEndpoint;
private final List<ResponseListener> responseListeners = new ArrayList<>(); private final List<ResponseListener> responseListeners = new ArrayList<>();
private AtomicInteger traceCount; private final AtomicInteger traceCount = new AtomicInteger(0);
private volatile long nextAllowedLogTime = 0; private volatile long nextAllowedLogTime = 0;
private static final ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory()); private static final ObjectMapper objectMapper = new ObjectMapper(new MessagePackFactory());
@ -59,8 +59,8 @@ public class DDApi {
} }
} }
public void addTraceCounter(final AtomicInteger traceCount) { public AtomicInteger getTraceCounter() {
this.traceCount = traceCount; return traceCount;
} }
/** /**

View File

@ -4,6 +4,8 @@ import datadog.opentracing.DDTracer
import datadog.trace.api.Config import datadog.trace.api.Config
import datadog.trace.common.sampling.AllSampler import datadog.trace.common.sampling.AllSampler
import datadog.trace.common.sampling.RateByServiceSampler import datadog.trace.common.sampling.RateByServiceSampler
import datadog.trace.common.writer.DDAgentWriter
import datadog.trace.common.writer.DDApi
import datadog.trace.common.writer.ListWriter import datadog.trace.common.writer.ListWriter
import datadog.trace.common.writer.LoggingWriter import datadog.trace.common.writer.LoggingWriter
import org.junit.Rule import org.junit.Rule
@ -112,4 +114,19 @@ class DDTracerTest extends Specification {
tracer.writer == writer tracer.writer == writer
tracer.runtimeId.length() > 0 tracer.runtimeId.length() > 0
} }
def "Shares TraceCount with DDApi with #key = #value"() {
setup:
System.setProperty(PREFIX + key, value)
final DDTracer tracer = new DDTracer(new Config())
expect:
tracer.writer instanceof DDAgentWriter
tracer.traceCount.is(((DDAgentWriter) tracer.writer).getApi().traceCount)
where:
key | value
Config.PRIORITY_SAMPLING | "true"
Config.PRIORITY_SAMPLING | "false"
}
} }

View File

@ -9,7 +9,6 @@ import datadog.trace.common.writer.DDApi.ResponseListener
import org.msgpack.jackson.dataformat.MessagePackFactory import org.msgpack.jackson.dataformat.MessagePackFactory
import spock.lang.Specification import spock.lang.Specification
import java.util.concurrent.atomic.AtomicInteger
import java.util.concurrent.atomic.AtomicReference import java.util.concurrent.atomic.AtomicReference
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
@ -69,6 +68,7 @@ class DDApiTest extends Specification {
expect: expect:
client.tracesEndpoint == "http://localhost:${agent.address.port}/v0.4/traces" client.tracesEndpoint == "http://localhost:${agent.address.port}/v0.4/traces"
client.getTraceCounter().addAndGet(traces.size()) >= 0
client.sendTraces(traces) client.sendTraces(traces)
agent.lastRequest.contentType == "application/msgpack" agent.lastRequest.contentType == "application/msgpack"
agent.lastRequest.headers.get("Datadog-Meta-Lang") == "java" agent.lastRequest.headers.get("Datadog-Meta-Lang") == "java"
@ -130,8 +130,8 @@ class DDApiTest extends Specification {
} }
def client = new DDApi("localhost", agent.address.port) def client = new DDApi("localhost", agent.address.port)
client.addResponseListener(responseListener) client.addResponseListener(responseListener)
def traceCounter = new AtomicInteger(3) def traceCounter = client.getTraceCounter()
client.addTraceCounter(traceCounter) traceCounter.set(3)
when: when:
client.sendTraces([]) client.sendTraces([])