Skip to content

Commit 6f06fda

Browse files
feat: synchronize on span propagation
1 parent 24c1575 commit 6f06fda

File tree

10 files changed

+39
-24
lines changed

10 files changed

+39
-24
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public abstract class AbstractTestModule {
3030
protected final Codeowners codeowners;
3131
protected final LinesResolver linesResolver;
3232
private final Consumer<AgentSpan> onSpanFinish;
33+
protected final Object tagPropagationLock = new Object();
3334

3435
public AbstractTestModule(
3536
AgentSpanContext sessionSpanContext,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public abstract class AbstractTestSession {
4646
protected final SourcePathResolver sourcePathResolver;
4747
protected final Codeowners codeowners;
4848
protected final LinesResolver linesResolver;
49+
protected final Object tagPropagationLock = new Object();
4950

5051
public AbstractTestSession(
5152
String projectName,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public class TestSuiteImpl implements DDTestSuite {
5656
private final boolean parallelized;
5757
private final Collection<LibraryCapability> capabilities;
5858
private final Consumer<AgentSpan> onSpanFinish;
59+
private final Object tagPropagationLock = new Object();
5960

6061
public TestSuiteImpl(
6162
AgentSpanContext moduleSpanContext,
@@ -264,6 +265,6 @@ public TestImpl testStart(
264265
coverageStoreFactory,
265266
executionResults,
266267
capabilities,
267-
SpanUtils.propagateCiVisibilityTagsTo(span));
268+
SpanUtils.propagateStatusTo(span, tagPropagationLock));
268269
}
269270
}

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,10 @@ private SignalResponse onModuleExecutionResultReceived(ModuleExecutionResult res
289289

290290
testsSkipped.add(result.getTestsSkippedTotal());
291291

292-
SpanUtils.mergeTestFrameworks(span, result.getTestFrameworks());
292+
synchronized (tagPropagationLock) {
293+
// avoids desync between read and merging
294+
SpanUtils.mergeTestFrameworks(span, result.getTestFrameworks());
295+
}
293296

294297
return AckResponse.INSTANCE;
295298
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ public class BuildSystemSessionImpl<T extends CoverageCalculator> extends Abstra
5454
private final CoverageCalculator.Factory<T> coverageCalculatorFactory;
5555
private final T coverageCalculator;
5656
private final BuildSessionSettings settings;
57-
private final Object tagPropagationLock = new Object();
5857

5958
public BuildSystemSessionImpl(
6059
String projectName,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,6 @@ public TestSuiteImpl testSuiteStart(
183183
coverageStoreFactory,
184184
executionResults,
185185
capabilities,
186-
SpanUtils.propagateCiVisibilityTagsTo(span));
186+
SpanUtils.propagateCiVisibilityTagsTo(span, tagPropagationLock));
187187
}
188188
}

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

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -82,22 +82,17 @@ public HeadlessTestModule testModuleStart(String moduleName, @Nullable Long star
8282
coverageStoreFactory,
8383
executionStrategy,
8484
capabilities,
85-
this::propagateModuleTags);
86-
}
87-
88-
private void propagateModuleTags(AgentSpan moduleSpan) {
89-
SpanUtils.propagateCiVisibilityTags(span, moduleSpan);
90-
SpanUtils.propagateTags(
91-
span,
92-
moduleSpan,
93-
Tags.TEST_CODE_COVERAGE_ENABLED,
94-
Tags.TEST_ITR_TESTS_SKIPPING_ENABLED,
95-
Tags.TEST_ITR_TESTS_SKIPPING_TYPE,
96-
Tags.TEST_ITR_TESTS_SKIPPING_COUNT,
97-
Tags.TEST_EARLY_FLAKE_ENABLED,
98-
Tags.TEST_EARLY_FLAKE_ABORT_REASON,
99-
DDTags.CI_ITR_TESTS_SKIPPED,
100-
Tags.TEST_TEST_MANAGEMENT_ENABLED);
85+
SpanUtils.propagateCiVisibilityTagsTo(
86+
span,
87+
tagPropagationLock,
88+
Tags.TEST_CODE_COVERAGE_ENABLED,
89+
Tags.TEST_ITR_TESTS_SKIPPING_ENABLED,
90+
Tags.TEST_ITR_TESTS_SKIPPING_TYPE,
91+
Tags.TEST_ITR_TESTS_SKIPPING_COUNT,
92+
Tags.TEST_EARLY_FLAKE_ENABLED,
93+
Tags.TEST_EARLY_FLAKE_ABORT_REASON,
94+
DDTags.CI_ITR_TESTS_SKIPPED,
95+
Tags.TEST_TEST_MANAGEMENT_ENABLED));
10196
}
10297

10398
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,6 @@ public TestSuiteImpl testSuiteStart(
8181
coverageStoreFactory,
8282
executionResults,
8383
Collections.emptyList(),
84-
SpanUtils.propagateCiVisibilityTagsTo(span));
84+
SpanUtils.propagateCiVisibilityTagsTo(span, tagPropagationLock));
8585
}
8686
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,6 @@ public ManualApiTestModule testModuleStart(String moduleName, @Nullable Long sta
6060
codeowners,
6161
linesResolver,
6262
coverageStoreFactory,
63-
SpanUtils.propagateCiVisibilityTagsTo(span));
63+
SpanUtils.propagateCiVisibilityTagsTo(span, tagPropagationLock));
6464
}
6565
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/utils/SpanUtils.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,23 @@
1717
public class SpanUtils {
1818
public static final Consumer<AgentSpan> DO_NOT_PROPAGATE_CI_VISIBILITY_TAGS = span -> {};
1919

20-
public static Consumer<AgentSpan> propagateCiVisibilityTagsTo(AgentSpan parentSpan) {
21-
return childSpan -> propagateCiVisibilityTags(parentSpan, childSpan);
20+
public static Consumer<AgentSpan> propagateCiVisibilityTagsTo(AgentSpan parentSpan, Object lock, String... additionalTags) {
21+
return childSpan -> {
22+
synchronized (lock) {
23+
propagateCiVisibilityTags(parentSpan, childSpan);
24+
if (additionalTags != null) {
25+
propagateTags(parentSpan, childSpan, additionalTags);
26+
}
27+
}
28+
};
29+
}
30+
31+
public static Consumer<AgentSpan> propagateStatusTo(AgentSpan parentSpan, Object lock) {
32+
return childSpan -> {
33+
synchronized (lock) {
34+
propagateStatus(parentSpan, childSpan);
35+
}
36+
};
2237
}
2338

2439
public static void propagateCiVisibilityTags(AgentSpan parentSpan, AgentSpan childSpan) {

0 commit comments

Comments
 (0)