Skip to content

Commit eb7618b

Browse files
authored
Merge branch 'master' into mtoff/stable_config
2 parents 4366cab + 2d7d791 commit eb7618b

File tree

183 files changed

+2129
-1035
lines changed

Some content is hidden

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

183 files changed

+2129
-1035
lines changed

.circleci/config.continue.yml.j2

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,9 @@ jobs:
858858
APPSEC_RASP
859859
APPSEC_RUNTIME_ACTIVATION
860860
APPSEC_WAF_TELEMETRY
861+
APPSEC_STANDALONE_V2
862+
IAST_STANDALONE_V2
863+
SCA_STANDALONE_V2
861864
REMOTE_CONFIG_MOCKED_BACKEND_ASM_DD
862865
"
863866
fi

.github/CODEOWNERS

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,10 @@ dd-java-agent/instrumentation/spring-security-5/ @DataDog/asm-java
6565
# @DataDog/data-jobs-monitoring
6666
dd-java-agent/instrumentation/spark/ @DataDog/data-jobs-monitoring
6767
dd-java-agent/instrumentation/spark-executor/ @DataDog/data-jobs-monitoring
68+
69+
# @DataDog/data-streams-monitoring
70+
dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/datastreams @DataDog/data-streams-monitoring
71+
dd-trace-core/src/main/java/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
72+
dd-trace-core/src/test/groovy/datadog/trace/core/datastreams @DataDog/data-streams-monitoring
73+
internal-api/src/main/java/datadog/trace/api/datastreams @DataDog/data-streams-monitoring
74+
internal-api/src/test/groovy/datadog/trace/api/datastreams @DataDog/data-streams-monitoring

.gitlab-ci.yml

Lines changed: 110 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,24 @@ variables:
2323
DEPENDENCY_CACHE_POLICY: pull
2424
BUILD_CACHE_POLICY: pull
2525
GRADLE_VERSION: "8.4" # must match gradle-wrapper.properties
26+
JAVA_BUILD_IMAGE_VERSION: "v25.01"
2627

2728
default:
2829
tags: [ "arch:amd64" ]
2930

31+
.fan_in:
32+
stage: tests
33+
image: registry.ddbuild.io/images/base/gbi-ubuntu_2204-slim:release
34+
script:
35+
- echo "done"
36+
3037
.gradle_build: &gradle_build
31-
image: ghcr.io/datadog/dd-trace-java-docker-build:v25.01-base
38+
image: ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-base
39+
stage: build
3240
variables:
33-
GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M'"
34-
GRADLE_ARGS: " -PskipTests --build-cache --stacktrace --no-daemon --parallel --max-workers=2"
41+
GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx2560M -Xms2560M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
42+
MAVEN_OPTS: "-Xms64M -Xmx512M"
43+
GRADLE_WORKERS: 2
3544
KUBERNETES_CPU_REQUEST: 8
3645
KUBERNETES_MEMORY_REQUEST: 6Gi
3746
cache:
@@ -42,14 +51,15 @@ default:
4251
- .gradle/caches
4352
- .gradle/notifications
4453
policy: $DEPENDENCY_CACHE_POLICY
45-
- key: $CI_PIPELINE_ID # Incremental build cache. Shared by all jobs in the pipeline
54+
- key: $CI_PIPELINE_ID-$BUILD_CACHE_TYPE # Incremental build cache. Shared by all jobs in the pipeline of the same type
4655
paths:
4756
- .gradle/caches/$GRADLE_VERSION
4857
- .gradle/$GRADLE_VERSION/executionHistory
4958
- workspace
5059
policy: $BUILD_CACHE_POLICY
5160
before_script:
5261
- export GRADLE_USER_HOME=`pwd`/.gradle
62+
- export GRADLE_ARGS=" --build-cache --stacktrace --no-daemon --parallel --max-workers=$GRADLE_WORKERS"
5363
# for weird reasons, gradle will always "chmod 700" the .gradle folder
5464
# with Gitlab caching, .gradle is always owned by root and thus gradle's chmod invocation fails
5565
# This dance is a hack to have .gradle owned by the Gitlab runner user
@@ -61,21 +71,24 @@ default:
6171

