Skip to content

Commit fb86184

Browse files
authored
Move bwcVersions extension property to BuildParams (#56206)
- resolved in GlobalBuildInfoPlugin - propagate exception if version file cannot be resolved - add null check when setting bwcVersions
1 parent a12f9ff commit fb86184

File tree

19 files changed

+70
-38
lines changed

19 files changed

+70
-38
lines changed

build.gradle

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,6 @@ subprojects {
109109
}
110110
}
111111

112-
/* Introspect all versions of ES that may be tested against for backwards
113-
* compatibility. It is *super* important that this logic is the same as the
114-
* logic in VersionUtils.java. */
115-
BwcVersions versions = new BwcVersions(file('server/src/main/java/org/elasticsearch/Version.java').readLines('UTF-8'))
116-
117112
task updateCIBwcVersions() {
118113
doLast {
119114
File yml = file(".ci/bwcVersions")
@@ -144,9 +139,6 @@ allprojects {
144139
gradle.startParameter.taskNames.contains('eclipse') || // Detects gradle launched from the command line to do eclipse stuff
145140
gradle.startParameter.taskNames.contains('cleanEclipse')
146141

147-
// for BWC testing
148-
bwcVersions = versions
149-
150142
buildMetadata = buildMetadataMap
151143
}
152144
}
@@ -160,15 +152,15 @@ task verifyVersions {
160152
// Fetch the metadata and parse the xml into Version instances because it's more straight forward here
161153
// rather than bwcVersion ( VersionCollection ).
162154
new URL('https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch/maven-metadata.xml').openStream().withStream { s ->
163-
bwcVersions.compareToAuthoritative(
155+
BuildParams.bwcVersions.compareToAuthoritative(
164156
new XmlParser().parse(s)
165157
.versioning.versions.version
166158
.collect { it.text() }.findAll { it ==~ /\d+\.\d+\.\d+/ }
167159
.collect { Version.fromString(it) }
168160
)
169161
}
170162
String ciYml = file(".ci/bwcVersions").text
171-
bwcVersions.indexCompatible.each {
163+
BuildParams.bwcVersions.indexCompatible.each {
172164
if (ciYml.contains("\"$it\"\n") == false) {
173165
throw new Exception(".ci/bwcVersions is outdated, run `./gradlew updateCIBwcVersions` and check in the results");
174166
}

buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.gradle.api.artifacts.repositories.IvyArtifactRepository;
4040
import org.gradle.api.credentials.HttpHeaderCredentials;
4141
import org.gradle.api.file.FileTree;
42-
import org.gradle.api.plugins.ExtraPropertiesExtension;
4342
import org.gradle.api.provider.Provider;
4443
import org.gradle.api.tasks.Sync;
4544
import org.gradle.api.tasks.TaskProvider;
@@ -92,8 +91,7 @@ public void apply(Project project) {
9291
setupDownloadServiceRepo(project);
9392

9493
if (BuildParams.isInternal()) {
95-
ExtraPropertiesExtension extraProperties = project.getExtensions().getExtraProperties();
96-
this.bwcVersions = (BwcVersions) extraProperties.get("bwcVersions");
94+
this.bwcVersions = BuildParams.getBwcVersions();
9795
}
9896

9997
project.afterEvaluate(this::setupDistributions);

buildSrc/src/main/java/org/elasticsearch/gradle/info/GlobalBuildInfoPlugin.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.elasticsearch.gradle.info;
22

3+
import org.apache.commons.io.IOUtils;
4+
import org.elasticsearch.gradle.BwcVersions;
35
import org.elasticsearch.gradle.OS;
46
import org.elasticsearch.gradle.util.Util;
57
import org.gradle.api.GradleException;
@@ -20,6 +22,7 @@
2022
import java.io.BufferedReader;
2123
import java.io.ByteArrayOutputStream;
2224
import java.io.File;
25+
import java.io.FileInputStream;
2326
import java.io.FileReader;
2427
import java.io.IOException;
2528
import java.io.UncheckedIOException;
@@ -44,6 +47,7 @@
4447

4548
public class GlobalBuildInfoPlugin implements Plugin<Project> {
4649
private static final Logger LOGGER = Logging.getLogger(GlobalBuildInfoPlugin.class);
50+
private static final String DEFAULT_VERSION_JAVA_FILE_PATH = "server/src/main/java/org/elasticsearch/Version.java";
4751
private static Integer _defaultParallel = null;
4852

4953
private final JavaInstallationRegistry javaInstallationRegistry;
@@ -69,10 +73,13 @@ public void apply(Project project) {
6973
File compilerJavaHome = findCompilerJavaHome();
7074
File runtimeJavaHome = findRuntimeJavaHome(compilerJavaHome);
7175

72-
GitInfo gitInfo = gitInfo(project.getRootProject().getRootDir());
76+
File rootDir = project.getRootDir();
77+
GitInfo gitInfo = gitInfo(rootDir);
7378

74-
// Initialize global build parameters
7579
BuildParams.init(params -> {
80+
// Initialize global build parameters
81+
boolean isInternal = GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null;
82+
7683
params.reset();
7784
params.setCompilerJavaHome(compilerJavaHome);
7885
params.setRuntimeJavaHome(runtimeJavaHome);
@@ -88,16 +95,32 @@ public void apply(Project project) {
8895
params.setBuildDate(ZonedDateTime.now(ZoneOffset.UTC));
8996
params.setTestSeed(getTestSeed());
9097
params.setIsCi(System.getenv("JENKINS_URL") != null);
91-
params.setIsInternal(GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null);
98+
params.setIsInternal(isInternal);
9299
params.setDefaultParallel(findDefaultParallel(project));
93100
params.setInFipsJvm(Util.getBooleanProperty("tests.fips.enabled", false));
94101
params.setIsSnapshotBuild(Util.getBooleanProperty("build.snapshot", true));
102+
if (isInternal) {
103+
params.setBwcVersions(resolveBwcVersions(rootDir));
104+
}
95105
});
96106

97107
// Print global build info header just before task execution
98108
project.getGradle().getTaskGraph().whenReady(graph -> logGlobalBuildInfo());
99109
}
100110

111+
/* Introspect all versions of ES that may be tested against for backwards
112+
* compatibility. It is *super* important that this logic is the same as the
113+
* logic in VersionUtils.java. */
114+
private static BwcVersions resolveBwcVersions(File root) {
115+
File versionsFile = new File(root, DEFAULT_VERSION_JAVA_FILE_PATH);
116+
try {
117+
List<String> versionLines = IOUtils.readLines(new FileInputStream(versionsFile), "UTF-8");
118+
return new BwcVersions(versionLines);
119+
} catch (IOException e) {
120+
throw new IllegalStateException("Unable to resolve to resolve bwc versions from versionsFile.", e);
121+
}
122+
}
123+
101124
private void logGlobalBuildInfo() {
102125
final String osName = System.getProperty("os.name");
103126
final String osVersion = System.getProperty("os.version");

buildSrc/src/main/java/org/elasticsearch/gradle/test/DistroTestPlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ private static Version getUpgradeVersion(Project project) {
221221

222222
String firstPartOfSeed = BuildParams.getTestSeed().split(":")[0];
223223
final long seed = Long.parseUnsignedLong(firstPartOfSeed, 16);
224-
BwcVersions bwcVersions = (BwcVersions) extraProperties.get("bwcVersions");
224+
BwcVersions bwcVersions = BuildParams.getBwcVersions();
225225
final List<Version> indexCompatVersions = bwcVersions.getIndexCompatible();
226226
return indexCompatVersions.get(new Random(seed).nextInt(indexCompatVersions.size()));
227227
}

buildSrc/src/main/java/org/elasticsearch/gradle/BwcVersions.java renamed to buildSrc/src/minimumRuntime/java/org/elasticsearch/gradle/BwcVersions.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919
package org.elasticsearch.gradle;
2020

2121
import java.util.ArrayList;
22+
import java.util.Arrays;
2223
import java.util.Collection;
2324
import java.util.Collections;
2425
import java.util.HashMap;
2526
import java.util.HashSet;
2627
import java.util.List;
2728
import java.util.Map;
29+
import java.util.NoSuchElementException;
2830
import java.util.Set;
2931
import java.util.SortedSet;
3032
import java.util.TreeSet;
@@ -36,7 +38,6 @@
3638

3739
import static java.util.Collections.emptyList;
3840
import static java.util.Collections.unmodifiableList;
39-
import static java.util.function.Predicate.not;
4041

4142
/**
4243
* A container for elasticsearch supported version information used in BWC testing.
@@ -88,7 +89,7 @@ public class BwcVersions {
8889
private static final Pattern LINE_PATTERN = Pattern.compile(
8990
"\\W+public static final Version V_(\\d+)_(\\d+)_(\\d+)(_alpha\\d+|_beta\\d+|_rc\\d+)? .*"
9091
);
91-
private static final List<Version> IGNORED_VERSIONS = List.of(Version.fromString("7.7.0"));
92+
private static final List<Version> IGNORED_VERSIONS = Arrays.asList(Version.fromString("7.7.0"));
9293

9394
private final Version currentVersion;
9495
private final Map<Integer, List<Version>> groupByMajor;
@@ -122,7 +123,7 @@ protected BwcVersions(List<String> versionLines, Version currentVersionProperty)
122123
Integer.parseInt(match.group(3))
123124
)
124125
)
125-
.filter(not(IGNORED_VERSIONS::contains)) // remove any specifically ignored versions
126+
.filter(v -> !IGNORED_VERSIONS.contains(v)) // remove any specifically ignored versions
126127
.collect(Collectors.toCollection(TreeSet::new)),
127128
currentVersionProperty
128129
);
@@ -275,7 +276,12 @@ public List<Version> getUnreleased() {
275276
// we found that the previous minor is staged but not yet released
276277
// in this case, the minor before that has a bugfix, should there be such a minor
277278
if (greatestMinor >= 2) {
278-
int major = groupByMinor.values().stream().flatMap(Collection::stream).findFirst().map(Version::getMajor).orElseThrow();
279+
int major = groupByMinor.values()
280+
.stream()
281+
.flatMap(Collection::stream)
282+
.findFirst()
283+
.map(Version::getMajor)
284+
.orElseThrow(NoSuchElementException::new);
279285
// Don't bother searching for a version we've ignored
280286
if (IGNORED_VERSIONS.contains(new Version(major, greatestMinor - 2, 0)) == false) {
281287
unreleased.add(getLatestVersionByKey(groupByMinor, greatestMinor - 2));

buildSrc/src/minimumRuntime/java/org/elasticsearch/gradle/info/BuildParams.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.elasticsearch.gradle.info;
22

3+
import org.elasticsearch.gradle.BwcVersions;
34
import org.gradle.api.JavaVersion;
45

56
import java.io.File;
@@ -30,6 +31,7 @@ public class BuildParams {
3031
private static Boolean isInternal;
3132
private static Integer defaultParallel;
3233
private static Boolean isSnapshotBuild;
34+
private static BwcVersions bwcVersions;
3335

3436
/**
3537
* Initialize global build parameters. This method accepts and a initialization function which in turn accepts a
@@ -95,6 +97,10 @@ public static ZonedDateTime getBuildDate() {
9597
return value(buildDate);
9698
}
9799

100+
public static BwcVersions getBwcVersions() {
101+
return value(bwcVersions);
102+
}
103+
98104
public static String getTestSeed() {
99105
return value(testSeed);
100106
}
@@ -228,5 +234,8 @@ public void setIsSnapshotBuild(final boolean isSnapshotBuild) {
228234
BuildParams.isSnapshotBuild = isSnapshotBuild;
229235
}
230236

237+
public void setBwcVersions(BwcVersions bwcVersions) {
238+
BuildParams.bwcVersions = requireNonNull(bwcVersions);
239+
}
231240
}
232241
}

buildSrc/src/testKit/distribution-download/build.gradle

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,5 @@ if (internal) {
4949
BwcVersions versions = new BwcVersions(new TreeSet<>(
5050
Arrays.asList(Version.fromString("8.0.0"), Version.fromString("8.0.1"), Version.fromString("8.1.0"), currentVersion)),
5151
currentVersion)
52-
allprojects {
53-
ext.bwcVersions = versions
54-
}
52+
BuildParams.init { it.setBwcVersions(versions) }
5553
}

distribution/bwc/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import static org.elasticsearch.gradle.util.JavaUtil.getJavaHome
3636
* unreleased versions are when Gradle projects are set up, so we use "build-unreleased-version-*" as placeholders
3737
* and configure them to build various versions here.
3838
*/
39-
bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleasedVersion ->
39+
BuildParams.bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleasedVersion ->
4040
project("${unreleasedVersion.gradleProjectPath}") {
4141
Version bwcVersion = unreleasedVersion.version
4242
String bwcBranch = unreleasedVersion.branch

gradle/bwc-test.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23

34
ext.bwcTaskName = { Version version ->
45
return "v${version}#bwcTest"
56
}
67

78
def bwcTestSnapshots = tasks.register("bwcTestSnapshots") {
89
if (project.bwc_tests_enabled) {
9-
dependsOn tasks.matching { task -> bwcVersions.unreleased.any { version -> bwcTaskName(version) == task.name } }
10+
dependsOn tasks.matching { task -> BuildParams.bwcVersions.unreleased.any { version -> bwcTaskName(version) == task.name } }
1011
}
1112
}
1213

qa/full-cluster-restart/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ apply plugin: 'elasticsearch.testclusters'
2626
apply plugin: 'elasticsearch.standalone-test'
2727
apply from : "$rootDir/gradle/bwc-test.gradle"
2828

29-
for (Version bwcVersion : bwcVersions.indexCompatible) {
29+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3030
String baseName = "v${bwcVersion}"
3131

3232
testClusters {

qa/mixed-cluster/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ restResources {
3232
}
3333
}
3434

35-
for (Version bwcVersion : bwcVersions.wireCompatible) {
35+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
3636
if (bwcVersion == VersionProperties.getElasticsearchVersion()) {
3737
// Not really a mixed cluster
3838
continue;

qa/repository-multi-version/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ dependencies {
2929
testCompile project(':client:rest-high-level')
3030
}
3131

32-
for (Version bwcVersion : bwcVersions.indexCompatible) {
32+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3333
String baseName = "v${bwcVersion}"
3434
String oldClusterName = "${baseName}-old"
3535
String newClusterName = "${baseName}-new"

qa/rolling-upgrade/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ apply plugin: 'elasticsearch.testclusters'
2525
apply plugin: 'elasticsearch.standalone-test'
2626
apply from : "$rootDir/gradle/bwc-test.gradle"
2727

28-
for (Version bwcVersion : bwcVersions.wireCompatible) {
28+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
2929
/*
3030
* The goal here is to:
3131
* <ul>

qa/verify-version-constants/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ apply plugin: 'elasticsearch.testclusters'
2626
apply plugin: 'elasticsearch.standalone-test'
2727
apply from : "$rootDir/gradle/bwc-test.gradle"
2828

29-
for (Version bwcVersion : bwcVersions.indexCompatible) {
29+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3030
String baseName = "v${bwcVersion}"
3131

3232
testClusters {

test/framework/build.gradle

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19+
import org.elasticsearch.gradle.info.BuildParams;
1920

2021
dependencies {
2122
compile project(":client:rest")
@@ -60,9 +61,9 @@ thirdPartyAudit.ignoreMissingClasses(
6061
)
6162

6263
test {
63-
systemProperty 'tests.gradle_index_compat_versions', bwcVersions.indexCompatible.join(',')
64-
systemProperty 'tests.gradle_wire_compat_versions', bwcVersions.wireCompatible.join(',')
65-
systemProperty 'tests.gradle_unreleased_versions', bwcVersions.unreleased.join(',')
64+
systemProperty 'tests.gradle_index_compat_versions', BuildParams.bwcVersions.indexCompatible.join(',')
65+
systemProperty 'tests.gradle_wire_compat_versions', BuildParams.bwcVersions.wireCompatible.join(',')
66+
systemProperty 'tests.gradle_unreleased_versions', BuildParams.bwcVersions.unreleased.join(',')
6667
}
6768

6869
task integTest(type: Test) {

x-pack/qa/full-cluster-restart/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -33,7 +34,7 @@ tasks.register("copyTestNodeKeyMaterial", Copy) {
3334
into outputDir
3435
}
3536

36-
for (Version bwcVersion : bwcVersions.indexCompatible) {
37+
for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
3738
String baseName = "v${bwcVersion}"
3839

3940
testClusters {

x-pack/qa/rolling-upgrade-basic/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -9,7 +10,7 @@ dependencies {
910
testCompile project(':x-pack:qa')
1011
}
1112

12-
for (Version bwcVersion : bwcVersions.wireCompatible) {
13+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
1314
String baseName = "v${bwcVersion}"
1415

1516
testClusters {

x-pack/qa/rolling-upgrade-multi-cluster/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -9,7 +10,7 @@ dependencies {
910
testCompile project(':x-pack:qa')
1011
}
1112

12-
for (Version bwcVersion : bwcVersions.wireCompatible) {
13+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
1314
String baseName = "v${bwcVersion}"
1415

1516
testClusters {

x-pack/qa/rolling-upgrade/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import org.elasticsearch.gradle.Version
2+
import org.elasticsearch.gradle.info.BuildParams
23
import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
34

45
apply plugin: 'elasticsearch.testclusters'
@@ -29,7 +30,7 @@ task copyTestNodeKeyMaterial(type: Copy) {
2930
into outputDir
3031
}
3132

32-
for (Version bwcVersion : bwcVersions.wireCompatible) {
33+
for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
3334
String baseName = "v${bwcVersion}"
3435

3536
testClusters {

0 commit comments

Comments
 (0)