diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/decorator/DatabaseClientDecorator.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/decorator/DatabaseClientDecorator.java index 14995cd19e..16fe88f9d3 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/decorator/DatabaseClientDecorator.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/decorator/DatabaseClientDecorator.java @@ -33,6 +33,7 @@ public abstract class DatabaseClientDecorator extends ClientDecorato Tags.DB_USER.set(span, dbUser(connection)); final String instanceName = dbInstance(connection); Tags.DB_INSTANCE.set(span, instanceName); + if (instanceName != null && Config.get().isDbClientSplitByInstance()) { span.setTag(DDTags.SERVICE_NAME, instanceName); } diff --git a/dd-trace-api/src/main/java/datadog/trace/api/Config.java b/dd-trace-api/src/main/java/datadog/trace/api/Config.java index c1c4a84384..772338368c 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/Config.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/Config.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.UnknownHostException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -71,6 +72,7 @@ public class Config { public static final String HTTP_CLIENT_TAG_QUERY_STRING = "http.client.tag.query-string"; public static final String HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN = "trace.http.client.split-by-domain"; public static final String DB_CLIENT_HOST_SPLIT_BY_INSTANCE = "trace.db.client.split-by-instance"; + public static final String SPLIT_BY_TAGS = "trace.split-by-tags"; public static final String PARTIAL_FLUSH_MIN_SPANS = "trace.partial.flush.min.spans"; public static final String RUNTIME_CONTEXT_FIELD_INJECTION = "trace.runtime.context.field.injection"; @@ -116,6 +118,7 @@ public class Config { private static final boolean DEFAULT_HTTP_CLIENT_TAG_QUERY_STRING = false; private static final boolean DEFAULT_HTTP_CLIENT_SPLIT_BY_DOMAIN = false; private static final boolean DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE = false; + private static final String DEFAULT_SPLIT_BY_TAGS = ""; private static final int DEFAULT_PARTIAL_FLUSH_MIN_SPANS = 1000; private static final String DEFAULT_PROPAGATION_STYLE_EXTRACT = PropagationStyle.DATADOG.name(); private static final String DEFAULT_PROPAGATION_STYLE_INJECT = PropagationStyle.DATADOG.name(); @@ -171,6 +174,7 @@ public class Config { @Getter private final boolean httpClientTagQueryString; @Getter private final boolean httpClientSplitByDomain; @Getter private final boolean dbClientSplitByInstance; + @Getter private final Set splitByTags; @Getter private final Integer partialFlushMinSpans; @Getter private final boolean runtimeContextFieldInjection; @Getter private final Set propagationStylesToExtract; @@ -258,6 +262,11 @@ public class Config { getBooleanSettingFromEnvironment( DB_CLIENT_HOST_SPLIT_BY_INSTANCE, DEFAULT_DB_CLIENT_HOST_SPLIT_BY_INSTANCE); + splitByTags = + Collections.unmodifiableSet( + new LinkedHashSet<>( + getListSettingFromEnvironment(SPLIT_BY_TAGS, DEFAULT_SPLIT_BY_TAGS))); + partialFlushMinSpans = getIntegerSettingFromEnvironment(PARTIAL_FLUSH_MIN_SPANS, DEFAULT_PARTIAL_FLUSH_MIN_SPANS); @@ -366,6 +375,12 @@ public class Config { getPropertyBooleanValue( properties, DB_CLIENT_HOST_SPLIT_BY_INSTANCE, parent.dbClientSplitByInstance); + splitByTags = + Collections.unmodifiableSet( + new LinkedHashSet<>( + getPropertyListValue( + properties, SPLIT_BY_TAGS, new ArrayList<>(parent.splitByTags)))); + partialFlushMinSpans = getPropertyIntegerValue(properties, PARTIAL_FLUSH_MIN_SPANS, parent.partialFlushMinSpans); @@ -850,6 +865,10 @@ public class Config { } final String[] tokens = str.split(",", -1); + // Remove whitespace from each item. + for (int i = 0; i < tokens.length; i++) { + tokens[i] = tokens[i].trim(); + } return Collections.unmodifiableList(Arrays.asList(tokens)); } diff --git a/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 1d44da192c..837292902c 100644 --- a/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/dd-trace-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -34,6 +34,7 @@ import static datadog.trace.api.Config.SERVICE import static datadog.trace.api.Config.SERVICE_MAPPING import static datadog.trace.api.Config.SERVICE_NAME import static datadog.trace.api.Config.SPAN_TAGS +import static datadog.trace.api.Config.SPLIT_BY_TAGS import static datadog.trace.api.Config.TRACE_AGENT_PORT import static datadog.trace.api.Config.TRACE_ENABLED import static datadog.trace.api.Config.TRACE_REPORT_HOSTNAME @@ -80,6 +81,7 @@ class ConfigTest extends Specification { config.httpClientErrorStatuses == (400..499).toSet() config.httpClientSplitByDomain == false config.dbClientSplitByInstance == false + config.splitByTags == [].toSet() config.partialFlushMinSpans == 1000 config.reportHostName == false config.runtimeContextFieldInjection == true @@ -122,6 +124,7 @@ class ConfigTest extends Specification { prop.setProperty(HTTP_CLIENT_ERROR_STATUSES, "111") prop.setProperty(HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, "true") prop.setProperty(DB_CLIENT_HOST_SPLIT_BY_INSTANCE, "true") + prop.setProperty(SPLIT_BY_TAGS, "some.tag1,some.tag2,some.tag1") prop.setProperty(PARTIAL_FLUSH_MIN_SPANS, "15") prop.setProperty(TRACE_REPORT_HOSTNAME, "true") prop.setProperty(RUNTIME_CONTEXT_FIELD_INJECTION, "false") @@ -154,6 +157,7 @@ class ConfigTest extends Specification { config.httpClientErrorStatuses == (111..111).toSet() config.httpClientSplitByDomain == true config.dbClientSplitByInstance == true + config.splitByTags == ["some.tag1", "some.tag2"].toSet() config.partialFlushMinSpans == 15 config.reportHostName == true config.runtimeContextFieldInjection == false @@ -187,6 +191,7 @@ class ConfigTest extends Specification { System.setProperty(PREFIX + HTTP_CLIENT_ERROR_STATUSES, "111") System.setProperty(PREFIX + HTTP_CLIENT_HOST_SPLIT_BY_DOMAIN, "true") System.setProperty(PREFIX + DB_CLIENT_HOST_SPLIT_BY_INSTANCE, "true") + System.setProperty(PREFIX + SPLIT_BY_TAGS, "some.tag3, some.tag2, some.tag1") System.setProperty(PREFIX + PARTIAL_FLUSH_MIN_SPANS, "25") System.setProperty(PREFIX + TRACE_REPORT_HOSTNAME, "true") System.setProperty(PREFIX + RUNTIME_CONTEXT_FIELD_INJECTION, "false") @@ -219,6 +224,7 @@ class ConfigTest extends Specification { config.httpClientErrorStatuses == (111..111).toSet() config.httpClientSplitByDomain == true config.dbClientSplitByInstance == true + config.splitByTags == ["some.tag3", "some.tag2", "some.tag1"].toSet() config.partialFlushMinSpans == 25 config.reportHostName == true config.runtimeContextFieldInjection == false @@ -314,6 +320,7 @@ class ConfigTest extends Specification { config.httpClientErrorStatuses == (400..499).toSet() config.httpClientSplitByDomain == false config.dbClientSplitByInstance == false + config.splitByTags == [].toSet() config.propagationStylesToExtract.toList() == [Config.PropagationStyle.DATADOG] config.propagationStylesToInject.toList() == [Config.PropagationStyle.DATADOG] } @@ -409,6 +416,7 @@ class ConfigTest extends Specification { config.httpClientErrorStatuses == (111..111).toSet() config.httpClientSplitByDomain == true config.dbClientSplitByInstance == true + config.splitByTags == [].toSet() config.partialFlushMinSpans == 15 config.propagationStylesToExtract.toList() == [Config.PropagationStyle.B3, Config.PropagationStyle.DATADOG] config.propagationStylesToInject.toList() == [Config.PropagationStyle.DATADOG, Config.PropagationStyle.B3] diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/decorators/DDDecoratorsFactory.java b/dd-trace-ot/src/main/java/datadog/opentracing/decorators/DDDecoratorsFactory.java index 2eddd65a9a..b46d355952 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/decorators/DDDecoratorsFactory.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/decorators/DDDecoratorsFactory.java @@ -1,5 +1,7 @@ package datadog.opentracing.decorators; +import datadog.trace.api.Config; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -7,22 +9,30 @@ import java.util.List; public class DDDecoratorsFactory { public static List createBuiltinDecorators() { - return Arrays.asList( - new AnalyticsSampleRateDecorator(), - new DBStatementAsResourceName(), - new DBTypeDecorator(), - new ErrorFlag(), - new ForceManualDropDecorator(), - new ForceManualKeepDecorator(), - new OperationDecorator(), - new PeerServiceDecorator(), - new ResourceNameDecorator(), - new ServiceDecorator(), - new ServiceNameDecorator(), - new ServletContextDecorator(), - new SpanTypeDecorator(), - new Status404Decorator(), - new Status5XXDecorator(), - new URLAsResourceName()); + final List decorators = + new ArrayList<>( + Arrays.asList( + new AnalyticsSampleRateDecorator(), + new DBStatementAsResourceName(), + new DBTypeDecorator(), + new ErrorFlag(), + new ForceManualDropDecorator(), + new ForceManualKeepDecorator(), + new OperationDecorator(), + new PeerServiceDecorator(), + new ResourceNameDecorator(), + new ServiceNameDecorator(), + new ServiceNameDecorator("service", false), + new ServletContextDecorator(), + new SpanTypeDecorator(), + new Status404Decorator(), + new Status5XXDecorator(), + new URLAsResourceName())); + + for (final String splitByTag : Config.get().getSplitByTags()) { + decorators.add(new ServiceNameDecorator(splitByTag, true)); + } + + return decorators; } } diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/decorators/ServiceDecorator.java b/dd-trace-ot/src/main/java/datadog/opentracing/decorators/ServiceDecorator.java deleted file mode 100644 index 0a57127e6c..0000000000 --- a/dd-trace-ot/src/main/java/datadog/opentracing/decorators/ServiceDecorator.java +++ /dev/null @@ -1,17 +0,0 @@ -package datadog.opentracing.decorators; - -import datadog.opentracing.DDSpanContext; - -public class ServiceDecorator extends AbstractDecorator { - - public ServiceDecorator() { - super(); - this.setMatchingTag("service"); // will be added to a future OT version. - } - - @Override - public boolean shouldSetTag(final DDSpanContext context, final String tag, final Object value) { - context.setServiceName(String.valueOf(value)); - return false; - } -} diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/decorators/ServiceNameDecorator.java b/dd-trace-ot/src/main/java/datadog/opentracing/decorators/ServiceNameDecorator.java index 8752538566..8fd7dbf2ba 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/decorators/ServiceNameDecorator.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/decorators/ServiceNameDecorator.java @@ -5,14 +5,21 @@ import datadog.trace.api.DDTags; public class ServiceNameDecorator extends AbstractDecorator { + private final boolean setTag; + public ServiceNameDecorator() { + this(DDTags.SERVICE_NAME, false); + } + + public ServiceNameDecorator(final String splitByTag, final boolean setTag) { super(); - this.setMatchingTag(DDTags.SERVICE_NAME); + this.setTag = setTag; + setMatchingTag(splitByTag); } @Override public boolean shouldSetTag(final DDSpanContext context, final String tag, final Object value) { context.setServiceName(String.valueOf(value)); - return false; + return setTag; } } diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy index 86452c433d..af1aa74b89 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy @@ -2,6 +2,7 @@ package datadog.opentracing import datadog.opentracing.propagation.ExtractedContext import datadog.opentracing.propagation.TagContext +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.Config import datadog.trace.api.DDTags import datadog.trace.api.sampling.PrioritySampling @@ -16,6 +17,10 @@ import static org.mockito.Mockito.mock import static org.mockito.Mockito.when class DDSpanBuilderTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } + def writer = new ListWriter() def config = Config.get() def tracer = new DDTracer(writer) diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy index ef1dbde737..39daa4b428 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy @@ -3,6 +3,7 @@ package datadog.opentracing import com.fasterxml.jackson.databind.ObjectMapper import com.google.common.collect.Maps +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.DDTags import datadog.trace.api.sampling.PrioritySampling import datadog.trace.common.writer.ListWriter @@ -13,6 +14,9 @@ import org.msgpack.value.ValueType import spock.lang.Specification class DDSpanSerializationTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } def "serialize spans with sampling #samplingPriority"() throws Exception { setup: diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy index 288245247d..f74a7405cf 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy @@ -2,6 +2,7 @@ package datadog.opentracing import datadog.opentracing.propagation.ExtractedContext import datadog.opentracing.propagation.TagContext +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.sampling.PrioritySampling import datadog.trace.common.sampling.RateByServiceSampler import datadog.trace.common.writer.ListWriter @@ -14,6 +15,10 @@ import java.util.concurrent.TimeUnit import static datadog.trace.api.Config.DEFAULT_SERVICE_NAME class DDSpanTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } + def writer = new ListWriter() def tracer = new DDTracer(DEFAULT_SERVICE_NAME, writer, new RateByServiceSampler(), [:]) @@ -210,7 +215,7 @@ class DDSpanTest extends Specification { def "isRootSpan() in and not in the context of distributed tracing"() { setup: - def root = tracer.buildSpan("root").asChildOf((SpanContext)extractedContext).start() + def root = tracer.buildSpan("root").asChildOf((SpanContext) extractedContext).start() def child = tracer.buildSpan("child").asChildOf(root).start() expect: @@ -222,14 +227,14 @@ class DDSpanTest extends Specification { root.finish() where: - extractedContext | isTraceRootSpan - null | true + extractedContext | isTraceRootSpan + null | true new ExtractedContext("123", "456", 1, "789", [:], [:]) | false } def "getApplicationRootSpan() in and not in the context of distributed tracing"() { setup: - def root = tracer.buildSpan("root").asChildOf((SpanContext)extractedContext).start() + def root = tracer.buildSpan("root").asChildOf((SpanContext) extractedContext).start() def child = tracer.buildSpan("child").asChildOf(root).start() expect: @@ -244,8 +249,8 @@ class DDSpanTest extends Specification { root.finish() where: - extractedContext | isTraceRootSpan - null | true + extractedContext | isTraceRootSpan + null | true new ExtractedContext("123", "456", 1, "789", [:], [:]) | false } @@ -264,9 +269,9 @@ class DDSpanTest extends Specification { span.finish() where: - tagName | tagValue | expectedPriority - 'manual.drop' | true | PrioritySampling.USER_DROP - 'manual.keep' | true | PrioritySampling.USER_KEEP + tagName | tagValue | expectedPriority + 'manual.drop' | true | PrioritySampling.USER_DROP + 'manual.keep' | true | PrioritySampling.USER_KEEP } def "not setting forced tracing via tag or setting it wrong value not causing exception"() { @@ -284,9 +289,9 @@ class DDSpanTest extends Specification { span.finish() where: - tagName | tagValue + tagName | tagValue // When no tag is set default to - null | null + null | null // Setting to not known value 'manual.drop' | false 'manual.keep' | false diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy index 54393e70d9..c6915d0f65 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy @@ -1,5 +1,6 @@ package datadog.opentracing +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.Config import datadog.trace.common.writer.ListWriter import datadog.trace.util.gc.GCUtils @@ -14,6 +15,10 @@ import java.util.concurrent.atomic.AtomicInteger import static datadog.trace.api.Config.PARTIAL_FLUSH_MIN_SPANS class PendingTraceTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } + def traceCount = new AtomicInteger() def writer = new ListWriter() { @Override diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy index c35d5599a8..a87efb4643 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy @@ -1,9 +1,14 @@ package datadog.opentracing +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.sampling.PrioritySampling import datadog.trace.common.writer.ListWriter class SpanFactory { + static { + ConfigUtils.makeConfigInstanceModifiable() + } + static newSpanOf(long timestampMicro, String threadName = Thread.currentThread().name) { def writer = new ListWriter() def tracer = new DDTracer(writer) diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy index e5882e898d..ab6e97cbf2 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy @@ -1,10 +1,14 @@ package datadog.opentracing +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.common.writer.ListWriter import spock.lang.Shared import spock.lang.Specification class TraceCorrelationTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } static final WRITER = new ListWriter() diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy index d74ad79724..efa414e0c4 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy @@ -1,5 +1,6 @@ package datadog.opentracing +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.GlobalTracer import datadog.trace.api.interceptor.MutableSpan import datadog.trace.api.interceptor.TraceInterceptor @@ -9,6 +10,10 @@ import spock.lang.Specification import java.util.concurrent.atomic.AtomicBoolean class TraceInterceptorTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } + def writer = new ListWriter() def tracer = new DDTracer(writer) diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy index 53ce76f23a..48e4e3fca3 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy @@ -3,6 +3,8 @@ package datadog.opentracing.decorators import datadog.opentracing.DDSpanContext import datadog.opentracing.DDTracer import datadog.opentracing.SpanFactory +import datadog.trace.agent.test.utils.ConfigUtils +import datadog.trace.api.Config import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import datadog.trace.common.sampling.AllSampler @@ -16,14 +18,23 @@ import static datadog.trace.api.DDTags.EVENT_SAMPLE_RATE import static java.util.Collections.emptyMap class SpanDecoratorTest extends Specification { + static { + ConfigUtils.updateConfig { + System.setProperty("dd.$Config.SPLIT_BY_TAGS", "sn.tag1,sn.tag2") + } + } + + def cleanupSpec() { + ConfigUtils.updateConfig { + System.clearProperty("dd.$Config.SPLIT_BY_TAGS") + } + } def tracer = new DDTracer(new LoggingWriter()) def span = SpanFactory.newSpanOf(tracer) def "adding span personalisation using Decorators"() { setup: def decorator = new AbstractDecorator() { - - @Override boolean shouldSetTag(DDSpanContext context, String tag, Object value) { return super.shouldSetTag(context, tag, value) } @@ -69,6 +80,10 @@ class SpanDecoratorTest extends Specification { "service" | "other-service" | "other-service" Tags.PEER_SERVICE.key | "some-service" | "new-service" Tags.PEER_SERVICE.key | "other-service" | "other-service" + "sn.tag1" | "some-service" | "new-service" + "sn.tag1" | "other-service" | "other-service" + "sn.tag2" | "some-service" | "new-service" + "sn.tag2" | "other-service" | "other-service" mapping = ["some-service": "new-service"] } @@ -310,7 +325,13 @@ class SpanDecoratorTest extends Specification { def "decorators apply to builder too"() { when: - def span = tracer.buildSpan("decorator.test").withTag("servlet.context", "/my-servlet").start() + def span = tracer.buildSpan("decorator.test").withTag("sn.tag1", "some val").start() + + then: + span.serviceName == "some val" + + when: + span = tracer.buildSpan("decorator.test").withTag("servlet.context", "/my-servlet").start() then: span.serviceName == "my-servlet" diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy index 07f9b60954..d8a682a085 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy @@ -3,6 +3,7 @@ package datadog.opentracing.decorators import datadog.opentracing.DDSpanContext import datadog.opentracing.DDTracer import datadog.opentracing.PendingTrace +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.sampling.PrioritySampling import datadog.trace.common.writer.ListWriter import io.opentracing.tag.Tags @@ -10,6 +11,10 @@ import spock.lang.Specification import spock.lang.Subject class URLAsResourceNameTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } + def writer = new ListWriter() def tracer = new DDTracer(writer) diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/resolver/DDTracerResolverTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/resolver/DDTracerResolverTest.groovy index e45985630d..b2c1381566 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/resolver/DDTracerResolverTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/resolver/DDTracerResolverTest.groovy @@ -1,11 +1,15 @@ package datadog.opentracing.resolver import datadog.opentracing.DDTracer +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.Config import io.opentracing.contrib.tracerresolver.TracerResolver import spock.lang.Specification class DDTracerResolverTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } def resolver = new DDTracerResolver() diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy index 80e2eeb879..6e8128e33e 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy @@ -3,6 +3,7 @@ package datadog.opentracing.scopemanager import datadog.opentracing.DDSpan import datadog.opentracing.DDSpanContext import datadog.opentracing.DDTracer +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.common.writer.ListWriter import datadog.trace.context.ScopeListener import datadog.trace.util.gc.GCUtils @@ -22,6 +23,9 @@ import java.util.concurrent.atomic.AtomicReference import static java.util.concurrent.TimeUnit.SECONDS class ScopeManagerTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } def latch def writer def tracer diff --git a/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy b/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy index aabe1bb6db..3ca70fe398 100644 --- a/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy @@ -2,6 +2,7 @@ package datadog.trace import datadog.opentracing.DDTracer import datadog.opentracing.propagation.HttpCodec +import datadog.trace.agent.test.utils.ConfigUtils import datadog.trace.api.Config import datadog.trace.common.sampling.AllSampler import datadog.trace.common.sampling.RateByServiceSampler @@ -22,6 +23,10 @@ import static datadog.trace.api.Config.SPAN_TAGS import static datadog.trace.api.Config.WRITER_TYPE class DDTracerTest extends Specification { + static { + ConfigUtils.makeConfigInstanceModifiable() + } + @Rule public final RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties() @Rule