Skip to content

Commit 76189b3

Browse files
committed
Merge branch 'new-tv-logic-locate-declaration' into new-tv-logic-generate-definitions
2 parents f6f1f04 + 252f9c7 commit 76189b3

File tree

9 files changed

+51
-61
lines changed

9 files changed

+51
-61
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ testfixtures_shared/
6969
# Generated
7070
checkstyle_ide.xml
7171
x-pack/plugin/esql/src/main/generated-src/generated/
72+
server/src/main/resources/transport/defined/manifest.txt
7273

7374
# JEnv
7475
.java-version

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

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
import org.gradle.api.DefaultTask;
1313
import org.gradle.api.file.ConfigurableFileCollection;
1414
import org.gradle.api.file.RegularFileProperty;
15+
import org.gradle.api.tasks.CacheableTask;
1516
import org.gradle.api.tasks.Classpath;
16-
import org.gradle.api.tasks.InputFiles;
1717
import org.gradle.api.tasks.OutputFile;
1818
import org.gradle.api.tasks.TaskAction;
1919
import org.objectweb.asm.ClassReader;
@@ -33,14 +33,13 @@
3333
import java.nio.file.attribute.BasicFileAttributes;
3434
import java.util.HashSet;
3535
import java.util.Set;
36-
import java.util.jar.JarInputStream;
37-
import java.util.zip.ZipEntry;
3836

3937
/**
4038
* This task locates all method invocations of org.elasticsearch.TransportVersion#fromName(java.lang.String) in the
4139
* provided directory, and then records the value of string literals passed as arguments. It then records each
4240
* string on a newline along with path and line number in the provided output file.
4341
*/
42+
@CacheableTask
4443
public abstract class CollectTransportVersionReferencesTask extends DefaultTask {
4544
public static final String TRANSPORT_VERSION_SET_CLASS = "org/elasticsearch/TransportVersion";
4645
public static final String TRANSPORT_VERSION_SET_METHOD_NAME = "fromName";
@@ -50,7 +49,6 @@ public abstract class CollectTransportVersionReferencesTask extends DefaultTask
5049
/**
5150
* The directory to scan for method invocations.
5251
*/
53-
@InputFiles
5452
@Classpath
5553
public abstract ConfigurableFileCollection getClassPath();
5654

@@ -69,9 +67,6 @@ public void checkTransportVersion() throws IOException {
6967
Path file = cpElement.toPath();
7068
if (Files.isDirectory(file)) {
7169
addNamesFromClassesDirectory(results, file);
72-
} else {
73-
assert file.getFileName().toString().endsWith(".jar");
74-
addNamesFromJar(results, file);
7570
}
7671
}
7772

@@ -94,18 +89,6 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
9489
});
9590
}
9691

97-
private void addNamesFromJar(Set<TransportVersionUtils.TransportVersionReference> results, Path file) throws IOException {
98-
try (var jar = new JarInputStream(Files.newInputStream(file))) {
99-
ZipEntry entry;
100-
while ((entry = jar.getNextEntry()) != null) {
101-
String filename = entry.getName();
102-
if (filename.endsWith(CLASS_EXTENSION) && filename.endsWith(MODULE_INFO) == false) {
103-
addNamesFromClass(results, jar, classname(entry.toString()));
104-
}
105-
}
106-
}
107-
}
108-
10992
private void addNamesFromClass(Set<TransportVersionUtils.TransportVersionReference> results, InputStream classBytes, String classname)
11093
throws IOException {
11194
ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM9) {
@@ -145,6 +128,6 @@ public void visitMethodInsn(int opcode, String owner, String name, String descri
145128
}
146129

147130
private static String classname(String filename) {
148-
return filename.substring(0, filename.length() - CLASS_EXTENSION.length()).replace('/', '.');
131+
return filename.substring(0, filename.length() - CLASS_EXTENSION.length()).replaceAll("[/\\\\]", ".");
149132
}
150133
}

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

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,56 +12,50 @@
1212
import org.gradle.api.Plugin;
1313
import org.gradle.api.Project;
1414
import org.gradle.api.artifacts.Configuration;
15-
import org.gradle.api.artifacts.Dependency;
1615
import org.gradle.api.artifacts.dsl.DependencyHandler;
1716
import org.gradle.api.plugins.JavaPlugin;
1817
import org.gradle.api.tasks.Copy;
18+
import org.gradle.language.base.plugins.LifecycleBasePlugin;
1919

