Skip to content

Commit d77fdfa

Browse files
committed
Merge remote-tracking branch 'origin/master' into seth.samuel/DBMON-4656-mysql-jdbc
2 parents 524252d + 70c9598 commit d77fdfa

File tree

86 files changed

+6897
-3035
lines changed

Some content is hidden

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

86 files changed

+6897
-3035
lines changed

.circleci/config.continue.yml.j2

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,7 @@ jobs:
782782
name: Gather muzzle tasks
783783
command: >-
784784
SKIP_BUILDSCAN="true"
785+
GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xmx2G -Xms2G -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'"
785786
./gradlew writeMuzzleTasksToFile
786787
<< pipeline.parameters.gradle_flags >>
787788
--max-workers=3
@@ -1434,6 +1435,7 @@ build_test_jobs: &build_test_jobs
14341435
{% for jdk in all_jdks %}
14351436
- "test_{{ jdk }}"
14361437
{% endfor %}
1438+
- muzzle
14371439
- profiling
14381440
- debugger
14391441
- system-tests

.gitlab-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ package-oci:
216216
onboarding_tests_installer:
217217
parallel:
218218
matrix:
219-
- ONBOARDING_FILTER_WEBLOG: [test-app-java, test-app-java-container, test-app-java-container-jdk15, test-app-java-alpine-libgcc]
219+
- ONBOARDING_FILTER_WEBLOG: [test-app-java, test-app-java-container, test-app-java-container-jdk15, test-app-java-alpine]
220220
SCENARIO: [ SIMPLE_INSTALLER_AUTO_INJECTION, SIMPLE_AUTO_INJECTION_PROFILING ]
221221
- ONBOARDING_FILTER_WEBLOG: [test-app-java-buildpack]
222222
SCENARIO: [ SIMPLE_INSTALLER_AUTO_INJECTION ]

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestModule.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package datadog.trace.civisibility.domain;
22

3-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
3+
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
44

55
import datadog.trace.api.Config;
66
import datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric;
77
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
88
import datadog.trace.api.civisibility.telemetry.tag.EventType;
99
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
10+
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
1011
import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes;
1112
import datadog.trace.bootstrap.instrumentation.api.Tags;
1213
import datadog.trace.civisibility.codeowners.Codeowners;
@@ -49,12 +50,18 @@ public AbstractTestModule(
4950
this.methodLinesResolver = methodLinesResolver;
5051
this.onSpanFinish = onSpanFinish;
5152

53+
AgentTracer.SpanBuilder spanBuilder =
54+
AgentTracer.get()
55+
.buildSpan(
56+
CI_VISIBILITY_INSTRUMENTATION_NAME, testDecorator.component() + ".test_module")
57+
.asChildOf(sessionSpanContext);
58+
5259
if (startTime != null) {
53-
span = startSpan(testDecorator.component() + ".test_module", sessionSpanContext, startTime);
54-
} else {
55-
span = startSpan(testDecorator.component() + ".test_module", sessionSpanContext);
60+
spanBuilder = spanBuilder.withStartTimestamp(startTime);
5661
}
5762

63+
span = spanBuilder.start();
64+
5865
span.setSpanType(InternalSpanTypes.TEST_MODULE_END);
5966
span.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_TEST_MODULE);
6067

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/AbstractTestSession.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package datadog.trace.civisibility.domain;
22

3-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
3+
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
44

55
import datadog.trace.api.Config;
6+
import datadog.trace.api.DDTraceId;
7+
import datadog.trace.api.IdGenerationStrategy;
68
import datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric;
79
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
810
import datadog.trace.api.civisibility.telemetry.TagValue;
@@ -26,6 +28,7 @@
2628
import javax.annotation.Nullable;
2729

