Merge pull request #571 from DataDog/ark/fix-trace-counts
Ensure tracer traceCounter is always shared with DDApi
This commit is contained in:
commit
7d0aa4693e
|
@ -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();
|
||||||
|
traceCount = api.getTraceCounter();
|
||||||
|
if (sampler instanceof DDApi.ResponseListener) {
|
||||||
api.addResponseListener((DDApi.ResponseListener) this.sampler);
|
api.addResponseListener((DDApi.ResponseListener) this.sampler);
|
||||||
api.addTraceCounter(traceCount);
|
}
|
||||||
|
} else {
|
||||||
|
traceCount = new AtomicInteger(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
registerClassLoader(ClassLoader.getSystemClassLoader());
|
registerClassLoader(ClassLoader.getSystemClassLoader());
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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([])
|
||||||
|
|
Loading…
Reference in New Issue