Skip to content

Commit 22799cb

Browse files
authored
Merge branch 'master' into alejandro.gonzalez/conditional-lfi-capability
2 parents 17566b6 + 5fb00dc commit 22799cb

File tree

20 files changed

+475
-28
lines changed

20 files changed

+475
-28
lines changed

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

+19-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import datadog.trace.civisibility.ci.CIProviderInfo;
1010
import datadog.trace.civisibility.ci.CITagsProvider;
1111
import datadog.trace.civisibility.ci.PullRequestInfo;
12+
import datadog.trace.civisibility.ci.env.CiEnvironment;
1213
import datadog.trace.civisibility.codeowners.Codeowners;
1314
import datadog.trace.civisibility.codeowners.CodeownersProvider;
1415
import datadog.trace.civisibility.codeowners.NoCodeowners;
@@ -39,6 +40,7 @@
3940
import java.nio.file.Paths;
4041
import java.util.Map;
4142
import java.util.concurrent.CompletableFuture;
43+
import javax.annotation.Nonnull;
4244
import javax.annotation.Nullable;
4345
import org.slf4j.Logger;
4446
import org.slf4j.LoggerFactory;
@@ -64,7 +66,7 @@ public class CiVisibilityRepoServices {
6466
ciProvider = ciProviderInfo.getProvider();
6567

6668
CIInfo ciInfo = ciProviderInfo.buildCIInfo();
67-
PullRequestInfo pullRequestInfo = ciProviderInfo.buildPullRequestInfo();
69+
PullRequestInfo pullRequestInfo = buildPullRequestInfo(services.environment, ciProviderInfo);
6870

6971
if (pullRequestInfo.isNotEmpty()) {
7072
LOGGER.info("PR detected: {}", pullRequestInfo);
@@ -107,6 +109,22 @@ public class CiVisibilityRepoServices {
107109
}
108110
}
109111

112+
@Nonnull
113+
private static PullRequestInfo buildPullRequestInfo(
114+
CiEnvironment environment, CIProviderInfo ciProviderInfo) {
115+
PullRequestInfo ciProviderPrInfo = ciProviderInfo.buildPullRequestInfo();
116+
if (ciProviderPrInfo.isNotEmpty()) {
117+
return ciProviderPrInfo;
118+
}
119+
120+
// could not get PR info from CI provider,
121+
// check if it was set manually
122+
return new PullRequestInfo(
123+
null,
124+
environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA),
125+
environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA));
126+
}
127+
110128
private static String getRepoRoot(CIInfo ciInfo, GitClient.Factory gitClientFactory) {
111129
String ciWorkspace = ciInfo.getNormalizedCiWorkspace();
112130
if (Strings.isNotBlank(ciWorkspace)) {

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public class CiVisibilityServices {
6767
final CiVisibilityMetricCollector metricCollector;
6868
final BackendApi backendApi;
6969
final JvmInfoFactory jvmInfoFactory;
70+
final CiEnvironment environment;
7071
final CIProviderInfoFactory ciProviderInfoFactory;
7172
final GitClient.Factory gitClientFactory;
7273
final GitInfoProvider gitInfoProvider;
@@ -87,7 +88,7 @@ public class CiVisibilityServices {
8788
this.jvmInfoFactory = new CachingJvmInfoFactory(config, new JvmInfoFactoryImpl());
8889
this.gitClientFactory = buildGitClientFactory(config, metricCollector);
8990

90-
CiEnvironment environment = buildCiEnvironment(config, sco);
91+
this.environment = buildCiEnvironment(config, sco);
9192
this.ciProviderInfoFactory = new CIProviderInfoFactory(config, environment);
9293
this.linesResolver =
9394
new BestEffortLinesResolver(new CompilerAidedLinesResolver(), new ByteCodeLinesResolver());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package datadog.trace.civisibility;
2+
3+
/** Constants that are not part of the internal (or external) API. */
4+
public interface Constants {
5+
6+
/**
7+
* Indicates that early flakiness detection feature was aborted in a test session because too many
8+
* test cases were considered new.
9+
*/
10+
String EFD_ABORT_REASON_FAULTY = "faulty";
11+
12+
String CI_VISIBILITY_INSTRUMENTATION_NAME = "civisibility";
13+
14+
/**
15+
* Env var containing SHA of the feature branch HEAD commit when running in a PR. Set manually if
16+
* the necessary data is not exposed by the CI provider
17+
*/
18+
String DDCI_PULL_REQUEST_SOURCE_SHA = "DDCI_PULL_REQUEST_SOURCE_SHA";
19+
20+
/**
21+
* Env var containing SHA of the target branch HEAD commit when running in a PR. Set manually if
22+
* the necessary data is not exposed by the CI provider
23+
*/
24+
String DDCI_PULL_REQUEST_TARGET_SHA = "DDCI_PULL_REQUEST_TARGET_SHA";
25+
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.trace.civisibility.domain;
22

3-
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
3+
import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME;
44

55
import datadog.trace.api.Config;
66
import datadog.trace.api.civisibility.telemetry.CiVisibilityCountMetric;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package datadog.trace.civisibility.domain;
22

33
import static datadog.trace.api.TracePropagationStyle.NONE;
4-
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
4+
import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME;
55

66
import datadog.trace.api.Config;
77
import datadog.trace.api.DDTraceId;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package datadog.trace.civisibility.domain;
22

33
import static datadog.json.JsonMapper.toJson;
4-
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
54
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
5+
import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME;
66

77
import datadog.trace.api.Config;
88
import datadog.trace.api.DDTraceId;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package datadog.trace.civisibility.domain;
22

33
import static datadog.json.JsonMapper.toJson;
4-
import static datadog.trace.api.civisibility.CIConstants.CI_VISIBILITY_INSTRUMENTATION_NAME;
54
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
5+
import static datadog.trace.civisibility.Constants.CI_VISIBILITY_INSTRUMENTATION_NAME;
66

77
import datadog.trace.api.Config;
88
import datadog.trace.api.civisibility.DDTestSuite;

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import datadog.context.propagation.CarrierSetter;
77
import datadog.trace.api.Config;
88
import datadog.trace.api.DDTags;
9-
import datadog.trace.api.civisibility.CIConstants;
109
import datadog.trace.api.civisibility.domain.BuildModuleLayout;
1110
import datadog.trace.api.civisibility.domain.BuildModuleSettings;
1211
import datadog.trace.api.civisibility.domain.BuildSessionSettings;
@@ -16,6 +15,7 @@
1615
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1716
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
1817
import datadog.trace.bootstrap.instrumentation.api.Tags;
18+
import datadog.trace.civisibility.Constants;
1919
import datadog.trace.civisibility.codeowners.Codeowners;
2020
import datadog.trace.civisibility.config.ExecutionSettings;
2121
import datadog.trace.civisibility.coverage.percentage.CoverageCalculator;
@@ -269,7 +269,7 @@ private SignalResponse onModuleExecutionResultReceived(ModuleExecutionResult res
269269
if (result.isEarlyFlakeDetectionEnabled()) {
270270
setTag(Tags.TEST_EARLY_FLAKE_ENABLED, true);
271271
if (result.isEarlyFlakeDetectionFaulty()) {
272-
setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, CIConstants.EFD_ABORT_REASON_FAULTY);
272+
setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, Constants.EFD_ABORT_REASON_FAULTY);
273273
}
274274
}
275275

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
import datadog.trace.api.Config;
66
import datadog.trace.api.DDTags;
7-
import datadog.trace.api.civisibility.CIConstants;
87
import datadog.trace.api.civisibility.domain.BuildModuleLayout;
98
import datadog.trace.api.civisibility.domain.BuildSessionSettings;
109
import datadog.trace.api.civisibility.domain.JavaAgent;
@@ -14,6 +13,7 @@
1413
import datadog.trace.api.civisibility.telemetry.tag.Provider;
1514
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1615
import datadog.trace.bootstrap.instrumentation.api.Tags;
16+
import datadog.trace.civisibility.Constants;
1717
import datadog.trace.civisibility.codeowners.Codeowners;
1818
import datadog.trace.civisibility.config.ExecutionSettings;
1919
import datadog.trace.civisibility.config.ExecutionSettingsFactory;
@@ -208,8 +208,7 @@ public BuildSessionSettings getSettings() {
208208

209209
@Override
210210
protected Collection<TagValue> additionalTelemetryTags() {
211-
if (CIConstants.EFD_ABORT_REASON_FAULTY.equals(
212-
span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) {
211+
if (Constants.EFD_ABORT_REASON_FAULTY.equals(span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) {
213212
return Collections.singleton(EarlyFlakeDetectionAbortReason.FAULTY);
214213
}
215214
return Collections.emptySet();

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import datadog.trace.api.Config;
44
import datadog.trace.api.DDTags;
5-
import datadog.trace.api.civisibility.CIConstants;
65
import datadog.trace.api.civisibility.config.LibraryCapability;
76
import datadog.trace.api.civisibility.config.TestIdentifier;
87
import datadog.trace.api.civisibility.config.TestSourceData;
@@ -14,6 +13,7 @@
1413
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1514
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
1615
import datadog.trace.bootstrap.instrumentation.api.Tags;
16+
import datadog.trace.civisibility.Constants;
1717
import datadog.trace.civisibility.codeowners.Codeowners;
1818
import datadog.trace.civisibility.config.EarlyFlakeDetectionSettings;
1919
import datadog.trace.civisibility.config.ExecutionSettings;
@@ -150,7 +150,7 @@ public void end(@Nullable Long endTime) {
150150
if (earlyFlakeDetectionSettings.isEnabled()) {
151151
setTag(Tags.TEST_EARLY_FLAKE_ENABLED, true);
152152
if (executionStrategy.isEFDLimitReached()) {
153-
setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, CIConstants.EFD_ABORT_REASON_FAULTY);
153+
setTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON, Constants.EFD_ABORT_REASON_FAULTY);
154154
}
155155
}
156156

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

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import datadog.trace.api.Config;
44
import datadog.trace.api.DDTags;
5-
import datadog.trace.api.civisibility.CIConstants;
65
import datadog.trace.api.civisibility.config.LibraryCapability;
76
import datadog.trace.api.civisibility.coverage.CoverageStore;
87
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector;
@@ -11,6 +10,7 @@
1110
import datadog.trace.api.civisibility.telemetry.tag.Provider;
1211
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1312
import datadog.trace.bootstrap.instrumentation.api.Tags;
13+
import datadog.trace.civisibility.Constants;
1414
import datadog.trace.civisibility.codeowners.Codeowners;
1515
import datadog.trace.civisibility.decorator.TestDecorator;
1616
import datadog.trace.civisibility.domain.AbstractTestSession;
@@ -102,8 +102,7 @@ private void propagateModuleTags(AgentSpan moduleSpan) {
102102

103103
@Override
104104
protected Collection<TagValue> additionalTelemetryTags() {
105-
if (CIConstants.EFD_ABORT_REASON_FAULTY.equals(
106-
span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) {
105+
if (Constants.EFD_ABORT_REASON_FAULTY.equals(span.getTag(Tags.TEST_EARLY_FLAKE_ABORT_REASON))) {
107106
return Collections.singleton(EarlyFlakeDetectionAbortReason.FAULTY);
108107
}
109108
return Collections.emptySet();

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

+1
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public final class GeneralConfig {
9494
public static final String AGENTLESS_LOG_SUBMISSION_LEVEL = "agentless.log.submission.level";
9595
public static final String AGENTLESS_LOG_SUBMISSION_URL = "agentless.log.submission.url";
9696
public static final String APM_TRACING_ENABLED = "apm.tracing.enabled";
97+
public static final String JDK_SOCKET_ENABLED = "jdk.socket.enabled";
9798

9899
private GeneralConfig() {}
99100
}

gradle/java_no_deps.gradle

+8-2
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,15 @@ if (project.hasProperty('minJavaVersionForTests') && project.getProperty('minJav
5959
targetCompatibility = version
6060
}
6161

62+
// "socket-utils" is only set to compileOnly because the implementation dependency incorrectly adds Java17 classes to all jar prefixes.
63+
// This causes the AgentJarIndex to search for other non-Java17 classes in the wrong prefix location and fail to resolve class names.
6264
dependencies {
63-
compileOnly files(project.sourceSets."main_$name".compileClasspath)
64-
implementation files(project.sourceSets."main_$name".output)
65+
if ("${project.projectDir}".endsWith("socket-utils")) {
66+
compileOnly files(project.sourceSets."main_$name".output)
67+
} else {
68+
compileOnly files(project.sourceSets."main_$name".compileClasspath)
69+
implementation files(project.sourceSets."main_$name".output)
70+
}
6571
}
6672

6773
jar {

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

+10
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,8 @@ public static String getHostName() {
563563
private final boolean apmTracingEnabled;
564564
private final Set<String> experimentalFeaturesEnabled;
565565

566+
private final boolean jdkSocketEnabled;
567+
566568
// Read order: System Properties -> Env Variables, [-> properties file], [-> default value]
567569
private Config() {
568570
this(ConfigProvider.createDefault());
@@ -1959,6 +1961,8 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
19591961

19601962
this.apmTracingEnabled = configProvider.getBoolean(GeneralConfig.APM_TRACING_ENABLED, true);
19611963

1964+
this.jdkSocketEnabled = configProvider.getBoolean(JDK_SOCKET_ENABLED, true);
1965+
19621966
log.debug("New instance: {}", this);
19631967
}
19641968

@@ -3537,6 +3541,10 @@ public boolean isApmTracingEnabled() {
35373541
return apmTracingEnabled;
35383542
}
35393543

3544+
public boolean isJdkSocketEnabled() {
3545+
return jdkSocketEnabled;
3546+
}
3547+
35403548
/** @return A map of tags to be applied only to the local application root span. */
35413549
public Map<String, Object> getLocalRootSpanTags() {
35423550
final Map<String, String> runtimeTags = getRuntimeTags();
@@ -4784,6 +4792,8 @@ public String toString() {
47844792
+ dataJobsCommandPattern
47854793
+ ", apmTracingEnabled="
47864794
+ apmTracingEnabled
4795+
+ ", jdkSocketEnabled="
4796+
+ jdkSocketEnabled
47874797
+ ", cloudRequestPayloadTagging="
47884798
+ cloudRequestPayloadTagging
47894799
+ ", cloudResponsePayloadTagging="

internal-api/src/main/java/datadog/trace/api/civisibility/CIConstants.java

-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
11
package datadog.trace.api.civisibility;
22

33
public interface CIConstants {
4-
/**
5-
* Indicates that early flakiness detection feature was aborted in a test session because too many
6-
* test cases were considered new.
7-
*/
8-
String EFD_ABORT_REASON_FAULTY = "faulty";
94

105
String SELENIUM_BROWSER_DRIVER = "selenium";
116

12-
String CI_VISIBILITY_INSTRUMENTATION_NAME = "civisibility";
13-
147
String FAIL_FAST_TEST_ORDER = "FAILFAST";
158

169
String CIAPP_TEST_ORIGIN = "ciapp-test";

internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy

+3
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import static datadog.trace.api.config.GeneralConfig.GLOBAL_TAGS
5151
import static datadog.trace.api.config.GeneralConfig.HEALTH_METRICS_ENABLED
5252
import static datadog.trace.api.config.GeneralConfig.HEALTH_METRICS_STATSD_HOST
5353
import static datadog.trace.api.config.GeneralConfig.HEALTH_METRICS_STATSD_PORT
54+
import static datadog.trace.api.config.GeneralConfig.JDK_SOCKET_ENABLED
5455
import static datadog.trace.api.config.GeneralConfig.PERF_METRICS_ENABLED
5556
import static datadog.trace.api.config.GeneralConfig.SERVICE_NAME
5657
import static datadog.trace.api.config.GeneralConfig.SITE
@@ -261,6 +262,7 @@ class ConfigTest extends DDSpecification {
261262
prop.setProperty(DYNAMIC_INSTRUMENTATION_EXCLUDE_FILES, "exclude file")
262263
prop.setProperty(EXCEPTION_REPLAY_ENABLED, "true")
263264
prop.setProperty(TRACE_X_DATADOG_TAGS_MAX_LENGTH, "128")
265+
prop.setProperty(JDK_SOCKET_ENABLED, "false")
264266

265267
when:
266268
Config config = Config.get(prop)
@@ -354,6 +356,7 @@ class ConfigTest extends DDSpecification {
354356
config.dynamicInstrumentationInstrumentTheWorld == true
355357
config.dynamicInstrumentationExcludeFiles == "exclude file"
356358
config.debuggerExceptionEnabled == true
359+
config.jdkSocketEnabled == false
357360

358361
config.xDatadogTagsMaxLength == 128
359362
}

utils/socket-utils/build.gradle

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,31 @@
1+
ext {
2+
minJavaVersionForTests = JavaVersion.VERSION_17
3+
}
4+
15
apply from: "$rootDir/gradle/java.gradle"
6+
apply plugin: "idea"
7+
8+
[compileMain_java17Java, compileTestJava].each {
9+
it.configure {
10+
setJavaVersion(it, 17)
11+
sourceCompatibility = JavaVersion.VERSION_1_8
12+
targetCompatibility = JavaVersion.VERSION_1_8
13+
}
14+
}
215

316
dependencies {
417
implementation libs.slf4j
518
implementation project(':internal-api')
19+
implementation libs.jnr.unixsocket
20+
testImplementation files(sourceSets.main_java17.output)
21+
}
22+
23+
forbiddenApisMain_java17 {
24+
failOnMissingClasses = false
25+
}
626

7-
implementation group: 'com.github.jnr', name: 'jnr-unixsocket', version: libs.versions.jnr.unixsocket.get()
27+
idea {
28+
module {
29+
jdkName = '17'
30+
}
831
}

0 commit comments

Comments
 (0)