6272
build:
6373
extends: .gradle_build
64-
stage: build
6574
variables:
6675
BUILD_CACHE_POLICY: push
76+
BUILD_CACHE_TYPE: lib
6777
DEPENDENCY_CACHE_POLICY: pull
6878
script:
69-
- ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar $GRADLE_ARGS
79+
- if [ $CI_PIPELINE_SOURCE == "schedule" ] ; then ./gradlew resolveAndLockAll --write-locks; fi
80+
- ./gradlew clean :dd-java-agent:shadowJar :dd-trace-api:jar :dd-trace-ot:shadowJar -PskipTests $GRADLE_ARGS
7081
- echo UPSTREAM_TRACER_VERSION=$(java -jar workspace/dd-java-agent/build/libs/*.jar) >> upstream.env
7182
- echo "BUILD_JOB_NAME=$CI_JOB_NAME" >> build.env
7283
- echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env
7384
artifacts:
85+
when: always
7486
paths:
7587
- 'workspace/dd-java-agent/build/libs/*.jar'
7688
- 'workspace/dd-trace-api/build/libs/*.jar'
7789
- 'workspace/dd-trace-ot/build/libs/*.jar'
7890
- 'upstream.env'
91+
- '.gradle/daemon/*/*.out.log'
7992
reports:
8093
dotenv: build.env
8194

@@ -90,6 +103,94 @@ build_and_populate_dep_cache:
90103
- when: manual
91104
allow_failure: true
92105

106+
spotless:
107+
extends: .gradle_build
108+
stage: tests
109+
needs: []
110+
script:
111+
- export JAVA_HOME=$JAVA_11_HOME
112+
- ./gradlew spotlessCheck $GRADLE_ARGS
113+
114+
test_published_artifacts:
115+
extends: .gradle_build
116+
image: ghcr.io/datadog/dd-trace-java-docker-build:${JAVA_BUILD_IMAGE_VERSION}-7 # Needs Java7 for some tests
117+
stage: tests
118+
needs: [ build ]
119+
rules:
120+
- if: '$POPULATE_CACHE'
121+
when: never
122+
- when: on_success
123+
variables:
124+
BUILD_CACHE_TYPE: lib
125+
script:
126+
- mvn_local_repo=$(./mvnw help:evaluate -Dexpression=settings.localRepository -q -DforceStdout)
127+
- rm -rf "${mvn_local_repo}/com/datadoghq"
128+
- export GPG_PRIVATE_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_private_key --with-decryption --query "Parameter.Value" --out text)
129+
- export GPG_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_passphrase --with-decryption --query "Parameter.Value" --out text)
130+
- export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
131+
- ./gradlew publishToMavenLocal $GRADLE_ARGS
132+
- cd test-published-dependencies
133+
- export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx512M -Xms512M -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
134+
- ./gradlew check --info $GRADLE_ARGS
135+
after_script:
136+
- .circleci/collect_reports.sh
137+
artifacts:
138+
when: always
139+
paths:
140+
- ./check_reports
141+
142+
muzzle:
143+
extends: .gradle_build
144+
needs: [ build ]
145+
stage: tests
146+
parallel: 8
147+
rules:
148+
- if: '$POPULATE_CACHE'
149+
when: never
150+
- when: on_success
151+
variables:
152+
BUILD_CACHE_TYPE: test
153+
script:
154+
- export SKIP_BUILDSCAN="true"
155+
- echo CI_NODE_INDEX=$CI_NODE_INDEX
156+
- echo CI_NODE_TOTAL=CI_NODE_TOTAL
157+
- ./gradlew writeMuzzleTasksToFile $GRADLE_ARGS
158+
- sort workspace/build/muzzleTasks > sortedMuzzleTasks
159+
- split --number=l/$CI_NODE_TOTAL --suffix-length=1 --numeric-suffixes sortedMuzzleTasks muzzleSplit
160+
- export NODE_ZERO_INDEX=$((CI_NODE_INDEX - 1))
161+
- ./gradlew `cat muzzleSplit${NODE_ZERO_INDEX} | xargs` $GRADLE_ARGS
162+
after_script:
163+
- .circleci/collect_reports.sh
164+
artifacts:
165+
when: always
166+
paths:
167+
- ./reports
168+
- '.gradle/daemon/*/*.out.log'
169+
170+
muzzle-dep-report:
171+
extends: .gradle_build
172+
needs: [ build ]
173+
stage: tests
174+
variables:
175+
BUILD_CACHE_TYPE: test
176+
script:
177+
- export SKIP_BUILDSCAN="true"
178+
- ./gradlew generateMuzzleReport muzzleInstrumentationReport $GRADLE_ARGS
179+
after_script:
180+
- .circleci/collect_muzzle_deps.sh
181+
artifacts:
182+
when: always
183+
paths:
184+
- ./reports
185+
- '.gradle/daemon/*/*.out.log'
186+
187+
required:
188+
extends: .fan_in
189+
needs:
190+
- spotless
191+
- muzzle
192+
- test_published_artifacts
193+
93194
deploy_to_profiling_backend:
94195
stage: publish
95196
needs: [ build ]
@@ -165,6 +266,8 @@ deploy_to_sonatype:
165266
extends: .gradle_build
166267
stage: publish
167268
needs: [ build ]
269+
variables:
270+
BUILD_CACHE_TYPE: lib
168271
rules:
169272
- if: '$POPULATE_CACHE'
170273
when: never
@@ -180,7 +283,7 @@ deploy_to_sonatype:
180283
- export SONATYPE_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.sonatype_password --with-decryption --query "Parameter.Value" --out text)
181284
- export GPG_PRIVATE_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_private_key --with-decryption --query "Parameter.Value" --out text)
182285
- export GPG_PASSWORD=$(aws ssm get-parameter --region us-east-1 --name ci.dd-trace-java.signing.gpg_passphrase --with-decryption --query "Parameter.Value" --out text)
183-
- ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository $GRADLE_ARGS
286+
- ./gradlew -PbuildInfo.build.number=$CI_JOB_ID publishToSonatype closeSonatypeStagingRepository -PskipTests $GRADLE_ARGS
184287
artifacts:
185288
paths:
186289
- 'workspace/dd-java-agent/build/libs/*.jar'

