Skip to content

Commit 46d6ef3

Browse files
authored
Merge branch 'bbujon/jep500' into sarahchen6/refactor-final-field-mutations
2 parents ffc81ea + 8cf17a8 commit 46d6ef3

File tree

114 files changed

+2977
-86
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+2977
-86
lines changed

.github/workflows/run-system-tests.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ jobs:
6262
- build
6363
# If you change the following comment, update the pattern in the update_system_test_reference.sh script to match.
6464
uses: DataDog/system-tests/.github/workflows/system-tests.yml@main # system tests are pinned for releases only
65-
secrets: inherit
65+
secrets:
66+
TEST_OPTIMIZATION_API_KEY: ${{ secrets.DATADOG_API_KEY_PROD }}
6667
permissions:
6768
contents: read
6869
id-token: write
@@ -76,6 +77,7 @@ jobs:
7677
scenarios_groups: tracer-release
7778
excluded_scenarios: APM_TRACING_E2E_OTEL,APM_TRACING_E2E_SINGLE_SPAN,PROFILING # exclude flaky scenarios
7879
skip_empty_scenarios: true
80+
push_to_test_optimization: true
7981

8082
# Ensure the main job is run to completion
8183
check:

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,9 +1481,12 @@ private static void configureLogger() {
14811481
if (isDebugMode()) {
14821482
logLevel = "DEBUG";
14831483
} else {
1484-
logLevel = ddGetProperty("dd.log.level");
1484+
logLevel = ddGetProperty("dd.trace.log.level");
14851485
if (null == logLevel) {
1486-
logLevel = EnvironmentVariables.get("OTEL_LOG_LEVEL");
1486+
logLevel = ddGetProperty("dd.log.level");
1487+
if (null == logLevel) {
1488+
logLevel = EnvironmentVariables.get("OTEL_LOG_LEVEL");
1489+
}
14871490
}
14881491
}
14891492

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpClientDecorator.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import datadog.trace.api.InstrumenterConfig;
1212
import datadog.trace.api.ProductActivation;
1313
import datadog.trace.api.appsec.HttpClientRequest;
14+
import datadog.trace.api.datastreams.DataStreamsTransactionExtractor;
15+
import datadog.trace.api.datastreams.DataStreamsTransactionTracker;
1416
import datadog.trace.api.gateway.BlockResponseFunction;
1517
import datadog.trace.api.gateway.Flow;
1618
import datadog.trace.api.gateway.RequestContext;
@@ -68,8 +70,19 @@ protected boolean shouldSetResourceName() {
6870
return true;
6971
}
7072

73+
private final DataStreamsTransactionTracker.TransactionSourceReader
74+
DSM_TRANSACTION_SOURCE_READER =
75+
(source, headerName) -> getRequestHeader((REQUEST) source, headerName);
76+
7177
public AgentSpan onRequest(final AgentSpan span, final REQUEST request) {
7278
if (request != null) {
79+
AgentTracer.get()
80+
.getDataStreamsMonitoring()
81+
.trackTransaction(
82+
span,
83+
DataStreamsTransactionExtractor.Type.HTTP_OUT_HEADERS,
84+
request,
85+
DSM_TRANSACTION_SOURCE_READER);
7386

7487
String method = method(request);
7588
span.setTag(Tags.HTTP_METHOD, method);

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import datadog.context.propagation.Propagators;
1414
import datadog.trace.api.Config;
1515
import datadog.trace.api.DDTags;
16+
import datadog.trace.api.datastreams.DataStreamsTransactionExtractor;
17+
import datadog.trace.api.datastreams.DataStreamsTransactionTracker;
1618
import datadog.trace.api.function.TriConsumer;
1719
import datadog.trace.api.function.TriFunction;
1820
import datadog.trace.api.gateway.BlockResponseFunction;
@@ -95,6 +97,14 @@ public abstract class HttpServerDecorator<REQUEST, CONNECTION, RESPONSE, REQUEST
9597

9698
protected abstract int status(RESPONSE response);
9799

100+
protected String getRequestHeader(REQUEST request, String key) {
101+
// This method was not marked as abstract in order to avoid changing all server instrumentation
102+
// at once.
103+
// Instead, only ones required (by DSM specifically) have it implemented.
104+
// This can change in the future.
105+
return null;
106+
}
107+
98108
protected String requestedSessionId(REQUEST request) {
99109
return null;
100110
}
@@ -174,6 +184,10 @@ protected AgentSpanContext startInferredProxySpan(Context context, AgentSpanCont
174184
return span.start(extracted);
175185
}
176186

187+
private final DataStreamsTransactionTracker.TransactionSourceReader
188+
DSM_TRANSACTION_SOURCE_READER =
189+
(source, headerName) -> getRequestHeader((REQUEST) source, headerName);
190+
177191
public AgentSpan onRequest(
178192
final AgentSpan span,
179193
final CONNECTION connection,
@@ -326,6 +340,13 @@ public AgentSpan onRequest(
326340
span.setRequestBlockingAction((RequestBlockingAction) flow.getAction());
327341
}
328342

343+
AgentTracer.get()
344+
.getDataStreamsMonitoring()
345+
.trackTransaction(
346+
span,
347+
DataStreamsTransactionExtractor.Type.HTTP_IN_HEADERS,
348+
request,
349+
DSM_TRANSACTION_SOURCE_READER);
329350
return span;
330351
}
331352

dd-java-agent/agent-bootstrap/src/main/resources/META-INF/native-image/com.datadoghq/dd-java-agent/reflect-config.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,31 @@
7070
{"name": "toJson"}
7171
]
7272
},
73+
{
74+
"name" : "datadog.trace.agent.core.datastreams.DataStreamsTransactionExtractors$DataStreamsTransactionExtractorAdapter",
75+
"methods": [
76+
{"name": "fromJson"},
77+
{"name": "toJson"}
78+
]
79+
},
80+
{
81+
"name" : "datadog.trace.agent.core.datastreams.DataStreamsTransactionExtractors$DataStreamsTransactionExtractorImpl",
82+
"allDeclaredConstructors" : true,
83+
"allPublicConstructors" : true,
84+
"allDeclaredFields" : true,
85+
"allPublicFields" : true
86+
},
87+
{
88+
"name" : "datadog.trace.api.datastreams.DataStreamsTransactionExtractor$Type",
89+
"allDeclaredFields" : true
90+
},
91+
{
92+
"name" : "datadog.trace.agent.core.datastreams.DataStreamsTransactionExtractors$DataStreamsTransactionExtractorsAdapter",
93+
"methods": [
94+
{"name": "fromJson"},
95+
{"name": "toJson"}
96+
]
97+
},
7398
{
7499
"name" : "datadog.trace.agent.core.DDSpanLink$SpanLinkAdapter",
75100
"methods": [

dd-java-agent/agent-bootstrap/src/test/groovy/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecoratorTest.groovy

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,11 @@ class HttpServerDecoratorTest extends ServerDecoratorTest {
468468
protected int status(Map m) {
469469
return m.status == null ? 0 : m.status
470470
}
471+
472+
@Override
473+
protected String getRequestHeader(Map map, String key) {
474+
return map.getOrDefault(key, null)
475+
}
471476
}
472477
}
473478

dd-java-agent/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ includeSubprojShadowJar(project(':dd-java-agent:agent-ci-visibility'), 'ci-visib
223223
includeSubprojShadowJar(project(':dd-java-agent:agent-llmobs'), 'llm-obs', includedJarFileTree)
224224
includeSubprojShadowJar(project(':dd-java-agent:agent-logs-intake'), 'logs-intake', includedJarFileTree)
225225
includeSubprojShadowJar(project(':dd-java-agent:cws-tls'), 'cws-tls', includedJarFileTree)
226-
includeSubprojShadowJar(project(':products:feature-flagging:agent'), 'feature-flagging', includedJarFileTree)
226+
includeSubprojShadowJar(project(':products:feature-flagging:feature-flagging-agent'), 'feature-flagging', includedJarFileTree)
227227

228228
def sharedShadowJar = tasks.register('sharedShadowJar', ShadowJar) {
229229
it.configurations = [project.configurations.sharedShadowInclude]
@@ -355,7 +355,7 @@ dependencies {
355355
shadowInclude project(path: ':dd-java-agent:agent-bootstrap')
356356
shadowInclude project(path: ':dd-java-agent:agent-debugger:debugger-bootstrap')
357357
shadowInclude project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow')
358-
shadowInclude project(path: ':products:feature-flagging:bootstrap')
358+
shadowInclude project(path: ':products:feature-flagging:feature-flagging-bootstrap')
359359

360360
// Includes for the shared internal shadow jar
361361
sharedShadowInclude deps.shared

dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
package datadog.trace.agent.test
22

3+
import static datadog.communication.http.OkHttpUtils.buildHttpClient
4+
import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_HOST
5+
import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_TIMEOUT
6+
import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT
7+
import static datadog.trace.api.config.DebuggerConfig.DYNAMIC_INSTRUMENTATION_SNAPSHOT_URL
8+
import static datadog.trace.api.config.DebuggerConfig.DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE
9+
import static datadog.trace.api.config.TraceInstrumentationConfig.CODE_ORIGIN_FOR_SPANS_ENABLED
10+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious
11+
import static datadog.trace.util.AgentThreadFactory.AgentThread.TASK_SCHEDULER
12+
313
import ch.qos.logback.classic.Level
414
import ch.qos.logback.classic.util.ContextInitializer
515
import com.datadog.debugger.agent.ClassesToRetransformFinder
@@ -33,6 +43,7 @@ import datadog.trace.api.TraceConfig
3343
import datadog.trace.api.config.GeneralConfig
3444
import datadog.trace.api.config.TracerConfig
3545
import datadog.trace.api.datastreams.AgentDataStreamsMonitoring
46+
import datadog.trace.api.datastreams.DataStreamsTransactionExtractor
3647
import datadog.trace.api.sampling.SamplingRule
3748
import datadog.trace.api.time.SystemTimeSource
3849
import datadog.trace.bootstrap.ActiveSubsystems
@@ -56,6 +67,13 @@ import de.thetaphi.forbiddenapis.SuppressForbidden
5667
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings
5768
import groovy.transform.stc.ClosureParams
5869
import groovy.transform.stc.SimpleType
70+
import java.lang.instrument.ClassFileTransformer
71+
import java.lang.instrument.Instrumentation
72+
import java.nio.ByteBuffer
73+
import java.util.concurrent.ConcurrentHashMap
74+
import java.util.concurrent.TimeUnit
75+
import java.util.concurrent.TimeoutException
76+
import java.util.concurrent.atomic.AtomicInteger
5977
import net.bytebuddy.agent.ByteBuddyAgent
6078
import net.bytebuddy.agent.builder.AgentBuilder
6179
import net.bytebuddy.description.type.TypeDescription
@@ -69,24 +87,6 @@ import org.slf4j.LoggerFactory
6987
import org.spockframework.mock.MockUtil
7088
import spock.lang.Shared
7189

72-
import java.lang.instrument.ClassFileTransformer
73-
import java.lang.instrument.Instrumentation
74-
import java.nio.ByteBuffer
75-
import java.util.concurrent.ConcurrentHashMap
76-
import java.util.concurrent.TimeUnit
77-
import java.util.concurrent.TimeoutException
78-
import java.util.concurrent.atomic.AtomicInteger
79-
80-
import static datadog.communication.http.OkHttpUtils.buildHttpClient
81-
import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_HOST
82-
import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_TIMEOUT
83-
import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT
84-
import static datadog.trace.api.config.DebuggerConfig.DYNAMIC_INSTRUMENTATION_SNAPSHOT_URL
85-
import static datadog.trace.api.config.DebuggerConfig.DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE
86-
import static datadog.trace.api.config.TraceInstrumentationConfig.CODE_ORIGIN_FOR_SPANS_ENABLED
87-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.closePrevious
88-
import static datadog.trace.util.AgentThreadFactory.AgentThread.TASK_SCHEDULER
89-
9090
/**
9191
* A specification that automatically applies instrumentation and exposes a global trace
9292
* writer.
@@ -250,6 +250,10 @@ abstract class InstrumentationSpecification extends DDSpecification implements A
250250
List<? extends SamplingRule.TraceSamplingRule> getTraceSamplingRules() {
251251
return null
252252
}
253+
254+
List<DataStreamsTransactionExtractor> getDataStreamsTransactionExtractors() {
255+
return null
256+
}
253257
}
254258

255259
@SuppressFBWarnings(value = "AT_STALE_THREAD_WRITE_OF_PRIMITIVE", justification = "The variable is accessed only by the test thread in setup and cleanup.")

dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/AkkaHttpServerDecorator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ protected int status(final HttpResponse httpResponse) {
8888
return httpResponse.status().intValue();
8989
}
9090

91+
@Override
92+
protected String getRequestHeader(HttpRequest httpRequest, String key) {
93+
Optional<akka.http.javadsl.model.HttpHeader> header = httpRequest.getHeader(key);
94+
return header.map(HttpHeader::value).orElse(null);
95+
}
96+
9197
@Override
9298
protected boolean isAppSecOnResponseSeparate() {
9399
return true;

dd-java-agent/instrumentation/graphql-java/graphql-java-14.0/src/main/java/datadog/trace/instrumentation/graphqljava14/GraphQLJavaInstrumentation.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ public String[] helperClassNames() {
3838
"datadog.trace.instrumentation.graphqljava.State",
3939
packageName + ".GraphQLInstrumentation",
4040
"datadog.trace.instrumentation.graphqljava.GraphQLQuerySanitizer",
41-
"datadog.trace.instrumentation.graphqljava.InstrumentedDataFetcher"
41+
"datadog.trace.instrumentation.graphqljava.InstrumentedDataFetcher",
42+
"datadog.trace.instrumentation.graphqljava.AsyncExceptionUnwrapper"
4243
};
4344
}
4445

0 commit comments

Comments
 (0)