diff --git a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/httpclient/ApacheHttpClientTest.groovy b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/httpclient/ApacheHttpClientTest.groovy index 0aca749caa..d378079ad8 100644 --- a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/httpclient/ApacheHttpClientTest.groovy +++ b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/httpclient/ApacheHttpClientTest.groovy @@ -64,7 +64,7 @@ class ApacheHttpClientTest extends Specification { final DDSpan localSpan = clientTrace.get(1) localSpan.getType() == null localSpan.getTags()[Tags.COMPONENT.getKey()] == "apache-httpclient" - localSpan.getOperationName() == "http.request" + localSpan.getOperationName() == "apache.http" final DDSpan clientSpan = clientTrace.get(2) clientSpan.getOperationName() == "http.request" @@ -109,7 +109,7 @@ class ApacheHttpClientTest extends Specification { // our instrumentation makes 2 spans for apache-httpclient final DDSpan localSpan = clientTrace.get(1) localSpan.getTags()[Tags.COMPONENT.getKey()] == "apache-httpclient" - localSpan.getOperationName() == "http.request" + localSpan.getOperationName() == "apache.http" final DDSpan clientSpan = clientTrace.get(2) clientSpan.getOperationName() == "http.request" diff --git a/dd-java-agent/instrumentation/aws-sdk/src/test/groovy/AWSClientTest.groovy b/dd-java-agent/instrumentation/aws-sdk/src/test/groovy/AWSClientTest.groovy index 7c557c85df..1303c148ad 100644 --- a/dd-java-agent/instrumentation/aws-sdk/src/test/groovy/AWSClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-sdk/src/test/groovy/AWSClientTest.groovy @@ -100,9 +100,9 @@ class AWSClientTest extends AgentTestRunner { and: // span 0 - from apache-httpclient instrumentation def span1 = trace[0] - span1.context().operationName == "http.request" + span1.context().operationName == "apache.http" span1.serviceName == "unnamed-java-app" - span1.resourceName == "http.request" + span1.resourceName == "apache.http" span1.type == null !span1.context().getErrorFlag() span1.context().parentId == 0 diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientTest.groovy b/dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientTest.groovy index 35638b88e6..5ffae43521 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientTest.groovy +++ b/dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientTest.groovy @@ -58,7 +58,7 @@ class JaxRsClientTest extends AgentTestRunner { span.context().operationName == "jax-rs.client.call" span.serviceName == "unnamed-java-app" - span.resourceName == "GET jax-rs.client.call" + span.resourceName == "GET /ping" span.type == "http" !span.context().getErrorFlag() span.context().parentId == 0 diff --git a/dd-java-agent/instrumentation/okhttp-3/src/test/groovy/OkHttp3Test.groovy b/dd-java-agent/instrumentation/okhttp-3/src/test/groovy/OkHttp3Test.groovy index 3529277cd4..10866979e6 100644 --- a/dd-java-agent/instrumentation/okhttp-3/src/test/groovy/OkHttp3Test.groovy +++ b/dd-java-agent/instrumentation/okhttp-3/src/test/groovy/OkHttp3Test.groovy @@ -1,4 +1,5 @@ import datadog.trace.agent.test.AgentTestRunner +import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import io.opentracing.tag.Tags import okhttp3.OkHttpClient @@ -39,19 +40,20 @@ class OkHttp3Test extends AgentTestRunner { and: // span 0 def span1 = trace[0] - span1.context().operationName == "http.request" - span1.serviceName == "unnamed-java-app" - span1.resourceName == "http.request" - span1.type == null + span1.context().operationName == "okhttp.http" + span1.serviceName == "okhttp" + span1.resourceName == "okhttp.http" + span1.type == DDSpanTypes.WEB_SERVLET !span1.context().getErrorFlag() span1.context().parentId == 0 def tags1 = span1.context().tags tags1["component"] == "okhttp" + tags1["span.type"] == DDSpanTypes.WEB_SERVLET tags1["thread.name"] != null tags1["thread.id"] != null - tags1.size() == 3 + tags1.size() == 4 and: // span 1 def span2 = trace[1] diff --git a/dd-java-agent/instrumentation/servlet-2/src/test/groovy/JettyServlet2Test.groovy b/dd-java-agent/instrumentation/servlet-2/src/test/groovy/JettyServlet2Test.groovy index 2d36fb3416..53fc9fab2f 100644 --- a/dd-java-agent/instrumentation/servlet-2/src/test/groovy/JettyServlet2Test.groovy +++ b/dd-java-agent/instrumentation/servlet-2/src/test/groovy/JettyServlet2Test.groovy @@ -106,6 +106,7 @@ class JettyServlet2Test extends AgentTestRunner { "span.kind" "server" "component" "java-web-servlet" "span.type" DDSpanTypes.WEB_SERVLET + "servlet.context" "" defaultTags() } } @@ -143,6 +144,7 @@ class JettyServlet2Test extends AgentTestRunner { "span.kind" "server" "component" "java-web-servlet" "span.type" DDSpanTypes.WEB_SERVLET + "servlet.context" "" errorTags(RuntimeException, "some $path error") defaultTags() } @@ -182,6 +184,7 @@ class JettyServlet2Test extends AgentTestRunner { "span.kind" "server" "component" "java-web-servlet" "span.type" DDSpanTypes.WEB_SERVLET + "servlet.context" "" defaultTags() } } diff --git a/dd-java-agent/instrumentation/servlet-3/src/test/groovy/JettyServlet3Test.groovy b/dd-java-agent/instrumentation/servlet-3/src/test/groovy/JettyServlet3Test.groovy index bdd3258a8c..a581a229c6 100644 --- a/dd-java-agent/instrumentation/servlet-3/src/test/groovy/JettyServlet3Test.groovy +++ b/dd-java-agent/instrumentation/servlet-3/src/test/groovy/JettyServlet3Test.groovy @@ -108,6 +108,7 @@ class JettyServlet3Test extends AgentTestRunner { "span.kind" "server" "component" "java-web-servlet" "span.type" DDSpanTypes.WEB_SERVLET + "servlet.context" "" "http.status_code" 200 defaultTags() } @@ -147,6 +148,7 @@ class JettyServlet3Test extends AgentTestRunner { "span.kind" "server" "component" "java-web-servlet" "span.type" DDSpanTypes.WEB_SERVLET + "servlet.context" "" "http.status_code" 500 errorTags(RuntimeException, "some $path error") defaultTags() @@ -187,6 +189,7 @@ class JettyServlet3Test extends AgentTestRunner { "span.kind" "server" "component" "java-web-servlet" "span.type" DDSpanTypes.WEB_SERVLET + "servlet.context" "" "http.status_code" 500 "error" true defaultTags() diff --git a/dd-java-agent/instrumentation/spring-web/src/test/groovy/test/SpringBootBasedTest.groovy b/dd-java-agent/instrumentation/spring-web/src/test/groovy/test/SpringBootBasedTest.groovy index 1a3e424c88..bf1132d667 100644 --- a/dd-java-agent/instrumentation/spring-web/src/test/groovy/test/SpringBootBasedTest.groovy +++ b/dd-java-agent/instrumentation/spring-web/src/test/groovy/test/SpringBootBasedTest.groovy @@ -49,10 +49,11 @@ class SpringBootBasedTest extends AgentTestRunner { span.context().tags["span.kind"] == "server" span.context().tags["span.type"] == "web" span.context().tags["component"] == "java-web-servlet" + span.context().tags["servlet.context"] == "" span.context().tags["http.status_code"] == 200 span.context().tags["thread.name"] != null span.context().tags["thread.id"] != null - span.context().tags.size() == 8 + span.context().tags.size() == 9 } def "generates 404 spans"() { @@ -78,10 +79,11 @@ class SpringBootBasedTest extends AgentTestRunner { span0.context().tags["span.kind"] == "server" span0.context().tags["span.type"] == "web" span0.context().tags["component"] == "java-web-servlet" + span0.context().tags["servlet.context"] == "" span0.context().tags["http.status_code"] == 404 span0.context().tags["thread.name"] != null span0.context().tags["thread.id"] != null - span0.context().tags.size() == 8 + span0.context().tags.size() == 9 and: // trace 1 def trace1 = TEST_WRITER.get(1) @@ -98,10 +100,11 @@ class SpringBootBasedTest extends AgentTestRunner { span1.context().tags["span.kind"] == "server" span1.context().tags["span.type"] == "web" span1.context().tags["component"] == "java-web-servlet" + span1.context().tags["servlet.context"] == "" span1.context().tags["http.status_code"] == 404 span1.context().tags["thread.name"] != null span1.context().tags["thread.id"] != null - span1.context().tags.size() == 8 + span1.context().tags.size() == 9 } def "generates error spans"() { @@ -129,6 +132,7 @@ class SpringBootBasedTest extends AgentTestRunner { span0.context().tags["span.kind"] == "server" span0.context().tags["span.type"] == "web" span0.context().tags["component"] == "java-web-servlet" + span0.context().tags["servlet.context"] == "" span0.context().tags["http.status_code"] == 500 span0.context().tags["thread.name"] != null span0.context().tags["thread.id"] != null @@ -136,7 +140,7 @@ class SpringBootBasedTest extends AgentTestRunner { span0.context().tags["error.msg"] == "Request processing failed; nested exception is java.lang.RuntimeException: qwerty" span0.context().tags["error.type"] == NestedServletException.getName() span0.context().tags["error.stack"] != null - span0.context().tags.size() == 12 + span0.context().tags.size() == 13 and: // trace 1 def trace1 = TEST_WRITER.get(1) @@ -152,11 +156,12 @@ class SpringBootBasedTest extends AgentTestRunner { span1.context().tags["span.kind"] == "server" span1.context().tags["span.type"] == "web" span1.context().tags["component"] == "java-web-servlet" + span1.context().tags["servlet.context"] == "" span1.context().tags["http.status_code"] == 500 span1.context().getErrorFlag() span1.context().tags["thread.name"] != null span1.context().tags["thread.id"] != null - span1.context().tags.size() == 9 + span1.context().tags.size() == 10 } def "validated form"() { @@ -179,10 +184,11 @@ class SpringBootBasedTest extends AgentTestRunner { span.context().tags["span.kind"] == "server" span.context().tags["span.type"] == "web" span.context().tags["component"] == "java-web-servlet" + span.context().tags["servlet.context"] == "" span.context().tags["http.status_code"] == 200 span.context().tags["thread.name"] != null span.context().tags["thread.id"] != null - span.context().tags.size() == 8 + span.context().tags.size() == 9 } def "invalid form"() { @@ -210,6 +216,7 @@ class SpringBootBasedTest extends AgentTestRunner { span0.context().tags["span.kind"] == "server" span0.context().tags["span.type"] == "web" span0.context().tags["component"] == "java-web-servlet" + span0.context().tags["servlet.context"] == "" span0.context().tags["http.status_code"] == 400 span0.context().tags["thread.name"] != null span0.context().tags["thread.id"] != null @@ -217,7 +224,7 @@ class SpringBootBasedTest extends AgentTestRunner { span0.context().tags["error.msg"].toString().startsWith("Validation failed") span0.context().tags["error.type"] == MethodArgumentNotValidException.getName() span0.context().tags["error.stack"] != null - span0.context().tags.size() == 12 + span0.context().tags.size() == 13 and: // trace 1 def trace1 = TEST_WRITER.get(1) @@ -234,9 +241,10 @@ class SpringBootBasedTest extends AgentTestRunner { span1.context().tags["span.kind"] == "server" span1.context().tags["span.type"] == "web" span1.context().tags["component"] == "java-web-servlet" + span1.context().tags["servlet.context"] == "" span1.context().tags["http.status_code"] == 400 span1.context().tags["thread.name"] != null span1.context().tags["thread.id"] != null - span1.context().tags.size() == 8 + span1.context().tags.size() == 9 } } diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/TagsAssert.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/TagsAssert.groovy index 3565daae73..8851d5670f 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/TagsAssert.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/TagsAssert.groovy @@ -4,10 +4,10 @@ import datadog.opentracing.DDSpan class TagsAssert { private final Map tags - private final Set assertedTags = new HashSet<>() + private final Set assertedTags = new TreeSet<>() private TagsAssert(DDSpan span) { - this.tags = span.tags + this.tags = new TreeMap(span.tags) } static TagsAssert assertTags(DDSpan span, diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java index 8d19dabdf6..f15feaa92d 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java @@ -27,7 +27,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; @@ -517,12 +516,9 @@ public class DDTracer implements io.opentracing.Tracer { DDTracer.this); // Apply Decorators to handle any tags that may have been set via the builder. - for (final Iterator> it = this.tags.entrySet().iterator(); - it.hasNext(); - ) { - final Map.Entry tag = it.next(); + for (final Map.Entry tag : this.tags.entrySet()) { if (tag.getValue() == null) { - it.remove(); + context.setTag(tag.getKey(), null); continue; } @@ -545,7 +541,7 @@ public class DDTracer implements io.opentracing.Tracer { } if (!addTag) { - it.remove(); + context.setTag(tag.getKey(), null); } }