benchmark/load/petclinic/benchmark.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@
4141
"VARIANT": "iast",
4242
"JAVA_OPTS": "-javaagent:${TRACER} -Ddd.iast.enabled=true"
4343
}
44+
},
45+
"code_origins": {
46+
"env": {
47+
"VARIANT": "code_origins",
48+
"JAVA_OPTS": "-javaagent:${TRACER} -Ddd.code.origin.for.spans.enabled=true"
49+
}
4450
}
4551
}
4652
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package datadog.trace.bootstrap.instrumentation.decorator;
22

33
import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS;
4+
import static datadog.trace.api.datastreams.DataStreamsContext.fromTags;
45
import static datadog.trace.api.gateway.Events.EVENTS;
56
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.traceConfig;
67
import static datadog.trace.bootstrap.instrumentation.decorator.http.HttpResourceDecorator.HTTP_RESOURCE_DECORATOR;
@@ -148,7 +149,7 @@ public AgentSpan startSpan(
148149
}
149150
AgentPropagation.ContextVisitor<REQUEST_CARRIER> getter = getter();
150151
if (null != carrier && null != getter) {
151-
tracer().getDataStreamsMonitoring().setCheckpoint(span, SERVER_PATHWAY_EDGE_TAGS, 0, 0);
152+
tracer().getDataStreamsMonitoring().setCheckpoint(span, fromTags(SERVER_PATHWAY_EDGE_TAGS));
152153
}
153154
return span;
154155
}

dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/java/concurrent/ExecutorInstrumentationUtils.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package datadog.trace.bootstrap.instrumentation.java.concurrent;
22

3-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope;
3+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
4+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.isAsyncPropagationEnabled;
45
import static datadog.trace.bootstrap.instrumentation.java.concurrent.ExcludeFilter.ExcludeType;
56

