Skip to content

Commit 4d87775

Browse files
committed
address feedback
1 parent 7d88e4e commit 4d87775

File tree

3 files changed

+67
-24
lines changed

3 files changed

+67
-24
lines changed

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/UpdateTransportVersionsFuncTest.groovy renamed to build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/UpdateTransportVersionsCSVFuncTest.groovy

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@ package org.elasticsearch.gradle.internal.transport
1212
import org.gradle.testkit.runner.BuildResult
1313
import org.gradle.testkit.runner.TaskOutcome
1414

15-
class UpdateTransportVersionsFuncTest extends AbstractTransportVersionFuncTest {
15+
class UpdateTransportVersionsCSVFuncTest extends AbstractTransportVersionFuncTest {
1616
def runUpdateTask(String... additionalArgs) {
1717
List<String> args = new ArrayList<>()
18-
args.add(":myserver:updateTransportVersions")
18+
args.add(":myserver:updateTransportVersionsCSV")
1919
args.addAll(additionalArgs);
2020
return gradleRunner(args.toArray())
2121
}
2222

2323
void assertUpdateSuccess(BuildResult result) {
24-
assert result.task(":myserver:updateTransportVersions").outcome == TaskOutcome.SUCCESS
24+
assert result.task(":myserver:updateTransportVersionsCSV").outcome == TaskOutcome.SUCCESS
2525
}
2626

2727
void assertUpdateFailure(BuildResult result, String expectedOutput) {
28-
assert result.task(":myserver:updateTransportVersions").outcome == TaskOutcome.FAILED
28+
assert result.task(":myserver:updateTransportVersionsCSV").outcome == TaskOutcome.FAILED
2929
assertOutputContains(result.output, expectedOutput)
3030
}
3131

@@ -87,12 +87,28 @@ class UpdateTransportVersionsFuncTest extends AbstractTransportVersionFuncTest {
8787
then:
8888
assertUpdateSuccess(result1)
8989
assertUpdateSuccess(result2)
90-
assertOutputContains(result2.output, "Version 9.2.0 already exists in TransportVersions.csv, skipping")
90+
assertOutputContains(result2.output, "Version 9.2.0 already exists in TransportVersions.csv with correct transport version ID, skipping")
9191
// Should only have one entry for 9.2.0
9292
assertTransportVersionsCsv("""
9393
9.0.0,8000000
9494
9.1.0,8012001
9595
9.2.0,8123000
9696
""")
9797
}
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+
}
98114
}

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,13 @@ public void apply(Project project) {
125125
});
126126
validateTask.configure(t -> t.mustRunAfter(generateInitialTask));
127127

128-
var updateTransportVersionsTask = project.getTasks().register("updateTransportVersions", UpdateTransportVersionsTask.class, t -> {
129-
t.setGroup(taskGroup);
130-
t.setDescription("Updates TransportVersions.csv with a new stack version entry");
131-
t.getTransportVersionsFile()
132-
.set(project.getLayout().getProjectDirectory().file("src/main/resources/org/elasticsearch/TransportVersions.csv"));
133-
});
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+
});
134135
validateTask.configure(t -> t.mustRunAfter(updateTransportVersionsTask));
135136
}
136137

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/UpdateTransportVersionsTask.java renamed to build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/UpdateTransportVersionsCSVTask.java

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.nio.file.Files;
2424
import java.nio.file.StandardOpenOption;
2525

26-
public abstract class UpdateTransportVersionsTask extends DefaultTask {
26+
public abstract class UpdateTransportVersionsCSVTask extends DefaultTask {
2727

2828
@ServiceReference("transportVersionResources")
2929
abstract Property<TransportVersionResourcesService> getResourceService();
@@ -38,13 +38,6 @@ public abstract class UpdateTransportVersionsTask extends DefaultTask {
3838
@TaskAction
3939
public void run() throws IOException {
4040
Version stackVersion = Version.fromString(getStackVersion().get());
41-
42-
// Check if this version is already in the CSV file (idempotency check)
43-
if (isVersionAlreadyRecorded(stackVersion)) {
44-
getLogger().lifecycle("Version {} already exists in TransportVersions.csv, skipping", stackVersion);
45-
return;
46-
}
47-
4841
String upperBoundName = getUpperBoundName(stackVersion);
4942
TransportVersionResourcesService resources = getResourceService().get();
5043
TransportVersionUpperBound upperBound = resources.getUpperBoundFromGitBase(upperBoundName);
@@ -53,15 +46,48 @@ public void run() throws IOException {
5346
throw new RuntimeException("Missing upper bound " + upperBoundName + " for stack version " + stackVersion);
5447
}
5548

56-
int transportVersionId = upperBound.definitionId().complete();
57-
addTransportVersionRecord(stackVersion, transportVersionId);
49+
int expectedTransportVersionId = upperBound.definitionId().complete();
50+
51+
// Check if this version is already in the CSV file (idempotency check)
52+
Integer existingTransportVersionId = getExistingTransportVersionId(stackVersion);
53+
if (existingTransportVersionId != null) {
54+
if (existingTransportVersionId != expectedTransportVersionId) {
55+
throw new RuntimeException(
56+
"Version "
57+
+ stackVersion
58+
+ " already exists in TransportVersions.csv with transport version ID "
59+
+ existingTransportVersionId
60+
+ ", but expected "
61+
+ expectedTransportVersionId
62+
);
63+
}
64+
getLogger().lifecycle(
65+
"Version {} already exists in TransportVersions.csv with correct transport version ID, skipping",
66+
stackVersion
67+
);
68+
return;
69+
}
70+
71+
addTransportVersionRecord(stackVersion, expectedTransportVersionId);
5872
}
5973

60-
private boolean isVersionAlreadyRecorded(Version stackVersion) throws IOException {
74+
private Integer getExistingTransportVersionId(Version stackVersion) throws IOException {
6175
var csvFile = getTransportVersionsFile().getAsFile().get().toPath();
62-
6376
String versionPrefix = stackVersion.toString() + ",";
64-
return Files.readAllLines(csvFile).stream().anyMatch(line -> line.trim().startsWith(versionPrefix));
77+
78+
return Files.readAllLines(csvFile)
79+
.stream()
80+
.map(String::trim)
81+
.filter(line -> line.startsWith(versionPrefix))
82+
.findFirst()
83+
.map(line -> {
84+
String[] parts = line.split(",");
85+
if (parts.length >= 2) {
86+
return Integer.parseInt(parts[1]);
87+
}
88+
return null;
89+
})
90+
.orElse(null);
6591
}
6692

6793
private void addTransportVersionRecord(Version stackVersion, int transportVersionId) throws IOException {

0 commit comments

Comments
 (0)