20-
import java.util.ArrayList;
21-
import java.util.List;
2220
import java.util.Map;
2321

2422
public class GlobalTransportVersionManagementPlugin implements Plugin<Project> {
2523

2624
@Override
2725
public void apply(Project project) {
26+
project.getPluginManager().apply(LifecycleBasePlugin.class);
2827

2928
DependencyHandler depsHandler = project.getDependencies();
30-
List<Dependency> tvDependencies = new ArrayList<>();
31-
// TODO: created a named configuration so deps can be added dynamically?
32-
for (String baseProjectPath : List.of(":modules", ":plugins", ":x-pack:plugin")) {
33-
Project baseProject = project.project(baseProjectPath);
34-
for (var pluginProject : baseProject.getSubprojects()) {
35-
if (pluginProject.getParent() != baseProject) {
36-
continue; // skip nested projects
37-
}
38-
tvDependencies.add(depsHandler.project(Map.of("path", pluginProject.getPath())));
39-
}
40-
}
41-
tvDependencies.add(depsHandler.project(Map.of("path", ":server")));
42-
43-
Configuration tvReferencesConfig = project.getConfigurations().detachedConfiguration(tvDependencies.toArray(new Dependency[0]));
29+
Configuration tvReferencesConfig = project.getConfigurations().create("globalTvReferences");
30+
tvReferencesConfig.setCanBeConsumed(false);
31+
tvReferencesConfig.setCanBeResolved(true);
4432
tvReferencesConfig.attributes(TransportVersionUtils::addTransportVersionReferencesAttribute);
4533

34+
// iterate through all projects, and if the management plugin is applied, add that project back as a dep to check
35+
for (Project subProject : project.getRootProject().getSubprojects()) {
36+
subProject.getPlugins().withType(TransportVersionManagementPlugin.class).configureEach(plugin -> {
37+
tvReferencesConfig.getDependencies().add(depsHandler.project(Map.of("path", subProject.getPath())));
38+
});
39+
}
40+
4641
var validateTask = project.getTasks()
47-
.register("validateTransportVersionConstants", ValidateTransportVersionDefinitionsTask.class, t -> {
42+
.register("validateTransportVersionDefinitions", ValidateTransportVersionDefinitionsTask.class, t -> {
4843
t.setGroup("Transport Versions");
4944
t.setDescription("Validates that all defined TransportVersion constants are used in at least one project");
50-
t.getTVDataDirectory().set(TransportVersionUtils.getDefinitionsDirectory(project));
45+
t.getDefinitionsDirectory().set(TransportVersionUtils.getDefinitionsDirectory(project));
5146
t.getReferencesFiles().setFrom(tvReferencesConfig);
5247
});
53-
54-
project.getTasks().named("check").configure(t -> t.dependsOn(validateTask));
48+
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(validateTask));
5549

5650
var generateManifestTask = project.getTasks()
5751
.register("generateTransportVersionManifest", GenerateTransportVersionManifestTask.class, t -> {
5852
t.setGroup("Transport Versions");
59-
t.setDescription("Generate a manifest resource for all the known transport version constants");
53+
t.setDescription("Generate a manifest resource for all the known transport version definitions");
6054
t.getDefinitionsDirectory().set(TransportVersionUtils.getDefinitionsDirectory(project));
6155
t.getManifestFile().set(project.getLayout().getBuildDirectory().file("generated-resources/manifest.txt"));
6256
});
6357
project.getTasks().named(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, Copy.class).configure(t -> {
64-
t.into("transport/constants", c -> c.from(generateManifestTask));
58+
t.into("transport/defined", c -> c.from(generateManifestTask));
6559
});
6660
}
6761
}

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,39 +14,37 @@
1414
import org.gradle.api.Project;
1515
import org.gradle.api.artifacts.Configuration;
1616
import org.gradle.api.tasks.SourceSet;
17+
import org.gradle.language.base.plugins.LifecycleBasePlugin;
1718

1819
public class TransportVersionManagementPlugin implements Plugin<Project> {
1920

2021
@Override
2122
public void apply(Project project) {
22-
String transportVersionReferencesFile = "transport-version/references.txt";
23+
project.getPluginManager().apply(LifecycleBasePlugin.class);
24+
2325
var collectTask = project.getTasks()
2426
.register("collectTransportVersionReferences", CollectTransportVersionReferencesTask.class, t -> {
2527
t.setGroup("Transport Versions");
2628
t.setDescription("Collects all TransportVersion references used throughout the project");
2729
SourceSet mainSourceSet = GradleUtils.getJavaSourceSets(project).findByName(SourceSet.MAIN_SOURCE_SET_NAME);
28-
t.getClassPath().setFrom(mainSourceSet.getRuntimeClasspath());
29-
t.getOutputFile().set(project.getLayout().getBuildDirectory().file(transportVersionReferencesFile));
30+
t.getClassPath().setFrom(mainSourceSet.getOutput());
31+
t.getOutputFile().set(project.getLayout().getBuildDirectory().file("transport-version/references.txt"));
3032
});
3133

32-
Configuration transportVersionsConfig = project.getConfigurations().create("transportVersionNames", c -> {
34+
Configuration tvReferencesConfig = project.getConfigurations().create("transportVersionReferences", c -> {
3335
c.setCanBeConsumed(true);
3436
c.setCanBeResolved(false);
3537
c.attributes(TransportVersionUtils::addTransportVersionReferencesAttribute);
3638
});
37-
38-
project.getArtifacts().add(transportVersionsConfig.getName(), collectTask);
39+
project.getArtifacts().add(tvReferencesConfig.getName(), collectTask);
3940

4041
var validateTask = project.getTasks()
4142
.register("validateTransportVersionReferences", ValidateTransportVersionReferencesTask.class, t -> {
4243
t.setGroup("Transport Versions");
4344
t.setDescription("Validates that all TransportVersion references used in the project have an associated definition file");
4445
t.getDefinitionsDirectory().set(TransportVersionUtils.getDefinitionsDirectory(project));
45-
t.getReferencesFile().set(project.getLayout().getBuildDirectory().file(transportVersionReferencesFile));
46-
t.dependsOn(collectTask);
47-
46+
t.getReferencesFile().set(collectTask.get().getOutputFile());
4847
});
49-
50-
project.getTasks().named("check").configure(t -> t.dependsOn(validateTask));
48+
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(validateTask));
5149
}
5250
}

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,12 @@ static List<TransportVersionReference> readReferencesFile(Path file) throws IOEx
122122
}
123123

124124
static Directory getDefinitionsDirectory(Project project) {
125-
Directory serverDir = project.getRootProject().project(":server").getLayout().getProjectDirectory();
126-
return serverDir.dir("src/main/resources/transport/defined");
125+
var projectName = project.findProperty("org.elasticsearch.transport.definitionsProject");
126+
if (projectName == null) {
127+
projectName = ":server";
128+
}
129+
Directory projectDir = project.project(projectName.toString()).getLayout().getProjectDirectory();
130+
return projectDir.dir("src/main/resources/transport/defined");
127131
}
128132

129133
static void addTransportVersionReferencesAttribute(AttributeContainer attributes) {

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
import org.gradle.api.DefaultTask;
1616
import org.gradle.api.file.ConfigurableFileCollection;
1717
import org.gradle.api.file.DirectoryProperty;
18+
import org.gradle.api.tasks.CacheableTask;
1819
import org.gradle.api.tasks.InputDirectory;
1920
import org.gradle.api.tasks.InputFiles;
21+
import org.gradle.api.tasks.PathSensitive;
22+
import org.gradle.api.tasks.PathSensitivity;
2023
import org.gradle.api.tasks.TaskAction;
2124

2225
import java.io.IOException;
@@ -33,17 +36,20 @@
3336
/**
3437
* Validates that each defined transport version definition file is referenced by at least one project.
3538
*/
39+
@CacheableTask
3640
public abstract class ValidateTransportVersionDefinitionsTask extends DefaultTask {
3741

3842
@InputDirectory
39-
public abstract DirectoryProperty getTVDataDirectory();
43+
@PathSensitive(PathSensitivity.RELATIVE)
44+
public abstract DirectoryProperty getDefinitionsDirectory();
4045

4146
@InputFiles
47+
@PathSensitive(PathSensitivity.RELATIVE)
4248
public abstract ConfigurableFileCollection getReferencesFiles();
4349

4450
@TaskAction
4551
public void validateTransportVersions() throws IOException {
46-
Path dataDir = getTVDataDirectory().getAsFile().get().toPath();
52+
Path dataDir = getDefinitionsDirectory().getAsFile().get().toPath();
4753
Path definitionsDir = dataDir.resolve(DEFINED_DIR);
4854

4955
Set<String> allTvNames = new HashSet<>();

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212
import org.gradle.api.DefaultTask;
1313
import org.gradle.api.file.DirectoryProperty;
1414
import org.gradle.api.file.RegularFileProperty;
15+
import org.gradle.api.tasks.CacheableTask;
1516
import org.gradle.api.tasks.InputDirectory;
1617
import org.gradle.api.tasks.InputFile;
18+
import org.gradle.api.tasks.PathSensitive;
19+
import org.gradle.api.tasks.PathSensitivity;
1720
import org.gradle.api.tasks.TaskAction;
1821

1922
import java.io.IOException;
@@ -23,12 +26,15 @@
2326
/**
2427
* Validates that each transport version named reference has a constant definition.
2528
*/
29+
@CacheableTask
2630
public abstract class ValidateTransportVersionReferencesTask extends DefaultTask {
2731

2832
@InputDirectory
33+
@PathSensitive(PathSensitivity.RELATIVE)
2934
public abstract DirectoryProperty getDefinitionsDirectory();
3035

3136
@InputFile
37+
@PathSensitive(PathSensitivity.RELATIVE)
3238
public abstract RegularFileProperty getReferencesFile();
3339

3440
@TaskAction

server/src/main/java/org/elasticsearch/TransportVersions.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,6 @@ static TransportVersion def(int id) {
211211
public static final TransportVersion ML_INFERENCE_COHERE_API_VERSION_8_19 = def(8_841_0_60);
212212
public static final TransportVersion ESQL_DOCUMENTS_FOUND_AND_VALUES_LOADED_8_19 = def(8_841_0_61);
213213
public static final TransportVersion ESQL_PROFILE_INCLUDE_PLAN_8_19 = def(8_841_0_62);
214-
public static final TransportVersion ESQL_SPLIT_ON_BIG_VALUES_8_19 = def(8_841_0_63);
215214
public static final TransportVersion ESQL_FIXED_INDEX_LIKE_8_19 = def(8_841_0_64);
216215
public static final TransportVersion V_9_0_0 = def(9_000_0_09);
217216
public static final TransportVersion INITIAL_ELASTICSEARCH_9_0_1 = def(9_000_0_10);
@@ -330,14 +329,12 @@ static TransportVersion def(int id) {
330329
public static final TransportVersion ML_INFERENCE_COHERE_API_VERSION = def(9_110_0_00);
331330
public static final TransportVersion ESQL_PROFILE_INCLUDE_PLAN = def(9_111_0_00);
332331
public static final TransportVersion MAPPINGS_IN_DATA_STREAMS = def(9_112_0_00);
333-
public static final TransportVersion ESQL_SPLIT_ON_BIG_VALUES_9_1 = def(9_112_0_01);
334332
public static final TransportVersion ESQL_FIXED_INDEX_LIKE_9_1 = def(9_112_0_02);
335333
public static final TransportVersion ESQL_SAMPLE_OPERATOR_STATUS_9_1 = def(9_112_0_03);
336334
public static final TransportVersion INITIAL_ELASTICSEARCH_9_1_1 = def(9_112_0_04);
337335
public static final TransportVersion PROJECT_STATE_REGISTRY_RECORDS_DELETIONS = def(9_113_0_00);
338336
public static final TransportVersion ESQL_SERIALIZE_TIMESERIES_FIELD_TYPE = def(9_114_0_00);
339337
public static final TransportVersion ML_INFERENCE_IBM_WATSONX_COMPLETION_ADDED = def(9_115_0_00);
340-
// public static final TransportVersion ESQL_SPLIT_ON_BIG_VALUES = def(9_116_0_00);
341338
public static final TransportVersion ESQL_LOCAL_RELATION_WITH_NEW_BLOCKS = def(9_117_0_00);
342339
public static final TransportVersion ML_INFERENCE_CUSTOM_SERVICE_EMBEDDING_TYPE = def(9_118_0_00);
343340
public static final TransportVersion ESQL_FIXED_INDEX_LIKE = def(9_119_0_00);

x-pack/plugin/esql/compute/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import org.elasticsearch.gradle.internal.util.SourceDirectoryCommandLineArgument
33
apply plugin: 'elasticsearch.build'
44
apply plugin: 'elasticsearch.string-templates'
55
apply plugin: 'elasticsearch.publish'
6+
apply plugin: 'elasticsearch.transport-version-management'
67

78
base {
89
archivesName = 'x-pack-esql-compute'

0 commit comments

Comments
 (0)