67
import datadog.trace.bootstrap.ContextStore;
7-
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
88
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
99
import java.util.concurrent.Executor;
1010
import org.slf4j.Logger;
@@ -26,14 +26,10 @@ public static boolean shouldAttachStateToTask(final Object task, final Executor
2626
if (task == null) {
2727
return false;
2828
}
29-
3029
if (ExcludeFilter.exclude(ExcludeType.EXECUTOR, task)) {
3130
return false;
3231
}
33-
34-
final AgentScope scope = activeScope();
35-
36-
return scope != null && scope.isAsyncPropagating();
32+
return activeSpan() != null && isAsyncPropagationEnabled();
3733
}
3834

3935
/**

dd-java-agent/agent-crashtracking/src/main/java/com/datadog/crashtracking/OOMENotifierScriptInitializer.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private static boolean copyOOMEscript(Path scriptPath) {
116116
private static class ScriptCleanupVisitor implements FileVisitor<Path> {
117117
private static final Pattern PID_PATTERN = Pattern.compile(".*?" + PID_PREFIX + "(\\d+)");
118118

119-
private final Set<String> pidSet = PidHelper.getJavaPids();
119+
private Set<String> pidSet;
120120

121121
static void run(Path dir) {
122122
try {
@@ -145,9 +145,14 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
145145
Matcher matcher = PID_PATTERN.matcher(fileName);
146146
if (matcher.find()) {
147147
String pid = matcher.group(1);
148-
if (pid != null && !pid.equals(PidHelper.getPid()) && !this.pidSet.contains(pid)) {
149-
LOG.debug("Cleaning process specific file {}", file);
150-
Files.delete(file);
148+
if (pid != null && !pid.equals(PidHelper.getPid())) {
149+
if (this.pidSet == null) {
150+
this.pidSet = PidHelper.getJavaPids(); // only fork jps when required
151+
}
152+
if (!this.pidSet.contains(pid)) {
153+
LOG.debug("Cleaning process specific file {}", file);
154+
Files.delete(file);
155+
}
151156
}
152157
}
153158
return CONTINUE;

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/codeorigin/DefaultCodeOriginRecorder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private CodeOriginProbe createProbe(
121121

122122
// i think this check is unnecessary at this point time but leaving for now to be safe
123123
if (installed == null) {
124-
if (Config.get().isDynamicInstrumentationEnabled()) {
124+
if (Config.get().isDistributedDebuggerEnabled()) {
125125
registerLogProbe(probe);
126126
}
127127
installProbes();

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/LogProbe.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -701,15 +701,19 @@ public void commit(CapturedContext lineContext, int line) {
701701
shouldCommit = true;
702702
}
703703
if (shouldCommit) {
704-
if (isCaptureSnapshot()) {
705-
// freeze context just before commit because line probes have only one context
706-
Duration timeout =
707-
Duration.of(Config.get().getDynamicInstrumentationCaptureTimeout(), ChronoUnit.MILLIS);
708-
lineContext.freeze(new TimeoutChecker(timeout));
709-
snapshot.addLine(lineContext, line);
704+
incrementBudget();
705+
if (inBudget()) {
706+
if (isCaptureSnapshot()) {
707+
// freeze context just before commit because line probes have only one context
708+
Duration timeout =
709+
Duration.of(
710+
Config.get().getDynamicInstrumentationCaptureTimeout(), ChronoUnit.MILLIS);
711+
lineContext.freeze(new TimeoutChecker(timeout));
712+
snapshot.addLine(lineContext, line);
713+
}
714+
commitSnapshot(snapshot, sink);
715+
return;
710716
}
711-
commitSnapshot(snapshot, sink);
712-
return;
713717
}
714718
sink.skipSnapshot(id, DebuggerContext.SkipCause.CONDITION);
715719
}

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/origin/CodeOriginTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public void before() {
8888
tracer.addTraceInterceptor(traceInterceptor);
8989

9090
setFieldInConfig(Config.get(), "debuggerCodeOriginEnabled", true);
91+
setFieldInConfig(Config.get(), "distributedDebuggerEnabled", true);
9192
setFieldInConfig(InstrumenterConfig.get(), "codeOriginEnabled", true);
9293
}
9394

0 commit comments

Comments
 (0)