瀏覽代碼

Move bwcVersions extension property to BuildParams (#56206)

- resolved in GlobalBuildInfoPlugin
- propagate exception if version file cannot be resolved
- add null check when setting bwcVersions
Rene Groeschke 5 年之前
父節點
當前提交
fb86184dbb

+ 2 - 10
build.gradle

@@ -109,11 +109,6 @@ subprojects {
   }
 }
 
-/* Introspect all versions of ES that may be tested against for backwards
- * compatibility. It is *super* important that this logic is the same as the
- * logic in VersionUtils.java. */
-BwcVersions versions = new BwcVersions(file('server/src/main/java/org/elasticsearch/Version.java').readLines('UTF-8'))
-
 task updateCIBwcVersions() {
   doLast {
     File yml = file(".ci/bwcVersions")
@@ -144,9 +139,6 @@ allprojects {
       gradle.startParameter.taskNames.contains('eclipse') ||  // Detects gradle launched from the command line to do eclipse stuff
       gradle.startParameter.taskNames.contains('cleanEclipse')
 
-    // for BWC testing
-    bwcVersions = versions
-
     buildMetadata = buildMetadataMap
   }
 }
@@ -160,7 +152,7 @@ task verifyVersions {
     // Fetch the metadata and parse the xml into Version instances because it's more straight forward here
     // rather than bwcVersion ( VersionCollection ).
     new URL('https://repo1.maven.org/maven2/org/elasticsearch/elasticsearch/maven-metadata.xml').openStream().withStream { s ->
-      bwcVersions.compareToAuthoritative(
+      BuildParams.bwcVersions.compareToAuthoritative(
         new XmlParser().parse(s)
           .versioning.versions.version
           .collect { it.text() }.findAll { it ==~ /\d+\.\d+\.\d+/ }
@@ -168,7 +160,7 @@ task verifyVersions {
       )
     }
     String ciYml = file(".ci/bwcVersions").text
-    bwcVersions.indexCompatible.each {
+    BuildParams.bwcVersions.indexCompatible.each {
       if (ciYml.contains("\"$it\"\n") == false) {
         throw new Exception(".ci/bwcVersions is outdated, run `./gradlew updateCIBwcVersions` and check in the results");
       }

+ 1 - 3
buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java

@@ -39,7 +39,6 @@ import org.gradle.api.artifacts.dsl.DependencyHandler;
 import org.gradle.api.artifacts.repositories.IvyArtifactRepository;
 import org.gradle.api.credentials.HttpHeaderCredentials;
 import org.gradle.api.file.FileTree;
-import org.gradle.api.plugins.ExtraPropertiesExtension;
 import org.gradle.api.provider.Provider;
 import org.gradle.api.tasks.Sync;
 import org.gradle.api.tasks.TaskProvider;
@@ -92,8 +91,7 @@ public class DistributionDownloadPlugin implements Plugin<Project> {
         setupDownloadServiceRepo(project);
 
         if (BuildParams.isInternal()) {
-            ExtraPropertiesExtension extraProperties = project.getExtensions().getExtraProperties();
-            this.bwcVersions = (BwcVersions) extraProperties.get("bwcVersions");
+            this.bwcVersions = BuildParams.getBwcVersions();
         }
 
         project.afterEvaluate(this::setupDistributions);

+ 26 - 3
buildSrc/src/main/java/org/elasticsearch/gradle/info/GlobalBuildInfoPlugin.java

@@ -1,5 +1,7 @@
 package org.elasticsearch.gradle.info;
 
+import org.apache.commons.io.IOUtils;
+import org.elasticsearch.gradle.BwcVersions;
 import org.elasticsearch.gradle.OS;
 import org.elasticsearch.gradle.util.Util;
 import org.gradle.api.GradleException;
@@ -20,6 +22,7 @@ import javax.inject.Inject;
 import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.UncheckedIOException;
@@ -44,6 +47,7 @@ import java.util.stream.Stream;
 
 public class GlobalBuildInfoPlugin implements Plugin<Project> {
     private static final Logger LOGGER = Logging.getLogger(GlobalBuildInfoPlugin.class);
+    private static final String DEFAULT_VERSION_JAVA_FILE_PATH = "server/src/main/java/org/elasticsearch/Version.java";
     private static Integer _defaultParallel = null;
 
     private final JavaInstallationRegistry javaInstallationRegistry;
@@ -69,10 +73,13 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
         File compilerJavaHome = findCompilerJavaHome();
         File runtimeJavaHome = findRuntimeJavaHome(compilerJavaHome);
 
-        GitInfo gitInfo = gitInfo(project.getRootProject().getRootDir());
+        File rootDir = project.getRootDir();
+        GitInfo gitInfo = gitInfo(rootDir);
 
-        // Initialize global build parameters
         BuildParams.init(params -> {
+            // Initialize global build parameters
+            boolean isInternal = GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null;
+
             params.reset();
             params.setCompilerJavaHome(compilerJavaHome);
             params.setRuntimeJavaHome(runtimeJavaHome);
@@ -88,16 +95,32 @@ public class GlobalBuildInfoPlugin implements Plugin<Project> {
             params.setBuildDate(ZonedDateTime.now(ZoneOffset.UTC));
             params.setTestSeed(getTestSeed());
             params.setIsCi(System.getenv("JENKINS_URL") != null);
-            params.setIsInternal(GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null);
+            params.setIsInternal(isInternal);
             params.setDefaultParallel(findDefaultParallel(project));
             params.setInFipsJvm(Util.getBooleanProperty("tests.fips.enabled", false));
             params.setIsSnapshotBuild(Util.getBooleanProperty("build.snapshot", true));
+            if (isInternal) {
+                params.setBwcVersions(resolveBwcVersions(rootDir));
+            }
         });
 
         // Print global build info header just before task execution
         project.getGradle().getTaskGraph().whenReady(graph -> logGlobalBuildInfo());
     }
 
+    /* Introspect all versions of ES that may be tested against for backwards
+     * compatibility. It is *super* important that this logic is the same as the
+     * logic in VersionUtils.java. */
+    private static BwcVersions resolveBwcVersions(File root) {
+        File versionsFile = new File(root, DEFAULT_VERSION_JAVA_FILE_PATH);
+        try {
+            List<String> versionLines = IOUtils.readLines(new FileInputStream(versionsFile), "UTF-8");
+            return new BwcVersions(versionLines);
+        } catch (IOException e) {
+            throw new IllegalStateException("Unable to resolve to resolve bwc versions from versionsFile.", e);
+        }
+    }
+
     private void logGlobalBuildInfo() {
         final String osName = System.getProperty("os.name");
         final String osVersion = System.getProperty("os.version");

+ 1 - 1
buildSrc/src/main/java/org/elasticsearch/gradle/test/DistroTestPlugin.java

@@ -221,7 +221,7 @@ public class DistroTestPlugin implements Plugin<Project> {
 
         String firstPartOfSeed = BuildParams.getTestSeed().split(":")[0];
         final long seed = Long.parseUnsignedLong(firstPartOfSeed, 16);
-        BwcVersions bwcVersions = (BwcVersions) extraProperties.get("bwcVersions");
+        BwcVersions bwcVersions = BuildParams.getBwcVersions();
         final List<Version> indexCompatVersions = bwcVersions.getIndexCompatible();
         return indexCompatVersions.get(new Random(seed).nextInt(indexCompatVersions.size()));
     }

+ 10 - 4
buildSrc/src/main/java/org/elasticsearch/gradle/BwcVersions.java → buildSrc/src/minimumRuntime/java/org/elasticsearch/gradle/BwcVersions.java

@@ -19,12 +19,14 @@
 package org.elasticsearch.gradle;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
@@ -36,7 +38,6 @@ import java.util.stream.Stream;
 
 import static java.util.Collections.emptyList;
 import static java.util.Collections.unmodifiableList;
-import static java.util.function.Predicate.not;
 
 /**
  * A container for elasticsearch supported version information used in BWC testing.
@@ -88,7 +89,7 @@ public class BwcVersions {
     private static final Pattern LINE_PATTERN = Pattern.compile(
         "\\W+public static final Version V_(\\d+)_(\\d+)_(\\d+)(_alpha\\d+|_beta\\d+|_rc\\d+)? .*"
     );
-    private static final List<Version> IGNORED_VERSIONS = List.of(Version.fromString("7.7.0"));
+    private static final List<Version> IGNORED_VERSIONS = Arrays.asList(Version.fromString("7.7.0"));
 
     private final Version currentVersion;
     private final Map<Integer, List<Version>> groupByMajor;
@@ -122,7 +123,7 @@ public class BwcVersions {
                         Integer.parseInt(match.group(3))
                     )
                 )
-                .filter(not(IGNORED_VERSIONS::contains)) // remove any specifically ignored versions
+                .filter(v -> !IGNORED_VERSIONS.contains(v)) // remove any specifically ignored versions
                 .collect(Collectors.toCollection(TreeSet::new)),
             currentVersionProperty
         );
@@ -275,7 +276,12 @@ public class BwcVersions {
                 // we found that the previous minor is staged but not yet released
                 // in this case, the minor before that has a bugfix, should there be such a minor
                 if (greatestMinor >= 2) {
-                    int major = groupByMinor.values().stream().flatMap(Collection::stream).findFirst().map(Version::getMajor).orElseThrow();
+                    int major = groupByMinor.values()
+                        .stream()
+                        .flatMap(Collection::stream)
+                        .findFirst()
+                        .map(Version::getMajor)
+                        .orElseThrow(NoSuchElementException::new);
                     // Don't bother searching for a version we've ignored
                     if (IGNORED_VERSIONS.contains(new Version(major, greatestMinor - 2, 0)) == false) {
                         unreleased.add(getLatestVersionByKey(groupByMinor, greatestMinor - 2));

+ 9 - 0
buildSrc/src/minimumRuntime/java/org/elasticsearch/gradle/info/BuildParams.java

@@ -1,5 +1,6 @@
 package org.elasticsearch.gradle.info;
 
+import org.elasticsearch.gradle.BwcVersions;
 import org.gradle.api.JavaVersion;
 
 import java.io.File;
@@ -30,6 +31,7 @@ public class BuildParams {
     private static Boolean isInternal;
     private static Integer defaultParallel;
     private static Boolean isSnapshotBuild;
+    private static BwcVersions bwcVersions;
 
     /**
      * Initialize global build parameters. This method accepts and a initialization function which in turn accepts a
@@ -95,6 +97,10 @@ public class BuildParams {
         return value(buildDate);
     }
 
+    public static BwcVersions getBwcVersions() {
+        return value(bwcVersions);
+    }
+
     public static String getTestSeed() {
         return value(testSeed);
     }
@@ -228,5 +234,8 @@ public class BuildParams {
             BuildParams.isSnapshotBuild = isSnapshotBuild;
         }
 
+        public void setBwcVersions(BwcVersions bwcVersions) {
+            BuildParams.bwcVersions = requireNonNull(bwcVersions);
+        }
     }
 }

+ 1 - 3
buildSrc/src/testKit/distribution-download/build.gradle

@@ -49,7 +49,5 @@ if (internal) {
   BwcVersions versions = new BwcVersions(new TreeSet<>(
     Arrays.asList(Version.fromString("8.0.0"), Version.fromString("8.0.1"), Version.fromString("8.1.0"), currentVersion)),
     currentVersion)
-  allprojects {
-    ext.bwcVersions = versions
-  }
+  BuildParams.init { it.setBwcVersions(versions) }
 }

+ 1 - 1
distribution/bwc/build.gradle

@@ -36,7 +36,7 @@ import static org.elasticsearch.gradle.util.JavaUtil.getJavaHome
  *  unreleased versions are when Gradle projects are set up, so we use "build-unreleased-version-*" as placeholders
  *  and configure them to build various versions here.
  */
-bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleasedVersion ->
+BuildParams.bwcVersions.forPreviousUnreleased { BwcVersions.UnreleasedVersionInfo unreleasedVersion ->
   project("${unreleasedVersion.gradleProjectPath}") {
     Version bwcVersion = unreleasedVersion.version
     String bwcBranch = unreleasedVersion.branch

+ 2 - 1
gradle/bwc-test.gradle

@@ -1,4 +1,5 @@
 import org.elasticsearch.gradle.Version
+import org.elasticsearch.gradle.info.BuildParams
 
 ext.bwcTaskName = { Version version ->
   return "v${version}#bwcTest"
@@ -6,7 +7,7 @@ ext.bwcTaskName = { Version version ->
 
 def bwcTestSnapshots = tasks.register("bwcTestSnapshots") {
   if (project.bwc_tests_enabled) {
-    dependsOn tasks.matching { task -> bwcVersions.unreleased.any { version -> bwcTaskName(version) == task.name } }
+    dependsOn tasks.matching { task -> BuildParams.bwcVersions.unreleased.any { version -> bwcTaskName(version) == task.name } }
   }
 }
 

+ 1 - 1
qa/full-cluster-restart/build.gradle

@@ -26,7 +26,7 @@ apply plugin: 'elasticsearch.testclusters'
 apply plugin: 'elasticsearch.standalone-test'
 apply from : "$rootDir/gradle/bwc-test.gradle"
 
-for (Version bwcVersion : bwcVersions.indexCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
   String baseName = "v${bwcVersion}"
 
   testClusters {

+ 1 - 1
qa/mixed-cluster/build.gradle

@@ -32,7 +32,7 @@ restResources {
   }
 }
 
-for (Version bwcVersion : bwcVersions.wireCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
   if (bwcVersion == VersionProperties.getElasticsearchVersion()) {
     // Not really a mixed cluster
     continue;

+ 1 - 1
qa/repository-multi-version/build.gradle

@@ -29,7 +29,7 @@ dependencies {
   testCompile project(':client:rest-high-level')
 }
 
-for (Version bwcVersion : bwcVersions.indexCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
   String baseName = "v${bwcVersion}"
   String oldClusterName = "${baseName}-old"
   String newClusterName = "${baseName}-new"

+ 1 - 1
qa/rolling-upgrade/build.gradle

@@ -25,7 +25,7 @@ apply plugin: 'elasticsearch.testclusters'
 apply plugin: 'elasticsearch.standalone-test'
 apply from : "$rootDir/gradle/bwc-test.gradle"
 
-for (Version bwcVersion : bwcVersions.wireCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
   /*
    * The goal here is to:
    * <ul>

+ 1 - 1
qa/verify-version-constants/build.gradle

@@ -26,7 +26,7 @@ apply plugin: 'elasticsearch.testclusters'
 apply plugin: 'elasticsearch.standalone-test'
 apply from : "$rootDir/gradle/bwc-test.gradle"
 
-for (Version bwcVersion : bwcVersions.indexCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
   String baseName = "v${bwcVersion}"
 
   testClusters {

+ 4 - 3
test/framework/build.gradle

@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+import org.elasticsearch.gradle.info.BuildParams;
 
 dependencies {
   compile project(":client:rest")
@@ -60,9 +61,9 @@ thirdPartyAudit.ignoreMissingClasses(
 )
 
 test {
-  systemProperty 'tests.gradle_index_compat_versions', bwcVersions.indexCompatible.join(',')
-  systemProperty 'tests.gradle_wire_compat_versions', bwcVersions.wireCompatible.join(',')
-  systemProperty 'tests.gradle_unreleased_versions', bwcVersions.unreleased.join(',')
+  systemProperty 'tests.gradle_index_compat_versions', BuildParams.bwcVersions.indexCompatible.join(',')
+  systemProperty 'tests.gradle_wire_compat_versions', BuildParams.bwcVersions.wireCompatible.join(',')
+  systemProperty 'tests.gradle_unreleased_versions', BuildParams.bwcVersions.unreleased.join(',')
 }
 
 task integTest(type: Test) {

+ 2 - 1
x-pack/qa/full-cluster-restart/build.gradle

@@ -1,4 +1,5 @@
 import org.elasticsearch.gradle.Version
+import org.elasticsearch.gradle.info.BuildParams
 import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
 
 apply plugin: 'elasticsearch.testclusters'
@@ -33,7 +34,7 @@ tasks.register("copyTestNodeKeyMaterial", Copy) {
   into outputDir
 }
 
-for (Version bwcVersion : bwcVersions.indexCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.indexCompatible) {
   String baseName = "v${bwcVersion}"
 
   testClusters {

+ 2 - 1
x-pack/qa/rolling-upgrade-basic/build.gradle

@@ -1,4 +1,5 @@
 import org.elasticsearch.gradle.Version
+import org.elasticsearch.gradle.info.BuildParams
 import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
 
 apply plugin: 'elasticsearch.testclusters'
@@ -9,7 +10,7 @@ dependencies {
   testCompile project(':x-pack:qa')
 }
 
-for (Version bwcVersion : bwcVersions.wireCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
   String baseName = "v${bwcVersion}"
 
   testClusters {

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

@@ -1,4 +1,5 @@
 import org.elasticsearch.gradle.Version
+import org.elasticsearch.gradle.info.BuildParams
 import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
 
 apply plugin: 'elasticsearch.testclusters'
@@ -9,7 +10,7 @@ dependencies {
   testCompile project(':x-pack:qa')
 }
 
-for (Version bwcVersion : bwcVersions.wireCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
   String baseName = "v${bwcVersion}"
 
   testClusters {

+ 2 - 1
x-pack/qa/rolling-upgrade/build.gradle

@@ -1,4 +1,5 @@
 import org.elasticsearch.gradle.Version
+import org.elasticsearch.gradle.info.BuildParams
 import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
 
 apply plugin: 'elasticsearch.testclusters'
@@ -29,7 +30,7 @@ task copyTestNodeKeyMaterial(type: Copy) {
   into outputDir
 }
 
-for (Version bwcVersion : bwcVersions.wireCompatible) {
+for (Version bwcVersion : BuildParams.bwcVersions.wireCompatible) {
   String baseName = "v${bwcVersion}"
 
   testClusters {