mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-27 10:28:28 +00:00
Make NodeInfo#nodeVersion strongly-typed as Version (#29515)
Today we have a nodeVersion property on the NodeInfo class that we use to carry around information about a standalone node that we will start during tests. This property is a String which we usually end up parsing to a Version anyway to do various checks on it. This can end up happening a lot during configuration so it would be more efficient and safer to have this already be strongly-typed as a Version and parsed from a String only once for each instance of NodeInfo. Therefore, this commit makes NodeInfo#nodeVersion strongly-typed as a Version.
This commit is contained in:
parent
82a753dcc7
commit
85ac541ab3
@ -36,7 +36,7 @@ import java.security.MessageDigest
|
||||
// common maven publishing configuration
|
||||
subprojects {
|
||||
group = 'org.elasticsearch'
|
||||
version = VersionProperties.elasticsearch
|
||||
version = VersionProperties.elasticsearch.toString()
|
||||
description = "Elasticsearch subproject ${project.path}"
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ configure(subprojects.findAll { it.projectDir.toPath().startsWith(rootPath) }) {
|
||||
* in a branch if there are only betas and rcs in the branch so we have
|
||||
* *something* to test against. */
|
||||
VersionCollection versions = new VersionCollection(file('server/src/main/java/org/elasticsearch/Version.java').readLines('UTF-8'))
|
||||
if (versions.currentVersion.toString() != VersionProperties.elasticsearch) {
|
||||
if (versions.currentVersion != VersionProperties.elasticsearch) {
|
||||
throw new GradleException("The last version in Versions.java [${versions.currentVersion}] does not match " +
|
||||
"VersionProperties.elasticsearch [${VersionProperties.elasticsearch}]")
|
||||
}
|
||||
@ -245,7 +245,7 @@ subprojects {
|
||||
// other packages (e.g org.elasticsearch.client) will point to server rather than
|
||||
// their own artifacts.
|
||||
if (project.plugins.hasPlugin(BuildPlugin)) {
|
||||
String artifactsHost = VersionProperties.elasticsearch.endsWith("-SNAPSHOT") ? "https://snapshots.elastic.co" : "https://artifacts.elastic.co"
|
||||
String artifactsHost = VersionProperties.elasticsearch.toString().endsWith("-SNAPSHOT") ? "https://snapshots.elastic.co" : "https://artifacts.elastic.co"
|
||||
Closure sortClosure = { a, b -> b.group <=> a.group }
|
||||
Closure depJavadocClosure = { dep ->
|
||||
if (dep.group != null && dep.group.startsWith('org.elasticsearch')) {
|
||||
|
@ -550,17 +550,18 @@ class BuildPlugin implements Plugin<Project> {
|
||||
jarTask.destinationDir = new File(project.buildDir, 'distributions')
|
||||
// fixup the jar manifest
|
||||
jarTask.doFirst {
|
||||
boolean isSnapshot = VersionProperties.elasticsearch.endsWith("-SNAPSHOT");
|
||||
String version = VersionProperties.elasticsearch;
|
||||
if (isSnapshot) {
|
||||
version = version.substring(0, version.length() - 9)
|
||||
}
|
||||
final Version versionWithoutSnapshot = new Version(
|
||||
VersionProperties.elasticsearch.major,
|
||||
VersionProperties.elasticsearch.minor,
|
||||
VersionProperties.elasticsearch.revision,
|
||||
VersionProperties.elasticsearch.suffix,
|
||||
false)
|
||||
// this doFirst is added before the info plugin, therefore it will run
|
||||
// after the doFirst added by the info plugin, and we can override attributes
|
||||
jarTask.manifest.attributes(
|
||||
'X-Compile-Elasticsearch-Version': version,
|
||||
'X-Compile-Elasticsearch-Version': versionWithoutSnapshot,
|
||||
'X-Compile-Lucene-Version': VersionProperties.lucene,
|
||||
'X-Compile-Elasticsearch-Snapshot': isSnapshot,
|
||||
'X-Compile-Elasticsearch-Snapshot': VersionProperties.elasticsearch.isSnapshot(),
|
||||
'Build-Date': ZonedDateTime.now(ZoneOffset.UTC),
|
||||
'Build-Java-Version': project.compilerJavaVersion)
|
||||
if (jarTask.manifest.attributes.containsKey('Change') == false) {
|
||||
|
@ -74,20 +74,36 @@ public class Version {
|
||||
return "${major}.${minor}.${revision}${suffix}${snapshotStr}"
|
||||
}
|
||||
|
||||
public boolean before(Version compareTo) {
|
||||
return id < compareTo.id
|
||||
}
|
||||
|
||||
public boolean before(String compareTo) {
|
||||
return id < fromString(compareTo).id
|
||||
return before(fromString(compareTo))
|
||||
}
|
||||
|
||||
public boolean onOrBefore(Version compareTo) {
|
||||
return id <= compareTo.id
|
||||
}
|
||||
|
||||
public boolean onOrBefore(String compareTo) {
|
||||
return id <= fromString(compareTo).id
|
||||
return onOrBefore(fromString(compareTo))
|
||||
}
|
||||
|
||||
public boolean onOrAfter(Version compareTo) {
|
||||
return id >= compareTo.id
|
||||
}
|
||||
|
||||
public boolean onOrAfter(String compareTo) {
|
||||
return id >= fromString(compareTo).id
|
||||
return onOrAfter(fromString(compareTo))
|
||||
}
|
||||
|
||||
public boolean after(Version compareTo) {
|
||||
return id > compareTo.id
|
||||
}
|
||||
|
||||
public boolean after(String compareTo) {
|
||||
return id > fromString(compareTo).id
|
||||
return after(fromString(compareTo))
|
||||
}
|
||||
|
||||
public boolean onOrBeforeIncludingSuffix(Version otherVersion) {
|
||||
|
@ -22,7 +22,7 @@ package org.elasticsearch.gradle
|
||||
* Accessor for shared dependency versions used by elasticsearch, namely the elasticsearch and lucene versions.
|
||||
*/
|
||||
class VersionProperties {
|
||||
static final String elasticsearch
|
||||
static final Version elasticsearch
|
||||
static final String lucene
|
||||
static final Map<String, String> versions = new HashMap<>()
|
||||
static {
|
||||
@ -32,7 +32,7 @@ class VersionProperties {
|
||||
throw new RuntimeException('/version.properties resource missing')
|
||||
}
|
||||
props.load(propsStream)
|
||||
elasticsearch = props.getProperty('elasticsearch')
|
||||
elasticsearch = Version.fromString(props.getProperty('elasticsearch'))
|
||||
lucene = props.getProperty('lucene')
|
||||
for (String property : props.stringPropertyNames()) {
|
||||
versions.put(property, props.getProperty(property))
|
||||
|
@ -41,7 +41,7 @@ public class DocsTestPlugin extends RestTestPlugin {
|
||||
* to the version being built for testing but needs to resolve to
|
||||
* the last released version for docs. */
|
||||
'\\{version\\}':
|
||||
VersionProperties.elasticsearch.replace('-SNAPSHOT', ''),
|
||||
VersionProperties.elasticsearch.toString().replace('-SNAPSHOT', ''),
|
||||
'\\{lucene_version\\}' : VersionProperties.lucene.replaceAll('-snapshot-\\w+$', ''),
|
||||
]
|
||||
Task listSnippets = project.tasks.create('listSnippets', SnippetsTask)
|
||||
|
@ -77,7 +77,7 @@ class PluginPropertiesTask extends Copy {
|
||||
'name': extension.name,
|
||||
'description': extension.description,
|
||||
'version': stringSnap(extension.version),
|
||||
'elasticsearchVersion': stringSnap(VersionProperties.elasticsearch),
|
||||
'elasticsearchVersion': stringSnap(VersionProperties.elasticsearch.toString()),
|
||||
'javaVersion': project.targetCompatibility as String,
|
||||
'classname': extension.classname,
|
||||
'extendedPlugins': extension.extendedPlugins.join(','),
|
||||
|
@ -18,6 +18,7 @@
|
||||
*/
|
||||
package org.elasticsearch.gradle.test
|
||||
|
||||
import org.elasticsearch.gradle.Version
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.tasks.Input
|
||||
@ -37,7 +38,7 @@ class ClusterConfiguration {
|
||||
int numBwcNodes = 0
|
||||
|
||||
@Input
|
||||
String bwcVersion = null
|
||||
Version bwcVersion = null
|
||||
|
||||
@Input
|
||||
int httpPort = 0
|
||||
|
@ -107,11 +107,14 @@ class ClusterFormationTasks {
|
||||
for (int i = 0; i < config.numNodes; i++) {
|
||||
// we start N nodes and out of these N nodes there might be M bwc nodes.
|
||||
// for each of those nodes we might have a different configuration
|
||||
String elasticsearchVersion = VersionProperties.elasticsearch
|
||||
Configuration distro = currentDistro
|
||||
final Configuration distro
|
||||
final Version elasticsearchVersion
|
||||
if (i < config.numBwcNodes) {
|
||||
elasticsearchVersion = config.bwcVersion
|
||||
distro = bwcDistro
|
||||
} else {
|
||||
elasticsearchVersion = VersionProperties.elasticsearch
|
||||
distro = currentDistro
|
||||
}
|
||||
NodeInfo node = new NodeInfo(config, i, project, prefix, elasticsearchVersion, sharedDir)
|
||||
nodes.add(node)
|
||||
@ -126,7 +129,7 @@ class ClusterFormationTasks {
|
||||
}
|
||||
|
||||
/** Adds a dependency on the given distribution */
|
||||
static void configureDistributionDependency(Project project, String distro, Configuration configuration, String elasticsearchVersion) {
|
||||
static void configureDistributionDependency(Project project, String distro, Configuration configuration, Version elasticsearchVersion) {
|
||||
String packaging = distro
|
||||
if (distro == 'tar') {
|
||||
packaging = 'tar.gz'
|
||||
@ -137,7 +140,7 @@ class ClusterFormationTasks {
|
||||
}
|
||||
|
||||
/** Adds a dependency on a different version of the given plugin, which will be retrieved using gradle's dependency resolution */
|
||||
static void configureBwcPluginDependency(String name, Project project, Project pluginProject, Configuration configuration, String elasticsearchVersion) {
|
||||
static void configureBwcPluginDependency(String name, Project project, Project pluginProject, Configuration configuration, Version elasticsearchVersion) {
|
||||
verifyProjectHasBuildPlugin(name, elasticsearchVersion, project, pluginProject)
|
||||
final String pluginName = findPluginName(pluginProject)
|
||||
project.dependencies.add(configuration.name, "org.elasticsearch.plugin:${pluginName}:${elasticsearchVersion}@zip")
|
||||
@ -303,7 +306,7 @@ class ClusterFormationTasks {
|
||||
// Default the watermarks to absurdly low to prevent the tests from failing on nodes without enough disk space
|
||||
esConfig['cluster.routing.allocation.disk.watermark.low'] = '1b'
|
||||
esConfig['cluster.routing.allocation.disk.watermark.high'] = '1b'
|
||||
if (Version.fromString(node.nodeVersion).major >= 6) {
|
||||
if (node.nodeVersion.major >= 6) {
|
||||
esConfig['cluster.routing.allocation.disk.watermark.flood_stage'] = '1b'
|
||||
}
|
||||
// increase script compilation limit since tests can rapid-fire script compilations
|
||||
@ -803,7 +806,7 @@ class ClusterFormationTasks {
|
||||
return retVal
|
||||
}
|
||||
|
||||
static void verifyProjectHasBuildPlugin(String name, String version, Project project, Project pluginProject) {
|
||||
static void verifyProjectHasBuildPlugin(String name, Version version, Project project, Project pluginProject) {
|
||||
if (pluginProject.plugins.hasPlugin(PluginBuildPlugin) == false && pluginProject.plugins.hasPlugin(MetaPluginBuildPlugin) == false) {
|
||||
throw new GradleException("Task [${name}] cannot add plugin [${pluginProject.path}] with version [${version}] to project's " +
|
||||
"[${project.path}] dependencies: the plugin is not an esplugin or es_meta_plugin")
|
||||
|
@ -102,10 +102,10 @@ class NodeInfo {
|
||||
ByteArrayOutputStream buffer = new ByteArrayOutputStream()
|
||||
|
||||
/** the version of elasticsearch that this node runs */
|
||||
String nodeVersion
|
||||
Version nodeVersion
|
||||
|
||||
/** Holds node configuration for part of a test cluster. */
|
||||
NodeInfo(ClusterConfiguration config, int nodeNum, Project project, String prefix, String nodeVersion, File sharedDir) {
|
||||
NodeInfo(ClusterConfiguration config, int nodeNum, Project project, String prefix, Version nodeVersion, File sharedDir) {
|
||||
this.config = config
|
||||
this.nodeNum = nodeNum
|
||||
this.sharedDir = sharedDir
|
||||
@ -166,13 +166,13 @@ class NodeInfo {
|
||||
|
||||
final String javaHome
|
||||
final Map<Integer, JavaVersion> javaVersions = project.javaVersions
|
||||
if (Version.fromString(nodeVersion).before("6.2.0")) {
|
||||
if (nodeVersion.before("6.2.0")) {
|
||||
final String java8Home = javaVersions.get(8)
|
||||
if (java8Home == null) {
|
||||
throw new GradleException("JAVA8_HOME must be set to run BWC tests against [" + nodeVersion + "]")
|
||||
}
|
||||
javaHome = java8Home
|
||||
} else if (Version.fromString(nodeVersion).onOrAfter("6.2.0") && Version.fromString(nodeVersion).before("6.3.0")) {
|
||||
} else if (nodeVersion.onOrAfter("6.2.0") && nodeVersion.before("6.3.0")) {
|
||||
final String java9Home = javaVersions.get(9)
|
||||
if (java9Home == null) {
|
||||
throw new GradleException("JAVA9_HOME must be set to run BWC tests against [" + nodeVersion + "]")
|
||||
@ -304,7 +304,7 @@ class NodeInfo {
|
||||
}
|
||||
|
||||
/** Returns the directory elasticsearch home is contained in for the given distribution */
|
||||
static File homeDir(File baseDir, String distro, String nodeVersion) {
|
||||
static File homeDir(File baseDir, String distro, Version nodeVersion) {
|
||||
String path
|
||||
switch (distro) {
|
||||
case 'integ-test-zip':
|
||||
@ -322,7 +322,7 @@ class NodeInfo {
|
||||
return new File(baseDir, path)
|
||||
}
|
||||
|
||||
static File pathConf(File baseDir, String distro, String nodeVersion) {
|
||||
static File pathConf(File baseDir, String distro, Version nodeVersion) {
|
||||
switch (distro) {
|
||||
case 'integ-test-zip':
|
||||
case 'zip':
|
||||
|
Loading…
x
Reference in New Issue
Block a user