Skip to content

Commit d850c58

Browse files
committed
add feature flag for interface support
interface support add overhead at startup so need to be manually enabled
1 parent 1271b9d commit d850c58

6 files changed

Lines changed: 39 additions & 13 deletions

File tree

dd-java-agent/instrumentation/datadog/dynamic-instrumentation/span-origin/src/main/java/datadog/trace/instrumentation/codeorigin/CodeOriginInstrumentation.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,10 @@
1717
import net.bytebuddy.description.type.TypeDescription;
1818
import net.bytebuddy.matcher.ElementMatcher;
1919
import net.bytebuddy.matcher.ElementMatchers;
20-
import org.slf4j.Logger;
21-
import org.slf4j.LoggerFactory;
2220

2321
public abstract class CodeOriginInstrumentation extends Tracing
2422
implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice {
2523

26-
private static final Logger log = LoggerFactory.getLogger(CodeOriginInstrumentation.class);
2724
private final OneOf<NamedElement> matcher;
2825

2926
@SuppressForbidden
@@ -46,20 +43,28 @@ public String hierarchyMarkerType() {
4643

4744
@Override
4845
public ElementMatcher<TypeDescription> hierarchyMatcher() {
49-
return HierarchyMatchers.declaresMethod(HierarchyMatchers.isAnnotatedWith(matcher))
50-
.or(
51-
HierarchyMatchers.implementsInterface(
52-
HierarchyMatchers.declaresMethod(HierarchyMatchers.isAnnotatedWith(matcher))));
46+
ElementMatcher.Junction<TypeDescription> matcher =
47+
HierarchyMatchers.declaresMethod(HierarchyMatchers.isAnnotatedWith(this.matcher));
48+
if (InstrumenterConfig.get().isCodeOriginInterfaceSupport()) {
49+
matcher =
50+
matcher.or(
51+
HierarchyMatchers.implementsInterface(
52+
HierarchyMatchers.declaresMethod(
53+
HierarchyMatchers.isAnnotatedWith(this.matcher))));
54+
}
55+
return matcher;
5356
}
5457

5558
@Override
5659
public void methodAdvice(MethodTransformer transformer) {
5760
transformer.applyAdvice(
5861
HierarchyMatchers.isAnnotatedWith(matcher),
5962
"datadog.trace.instrumentation.codeorigin.EntrySpanOriginAdvice");
60-
transformer.applyAdvice(
61-
ElementMatchers.isDeclaredBy(
62-
hasSuperType(isInterface().and(declaresMethod(isAnnotatedWith(matcher))))),
63-
"datadog.trace.instrumentation.codeorigin.EntrySpanOriginAdvice");
63+
if (InstrumenterConfig.get().isCodeOriginInterfaceSupport()) {
64+
transformer.applyAdvice(
65+
ElementMatchers.isDeclaredBy(
66+
hasSuperType(isInterface().and(declaresMethod(isAnnotatedWith(matcher))))),
67+
"datadog.trace.instrumentation.codeorigin.EntrySpanOriginAdvice");
68+
}
6469
}
6570
}

dd-smoke-tests/debugger-integration-tests/src/test/java/datadog/smoketest/SpringCodeOriginIntegrationTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ protected ProcessBuilder createProcessBuilder(Path logFilePath, String... params
2525
List<String> commandParams = getDebuggerCommandParams();
2626
commandParams.add("-Ddd.trace.enabled=true"); // explicitly enable tracer
2727
commandParams.add("-Ddd.code.origin.for.spans.enabled=true");
28+
commandParams.add("-Ddd.code.origin.for.spans.interface.support=true");
2829
return ProcessBuilderHelper.createProcessBuilder(
2930
commandParams, logFilePath, getAppClass(), params);
3031
}

dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,8 @@ public final class ConfigDefaults {
5050
static final boolean DEFAULT_WRITER_BAGGAGE_INJECT = true;
5151
static final String DEFAULT_SITE = "datadoghq.com";
5252

53-
static final boolean DEFAULT_CODE_ORIGIN_FOR_SPANS_ENABLED = false;
53+
static final boolean DEFAULT_CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT = false;
5454
static final int DEFAULT_CODE_ORIGIN_MAX_USER_FRAMES = 8;
55-
static final boolean DEFAULT_TRACE_SPAN_ORIGIN_ENRICHED = false;
5655
static final boolean DEFAULT_TRACE_ENABLED = true;
5756
public static final boolean DEFAULT_TRACE_OTEL_ENABLED = false;
5857
static final boolean DEFAULT_INTEGRATIONS_ENABLED = true;

dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
*/
1111
public final class TraceInstrumentationConfig {
1212
public static final String CODE_ORIGIN_FOR_SPANS_ENABLED = "code.origin.for.spans.enabled";
13+
public static final String CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT =
14+
"code.origin.for.spans.interface.support";
1315
public static final String CODE_ORIGIN_MAX_USER_FRAMES = "code.origin.max.user.frames";
1416
public static final String TRACE_ENABLED = "trace.enabled";
1517
public static final String INTEGRATIONS_ENABLED = "integrations.enabled";

internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static datadog.trace.api.ConfigDefaults.DEFAULT_APPSEC_RASP_ENABLED;
66
import static datadog.trace.api.ConfigDefaults.DEFAULT_APP_LOGS_COLLECTION_ENABLED;
77
import static datadog.trace.api.ConfigDefaults.DEFAULT_CIVISIBILITY_ENABLED;
8+
import static datadog.trace.api.ConfigDefaults.DEFAULT_CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT;
89
import static datadog.trace.api.ConfigDefaults.DEFAULT_DATA_JOBS_ENABLED;
910
import static datadog.trace.api.ConfigDefaults.DEFAULT_IAST_ENABLED;
1011
import static datadog.trace.api.ConfigDefaults.DEFAULT_INTEGRATIONS_ENABLED;
@@ -50,6 +51,7 @@
5051
import static datadog.trace.api.config.TraceInstrumentationConfig.AKKA_FORK_JOIN_TASK_NAME;
5152
import static datadog.trace.api.config.TraceInstrumentationConfig.AXIS_TRANSPORT_CLASS_NAME;
5253
import static datadog.trace.api.config.TraceInstrumentationConfig.CODE_ORIGIN_FOR_SPANS_ENABLED;
54+
import static datadog.trace.api.config.TraceInstrumentationConfig.CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT;
5355
import static datadog.trace.api.config.TraceInstrumentationConfig.EXPERIMENTAL_DEFER_INTEGRATIONS_UNTIL;
5456
import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_URL_CONNECTION_CLASS_NAME;
5557
import static datadog.trace.api.config.TraceInstrumentationConfig.INSTRUMENTATION_CONFIG_ID;
@@ -139,6 +141,7 @@ public class InstrumenterConfig {
139141
private final boolean integrationsEnabled;
140142

141143
private final boolean codeOriginEnabled;
144+
private final boolean codeOriginInterfaceSupport;
142145
private final boolean traceEnabled;
143146
private final boolean traceOtelEnabled;
144147
private final boolean metricsOtelEnabled;
@@ -241,6 +244,10 @@ private InstrumenterConfig() {
241244
codeOriginEnabled =
242245
configProvider.getBoolean(
243246
CODE_ORIGIN_FOR_SPANS_ENABLED, getDefaultCodeOriginForSpanEnabled());
247+
codeOriginInterfaceSupport =
248+
configProvider.getBoolean(
249+
CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT,
250+
DEFAULT_CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT);
244251
traceEnabled = configProvider.getBoolean(TRACE_ENABLED, DEFAULT_TRACE_ENABLED);
245252
traceOtelEnabled = configProvider.getBoolean(TRACE_OTEL_ENABLED, DEFAULT_TRACE_OTEL_ENABLED);
246253
metricsOtelEnabled =
@@ -373,6 +380,10 @@ public boolean isCodeOriginEnabled() {
373380
return codeOriginEnabled;
374381
}
375382

383+
public boolean isCodeOriginInterfaceSupport() {
384+
return codeOriginInterfaceSupport;
385+
}
386+
376387
public boolean isTriageEnabled() {
377388
return triageEnabled;
378389
}

metadata/supported-configurations.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,14 @@
905905
"aliases": []
906906
}
907907
],
908+
"DD_CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT": [
909+
{
910+
"version": "A",
911+
"type": "boolean",
912+
"default": "true",
913+
"aliases": []
914+
}
915+
],
908916
"DD_CODE_ORIGIN_MAX_USER_FRAMES": [
909917
{
910918
"version": "A",

0 commit comments

Comments
 (0)