Skip to content

Commit 8513bfd

Browse files
authored
Merge branch '9.3' into backport/9.3/pr-141777
2 parents 097a3a5 + 39b1b40 commit 8513bfd

File tree

16 files changed

+419
-90
lines changed

16 files changed

+419
-90
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,16 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
133133
referableAndReferencedTransportVersion("older_92", "8122000")
134134
referableAndReferencedTransportVersion("existing_92", "8123000,8012001")
135135
unreferableTransportVersion("initial_9.0.0", "8000000")
136+
unreferableTransportVersion("initial_9.1.0", "8011000")
136137
unreferableTransportVersion("initial_8.19.7", "7123001")
137138
transportVersionUpperBound("9.2", "existing_92", "8123000")
138139
transportVersionUpperBound("9.1", "existing_92", "8012001")
139140
transportVersionUpperBound("9.0", "initial_9.0.0", "8000000")
140141
transportVersionUpperBound("8.19", "initial_8.19.7", "7123001")
142+
javaResource("myserver", "org/elasticsearch/TransportVersions.csv", """
143+
9.0.0,8000000
144+
9.1.0,8012001
145+
""")
141146
// a mock version of TransportVersion, just here so we can compile Dummy.java et al
142147
javaSource("myserver", "org.elasticsearch", "TransportVersion", "", """
143148
public static TransportVersion fromName(String name) {

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class GenerateInitialTransportVersionFuncTest extends AbstractTransportVersionFu
4848

4949
def "setup is valid"() {
5050
when:
51-
def result = runGenerateAndValidateTask("--release-version", "9.0.0").build()
51+
def result = runGenerateAndValidateTask("--stack-version", "9.1.0").build()
5252

5353
then:
5454
assertGenerateAndValidateSuccess(result)
@@ -62,9 +62,7 @@ class GenerateInitialTransportVersionFuncTest extends AbstractTransportVersionFu
6262
versionPropertiesFile.text = versionPropertiesFile.text.replace("9.2.0", "9.3.0")
6363

6464
when:
65-
System.out.println("Running generation initial task")
66-
def result = runGenerateAndValidateTask("--release-version", "9.2.0").build()
67-
System.out.println("Done running generation task")
65+
def result = runGenerateAndValidateTask("--stack-version", "9.2.0").build()
6866

6967
then:
7068
assertGenerateAndValidateSuccess(result)
@@ -75,7 +73,7 @@ class GenerateInitialTransportVersionFuncTest extends AbstractTransportVersionFu
7573

7674
def "patch updates existing upper bound"() {
7775
when:
78-
def result = runGenerateAndValidateTask("--release-version", "9.1.2").build()
76+
def result = runGenerateAndValidateTask("--stack-version", "9.1.2").build()
7977

8078
then:
8179
assertGenerateAndValidateSuccess(result)
@@ -85,7 +83,7 @@ class GenerateInitialTransportVersionFuncTest extends AbstractTransportVersionFu
8583

8684
def "cannot create upper bound file for patch"() {
8785
when:
88-
def result = runGenerateTask("--release-version", "9.3.7").buildAndFail()
86+
def result = runGenerateTask("--stack-version", "9.3.7").buildAndFail()
8987

9088
then:
9189
assertGenerateFailure(result, "Missing upper bound 9.3 for release version 9.3.7")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
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.testkit.runner.BuildResult
13+
import org.gradle.testkit.runner.TaskOutcome
14+
15+
class UpdateTransportVersionsCSVFuncTest extends AbstractTransportVersionFuncTest {
16+
def runUpdateTask(String... additionalArgs) {
17+
List<String> args = new ArrayList<>()
18+
args.add(":myserver:updateTransportVersionsCSV")
19+
args.addAll(additionalArgs);
20+
return gradleRunner(args.toArray())
21+
}
22+
23+
void assertUpdateSuccess(BuildResult result) {
24+
assert result.task(":myserver:updateTransportVersionsCSV").outcome == TaskOutcome.SUCCESS
25+
}
26+
27+
void assertUpdateFailure(BuildResult result, String expectedOutput) {
28+
assert result.task(":myserver:updateTransportVersionsCSV").outcome == TaskOutcome.FAILED
29+
assertOutputContains(result.output, expectedOutput)
30+
}
31+
32+
void assertTransportVersionsCsv(String expectedContent) {
33+
File csvFile = file("myserver/src/main/resources/org/elasticsearch/TransportVersions.csv")
34+
assert csvFile.exists()
35+
// Normalize both sides: strip leading/trailing whitespace from each line and the whole string
36+
def actualLines = csvFile.text.readLines().collect { it.strip() }.findAll { it != "" }
37+
def expectedLines = expectedContent.readLines().collect { it.strip() }.findAll { it != "" }
38+
assert actualLines == expectedLines
39+
}
40+
41+
def "updates csv with minor version"() {
42+
when:
43+
def result = runUpdateTask("--stack-version", "9.2.0").build()
44+
45+
then:
46+
assertUpdateSuccess(result)
47+
assertTransportVersionsCsv("""
48+
9.0.0,8000000
49+
9.1.0,8012001
50+
9.2.0,8123000
51+
""")
52+
}
53+
54+
def "updates csv with patch version"() {
55+
given:
56+
execute("git checkout main")
57+
unreferableTransportVersion("initial_9.1.1", "8012002")
58+
transportVersionUpperBound("9.1", "initial_9.1.1", "8012002")
59+
execute('git commit -a -m "update"')
60+
61+
when:
62+
def result = runUpdateTask("--stack-version", "9.1.1").build()
63+
64+
then:
65+
assertUpdateSuccess(result)
66+
assertTransportVersionsCsv("""
67+
9.0.0,8000000
68+
9.1.0,8012001
69+
9.1.1,8012002
70+
""")
71+
}
72+
73+
def "fails when upper bound does not exist"() {
74+
when:
75+
def result = runUpdateTask("--stack-version", "9.3.0").buildAndFail()
76+
77+
then:
78+
assertUpdateFailure(result, "Missing upper bound 9.3 for stack version 9.3.0")
79+
}
80+
81+
def "is idempotent when version already exists"() {
82+
when:
83+
// Run the task twice with the same version
84+
def result1 = runUpdateTask("--stack-version", "9.2.0").build()
85+
def result2 = runUpdateTask("--stack-version", "9.2.0").build()
86+
87+
then:
88+
assertUpdateSuccess(result1)
89+
assertUpdateSuccess(result2)
90+
assertOutputContains(result2.output, "Version 9.2.0 already exists in TransportVersions.csv with correct transport version ID, skipping")
91+
// Should only have one entry for 9.2.0
92+
assertTransportVersionsCsv("""
93+
9.0.0,8000000
94+
9.1.0,8012001
95+
9.2.0,8123000
96+
""")
97+
}
98+
99+
def "fails when existing version has wrong transport version ID"() {
100+
given:
101+
// Manually add an entry with wrong transport version ID
102+
javaResource("myserver", "org/elasticsearch/TransportVersions.csv", """
103+
9.0.0,8000000
104+
9.1.0,8012001
105+
9.2.0,9999999
106+
""")
107+
108+
when:
109+
def result = runUpdateTask("--stack-version", "9.2.0").buildAndFail()
110+
111+
then:
112+
assertUpdateFailure(result, "Version 9.2.0 already exists in TransportVersions.csv with transport version ID 9999999, but expected 8123000")
113+
}
114+
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ private static void replaceDefaultJavaParserClassCsm() {
114114

115115
private static final Logger LOGGER = Logging.getLogger(AbstractVersionsTask.class);
116116

117-
static final String TRANSPORT_VERSION_TYPE = "TransportVersion";
118117
static final String INDEX_VERSION_TYPE = "IndexVersion";
119118

120119
static final String SERVER_MODULE_PATH = "server/src/main/java/";
@@ -123,7 +122,6 @@ private static void replaceDefaultJavaParserClassCsm() {
123122
static final String INDEX_VERSIONS_FILE_PATH = SERVER_MODULE_PATH + "org/elasticsearch/index/IndexVersions.java";
124123

125124
static final String SERVER_RESOURCES_PATH = "server/src/main/resources/";
126-
static final String TRANSPORT_VERSIONS_RECORD = SERVER_RESOURCES_PATH + "org/elasticsearch/TransportVersions.csv";
127125
static final String INDEX_VERSIONS_RECORD = SERVER_RESOURCES_PATH + "org/elasticsearch/index/IndexVersions.csv";
128126

129127
final Path rootDir;

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public void apply(Project project) {
5252

5353
project.getTasks().register("extractCurrentVersions", ExtractCurrentVersionsTask.class);
5454
project.getTasks().register("tagVersions", TagVersionsTask.class);
55-
project.getTasks().register("setCompatibleVersions", SetCompatibleVersionsTask.class, t -> t.setThisVersion(version));
5655
project.getTasks().register("updateBranchesJson", UpdateBranchesJsonTask.class);
5756

5857
final Directory changeLogDirectory = projectDirectory.dir("docs/changelog");

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

Lines changed: 0 additions & 64 deletions
This file was deleted.

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ public void executeTask() throws IOException {
6666

6767
for (var v : versions.entrySet()) {
6868
Path recordFile = switch (v.getKey()) {
69-
case TRANSPORT_VERSION_TYPE -> rootDir.resolve(TRANSPORT_VERSIONS_RECORD);
7069
case INDEX_VERSION_TYPE -> rootDir.resolve(INDEX_VERSIONS_RECORD);
7170
default -> throw new IllegalArgumentException("Unknown version type " + v.getKey());
7271
};
@@ -95,7 +94,7 @@ private static Map<String, Integer> expandV7Version(Map<String, Integer> tagVers
9594
Integer v7Version = tagVersions.get("Version");
9695
if (v7Version == null) return tagVersions;
9796

98-
return Map.of(TRANSPORT_VERSION_TYPE, v7Version, INDEX_VERSION_TYPE, v7Version);
97+
return Map.of(INDEX_VERSION_TYPE, v7Version);
9998
}
10099

101100
private static final Pattern VERSION_LINE = Pattern.compile("(\\d+\\.\\d+\\.\\d+),(\\d+)");

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,37 +26,37 @@ public abstract class GenerateInitialTransportVersionTask extends DefaultTask {
2626
abstract Property<TransportVersionResourcesService> getResourceService();
2727

2828
@Input
29-
@Option(option = "release-version", description = "The Elasticsearch release version this transport version will be associated with")
30-
public abstract Property<String> getReleaseVersion();
29+
@Option(option = "stack-version", description = "The Elasticsearch version to generate an initial transport version for")
30+
public abstract Property<String> getStackVersion();
3131

3232
@Input
3333
abstract Property<Version> getCurrentVersion();
3434

3535
@TaskAction
3636
public void run() throws IOException {
37-
Version releaseVersion = Version.fromString(getReleaseVersion().get());
38-
String upperBoundName = getUpperBoundName(releaseVersion);
37+
Version stackVersion = Version.fromString(getStackVersion().get());
38+
String upperBoundName = getUpperBoundName(stackVersion);
3939
TransportVersionResourcesService resources = getResourceService().get();
4040
TransportVersionUpperBound baseUpperBound = resources.getUpperBoundFromGitBase(upperBoundName);
41-
String initialDefinitionName = "initial_" + releaseVersion;
41+
String initialDefinitionName = "initial_" + stackVersion;
4242
TransportVersionDefinition existingDefinition = resources.getUnreferableDefinitionFromGitBase(initialDefinitionName);
4343

4444
// This task runs on main and release branches. In release branches we will generate the exact same
4545
// upper bound result because we always look at the base branch (ie upstream/main).
4646
if (existingDefinition == null) {
4747
if (baseUpperBound == null) {
48-
throw new RuntimeException("Missing upper bound " + upperBoundName + " for release version " + releaseVersion);
48+
throw new RuntimeException("Missing upper bound " + upperBoundName + " for release version " + stackVersion);
4949
}
5050

5151
// minors increment by 1000 to create a unique base, patches increment by 1 as other patches do
52-
int increment = releaseVersion.getRevision() == 0 ? 1000 : 1;
52+
int increment = stackVersion.getRevision() == 0 ? 1000 : 1;
5353
var id = TransportVersionId.fromInt(baseUpperBound.definitionId().complete() + increment);
5454
var definition = new TransportVersionDefinition(initialDefinitionName, List.of(id), false);
5555
resources.writeDefinition(definition);
5656
var newUpperBound = new TransportVersionUpperBound(upperBoundName, initialDefinitionName, id);
5757
resources.writeUpperBound(newUpperBound, false);
5858

59-
if (releaseVersion.getRevision() == 0) {
59+
if (stackVersion.getRevision() == 0) {
6060
Version currentVersion = getCurrentVersion().get();
6161
String currentUpperBoundName = getUpperBoundName(currentVersion);
6262
var currentUpperBound = new TransportVersionUpperBound(currentUpperBoundName, initialDefinitionName, id);

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,19 @@ public void apply(Project project) {
120120
var generateInitialTask = project.getTasks()
121121
.register("generateInitialTransportVersion", GenerateInitialTransportVersionTask.class, t -> {
122122
t.setGroup(taskGroup);
123-
t.setDescription("(Re)generates an initial transport version for an Elasticsearch release version");
123+
t.setDescription("Generates an initial transport version for an Elasticsearch release version");
124124
t.getCurrentVersion().set(currentVersion);
125125
});
126126
validateTask.configure(t -> t.mustRunAfter(generateInitialTask));
127+
128+
var updateTransportVersionsTask = project.getTasks()
129+
.register("updateTransportVersionsCSV", UpdateTransportVersionsCSVTask.class, t -> {
130+
t.setGroup(taskGroup);
131+
t.setDescription("Updates TransportVersions.csv with a new stack version entry");
132+
t.getTransportVersionsFile()
133+
.set(project.getLayout().getProjectDirectory().file("src/main/resources/org/elasticsearch/TransportVersions.csv"));
134+
});
135+
validateTask.configure(t -> t.mustRunAfter(updateTransportVersionsTask));
127136
}
128137

129138
private static String getResourceRoot(Project project) {

0 commit comments

Comments
 (0)