Skip to content

Commit 5d00666

Browse files
committed
Move inner records out of TransportVersionUtils
The utilities class has basically become a package itself. This commit moves inner records from TransportversionUtils and some related functions out to their own files.
1 parent a995a12 commit 5d00666

15 files changed

+172
-135
lines changed

build-tools-internal/build.gradle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,13 @@ gradlePlugin {
220220
id = 'elasticsearch.internal-yaml-rest-test'
221221
implementationClass = 'org.elasticsearch.gradle.internal.test.rest.InternalYamlRestTestPlugin'
222222
}
223-
transportVersionManagementPlugin {
224-
id = 'elasticsearch.transport-version-management'
225-
implementationClass = 'org.elasticsearch.gradle.internal.transport.TransportVersionManagementPlugin'
223+
transportVersionReferencesPlugin {
224+
id = 'elasticsearch.transport-version-references'
225+
implementationClass = 'org.elasticsearch.gradle.internal.transport.TransportVersionReferencesPlugin'
226226
}
227-
globalTransportVersionManagementPlugin {
228-
id = 'elasticsearch.global-transport-version-management'
229-
implementationClass = 'org.elasticsearch.gradle.internal.transport.GlobalTransportVersionManagementPlugin'
227+
transportVersionResourcesPlugin {
228+
id = 'elasticsearch.transport-version-resources'
229+
implementationClass = 'org.elasticsearch.gradle.internal.transport.TransportVersionResourcesPlugin'
230230
}
231231
}
232232
}

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionManagementPluginFuncTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ class TransportVersionManagementPluginFuncTest extends AbstractGradleFuncTest {
9292

9393
file("myserver/build.gradle") << """
9494
apply plugin: 'java-library'
95-
apply plugin: 'elasticsearch.transport-version-management'
96-
apply plugin: 'elasticsearch.global-transport-version-management'
95+
apply plugin: 'elasticsearch.transport-version-references'
96+
apply plugin: 'elasticsearch.transport-version-resources'
9797
"""
9898
definedTransportVersion("existing_91", "8012000")
9999
definedTransportVersion("existing_92", "8123000,8012001")
@@ -112,7 +112,7 @@ class TransportVersionManagementPluginFuncTest extends AbstractGradleFuncTest {
112112

113113
file("myplugin/build.gradle") << """
114114
apply plugin: 'java-library'
115-
apply plugin: 'elasticsearch.transport-version-management'
115+
apply plugin: 'elasticsearch.transport-version-resources'
116116
117117
dependencies {
118118
implementation project(":myserver")

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/BaseInternalPluginBuildPlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.elasticsearch.gradle.internal.info.BuildParameterExtension;
1616
import org.elasticsearch.gradle.internal.precommit.JarHellPrecommitPlugin;
1717
import org.elasticsearch.gradle.internal.test.ClusterFeaturesMetadataPlugin;
18-
import org.elasticsearch.gradle.internal.transport.TransportVersionManagementPlugin;
18+
import org.elasticsearch.gradle.internal.transport.TransportVersionReferencesPlugin;
1919
import org.elasticsearch.gradle.plugin.PluginBuildPlugin;
2020
import org.elasticsearch.gradle.plugin.PluginPropertiesExtension;
2121
import org.elasticsearch.gradle.util.GradleUtils;
@@ -37,7 +37,7 @@ public void apply(Project project) {
3737
project.getPluginManager().apply(JarHellPrecommitPlugin.class);
3838
project.getPluginManager().apply(ElasticsearchJavaPlugin.class);
3939
project.getPluginManager().apply(ClusterFeaturesMetadataPlugin.class);
40-
project.getPluginManager().apply(TransportVersionManagementPlugin.class);
40+
project.getPluginManager().apply(TransportVersionReferencesPlugin.class);
4141
boolean isCi = project.getRootProject().getExtensions().getByType(BuildParameterExtension.class).getCi();
4242
// Clear default dependencies added by public PluginBuildPlugin as we add our
4343
// own project dependencies for internal builds

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/CollectTransportVersionReferencesTask.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public abstract class CollectTransportVersionReferencesTask extends DefaultTask
6161

6262
@TaskAction
6363
public void checkTransportVersion() throws IOException {
64-
var results = new HashSet<TransportVersionUtils.TransportVersionReference>();
64+
var results = new HashSet<TransportVersionReference>();
6565

6666
for (var cpElement : getClassPath()) {
6767
Path file = cpElement.toPath();
@@ -74,7 +74,7 @@ public void checkTransportVersion() throws IOException {
7474
Files.writeString(outputFile, String.join("\n", results.stream().map(Object::toString).sorted().toList()));
7575
}
7676

77-
private void addNamesFromClassesDirectory(Set<TransportVersionUtils.TransportVersionReference> results, Path basePath)
77+
private void addNamesFromClassesDirectory(Set<TransportVersionReference> results, Path basePath)
7878
throws IOException {
7979
Files.walkFileTree(basePath, new SimpleFileVisitor<>() {
8080
@Override
@@ -90,7 +90,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
9090
});
9191
}
9292

93-
private void addNamesFromClass(Set<TransportVersionUtils.TransportVersionReference> results, InputStream classBytes, String classname)
93+
private void addNamesFromClass(Set<TransportVersionReference> results, InputStream classBytes, String classname)
9494
throws IOException {
9595
ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM9) {
9696
@Override
@@ -111,7 +111,7 @@ public void visitMethodInsn(int opcode, String owner, String name, String descri
111111
if (abstractInstruction instanceof LdcInsnNode ldcInsnNode
112112
&& ldcInsnNode.cst instanceof String tvName
113113
&& tvName.isEmpty() == false) {
114-
results.add(new TransportVersionUtils.TransportVersionReference(tvName, location));
114+
results.add(new TransportVersionReference(tvName, location));
115115
} else {
116116
// The instruction is not a LDC with a String constant (or an empty String), which is not allowed.
117117
throw new RuntimeException(
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
record TransportVersionDefinition(String name, List<TransportVersionId> ids) {
16+
public static TransportVersionDefinition fromString(String filename, String contents) {
17+
assert filename.endsWith(".csv");
18+
String name = filename.substring(0, filename.length() - 4);
19+
List<TransportVersionId> ids = new ArrayList<>();
20+
21+
if (contents.isEmpty() == false) {
22+
for (String rawId : contents.split(",")) {
23+
try {
24+
ids.add(TransportVersionUtils.parseId(rawId));
25+
} catch (NumberFormatException e) {
26+
throw new IllegalStateException("Failed to parse id " + rawId + " in " + filename, e);
27+
}
28+
}
29+
}
30+
31+
return new TransportVersionDefinition(name, ids);
32+
}
33+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
record TransportVersionId(int complete, int major, int server, int subsidiary, int patch) implements Comparable<TransportVersionId> {
13+
14+
static TransportVersionId fromString(String s) {
15+
int complete = Integer.parseInt(s);
16+
int patch = complete % 100;
17+
int subsidiary = (complete / 100) % 10;
18+
int server = (complete / 1000) % 1000;
19+
int major = complete / 1000000;
20+
return new TransportVersionId(complete, major, server, subsidiary, patch);
21+
}
22+
23+
@Override
24+
public int compareTo(TransportVersionId o) {
25+
return Integer.compare(complete, o.complete);
26+
}
27+
28+
@Override
29+
public String toString() {
30+
return Integer.toString(complete);
31+
}
32+
33+
public int base() {
34+
return (complete / 1000) * 1000;
35+
}
36+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
record TransportVersionLatest(String branch, String name, TransportVersionId id) {
13+
public static TransportVersionLatest fromString(String filename, String contents) {
14+
assert filename.endsWith(".csv");
15+
String branch = filename.substring(0, filename.length() - 4);
16+
17+
String[] parts = contents.split(",");
18+
if (parts.length != 2) {
19+
throw new IllegalStateException("Invalid transport version latest file [" + filename + "]: " + contents);
20+
}
21+
22+
return new TransportVersionLatest(branch, parts[0], TransportVersionUtils.parseId(parts[1]));
23+
}
24+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport;
11+
12+
import org.gradle.api.attributes.Attribute;
13+
import org.gradle.api.attributes.AttributeContainer;
14+
15+
import java.io.IOException;
16+
import java.nio.charset.StandardCharsets;
17+
import java.nio.file.Files;
18+
import java.nio.file.Path;
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
22+
import static org.gradle.api.artifacts.type.ArtifactTypeDefinition.ARTIFACT_TYPE_ATTRIBUTE;
23+
24+
record TransportVersionReference(String name, String location) {
25+
26+
private static final Attribute<Boolean> REFERENCES_ATTRIBUTE = Attribute.of("transport-version-references", Boolean.class);
27+
28+
static List<TransportVersionReference> listFromFile(Path file) throws IOException {
29+
assert file.endsWith(".csv");
30+
List<TransportVersionReference> results = new ArrayList<>();
31+
for (String line : Files.readAllLines(file, StandardCharsets.UTF_8)) {
32+
String[] parts = line.split(",", 2);
33+
if (parts.length != 2) {
34+
throw new IOException("Invalid transport version data file [" + file + "]: " + line);
35+
}
36+
results.add(new TransportVersionReference(parts[0], parts[1]));
37+
}
38+
return results;
39+
}
40+
41+
static void addArtifactAttribute(AttributeContainer attributes) {
42+
attributes.attribute(ARTIFACT_TYPE_ATTRIBUTE, "csv");
43+
attributes.attribute(REFERENCES_ATTRIBUTE, true);
44+
}
45+
46+
@Override
47+
public String toString() {
48+
return name + "," + location;
49+
}
50+
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionManagementPlugin.java renamed to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionReferencesPlugin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.getDefinitionsDirectory;
2121
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.getResourcesDirectory;
2222

23-
public class TransportVersionManagementPlugin implements Plugin<Project> {
23+
public class TransportVersionReferencesPlugin implements Plugin<Project> {
2424

2525
@Override
2626
public void apply(Project project) {
@@ -38,7 +38,7 @@ public void apply(Project project) {
3838
Configuration tvReferencesConfig = project.getConfigurations().create("transportVersionReferences", c -> {
3939
c.setCanBeConsumed(true);
4040
c.setCanBeResolved(false);
41-
c.attributes(TransportVersionUtils::addTransportVersionReferencesAttribute);
41+
c.attributes(TransportVersionReference::addArtifactAttribute);
4242
});
4343
project.getArtifacts().add(tvReferencesConfig.getName(), collectTask);
4444

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GlobalTransportVersionManagementPlugin.java renamed to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesPlugin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.getDefinitionsDirectory;
2424
import static org.elasticsearch.gradle.internal.transport.TransportVersionUtils.getResourcesDirectory;
2525

26-
public class GlobalTransportVersionManagementPlugin implements Plugin<Project> {
26+
public class TransportVersionResourcesPlugin implements Plugin<Project> {
2727

2828
@Override
2929
public void apply(Project project) {
@@ -33,17 +33,17 @@ public void apply(Project project) {
3333
Configuration tvReferencesConfig = project.getConfigurations().create("globalTvReferences");
3434
tvReferencesConfig.setCanBeConsumed(false);
3535
tvReferencesConfig.setCanBeResolved(true);
36-
tvReferencesConfig.attributes(TransportVersionUtils::addTransportVersionReferencesAttribute);
36+
tvReferencesConfig.attributes(TransportVersionReference::addArtifactAttribute);
3737

3838
// iterate through all projects, and if the management plugin is applied, add that project back as a dep to check
3939
for (Project subProject : project.getRootProject().getSubprojects()) {
40-
subProject.getPlugins().withType(TransportVersionManagementPlugin.class).configureEach(plugin -> {
40+
subProject.getPlugins().withType(TransportVersionReferencesPlugin.class).configureEach(plugin -> {
4141
tvReferencesConfig.getDependencies().add(depsHandler.project(Map.of("path", subProject.getPath())));
4242
});
4343
}
4444

4545
var validateTask = project.getTasks()
46-
.register("validateTransportVersionDefinitions", ValidateTransportVersionDefinitionsTask.class, t -> {
46+
.register("validateTransportVersionDefinitions", ValidateTransportVersionResourcesTask.class, t -> {
4747
t.setGroup("Transport Versions");
4848
t.setDescription("Validates that all defined TransportVersion constants are used in at least one project");
4949
Directory resourcesDir = getResourcesDirectory(project);

0 commit comments

Comments
 (0)