Skip to content

Commit 28f60f7

Browse files
authored
[8.x] [Build] Fix Concurrency issue in buildparams access (elastic#117552) (elastic#119278)
* [Build] Fix Concurrency issue in buildparams access (elastic#117552) Also provide caching support for buildparams provider * Extract BuildParameterExtension public api into interface * Make tests better readable * Fix test flakyness (cherry picked from commit 1b4f5eb) # Conflicts: # build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/rest/compat/compat/AbstractYamlRestCompatTestPlugin.java * Ignore BuildParameterExtensionSpec for now * Ignore BuildParameterExtensionSpec for now
1 parent ded1d57 commit 28f60f7

File tree

14 files changed

+419
-188
lines changed

14 files changed

+419
-188
lines changed

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/PublishPluginFuncTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ class PublishPluginFuncTest extends AbstractGradleFuncTest {
439439
// scm info only added for internal builds
440440
internalBuild()
441441
buildFile << """
442-
buildParams.getGitOriginProperty().set("https://some-repo.com/repo.git")
442+
buildParams.setGitOrigin("https://some-repo.com/repo.git")
443443
apply plugin:'elasticsearch.java'
444444
apply plugin:'elasticsearch.publish'
445445

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchJavaBasePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ private static void disableTransitiveDependenciesForSourceSet(Project project, S
132132
public void configureCompile(Project project) {
133133
project.getExtensions().getExtraProperties().set("compactProfile", "full");
134134
JavaPluginExtension java = project.getExtensions().getByType(JavaPluginExtension.class);
135-
if (buildParams.getJavaToolChainSpec().isPresent()) {
135+
if (buildParams.getJavaToolChainSpec().getOrNull() != null) {
136136
java.toolchain(buildParams.getJavaToolChainSpec().get());
137137
}
138138
java.setSourceCompatibility(buildParams.getMinimumRuntimeVersion());

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/ElasticsearchTestBasePlugin.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import org.elasticsearch.gradle.OS;
1515
import org.elasticsearch.gradle.internal.conventions.util.Util;
16-
import org.elasticsearch.gradle.internal.info.BuildParameterExtension;
1716
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
1817
import org.elasticsearch.gradle.internal.test.ErrorReportingTestListener;
1918
import org.elasticsearch.gradle.internal.test.SimpleCommandLineArgumentProvider;
@@ -26,7 +25,6 @@
2625
import org.gradle.api.artifacts.Configuration;
2726
import org.gradle.api.file.FileCollection;
2827
import org.gradle.api.plugins.JavaPlugin;
29-
import org.gradle.api.provider.Property;
3028
import org.gradle.api.provider.ProviderFactory;
3129
import org.gradle.api.tasks.SourceSet;
3230
import org.gradle.api.tasks.SourceSetContainer;
@@ -55,8 +53,7 @@ public abstract class ElasticsearchTestBasePlugin implements Plugin<Project> {
5553
@Override
5654
public void apply(Project project) {
5755
project.getRootProject().getPlugins().apply(GlobalBuildInfoPlugin.class);
58-
Property<BuildParameterExtension> buildParams = loadBuildParams(project);
59-
56+
var buildParams = loadBuildParams(project);
6057
project.getPluginManager().apply(GradleTestPolicySetupPlugin.class);
6158
// for fips mode check
6259
project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionBwcSetupPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public void apply(Project project) {
7171
project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);
7272
project.getPlugins().apply(JvmToolchainsPlugin.class);
7373
toolChainService = project.getExtensions().getByType(JavaToolchainService.class);
74-
BuildParameterExtension buildParams = loadBuildParams(project).get();
74+
var buildParams = loadBuildParams(project).get();
7575
Boolean isCi = buildParams.isCi();
7676
buildParams.getBwcVersions().forPreviousUnreleased((BwcVersions.UnreleasedVersionInfo unreleasedVersion) -> {
7777
configureBwcProject(

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes;
2121
import org.elasticsearch.gradle.internal.docker.DockerSupportPlugin;
2222
import org.elasticsearch.gradle.internal.docker.DockerSupportService;
23-
import org.elasticsearch.gradle.internal.info.BuildParameterExtension;
2423
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
2524
import org.elasticsearch.gradle.util.GradleUtils;
2625
import org.gradle.api.GradleException;
@@ -49,7 +48,7 @@ public void apply(Project project) {
4948
// this is needed for isInternal
5049
project.getRootProject().getPluginManager().apply(GlobalBuildInfoPlugin.class);
5150
project.getRootProject().getPluginManager().apply(DockerSupportPlugin.class);
52-
BuildParameterExtension buildParams = loadBuildParams(project).get();
51+
var buildParams = loadBuildParams(project).get();
5352

5453
DistributionDownloadPlugin distributionDownloadPlugin = project.getPlugins().apply(DistributionDownloadPlugin.class);
5554
Provider<DockerSupportService> dockerSupport = GradleUtils.getBuildService(
@@ -61,7 +60,7 @@ public void apply(Project project) {
6160
);
6261
registerInternalDistributionResolutions(
6362
DistributionDownloadPlugin.getRegistrationsContainer(project),
64-
buildParams.getBwcVersionsProperty()
63+
buildParams.getBwcVersionsProvider()
6564
);
6665
}
6766

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalTestClustersPlugin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
package org.elasticsearch.gradle.internal;
1111

1212
import org.elasticsearch.gradle.VersionProperties;
13-
import org.elasticsearch.gradle.internal.info.BuildParameterExtension;
1413
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
1514
import org.elasticsearch.gradle.testclusters.ElasticsearchCluster;
1615
import org.elasticsearch.gradle.testclusters.TestClustersPlugin;
@@ -26,7 +25,7 @@ public class InternalTestClustersPlugin implements Plugin<Project> {
2625
public void apply(Project project) {
2726
project.getPlugins().apply(InternalDistributionDownloadPlugin.class);
2827
project.getRootProject().getRootProject().getPlugins().apply(GlobalBuildInfoPlugin.class);
29-
BuildParameterExtension buildParams = loadBuildParams(project).get();
28+
var buildParams = loadBuildParams(project).get();
3029
project.getRootProject().getPluginManager().apply(InternalReaperPlugin.class);
3130
TestClustersPlugin testClustersPlugin = project.getPlugins().apply(TestClustersPlugin.class);
3231
testClustersPlugin.setRuntimeJava(buildParams.getRuntimeJavaHome());

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/info/BuildParameterExtension.java

Lines changed: 47 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -13,175 +13,58 @@
1313
import org.gradle.api.Action;
1414
import org.gradle.api.JavaVersion;
1515
import org.gradle.api.Task;
16-
import org.gradle.api.provider.Property;
1716
import org.gradle.api.provider.Provider;
18-
import org.gradle.api.provider.ProviderFactory;
1917
import org.gradle.jvm.toolchain.JavaToolchainSpec;
2018

2119
import java.io.File;
22-
import java.time.ZoneOffset;
2320
import java.time.ZonedDateTime;
2421
import java.util.List;
2522
import java.util.Random;
26-
import java.util.concurrent.atomic.AtomicReference;
27-
28-
public abstract class BuildParameterExtension {
29-
private final Provider<Boolean> inFipsJvm;
30-
private final Provider<File> runtimeJavaHome;
31-
private final Boolean isRuntimeJavaHomeSet;
32-
private final List<JavaHome> javaVersions;
33-
private final JavaVersion minimumCompilerVersion;
34-
private final JavaVersion minimumRuntimeVersion;
35-
private final JavaVersion gradleJavaVersion;
36-
private final Provider<JavaVersion> runtimeJavaVersion;
37-
private final Provider<? extends Action<JavaToolchainSpec>> javaToolChainSpec;
38-
private final Provider<String> runtimeJavaDetails;
39-
private final String gitRevision;
40-
private transient AtomicReference<ZonedDateTime> buildDate = new AtomicReference<>();
41-
private final String testSeed;
42-
private final Boolean isCi;
43-
private final Integer defaultParallel;
44-
private final Boolean isSnapshotBuild;
45-
46-
public BuildParameterExtension(
47-
ProviderFactory providers,
48-
Provider<File> runtimeJavaHome,
49-
Provider<? extends Action<JavaToolchainSpec>> javaToolChainSpec,
50-
Provider<JavaVersion> runtimeJavaVersion,
51-
boolean isRuntimeJavaHomeSet,
52-
Provider<String> runtimeJavaDetails,
53-
List<JavaHome> javaVersions,
54-
JavaVersion minimumCompilerVersion,
55-
JavaVersion minimumRuntimeVersion,
56-
JavaVersion gradleJavaVersion,
57-
String gitRevision,
58-
String gitOrigin,
59-
ZonedDateTime buildDate,
60-
String testSeed,
61-
boolean isCi,
62-
int defaultParallel,
63-
final boolean isSnapshotBuild,
64-
Provider<BwcVersions> bwcVersions
65-
) {
66-
this.inFipsJvm = providers.systemProperty("tests.fips.enabled").map(BuildParameterExtension::parseBoolean);
67-
this.runtimeJavaHome = runtimeJavaHome;
68-
this.javaToolChainSpec = javaToolChainSpec;
69-
this.runtimeJavaVersion = runtimeJavaVersion;
70-
this.isRuntimeJavaHomeSet = isRuntimeJavaHomeSet;
71-
this.runtimeJavaDetails = runtimeJavaDetails;
72-
this.javaVersions = javaVersions;
73-
this.minimumCompilerVersion = minimumCompilerVersion;
74-
this.minimumRuntimeVersion = minimumRuntimeVersion;
75-
this.gradleJavaVersion = gradleJavaVersion;
76-
this.gitRevision = gitRevision;
77-
this.testSeed = testSeed;
78-
this.isCi = isCi;
79-
this.defaultParallel = defaultParallel;
80-
this.isSnapshotBuild = isSnapshotBuild;
81-
this.getBwcVersionsProperty().set(bwcVersions);
82-
this.getGitOriginProperty().set(gitOrigin);
83-
}
84-
85-
private static boolean parseBoolean(String s) {
86-
if (s == null) {
87-
return false;
88-
}
89-
return Boolean.parseBoolean(s);
90-
}
91-
92-
public boolean getInFipsJvm() {
93-
return inFipsJvm.getOrElse(false);
94-
}
95-
96-
public Provider<File> getRuntimeJavaHome() {
97-
return runtimeJavaHome;
98-
}
99-
100-
public void withFipsEnabledOnly(Task task) {
101-
task.onlyIf("FIPS mode disabled", task1 -> getInFipsJvm() == false);
102-
}
103-
104-
public Boolean getIsRuntimeJavaHomeSet() {
105-
return isRuntimeJavaHomeSet;
106-
}
107-
108-
public List<JavaHome> getJavaVersions() {
109-
return javaVersions;
110-
}
111-
112-
public JavaVersion getMinimumCompilerVersion() {
113-
return minimumCompilerVersion;
114-
}
115-
116-
public JavaVersion getMinimumRuntimeVersion() {
117-
return minimumRuntimeVersion;
118-
}
119-
120-
public JavaVersion getGradleJavaVersion() {
121-
return gradleJavaVersion;
122-
}
123-
124-
public Provider<JavaVersion> getRuntimeJavaVersion() {
125-
return runtimeJavaVersion;
126-
}
127-
128-
public Provider<? extends Action<JavaToolchainSpec>> getJavaToolChainSpec() {
129-
return javaToolChainSpec;
130-
}
131-
132-
public Provider<String> getRuntimeJavaDetails() {
133-
return runtimeJavaDetails;
134-
}
135-
136-
public String getGitRevision() {
137-
return gitRevision;
138-
}
139-
140-
public String getGitOrigin() {
141-
return getGitOriginProperty().get();
142-
}
143-
144-
public ZonedDateTime getBuildDate() {
145-
ZonedDateTime value = buildDate.get();
146-
if (value == null) {
147-
value = ZonedDateTime.now(ZoneOffset.UTC);
148-
if (buildDate.compareAndSet(null, value) == false) {
149-
// If another thread initialized it first, return the initialized value
150-
value = buildDate.get();
151-
}
152-
}
153-
return value;
154-
}
155-
156-
public String getTestSeed() {
157-
return testSeed;
158-
}
159-
160-
public Boolean isCi() {
161-
return isCi;
162-
}
163-
164-
public Integer getDefaultParallel() {
165-
return defaultParallel;
166-
}
167-
168-
public Boolean isSnapshotBuild() {
169-
return isSnapshotBuild;
170-
}
171-
172-
public BwcVersions getBwcVersions() {
173-
return getBwcVersionsProperty().get();
174-
}
175-
176-
public abstract Property<BwcVersions> getBwcVersionsProperty();
177-
178-
public abstract Property<String> getGitOriginProperty();
179-
180-
public Random getRandom() {
181-
return new Random(Long.parseUnsignedLong(testSeed.split(":")[0], 16));
182-
}
183-
184-
public Boolean isGraalVmRuntime() {
185-
return runtimeJavaDetails.get().toLowerCase().contains("graalvm");
186-
}
23+
24+
public interface BuildParameterExtension {
25+
String EXTENSION_NAME = "buildParams";
26+
27+
boolean getInFipsJvm();
28+
29+
Provider<File> getRuntimeJavaHome();
30+
31+
void withFipsEnabledOnly(Task task);
32+
33+
Boolean getIsRuntimeJavaHomeSet();
34+
35+
List<JavaHome> getJavaVersions();
36+
37+
JavaVersion getMinimumCompilerVersion();
38+
39+
JavaVersion getMinimumRuntimeVersion();
40+
41+
JavaVersion getGradleJavaVersion();
42+
43+
Provider<JavaVersion> getRuntimeJavaVersion();
44+
45+
Provider<? extends Action<JavaToolchainSpec>> getJavaToolChainSpec();
46+
47+
Provider<String> getRuntimeJavaDetails();
48+
49+
String getGitRevision();
50+
51+
String getGitOrigin();
52+
53+
ZonedDateTime getBuildDate();
54+
55+
String getTestSeed();
56+
57+
Boolean isCi();
58+
59+
Integer getDefaultParallel();
60+
61+
Boolean isSnapshotBuild();
62+
63+
BwcVersions getBwcVersions();
64+
65+
Provider<BwcVersions> getBwcVersionsProvider();
66+
67+
Random getRandom();
68+
69+
Boolean isGraalVmRuntime();
18770
}

0 commit comments

Comments
 (0)