diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/AbstractTransportVersionFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/AbstractTransportVersionFuncTest.groovy
index 901a395fd5649..051a4f809fd25 100644
--- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/AbstractTransportVersionFuncTest.groovy
+++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/AbstractTransportVersionFuncTest.groovy
@@ -33,27 +33,27 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
}
}
- def namedTransportVersion(String name, String ids) {
- javaResource("myserver", "transport/definitions/named/" + name + ".csv", ids)
+ def referableTransportVersion(String name, String ids) {
+ javaResource("myserver", "transport/definitions/referable/" + name + ".csv", ids)
}
- def unreferencedTransportVersion(String name, String id) {
- javaResource("myserver", "transport/definitions/unreferenced/" + name + ".csv", id)
+ def unreferableTransportVersion(String name, String id) {
+ javaResource("myserver", "transport/definitions/unreferable/" + name + ".csv", id)
}
- def namedAndReferencedTransportVersion(String name, String ids) {
- return namedAndReferencedTransportVersion(name, ids, "Test${name.capitalize()}")
+ def referableAndReferencedTransportVersion(String name, String ids) {
+ return referableAndReferencedTransportVersion(name, ids, "Test${name.capitalize()}")
}
- def namedAndReferencedTransportVersion(String name, String ids, String classname) {
+ def referableAndReferencedTransportVersion(String name, String ids, String classname) {
javaSource("myserver", "org.elasticsearch", classname, "", """
static final TransportVersion usage = TransportVersion.fromName("${name}");
""")
- namedTransportVersion(name, ids)
+ referableTransportVersion(name, ids)
}
- def latestTransportVersion(String branch, String name, String id) {
- javaResource("myserver", "transport/latest/" + branch + ".csv","${name},${id}")
+ def transportVersionUpperBound(String branch, String name, String id) {
+ javaResource("myserver", "transport/upper_bounds/" + branch + ".csv","${name},${id}")
}
def validateReferencesFails(String project) {
@@ -87,11 +87,11 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
apply plugin: 'elasticsearch.transport-version-references'
apply plugin: 'elasticsearch.transport-version-resources'
"""
- namedTransportVersion("existing_91", "8012000")
- namedTransportVersion("existing_92", "8123000,8012001")
- unreferencedTransportVersion("initial_9_0_0", "8000000")
- latestTransportVersion("9.2", "existing_92", "8123000")
- latestTransportVersion("9.1", "existing_92", "8012001")
+ referableTransportVersion("existing_91", "8012000")
+ referableTransportVersion("existing_92", "8123000,8012001")
+ unreferableTransportVersion("initial_9_0_0", "8000000")
+ transportVersionUpperBound("9.2", "existing_92", "8123000")
+ transportVersionUpperBound("9.1", "existing_92", "8012001")
// a mock version of TransportVersion, just here so we can compile Dummy.java et al
javaSource("myserver", "org.elasticsearch", "TransportVersion", "", """
public static TransportVersion fromName(String name) {
diff --git a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy
index 56c260677d76c..3778ea3e62914 100644
--- a/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy
+++ b/build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionValidationFuncTest.groovy
@@ -38,22 +38,22 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes
def "references must be defined"() {
given:
- namedTransportVersion("not_used", "1000000")
+ referableTransportVersion("not_used", "1000000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/not_used.csv] is not referenced")
+ "[myserver/src/main/resources/transport/definitions/referable/not_used.csv] is not referenced")
}
def "names must be lowercase alphanum or underscore"() {
given:
- namedAndReferencedTransportVersion("${name}", "8100000", "TestNames")
+ referableAndReferencedTransportVersion("${name}", "8100000", "TestNames")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/${name}.csv] does not have a valid name, " +
+ "[myserver/src/main/resources/transport/definitions/referable/${name}.csv] does not have a valid name, " +
"must be lowercase alphanumeric and underscore")
where:
@@ -62,117 +62,117 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes
def "definitions contain at least one id"() {
given:
- namedAndReferencedTransportVersion("empty", "")
+ referableAndReferencedTransportVersion("empty", "")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/empty.csv] does not contain any ids")
+ "[myserver/src/main/resources/transport/definitions/referable/empty.csv] does not contain any ids")
}
def "definitions have ids in descending order"() {
given:
- namedAndReferencedTransportVersion("out_of_order", "8100000,8200000")
+ referableAndReferencedTransportVersion("out_of_order", "8100000,8200000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/out_of_order.csv] does not have ordered ids")
+ "[myserver/src/main/resources/transport/definitions/referable/out_of_order.csv] does not have ordered ids")
}
def "definition ids are unique"() {
given:
- namedAndReferencedTransportVersion("duplicate", "8123000")
+ referableAndReferencedTransportVersion("duplicate", "8123000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/existing_92.csv] contains id 8123000 already defined in " +
- "[myserver/src/main/resources/transport/definitions/named/duplicate.csv]")
+ "[myserver/src/main/resources/transport/definitions/referable/existing_92.csv] contains id 8123000 already defined in " +
+ "[myserver/src/main/resources/transport/definitions/referable/duplicate.csv]")
}
def "definitions have bwc ids with non-zero patch part"() {
given:
- namedAndReferencedTransportVersion("patched", "8200000,8100000")
+ referableAndReferencedTransportVersion("patched", "8200000,8100000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/patched.csv] contains bwc id [8100000] with a patch part of 0")
+ "[myserver/src/main/resources/transport/definitions/referable/patched.csv] contains bwc id [8100000] with a patch part of 0")
}
def "definitions have primary ids which cannot change"() {
given:
- namedTransportVersion("existing_92", "8500000")
+ referableTransportVersion("existing_92", "8500000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/existing_92.csv] has modified primary id from 8123000 to 8500000")
+ "[myserver/src/main/resources/transport/definitions/referable/existing_92.csv] has modified primary id from 8123000 to 8500000")
}
def "cannot change committed ids to a branch"() {
given:
- namedTransportVersion("existing_92", "8123000,8012002")
+ referableTransportVersion("existing_92", "8123000,8012002")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/existing_92.csv] modifies existing patch id from 8012001 to 8012002")
+ "[myserver/src/main/resources/transport/definitions/referable/existing_92.csv] modifies existing patch id from 8012001 to 8012002")
}
- def "latest files must reference defined name"() {
+ def "upper bounds files must reference defined name"() {
given:
- latestTransportVersion("9.2", "dne", "8123000")
+ transportVersionUpperBound("9.2", "dne", "8123000")
when:
def result = validateResourcesFails()
then:
- assertValidateResourcesFailure(result, "Latest transport version file " +
- "[myserver/src/main/resources/transport/latest/9.2.csv] contains transport version name [dne] which is not defined")
+ assertValidateResourcesFailure(result, "Transport version upper bound file " +
+ "[myserver/src/main/resources/transport/upper_bounds/9.2.csv] contains transport version name [dne] which is not defined")
}
- def "latest files id must exist in definition"() {
+ def "upper bound files id must exist in definition"() {
given:
- latestTransportVersion("9.2", "existing_92", "8124000")
+ transportVersionUpperBound("9.2", "existing_92", "8124000")
when:
def result = validateResourcesFails()
then:
- assertValidateResourcesFailure(result, "Latest transport version file " +
- "[myserver/src/main/resources/transport/latest/9.2.csv] has id 8124000 which is not in definition " +
- "[myserver/src/main/resources/transport/definitions/named/existing_92.csv]")
+ assertValidateResourcesFailure(result, "Transport version upper bound file " +
+ "[myserver/src/main/resources/transport/upper_bounds/9.2.csv] has id 8124000 which is not in definition " +
+ "[myserver/src/main/resources/transport/definitions/referable/existing_92.csv]")
}
- def "latest files have latest id within base"() {
+ def "upper bound files have latest id within base"() {
given:
- latestTransportVersion("9.0", "seemingly_latest", "8110001")
- namedAndReferencedTransportVersion("original", "8110000")
- namedAndReferencedTransportVersion("seemingly_latest", "8111000,8110001")
- namedAndReferencedTransportVersion("actual_latest", "8112000,8110002")
+ transportVersionUpperBound("9.0", "seemingly_latest", "8110001")
+ referableAndReferencedTransportVersion("original", "8110000")
+ referableAndReferencedTransportVersion("seemingly_latest", "8111000,8110001")
+ referableAndReferencedTransportVersion("actual_latest", "8112000,8110002")
when:
def result = validateResourcesFails()
then:
- assertValidateResourcesFailure(result, "Latest transport version file " +
- "[myserver/src/main/resources/transport/latest/9.0.csv] has id 8110001 from [seemingly_latest] with base 8110000 " +
+ assertValidateResourcesFailure(result, "Transport version upper bound file " +
+ "[myserver/src/main/resources/transport/upper_bounds/9.0.csv] has id 8110001 from [seemingly_latest] with base 8110000 " +
"but another id 8110002 from [actual_latest] is later for that base")
}
- def "latest files cannot change base id"() {
+ def "upper bound files cannot change base id"() {
given:
- namedAndReferencedTransportVersion("original", "8013000")
- namedAndReferencedTransportVersion("patch", "8015000,8013001")
- latestTransportVersion("9.1", "patch", "8013001")
+ referableAndReferencedTransportVersion("original", "8013000")
+ referableAndReferencedTransportVersion("patch", "8015000,8013001")
+ transportVersionUpperBound("9.1", "patch", "8013001")
when:
def result = validateResourcesFails()
then:
- assertValidateResourcesFailure(result, "Latest transport version file " +
- "[myserver/src/main/resources/transport/latest/9.1.csv] modifies base id from 8012000 to 8013000")
+ assertValidateResourcesFailure(result, "Transport version upper bound file " +
+ "[myserver/src/main/resources/transport/upper_bounds/9.1.csv] modifies base id from 8012000 to 8013000")
}
def "ids must be dense"() {
given:
- namedAndReferencedTransportVersion("original", "8013000")
- namedAndReferencedTransportVersion("patch1", "8015000,8013002")
- latestTransportVersion("9.0", "patch1", "8013002")
+ referableAndReferencedTransportVersion("original", "8013000")
+ referableAndReferencedTransportVersion("patch1", "8015000,8013002")
+ transportVersionUpperBound("9.0", "patch1", "8013002")
when:
def result = validateResourcesFails()
then:
@@ -181,49 +181,49 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes
def "primary id must not be patch version"() {
given:
- namedAndReferencedTransportVersion("patch", "8015001")
+ referableAndReferencedTransportVersion("patch", "8015001")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/patch.csv] has patch version 8015001 as primary id")
+ "[myserver/src/main/resources/transport/definitions/referable/patch.csv] has patch version 8015001 as primary id")
}
- def "unreferenced directory is optional"() {
+ def "unreferable directory is optional"() {
given:
- file("myserver/src/main/resources/transport/unreferenced/initial_9_0_0.csv").delete()
- file("myserver/src/main/resources/transport/unreferenced").deleteDir()
+ file("myserver/src/main/resources/transport/unreferable/initial_9_0_0.csv").delete()
+ file("myserver/src/main/resources/transport/unreferable").deleteDir()
when:
def result = gradleRunner(":myserver:validateTransportVersionResources").build()
then:
result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
}
- def "latest can refer to an unreferenced definition"() {
+ def "upper bound can refer to an unreferable definition"() {
given:
- unreferencedTransportVersion("initial_10.0.0", "10000000")
- latestTransportVersion("10.0", "initial_10.0.0", "10000000")
+ unreferableTransportVersion("initial_10.0.0", "10000000")
+ transportVersionUpperBound("10.0", "initial_10.0.0", "10000000")
when:
def result = gradleRunner(":myserver:validateTransportVersionResources").build()
then:
result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
}
- def "named and unreferenced definitions cannot have the same name"() {
+ def "referable and unreferable definitions cannot have the same name"() {
given:
- unreferencedTransportVersion("existing_92", "10000000")
+ unreferableTransportVersion("existing_92", "10000000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
- "[myserver/src/main/resources/transport/definitions/named/existing_92.csv] " +
- "has same name as unreferenced definition " +
- "[myserver/src/main/resources/transport/definitions/unreferenced/existing_92.csv]")
+ "[myserver/src/main/resources/transport/definitions/referable/existing_92.csv] " +
+ "has same name as unreferable definition " +
+ "[myserver/src/main/resources/transport/definitions/unreferable/existing_92.csv]")
}
- def "unreferenced definitions can have primary ids that are patches"() {
+ def "unreferable definitions can have primary ids that are patches"() {
given:
- unreferencedTransportVersion("initial_10.0.1", "10000001")
+ unreferableTransportVersion("initial_10.0.1", "10000001")
when:
def result = gradleRunner(":myserver:validateTransportVersionResources").build()
then:
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesService.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesService.java
index 27d3ab927f732..239ab0c9ab493 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesService.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesService.java
@@ -40,12 +40,12 @@
*
*
The layout of the transport version resources are as follows:
*
- * - /transport/definitions/named/
+ *
- /transport/definitions/referable/
* - Definitions that can be looked up by name. The name is the filename before the .csv suffix.
- * - /transport/definitions/unreferenced/
+ *
- /transport/definitions/unreferable/
* - Definitions which contain ids that are known at runtime, but cannot be looked up by name.
- * - /transport/latest/
- * - The latest transport version definition for each release branch.
+ * - /transport/upper_bounds/
+ * - The maximum transport version definition that will be loaded for each release branch.
*
*/
public abstract class TransportVersionResourcesService implements BuildService {
@@ -60,9 +60,9 @@ public interface Parameters extends BuildServiceParameters {
public abstract ExecOperations getExecOperations();
private static final Path DEFINITIONS_DIR = Path.of("definitions");
- private static final Path NAMED_DIR = DEFINITIONS_DIR.resolve("named");
- private static final Path UNREFERENCED_DIR = DEFINITIONS_DIR.resolve("unreferenced");
- private static final Path LATEST_DIR = Path.of("latest");
+ private static final Path REFERABLE_DIR = DEFINITIONS_DIR.resolve("referable");
+ private static final Path UNREFERABLE_DIR = DEFINITIONS_DIR.resolve("unreferable");
+ private static final Path UPPER_BOUNDS_DIR = Path.of("upper_bounds");
private final Path transportResourcesDir;
private final Path rootDir;
@@ -91,79 +91,79 @@ Path getDefinitionsDir() {
return transportResourcesDir.resolve(DEFINITIONS_DIR);
}
- // return the path, relative to the resources dir, of a named definition
- private Path getNamedDefinitionRelativePath(String name) {
- return NAMED_DIR.resolve(name + ".csv");
+ // return the path, relative to the resources dir, of a referable definition
+ private Path getReferableDefinitionRelativePath(String name) {
+ return REFERABLE_DIR.resolve(name + ".csv");
}
- /** Return all named definitions, mapped by their name. */
- Map getNamedDefinitions() throws IOException {
- return readDefinitions(transportResourcesDir.resolve(NAMED_DIR));
+ /** Return all referable definitions, mapped by their name. */
+ Map getReferableDefinitions() throws IOException {
+ return readDefinitions(transportResourcesDir.resolve(REFERABLE_DIR));
}
- /** Get a named definition from main if it exists there, or null otherwise */
- TransportVersionDefinition getNamedDefinitionFromMain(String name) {
- Path resourcePath = getNamedDefinitionRelativePath(name);
+ /** Get a referable definition from main if it exists there, or null otherwise */
+ TransportVersionDefinition getReferableDefinitionFromMain(String name) {
+ Path resourcePath = getReferableDefinitionRelativePath(name);
return getMainFile(resourcePath, TransportVersionDefinition::fromString);
}
- /** Test whether the given named definition exists */
- boolean namedDefinitionExists(String name) {
- return Files.exists(transportResourcesDir.resolve(getNamedDefinitionRelativePath(name)));
+ /** Test whether the given referable definition exists */
+ boolean referableDefinitionExists(String name) {
+ return Files.exists(transportResourcesDir.resolve(getReferableDefinitionRelativePath(name)));
}
/** Return the path within the repository of the given named definition */
- Path getNamedDefinitionRepositoryPath(TransportVersionDefinition definition) {
- return rootDir.relativize(transportResourcesDir.resolve(getNamedDefinitionRelativePath(definition.name())));
+ Path getReferableDefinitionRepositoryPath(TransportVersionDefinition definition) {
+ return rootDir.relativize(transportResourcesDir.resolve(getReferableDefinitionRelativePath(definition.name())));
}
- // return the path, relative to the resources dir, of an unreferenced definition
- private Path getUnreferencedDefinitionRelativePath(String name) {
- return UNREFERENCED_DIR.resolve(name + ".csv");
+ // return the path, relative to the resources dir, of an unreferable definition
+ private Path getUnreferableDefinitionRelativePath(String name) {
+ return UNREFERABLE_DIR.resolve(name + ".csv");
}
- /** Return all unreferenced definitions, mapped by their name. */
- Map getUnreferencedDefinitions() throws IOException {
- return readDefinitions(transportResourcesDir.resolve(UNREFERENCED_DIR));
+ /** Return all unreferable definitions, mapped by their name. */
+ Map getUnreferableDefinitions() throws IOException {
+ return readDefinitions(transportResourcesDir.resolve(UNREFERABLE_DIR));
}
- /** Get a named definition from main if it exists there, or null otherwise */
- TransportVersionDefinition getUnreferencedDefinitionFromMain(String name) {
- Path resourcePath = getUnreferencedDefinitionRelativePath(name);
+ /** Get a referable definition from main if it exists there, or null otherwise */
+ TransportVersionDefinition getUnreferableDefinitionFromMain(String name) {
+ Path resourcePath = getUnreferableDefinitionRelativePath(name);
return getMainFile(resourcePath, TransportVersionDefinition::fromString);
}
- /** Return the path within the repository of the given named definition */
- Path getUnreferencedDefinitionRepositoryPath(TransportVersionDefinition definition) {
- return rootDir.relativize(transportResourcesDir.resolve(getUnreferencedDefinitionRelativePath(definition.name())));
+ /** Return the path within the repository of the given referable definition */
+ Path getUnreferableDefinitionRepositoryPath(TransportVersionDefinition definition) {
+ return rootDir.relativize(transportResourcesDir.resolve(getUnreferableDefinitionRelativePath(definition.name())));
}
- /** Read all latest files and return them mapped by their release branch */
- Map getLatestByReleaseBranch() throws IOException {
- Map latests = new HashMap<>();
- try (var stream = Files.list(transportResourcesDir.resolve(LATEST_DIR))) {
+ /** Read all upper bound files and return them mapped by their release branch */
+ Map getUpperBounds() throws IOException {
+ Map upperBounds = new HashMap<>();
+ try (var stream = Files.list(transportResourcesDir.resolve(UPPER_BOUNDS_DIR))) {
for (var latestFile : stream.toList()) {
String contents = Files.readString(latestFile, StandardCharsets.UTF_8).strip();
- var latest = TransportVersionLatest.fromString(latestFile, contents);
- latests.put(latest.name(), latest);
+ var upperBound = TransportVersionUpperBound.fromString(latestFile, contents);
+ upperBounds.put(upperBound.branch(), upperBound);
}
}
- return latests;
+ return upperBounds;
}
/** Retrieve the latest transport version for the given release branch on main */
- TransportVersionLatest getLatestFromMain(String releaseBranch) {
- Path resourcePath = getLatestRelativePath(releaseBranch);
- return getMainFile(resourcePath, TransportVersionLatest::fromString);
+ TransportVersionUpperBound getUpperBoundFromMain(String releaseBranch) {
+ Path resourcePath = getUpperBoundRelativePath(releaseBranch);
+ return getMainFile(resourcePath, TransportVersionUpperBound::fromString);
}
/** Return the path within the repository of the given latest */
- Path getLatestRepositoryPath(TransportVersionLatest latest) {
- return rootDir.relativize(transportResourcesDir.resolve(getLatestRelativePath(latest.branch())));
+ Path getUpperBoundRepositoryPath(TransportVersionUpperBound latest) {
+ return rootDir.relativize(transportResourcesDir.resolve(getUpperBoundRelativePath(latest.branch())));
}
- private Path getLatestRelativePath(String releaseBranch) {
- return LATEST_DIR.resolve(releaseBranch + ".csv");
+ private Path getUpperBoundRelativePath(String releaseBranch) {
+ return UPPER_BOUNDS_DIR.resolve(releaseBranch + ".csv");
}
// Return the transport version resources paths that exist in main
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionLatest.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionUpperBound.java
similarity index 62%
rename from build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionLatest.java
rename to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionUpperBound.java
index 5f1073a2f573a..104a51ab79f70 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionLatest.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionUpperBound.java
@@ -11,17 +11,22 @@
import java.nio.file.Path;
-record TransportVersionLatest(String branch, String name, TransportVersionId id) {
- public static TransportVersionLatest fromString(Path file, String contents) {
+/**
+ * An object to represent the loaded version of a transport version upper bound.
+ *
+ * An upper bound is the maximum transport version id that should be loaded for a given release branch.
+ */
+record TransportVersionUpperBound(String branch, String name, TransportVersionId id) {
+ public static TransportVersionUpperBound fromString(Path file, String contents) {
String filename = file.getFileName().toString();
assert filename.endsWith(".csv");
String branch = filename.substring(0, filename.length() - 4);
String[] parts = contents.split(",");
if (parts.length != 2) {
- throw new IllegalStateException("Invalid transport version latest file [" + file + "]: " + contents);
+ throw new IllegalStateException("Invalid transport version upper bound file [" + file + "]: " + contents);
}
- return new TransportVersionLatest(branch, parts[0], TransportVersionId.fromString(parts[1]));
+ return new TransportVersionUpperBound(branch, parts[0], TransportVersionId.fromString(parts[1]));
}
}
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionReferencesTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionReferencesTask.java
index 2ddfeb2f4d060..d72a4f097218e 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionReferencesTask.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionReferencesTask.java
@@ -25,7 +25,7 @@
import java.nio.file.Path;
/**
- * Validates that each transport version named reference has a constant definition.
+ * Validates that each transport version reference has a referable definition.
*/
@CacheableTask
public abstract class ValidateTransportVersionReferencesTask extends DefaultTask {
@@ -50,7 +50,7 @@ public void validateTransportVersions() throws IOException {
TransportVersionResourcesService resources = getTransportResources().get();
for (var tvReference : TransportVersionReference.listFromFile(namesFile)) {
- if (resources.namedDefinitionExists(tvReference.name()) == false) {
+ if (resources.referableDefinitionExists(tvReference.name()) == false) {
throw new RuntimeException(
"TransportVersion.fromName(\""
+ tvReference.name()
diff --git a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java
index fab178d304a87..44e9bde8352f2 100644
--- a/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java
+++ b/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/ValidateTransportVersionResourcesTask.java
@@ -62,17 +62,17 @@ private record IdAndDefinition(TransportVersionId id, TransportVersionDefinition
public void validateTransportVersions() throws IOException {
TransportVersionResourcesService resources = getResources().get();
Set referencedNames = TransportVersionReference.collectNames(getReferencesFiles());
- Map namedDefinitions = resources.getNamedDefinitions();
- Map unreferencedDefinitions = resources.getUnreferencedDefinitions();
- Map allDefinitions = collectAllDefinitions(namedDefinitions, unreferencedDefinitions);
+ Map referableDefinitions = resources.getReferableDefinitions();
+ Map unreferableDefinitions = resources.getUnreferableDefinitions();
+ Map allDefinitions = collectAllDefinitions(referableDefinitions, unreferableDefinitions);
Map> idsByBase = collectIdsByBase(allDefinitions.values());
- Map latestByReleaseBranch = resources.getLatestByReleaseBranch();
+ Map upperBounds = resources.getUpperBounds();
- for (var definition : namedDefinitions.values()) {
+ for (var definition : referableDefinitions.values()) {
validateNamedDefinition(definition, referencedNames);
}
- for (var definition : unreferencedDefinitions.values()) {
+ for (var definition : unreferableDefinitions.values()) {
validateUnreferencedDefinition(definition);
}
@@ -80,21 +80,21 @@ public void validateTransportVersions() throws IOException {
validateBase(entry.getKey(), entry.getValue());
}
- for (var latest : latestByReleaseBranch.values()) {
- validateLatest(latest, allDefinitions, idsByBase);
+ for (var upperBound : upperBounds.values()) {
+ validateUpperBound(upperBound, allDefinitions, idsByBase);
}
}
private Map collectAllDefinitions(
- Map namedDefinitions,
- Map unreferencedDefinitions
+ Map referableDefinitions,
+ Map unreferableDefinitions
) {
- Map allDefinitions = new HashMap<>(namedDefinitions);
- for (var entry : unreferencedDefinitions.entrySet()) {
+ Map allDefinitions = new HashMap<>(referableDefinitions);
+ for (var entry : unreferableDefinitions.entrySet()) {
TransportVersionDefinition existing = allDefinitions.put(entry.getKey(), entry.getValue());
if (existing != null) {
- Path unreferencedPath = getResources().get().getUnreferencedDefinitionRepositoryPath(entry.getValue());
- throwDefinitionFailure(existing, "has same name as unreferenced definition [" + unreferencedPath + "]");
+ Path unreferablePath = getResources().get().getUnreferableDefinitionRepositoryPath(entry.getValue());
+ throwDefinitionFailure(existing, "has same name as unreferable definition [" + unreferablePath + "]");
}
}
return allDefinitions;
@@ -123,7 +123,7 @@ private void validateNamedDefinition(TransportVersionDefinition definition, Set<
// validate any modifications
Map existingIdsByBase = new HashMap<>();
- TransportVersionDefinition originalDefinition = getResources().get().getNamedDefinitionFromMain(definition.name());
+ TransportVersionDefinition originalDefinition = getResources().get().getReferableDefinitionFromMain(definition.name());
if (originalDefinition != null) {
validateIdenticalPrimaryId(definition, originalDefinition);
originalDefinition.ids().forEach(id -> existingIdsByBase.put(id.base(), id));
@@ -163,7 +163,7 @@ private void validateNamedDefinition(TransportVersionDefinition definition, Set<
}
private void validateUnreferencedDefinition(TransportVersionDefinition definition) {
- TransportVersionDefinition originalDefinition = getResources().get().getUnreferencedDefinitionFromMain(definition.name());
+ TransportVersionDefinition originalDefinition = getResources().get().getUnreferableDefinitionFromMain(definition.name());
if (originalDefinition != null) {
validateIdenticalPrimaryId(definition, originalDefinition);
}
@@ -186,31 +186,31 @@ private void validateIdenticalPrimaryId(TransportVersionDefinition definition, T
}
}
- private void validateLatest(
- TransportVersionLatest latest,
+ private void validateUpperBound(
+ TransportVersionUpperBound upperBound,
Map definitions,
Map> idsByBase
) {
- TransportVersionDefinition latestDefinition = definitions.get(latest.name());
- if (latestDefinition == null) {
- throwLatestFailure(latest, "contains transport version name [" + latest.name() + "] which is not defined");
+ TransportVersionDefinition upperBoundDefinition = definitions.get(upperBound.name());
+ if (upperBoundDefinition == null) {
+ throwUpperBoundFailure(upperBound, "contains transport version name [" + upperBound.name() + "] which is not defined");
}
- if (latestDefinition.ids().contains(latest.id()) == false) {
- Path relativePath = getResources().get().getNamedDefinitionRepositoryPath(latestDefinition);
- throwLatestFailure(latest, "has id " + latest.id() + " which is not in definition [" + relativePath + "]");
+ if (upperBoundDefinition.ids().contains(upperBound.id()) == false) {
+ Path relativePath = getResources().get().getReferableDefinitionRepositoryPath(upperBoundDefinition);
+ throwUpperBoundFailure(upperBound, "has id " + upperBound.id() + " which is not in definition [" + relativePath + "]");
}
- List baseIds = idsByBase.get(latest.id().base());
+ List baseIds = idsByBase.get(upperBound.id().base());
IdAndDefinition lastId = baseIds.getLast();
- if (lastId.id().complete() != latest.id().complete()) {
- throwLatestFailure(
- latest,
+ if (lastId.id().complete() != upperBound.id().complete()) {
+ throwUpperBoundFailure(
+ upperBound,
"has id "
- + latest.id()
+ + upperBound.id()
+ " from ["
- + latest.name()
+ + upperBound.name()
+ "] with base "
- + latest.id().base()
+ + upperBound.id().base()
+ " but another id "
+ lastId.id().complete()
+ " from ["
@@ -219,10 +219,13 @@ private void validateLatest(
);
}
- TransportVersionLatest existingLatest = getResources().get().getLatestFromMain(latest.branch());
- if (existingLatest != null) {
- if (latest.id().patch() != 0 && latest.id().base() != existingLatest.id().base()) {
- throwLatestFailure(latest, "modifies base id from " + existingLatest.id().base() + " to " + latest.id().base());
+ TransportVersionUpperBound existingUpperBound = getResources().get().getUpperBoundFromMain(upperBound.branch());
+ if (existingUpperBound != null) {
+ if (upperBound.id().patch() != 0 && upperBound.id().base() != existingUpperBound.id().base()) {
+ throwUpperBoundFailure(
+ upperBound,
+ "modifies base id from " + existingUpperBound.id().base() + " to " + upperBound.id().base()
+ );
}
}
}
@@ -234,7 +237,7 @@ private void validateBase(int base, List ids) {
IdAndDefinition current = ids.get(ndx);
if (previous.id().equals(current.id())) {
- Path existingDefinitionPath = getResources().get().getNamedDefinitionRepositoryPath(previous.definition);
+ Path existingDefinitionPath = getResources().get().getReferableDefinitionRepositoryPath(previous.definition);
throwDefinitionFailure(
current.definition(),
"contains id " + current.id + " already defined in [" + existingDefinitionPath + "]"
@@ -251,12 +254,12 @@ private void validateBase(int base, List ids) {
}
private void throwDefinitionFailure(TransportVersionDefinition definition, String message) {
- Path relativePath = getResources().get().getNamedDefinitionRepositoryPath(definition);
+ Path relativePath = getResources().get().getReferableDefinitionRepositoryPath(definition);
throw new IllegalStateException("Transport version definition file [" + relativePath + "] " + message);
}
- private void throwLatestFailure(TransportVersionLatest latest, String message) {
- Path relativePath = getResources().get().getLatestRepositoryPath(latest);
- throw new IllegalStateException("Latest transport version file [" + relativePath + "] " + message);
+ private void throwUpperBoundFailure(TransportVersionUpperBound upperBound, String message) {
+ Path relativePath = getResources().get().getUpperBoundRepositoryPath(upperBound);
+ throw new IllegalStateException("Transport version upper bound file [" + relativePath + "] " + message);
}
}
diff --git a/server/src/main/java/org/elasticsearch/TransportVersion.java b/server/src/main/java/org/elasticsearch/TransportVersion.java
index 3cfebd440d2e3..93a3b9a30aa92 100644
--- a/server/src/main/java/org/elasticsearch/TransportVersion.java
+++ b/server/src/main/java/org/elasticsearch/TransportVersion.java
@@ -105,8 +105,8 @@ static T parseFromBufferedReader(
/**
* Constructs a named transport version along with its set of compatible patch versions from x-content.
- * This method takes in the parameter {@code latest} which is the highest valid transport version id
- * supported by this node. Versions newer than the current transport version id for this node are discarded.
+ * This method takes in the parameter {@code upperBound} which is the highest transport version id
+ * that will be loaded by this node.
*/
public static TransportVersion fromBufferedReader(
String component,
@@ -114,7 +114,7 @@ public static TransportVersion fromBufferedReader(
boolean nameInFile,
boolean isNamed,
BufferedReader bufferedReader,
- Integer latest
+ Integer upperBound
) {
try {
String line = bufferedReader.readLine();
@@ -152,7 +152,7 @@ public static TransportVersion fromBufferedReader(
if (idIndex > 0 && ids.get(idIndex - 1) <= ids.get(idIndex)) {
throw new IllegalStateException("invalid transport version file format [" + toComponentPath(component, path) + "]");
}
- if (ids.get(idIndex) > latest) {
+ if (ids.get(idIndex) > upperBound) {
break;
}
transportVersion = new TransportVersion(name, ids.get(idIndex), transportVersion);
@@ -165,20 +165,21 @@ public static TransportVersion fromBufferedReader(
public static List collectFromInputStreams(
String component,
- Function nameToStream,
- String latestFileName
+ String resourceRoot,
+ Function resourceLoader,
+ String upperBoundFileName
) {
- TransportVersion latest = parseFromBufferedReader(
+ TransportVersion upperBound = parseFromBufferedReader(
component,
- "/transport/latest/" + latestFileName,
- nameToStream,
+ resourceRoot + "/upper_bounds/" + upperBoundFileName,
+ resourceLoader,
(c, p, br) -> fromBufferedReader(c, p, true, false, br, Integer.MAX_VALUE)
);
- if (latest != null) {
+ if (upperBound != null) {
List versionRelativePaths = parseFromBufferedReader(
component,
- "/transport/definitions/manifest.txt",
- nameToStream,
+ resourceRoot + "/definitions/manifest.txt",
+ resourceLoader,
(c, p, br) -> br.lines().filter(line -> line.isBlank() == false).toList()
);
if (versionRelativePaths != null) {
@@ -186,9 +187,9 @@ public static List collectFromInputStreams(
for (String versionRelativePath : versionRelativePaths) {
TransportVersion transportVersion = parseFromBufferedReader(
component,
- "/transport/definitions/" + versionRelativePath,
- nameToStream,
- (c, p, br) -> fromBufferedReader(c, p, false, versionRelativePath.startsWith("named/"), br, latest.id())
+ resourceRoot + "/definitions/" + versionRelativePath,
+ resourceLoader,
+ (c, p, br) -> fromBufferedReader(c, p, false, versionRelativePath.startsWith("referable/"), br, upperBound.id())
);
if (transportVersion != null) {
transportVersions.add(transportVersion);
@@ -227,7 +228,7 @@ public static TransportVersion fromId(int id) {
* Finds a {@link TransportVersion} by its name. The parameter {@code name} must be a {@link String}
* direct value or validation checks will fail. {@code TransportVersion.fromName("direct_value")}.
*
- * This will only return the latest known named transport version for a given name and not its
+ * This will only return the latest known referable transport version for a given name and not its
* patch versions. Patch versions are constructed as a linked list internally and may be found by
* cycling through them in a loop using {@link TransportVersion#nextPatchVersion()}.
*
@@ -339,7 +340,7 @@ public boolean isPatchFrom(TransportVersion version) {
* and all of its patch ids for compatibility. This replaces the pattern
* of {@code wireTV.onOrAfter(TV_FEATURE) || wireTV.isPatchFrom(TV_FEATURE_BACKPORT) || ...}
* for unnamed transport versions with {@code wireTV.supports(TV_FEATURE)} for named
- * transport versions (since named versions know about their own patch versions).
+ * transport versions (since referable versions know about their own patch versions).
*
* The recommended use of this method is to declare a static final {@link TransportVersion}
* as part of the file that it's used in. This constant is then used in conjunction with
@@ -410,10 +411,10 @@ public String toString() {
}
/**
- * This class holds various data structures for looking up known transport versions both
- * named and unnamed. While we transition to named transport versions, this class will
+ * This class holds various data structures for loading transport versions, both
+ * named file-based definitions and unnamed. While we transition to file-based transport versions, this class will
* load and merge unnamed transport versions from {@link TransportVersions} along with
- * named transport versions specified in a manifest file in resources.
+ * transport version definitions specified in a manifest file in resources.
*/
private static class VersionsHolder {
@@ -428,6 +429,7 @@ private static class VersionsHolder {
List allVersions = new ArrayList<>(TransportVersions.DEFINED_VERSIONS);
List streamVersions = collectFromInputStreams(
"",
+ "/transport",
TransportVersion.class::getResourceAsStream,
Version.CURRENT.major + "." + Version.CURRENT.minor + ".csv"
);
diff --git a/server/src/main/resources/transport/definitions/named/esql_split_on_big_values.csv b/server/src/main/resources/transport/definitions/referable/esql_split_on_big_values.csv
similarity index 100%
rename from server/src/main/resources/transport/definitions/named/esql_split_on_big_values.csv
rename to server/src/main/resources/transport/definitions/referable/esql_split_on_big_values.csv
diff --git a/server/src/main/resources/transport/definitions/named/ml_rollover_legacy_indices.csv b/server/src/main/resources/transport/definitions/referable/ml_rollover_legacy_indices.csv
similarity index 100%
rename from server/src/main/resources/transport/definitions/named/ml_rollover_legacy_indices.csv
rename to server/src/main/resources/transport/definitions/referable/ml_rollover_legacy_indices.csv
diff --git a/server/src/main/resources/transport/definitions/unreferenced/initial_elasticsearch_8_18_5.csv b/server/src/main/resources/transport/definitions/unreferable/initial_elasticsearch_8_18_5.csv
similarity index 100%
rename from server/src/main/resources/transport/definitions/unreferenced/initial_elasticsearch_8_18_5.csv
rename to server/src/main/resources/transport/definitions/unreferable/initial_elasticsearch_8_18_5.csv
diff --git a/server/src/main/resources/transport/definitions/unreferenced/initial_elasticsearch_9_0_5.csv b/server/src/main/resources/transport/definitions/unreferable/initial_elasticsearch_9_0_5.csv
similarity index 100%
rename from server/src/main/resources/transport/definitions/unreferenced/initial_elasticsearch_9_0_5.csv
rename to server/src/main/resources/transport/definitions/unreferable/initial_elasticsearch_9_0_5.csv
diff --git a/server/src/main/resources/transport/latest/8.18.csv b/server/src/main/resources/transport/upper_bounds/8.18.csv
similarity index 100%
rename from server/src/main/resources/transport/latest/8.18.csv
rename to server/src/main/resources/transport/upper_bounds/8.18.csv
diff --git a/server/src/main/resources/transport/latest/8.19.csv b/server/src/main/resources/transport/upper_bounds/8.19.csv
similarity index 100%
rename from server/src/main/resources/transport/latest/8.19.csv
rename to server/src/main/resources/transport/upper_bounds/8.19.csv
diff --git a/server/src/main/resources/transport/latest/9.0.csv b/server/src/main/resources/transport/upper_bounds/9.0.csv
similarity index 100%
rename from server/src/main/resources/transport/latest/9.0.csv
rename to server/src/main/resources/transport/upper_bounds/9.0.csv
diff --git a/server/src/main/resources/transport/latest/9.1.csv b/server/src/main/resources/transport/upper_bounds/9.1.csv
similarity index 100%
rename from server/src/main/resources/transport/latest/9.1.csv
rename to server/src/main/resources/transport/upper_bounds/9.1.csv
diff --git a/server/src/main/resources/transport/latest/9.2.csv b/server/src/main/resources/transport/upper_bounds/9.2.csv
similarity index 100%
rename from server/src/main/resources/transport/latest/9.2.csv
rename to server/src/main/resources/transport/upper_bounds/9.2.csv