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: *

*/ 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