2830
public abstract class AbstractTestSession {
31+
2932
protected final Provider ciProvider;
3033
protected final InstrumentationType instrumentationType;
3134
protected final AgentSpan span;
@@ -56,12 +59,24 @@ public AbstractTestSession(
5659
this.codeowners = codeowners;
5760
this.methodLinesResolver = methodLinesResolver;
5861

62+
// CI Test Cycle protocol requires session's trace ID and span ID to be the same
63+
IdGenerationStrategy idGenerationStrategy = config.getIdGenerationStrategy();
64+
DDTraceId traceId = idGenerationStrategy.generateTraceId();
65+
AgentSpan.Context traceContext = new TraceContext(traceId);
66+
67+
AgentTracer.SpanBuilder spanBuilder =
68+
AgentTracer.get()
69+
.buildSpan(
70+
CI_VISIBILITY_INSTRUMENTATION_NAME, testDecorator.component() + ".test_session")
71+
.asChildOf(traceContext)
72+
.withSpanId(traceId.toLong());
73+
5974
if (startTime != null) {
60-
span = startSpan(testDecorator.component() + ".test_session", startTime);
61-
} else {
62-
span = startSpan(testDecorator.component() + ".test_session");
75+
spanBuilder = spanBuilder.withStartTimestamp(startTime);
6376
}
6477

78+
span = spanBuilder.start();
79+
6580
span.setSpanType(InternalSpanTypes.TEST_SESSION_END);
6681
span.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_TEST_SESSION);
6782
span.setTag(Tags.TEST_SESSION_ID, span.getTraceId());

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/BuildSystemSession.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import datadog.trace.api.civisibility.domain.BuildModuleLayout;
44
import datadog.trace.api.civisibility.domain.BuildSessionSettings;
55
import datadog.trace.api.civisibility.domain.JavaAgent;
6+
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
67
import datadog.trace.civisibility.config.JvmInfo;
78
import java.nio.file.Path;
89
import java.util.Collection;
@@ -25,6 +26,8 @@ BuildSystemModule testModuleStart(
2526
@Nullable Collection<Path> classpath,
2627
@Nullable JavaAgent jacocoAgent);
2728

29+
AgentSpan testTaskStart(String taskName);
30+
2831
BuildSessionSettings getSettings();
2932

3033
interface Factory {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package datadog.trace.civisibility.domain;
22

3+
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
45
import static datadog.trace.util.Strings.toJson;
56

@@ -85,7 +86,7 @@ public TestImpl(
8586

8687
AgentTracer.SpanBuilder spanBuilder =
8788
AgentTracer.get()
88-
.buildSpan(testDecorator.component() + ".test")
89+
.buildSpan(CI_VISIBILITY_INSTRUMENTATION_NAME, testDecorator.component() + ".test")
8990
.ignoreActiveSpan()
9091
.asChildOf(null)
9192
.withRequestContextData(RequestContextSlot.CI_VISIBILITY, context);

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/TestSuiteImpl.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package datadog.trace.civisibility.domain;
22

3+
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
34
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
4-
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
55

66
import datadog.trace.api.Config;
77
import datadog.trace.api.civisibility.DDTestSuite;
@@ -78,12 +78,18 @@ public TestSuiteImpl(
7878
this.coverageStoreFactory = coverageStoreFactory;
7979
this.onSpanFinish = onSpanFinish;
8080

81+
AgentTracer.SpanBuilder spanBuilder =
82+
AgentTracer.get()
83+
.buildSpan(
84+
CI_VISIBILITY_INSTRUMENTATION_NAME, testDecorator.component() + ".test_suite")
85+
.asChildOf(moduleSpanContext);
86+
8187
if (startTime != null) {
82-
span = startSpan(testDecorator.component() + ".test_suite", moduleSpanContext, startTime);
83-
} else {
84-
span = startSpan(testDecorator.component() + ".test_suite", moduleSpanContext);
88+
spanBuilder = spanBuilder.withStartTimestamp(startTime);
8589
}
8690

91+
span = spanBuilder.start();
92+
8793
span.setSpanType(InternalSpanTypes.TEST_SUITE_END);
8894
span.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_TEST_SUITE);
8995

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package datadog.trace.civisibility.domain;
2+
3+
import datadog.trace.api.DDSpanId;
4+
import datadog.trace.api.DDTraceId;
5+
import datadog.trace.api.sampling.PrioritySampling;
6+
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
7+
import datadog.trace.bootstrap.instrumentation.api.AgentTraceCollector;
8+
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
9+
import datadog.trace.bootstrap.instrumentation.api.PathwayContext;
10+
import java.util.Collections;
11+
import java.util.Map;
12+
13+
/**
14+
* Test session spans need to have trace ID and span ID which are identical (CI Test Cycle protocol
15+
* requirement), so this dummy context class is used as a crutch to supply a specific trace ID when
16+
* creating a session span.
17+
*/
18+
public class TraceContext implements AgentSpan.Context {
19+
20+
private final DDTraceId traceId;
21+
22+
public TraceContext(DDTraceId traceId) {
23+
this.traceId = traceId;
24+
}
25+
26+
@Override
27+
public DDTraceId getTraceId() {
28+
return traceId;
29+
}
30+
31+
@Override
32+
public long getSpanId() {
33+
return DDSpanId.ZERO;
34+
}
35+
36+
@Override
37+
public AgentTraceCollector getTraceCollector() {
38+
return AgentTracer.NoopAgentTraceCollector.INSTANCE;
39+
}
40+
41+
@Override
42+
public int getSamplingPriority() {
43+
return PrioritySampling.UNSET;
44+
}
45+
46+
@Override
47+
public Iterable<Map.Entry<String, String>> baggageItems() {
48+
return Collections.emptyList();
49+
}
50+
51+
@Override
52+
public PathwayContext getPathwayContext() {
53+
return AgentTracer.NoopPathwayContext.INSTANCE;
54+
}
55+
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/domain/buildsystem/BuildSystemSessionImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package datadog.trace.civisibility.domain.buildsystem;
22

3+
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
4+
35
import datadog.trace.api.Config;
46
import datadog.trace.api.DDTags;
57
import datadog.trace.api.civisibility.CIConstants;
@@ -202,6 +204,11 @@ public BuildSystemModuleImpl testModuleStart(
202204
this::onModuleFinish);
203205
}
204206

207+
@Override
208+
public AgentSpan testTaskStart(String taskName) {
209+
return startSpan("ci_visibility", taskName, span.context());
210+
}
211+
205212
private void onModuleFinish(AgentSpan moduleSpan) {
206213
// multiple modules can finish in parallel
207214
synchronized (tagPropagationLock) {

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/events/BuildEventsHandlerImpl.java

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import datadog.trace.api.civisibility.domain.BuildSessionSettings;
66
import datadog.trace.api.civisibility.domain.JavaAgent;
77
import datadog.trace.api.civisibility.events.BuildEventsHandler;
8+
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
89
import datadog.trace.bootstrap.instrumentation.api.Tags;
910
import datadog.trace.civisibility.config.JvmInfo;
1011
import datadog.trace.civisibility.config.JvmInfoFactory;
@@ -23,7 +24,10 @@ public class BuildEventsHandlerImpl<SessionKey> implements BuildEventsHandler<Se
2324
private final ConcurrentMap<SessionKey, BuildSystemSession> inProgressTestSessions =
2425
new ConcurrentHashMap<>();
2526

26-
private final ConcurrentMap<TestModuleDescriptor<SessionKey>, BuildSystemModule>
27+
private final ConcurrentMap<BuildTaskDescriptor<SessionKey>, AgentSpan> inProgressBuildTasks =
28+
new ConcurrentHashMap<>();
29+
30+
private final ConcurrentMap<BuildTaskDescriptor<SessionKey>, BuildSystemModule>
2731
inProgressTestModules = new ConcurrentHashMap<>();
2832

2933
private final BuildSystemSession.Factory sessionFactory;
@@ -79,6 +83,47 @@ public void onTestSessionFinish(final SessionKey sessionKey) {
7983
testSession.end(null);
8084
}
8185

86+
@Override
87+
public void onBuildTaskStart(
88+
SessionKey sessionKey, String taskName, Map<String, Object> additionalTags) {
89+
BuildSystemSession testSession = inProgressTestSessions.get(sessionKey);
90+
if (testSession == null) {
91+
throw new IllegalStateException("Could not find session span for key: " + sessionKey);
92+
}
93+
AgentSpan buildTask = testSession.testTaskStart(taskName);
94+
for (Map.Entry<String, Object> e : additionalTags.entrySet()) {
95+
buildTask.setTag(e.getKey(), e.getValue());
96+
}
97+
inProgressBuildTasks.put(new BuildTaskDescriptor<>(sessionKey, taskName), buildTask);
98+
}
99+
100+
@Override
101+
public void onBuildTaskFail(SessionKey sessionKey, String taskName, Throwable throwable) {
102+
AgentSpan buildTask = inProgressBuildTasks.get(new BuildTaskDescriptor<>(sessionKey, taskName));
103+
if (buildTask == null) {
104+
throw new IllegalStateException(
105+
"Could not find build task span for session key "
106+
+ sessionKey
107+
+ " and task name "
108+
+ taskName);
109+
}
110+
buildTask.setError(true);
111+
buildTask.addThrowable(throwable);
112+
}
113+
114+
@Override
115+
public void onBuildTaskFinish(SessionKey sessionKey, String taskName) {
116+
AgentSpan buildTask = inProgressBuildTasks.get(new BuildTaskDescriptor<>(sessionKey, taskName));
117+
if (buildTask == null) {
118+
throw new IllegalStateException(
119+
"Could not find build task span for session key "
120+
+ sessionKey
121+
+ " and task name "
122+
+ taskName);
123+
}
124+
buildTask.finish();
125+
}
126+
82127
@Override
83128
public BuildModuleSettings onTestModuleStart(
84129
final SessionKey sessionKey,
@@ -104,8 +149,8 @@ public BuildModuleSettings onTestModuleStart(
104149
}
105150
}
106151

107-
TestModuleDescriptor<SessionKey> testModuleDescriptor =
108-
new TestModuleDescriptor<>(sessionKey, moduleName);
152+
BuildTaskDescriptor<SessionKey> testModuleDescriptor =
153+
new BuildTaskDescriptor<>(sessionKey, moduleName);
109154
inProgressTestModules.put(testModuleDescriptor, testModule);
110155

111156
return testModule.getSettings();
@@ -126,8 +171,8 @@ public void onTestModuleFail(
126171
}
127172

128173
private BuildSystemModule getTestModule(final SessionKey sessionKey, final String moduleName) {
129-
TestModuleDescriptor<SessionKey> testModuleDescriptor =
130-
new TestModuleDescriptor<>(sessionKey, moduleName);
174+
BuildTaskDescriptor<SessionKey> testModuleDescriptor =
175+
new BuildTaskDescriptor<>(sessionKey, moduleName);
131176
BuildSystemModule testModule = inProgressTestModules.get(testModuleDescriptor);
132177
if (testModule == null) {
133178
throw new IllegalStateException(
@@ -138,8 +183,8 @@ private BuildSystemModule getTestModule(final SessionKey sessionKey, final Strin
138183

139184
@Override
140185
public void onTestModuleFinish(SessionKey sessionKey, String moduleName) {
141-
TestModuleDescriptor<SessionKey> testModuleDescriptor =
142-
new TestModuleDescriptor<>(sessionKey, moduleName);
186+
BuildTaskDescriptor<SessionKey> testModuleDescriptor =
187+
new BuildTaskDescriptor<>(sessionKey, moduleName);
143188
BuildSystemModule testModule = inProgressTestModules.remove(testModuleDescriptor);
144189
if (testModule == null) {
145190
throw new IllegalStateException(

0 commit comments

Comments
 (0)