Skip to content

Commit 029d9ec

Browse files
committed
Avoid running resolve logic with no transport version name (elastic#135379)
When resolving transport version conflicts we must lookup the definition that is being added by the current branch. We do this by detecting the resource file that has been added. When no files are added, we should not do anything. This commit moves the logic that detects branches closer to where it is needed so that we don't possibly run it with an empty transport version name.
1 parent 2d1e5d3 commit 029d9ec

File tree

3 files changed

+103
-4
lines changed

3 files changed

+103
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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.GradleRunner
14+
import org.gradle.testkit.runner.TaskOutcome
15+
16+
class ResolveTransportVersionConflictFuncTest extends AbstractTransportVersionFuncTest {
17+
18+
GradleRunner runResolveAndValidateTask() {
19+
List<String> args = List.of(":myserver:validateTransportVersionResources", ":myserver:resolveTransportVersionConflict")
20+
return gradleRunner(args.toArray())
21+
}
22+
23+
void assertResolveAndValidateSuccess(BuildResult result) {
24+
assert result.task(":myserver:resolveTransportVersionConflict").outcome == TaskOutcome.SUCCESS
25+
assert result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
26+
}
27+
28+
def "update flag works with current"() {
29+
given:
30+
referableAndReferencedTransportVersion("new_tv", "8123000")
31+
file("myserver/src/main/resources/transport/latest/9.2.csv").text =
32+
"""
33+
<<<<<<< HEAD
34+
existing_92,8123000
35+
=======
36+
new_tv,8123000
37+
>>>>>> name
38+
""".strip()
39+
40+
when:
41+
def result = runResolveAndValidateTask().build()
42+
43+
then:
44+
assertResolveAndValidateSuccess(result)
45+
assertReferableDefinition("existing_92", "8123000,8012001")
46+
assertReferableDefinition("new_tv", "8124000")
47+
assertUpperBound("9.2", "new_tv,8124000")
48+
}
49+
50+
def "update flag works with multiple branches"() {
51+
given:
52+
referableAndReferencedTransportVersion("new_tv", "8123000,8012001,7123001")
53+
file("myserver/src/main/resources/transport/latest/9.2.csv").text =
54+
"""
55+
<<<<<<< HEAD
56+
existing_92,8123000
57+
=======
58+
new_tv,8123000
59+
>>>>>> name
60+
""".strip()
61+
file("myserver/src/main/resources/transport/latest/9.1.csv").text =
62+
"""
63+
<<<<<<< HEAD
64+
existing_92,8012001
65+
=======
66+
new_tv,8012001
67+
>>>>>> name
68+
""".strip()
69+
file("myserver/src/main/resources/transport/latest/8.19.csv").text =
70+
"""
71+
<<<<<<< HEAD
72+
initial_8.19.7,7123001
73+
=======
74+
new_tv,7123001
75+
>>>>>> name
76+
""".strip()
77+
78+
when:
79+
def result = runResolveAndValidateTask().build()
80+
81+
then:
82+
assertResolveAndValidateSuccess(result)
83+
assertReferableDefinition("existing_92", "8123000,8012001")
84+
assertUnreferableDefinition("initial_8.19.7", "7123001")
85+
assertReferableDefinition("new_tv", "8124000,8012002,7123002")
86+
assertUpperBound("9.2", "new_tv,8124000")
87+
assertUpperBound("9.1", "new_tv,8012002")
88+
assertUpperBound("8.19", "new_tv,7123002")
89+
}
90+
91+
def "no new transport version is idempotent"() {
92+
when:
93+
def result = runResolveAndValidateTask().build()
94+
95+
then:
96+
assertResolveAndValidateSuccess(result)
97+
assertUpperBound("9.2", "existing_92,8123000")
98+
}
99+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
499499

500500
def "upper bounds files must exist for backport branches"() {
501501
when:
502-
def result = runGenerateTask("--backport-branches=9.1,8.13,7.17,6.0").buildAndFail()
502+
def result = runGenerateTask("--name", "new_tv", "--backport-branches=9.1,8.13,7.17,6.0").buildAndFail()
503503

504504
then:
505505
assertGenerateFailure(result, "Missing upper bounds files for branches [6.0, 7.17, 8.13], known branches are [8.19, 9.0, 9.1, 9.2]")

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,14 @@ public void run() throws IOException {
102102
List<String> changedDefinitionNames = resources.getChangedReferableDefinitionNames();
103103
String targetDefinitionName = getTargetDefinitionName(resources, referencedNames, changedDefinitionNames);
104104

105-
List<TransportVersionUpperBound> upstreamUpperBounds = resources.getUpperBoundsFromUpstream();
106-
Set<String> targetUpperBoundNames = getTargetUpperBoundNames(resources, upstreamUpperBounds, targetDefinitionName);
107-
108105
getLogger().lifecycle("Generating transport version name: " + targetDefinitionName);
109106
if (targetDefinitionName.isEmpty()) {
110107
// TODO: resetting upper bounds needs to be done locally, otherwise it pulls in some (incomplete) changes from upstream main
111108
// resetAllUpperBounds(resources);
112109
} else {
110+
List<TransportVersionUpperBound> upstreamUpperBounds = resources.getUpperBoundsFromUpstream();
111+
Set<String> targetUpperBoundNames = getTargetUpperBoundNames(resources, upstreamUpperBounds, targetDefinitionName);
112+
113113
List<TransportVersionId> ids = updateUpperBounds(resources, upstreamUpperBounds, targetUpperBoundNames, targetDefinitionName);
114114
// (Re)write the definition file.
115115
resources.writeDefinition(new TransportVersionDefinition(targetDefinitionName, ids, true));

0 commit comments

Comments
 (0)