Skip to content

Commit 9021221

Browse files
authored
Merge branch '9.0' into transport-version-backport-validation
2 parents 83d0f8e + 94708b7 commit 9021221

File tree

18 files changed

+360
-104
lines changed

18 files changed

+360
-104
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
122122
apply plugin: 'elasticsearch.transport-version-references'
123123
apply plugin: 'elasticsearch.transport-version-resources'
124124
125-
tasks.named('generateTransportVersionDefinition') {
125+
tasks.named('generateTransportVersion') {
126126
currentUpperBoundName = '9.2'
127127
}
128128
"""

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

Lines changed: 77 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
1818
def runGenerateAndValidateTask(String... additionalArgs) {
1919
List<String> args = new ArrayList<>()
2020
args.add(":myserver:validateTransportVersionResources")
21-
args.add(":myserver:generateTransportVersionDefinition")
21+
args.add(":myserver:generateTransportVersion")
2222
args.addAll(additionalArgs);
2323
return gradleRunner(args.toArray())
2424
}
2525

2626
def runGenerateTask(String... additionalArgs) {
2727
List<String> args = new ArrayList<>()
28-
args.add(":myserver:generateTransportVersionDefinition")
28+
args.add(":myserver:generateTransportVersion")
2929
args.addAll(additionalArgs);
3030
return gradleRunner(args.toArray())
3131
}
@@ -35,11 +35,11 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
3535
}
3636

3737
void assertGenerateSuccess(BuildResult result) {
38-
assert result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
38+
assert result.task(":myserver:generateTransportVersion").outcome == TaskOutcome.SUCCESS
3939
}
4040

4141
void assertGenerateFailure(BuildResult result, String expectedOutput) {
42-
assert result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.FAILED
42+
assert result.task(":myserver:generateTransportVersion").outcome == TaskOutcome.FAILED
4343
assertOutputContains(result.output, expectedOutput)
4444
}
4545

@@ -277,6 +277,77 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
277277
assertUpperBound("9.2", "second_tv,8124000")
278278
}
279279

280+
def "update flag works with current"() {
281+
given:
282+
referableAndReferencedTransportVersion("new_tv", "8123000")
283+
file("myserver/src/main/resources/transport/latest/9.2.csv").text =
284+
"""
285+
<<<<<<< HEAD
286+
existing_92,8123000
287+
=======
288+
new_tv,8123000
289+
>>>>>> name
290+
""".strip()
291+
292+
when:
293+
def result = runGenerateAndValidateTask("--resolve-conflict").build()
294+
295+
then:
296+
assertGenerateAndValidateSuccess(result)
297+
assertReferableDefinition("existing_92", "8123000,8012001")
298+
assertReferableDefinition("new_tv", "8124000")
299+
assertUpperBound("9.2", "new_tv,8124000")
300+
}
301+
302+
def "update flag works with multiple branches"() {
303+
given:
304+
referableAndReferencedTransportVersion("new_tv", "8123000,8012001,7123001")
305+
file("myserver/src/main/resources/transport/latest/9.2.csv").text =
306+
"""
307+
<<<<<<< HEAD
308+
existing_92,8123000
309+
=======
310+
new_tv,8123000
311+
>>>>>> name
312+
""".strip()
313+
file("myserver/src/main/resources/transport/latest/9.1.csv").text =
314+
"""
315+
<<<<<<< HEAD
316+
existing_92,8012001
317+
=======
318+
new_tv,8012001
319+
>>>>>> name
320+
""".strip()
321+
file("myserver/src/main/resources/transport/latest/8.19.csv").text =
322+
"""
323+
<<<<<<< HEAD
324+
initial_8.19.7,7123001
325+
=======
326+
new_tv,7123001
327+
>>>>>> name
328+
""".strip()
329+
330+
when:
331+
def result = runGenerateAndValidateTask("--resolve-conflict").build()
332+
333+
then:
334+
assertGenerateAndValidateSuccess(result)
335+
assertReferableDefinition("existing_92", "8123000,8012001")
336+
assertUnreferableDefinition("initial_8.19.7", "7123001")
337+
assertReferableDefinition("new_tv", "8124000,8012002,7123002")
338+
assertUpperBound("9.2", "new_tv,8124000")
339+
assertUpperBound("9.1", "new_tv,8012002")
340+
assertUpperBound("8.19", "new_tv,7123002")
341+
}
342+
343+
def "update flag cannot be used with backport branches"() {
344+
when:
345+
def result = runGenerateTask("--resolve-conflict", "--backport-branches=9.1").buildAndFail()
346+
347+
then:
348+
assertGenerateFailure(result, "Cannot use --resolve-conflict with --backport-branches")
349+
}
350+
280351
def "branches param order does not matter"() {
281352
given:
282353
referencedTransportVersion("test_tv")
@@ -449,7 +520,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
449520
referencedTransportVersion("new_tv")
450521
file("myserver/alt_upper_bound.csv").text = "some_tv,8126000"
451522
file("myserver/build.gradle") << """
452-
tasks.named('generateTransportVersionDefinition') {
523+
tasks.named('generateTransportVersion') {
453524
alternateUpperBoundFile = project.file("alt_upper_bound.csv")
454525
}
455526
tasks.named('validateTransportVersionResources') {
@@ -470,7 +541,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
470541
referencedTransportVersion("new_tv")
471542
file("myserver/alt_upper_bound.csv").text = "some_tv,8122100"
472543
file("myserver/build.gradle") << """
473-
tasks.named('generateTransportVersionDefinition') {
544+
tasks.named('generateTransportVersion') {
474545
alternateUpperBoundFile = project.file("alt_upper_bound.csv")
475546
}
476547
tasks.named('validateTransportVersionResources') {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ public void run() throws IOException {
5555
var definition = new TransportVersionDefinition(initialDefinitionName, List.of(id));
5656
resources.writeUnreferableDefinition(definition);
5757
var newUpperBound = new TransportVersionUpperBound(upperBoundName, initialDefinitionName, id);
58-
resources.writeUpperBound(newUpperBound);
58+
resources.writeUpperBound(newUpperBound, false);
5959

6060
if (releaseVersion.getRevision() == 0) {
6161
Version currentVersion = getCurrentVersion().get();
6262
String currentUpperBoundName = getUpperBoundName(currentVersion);
6363
var currentUpperBound = new TransportVersionUpperBound(currentUpperBoundName, initialDefinitionName, id);
64-
resources.writeUpperBound(currentUpperBound);
64+
resources.writeUpperBound(currentUpperBound, false);
6565
}
6666
}
6767

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

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,14 @@ public abstract class GenerateTransportVersionDefinitionTask extends DefaultTask
7272
@Option(option = "increment", description = "The amount to increment the id from the current upper bounds file by")
7373
public abstract Property<Integer> getIncrement();
7474

75+
@Input
76+
@Optional
77+
@Option(
78+
option = "resolve-conflict",
79+
description = "Regenerate the transport version currently being added to upstream to resolve a merge conflict"
80+
)
81+
public abstract Property<Boolean> getResolveConflict();
82+
7583
/**
7684
* The name of the upper bounds file which will be used at runtime on the current branch. Normally
7785
* this equates to VersionProperties.getElasticsearchVersion().
@@ -95,7 +103,7 @@ public void run() throws IOException {
95103
String targetDefinitionName = getTargetDefinitionName(resources, referencedNames, changedDefinitionNames);
96104

97105
List<TransportVersionUpperBound> upstreamUpperBounds = resources.getUpperBoundsFromUpstream();
98-
Set<String> targetUpperBoundNames = getTargetUpperBoundNames(upstreamUpperBounds);
106+
Set<String> targetUpperBoundNames = getTargetUpperBoundNames(resources, upstreamUpperBounds, targetDefinitionName);
99107

100108
getLogger().lifecycle("Generating transport version name: " + targetDefinitionName);
101109
if (targetDefinitionName.isEmpty()) {
@@ -121,6 +129,7 @@ private List<TransportVersionId> updateUpperBounds(
121129
throw new IllegalArgumentException("Invalid increment " + increment + ", must be a positive integer");
122130
}
123131
List<TransportVersionId> ids = new ArrayList<>();
132+
boolean stageInGit = getResolveConflict().getOrElse(false);
124133

125134
TransportVersionDefinition existingDefinition = resources.getReferableDefinitionFromUpstream(definitionName);
126135
for (TransportVersionUpperBound existingUpperBound : existingUpperBounds) {
@@ -134,12 +143,12 @@ private List<TransportVersionId> updateUpperBounds(
134143
int targetIncrement = upperBoundName.equals(currentUpperBoundName) ? increment : 1;
135144
targetId = createTargetId(existingUpperBound, targetIncrement);
136145
var newUpperBound = new TransportVersionUpperBound(upperBoundName, definitionName, targetId);
137-
resources.writeUpperBound(newUpperBound);
146+
resources.writeUpperBound(newUpperBound, stageInGit);
138147
}
139148
ids.add(targetId);
140149
} else {
141150
// Default case: we're not targeting this branch so reset it
142-
resources.writeUpperBound(existingUpperBound);
151+
resources.writeUpperBound(existingUpperBound, false);
143152
}
144153
}
145154

@@ -180,7 +189,19 @@ private String getTargetDefinitionName(
180189
}
181190
}
182191

183-
private Set<String> getTargetUpperBoundNames(List<TransportVersionUpperBound> upstreamUpperBounds) {
192+
private Set<String> getTargetUpperBoundNames(
193+
TransportVersionResourcesService resources,
194+
List<TransportVersionUpperBound> upstreamUpperBounds,
195+
String targetDefinitionName
196+
) throws IOException {
197+
if (getResolveConflict().getOrElse(false)) {
198+
if (getBackportBranches().isPresent()) {
199+
throw new IllegalArgumentException("Cannot use --resolve-conflict with --backport-branches");
200+
}
201+
202+
return getUpperBoundNamesFromDefinition(resources, upstreamUpperBounds, targetDefinitionName);
203+
}
204+
184205
Set<String> targetUpperBoundNames = new HashSet<>();
185206
targetUpperBoundNames.add(getCurrentUpperBoundName().get());
186207
if (getBackportBranches().isPresent()) {
@@ -204,9 +225,32 @@ private Set<String> getTargetUpperBoundNames(List<TransportVersionUpperBound> up
204225
return targetUpperBoundNames;
205226
}
206227

228+
private Set<String> getUpperBoundNamesFromDefinition(
229+
TransportVersionResourcesService resources,
230+
List<TransportVersionUpperBound> upstreamUpperBounds,
231+
String targetDefinitionName
232+
) throws IOException {
233+
TransportVersionDefinition definition = resources.getReferableDefinition(targetDefinitionName);
234+
Set<String> upperBoundNames = new HashSet<>();
235+
upperBoundNames.add(getCurrentUpperBoundName().get());
236+
237+
// skip the primary id as that is current, which we always add
238+
for (int i = 1; i < definition.ids().size(); ++i) {
239+
TransportVersionId id = definition.ids().get(i);
240+
// we have a small number of upper bound files, so just scan for the ones we want
241+
for (TransportVersionUpperBound upperBound : upstreamUpperBounds) {
242+
if (upperBound.definitionId().base() == id.base()) {
243+
upperBoundNames.add(upperBound.name());
244+
}
245+
}
246+
}
247+
248+
return upperBoundNames;
249+
}
250+
207251
private void resetAllUpperBounds(TransportVersionResourcesService resources) throws IOException {
208252
for (TransportVersionUpperBound upperBound : resources.getUpperBoundsFromUpstream()) {
209-
resources.writeUpperBound(upperBound);
253+
resources.writeUpperBound(upperBound, false);
210254
}
211255
}
212256

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public void apply(Project project) {
8383
});
8484

8585
var generateDefinitionsTask = project.getTasks()
86-
.register("generateTransportVersionDefinition", GenerateTransportVersionDefinitionTask.class, t -> {
86+
.register("generateTransportVersion", GenerateTransportVersionDefinitionTask.class, t -> {
8787
t.setGroup(taskGroup);
8888
t.setDescription("(Re)generates a transport version definition file");
8989
t.getReferencesFiles().setFrom(tvReferencesConfig);

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ Map<String, TransportVersionDefinition> getReferableDefinitions() throws IOExcep
107107
return readDefinitions(transportResourcesDir.resolve(REFERABLE_DIR));
108108
}
109109

110+
/** Return a single referable definition by name */
111+
TransportVersionDefinition getReferableDefinition(String name) throws IOException {
112+
Path resourcePath = transportResourcesDir.resolve(getReferableDefinitionRelativePath(name));
113+
return TransportVersionDefinition.fromString(resourcePath, Files.readString(resourcePath, StandardCharsets.UTF_8));
114+
}
115+
110116
/** Get a referable definition from upstream if it exists there, or null otherwise */
111117
TransportVersionDefinition getReferableDefinitionFromUpstream(String name) {
112118
Path resourcePath = getReferableDefinitionRelativePath(name);
@@ -218,10 +224,14 @@ List<TransportVersionUpperBound> getUpperBoundsFromUpstream() throws IOException
218224
}
219225

220226
/** Write the given upper bound to a file in the transport resources */
221-
void writeUpperBound(TransportVersionUpperBound upperBound) throws IOException {
227+
void writeUpperBound(TransportVersionUpperBound upperBound, boolean stageInGit) throws IOException {
222228
Path path = transportResourcesDir.resolve(getUpperBoundRelativePath(upperBound.name()));
223229
logger.debug("Writing upper bound [" + upperBound + "] to [" + path + "]");
224230
Files.writeString(path, upperBound.definitionName() + "," + upperBound.definitionId().complete() + "\n", StandardCharsets.UTF_8);
231+
232+
if (stageInGit) {
233+
gitCommand("add", path.toString());
234+
}
225235
}
226236

227237
/** Return the path within the repository of the given latest */

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public void validateTransportVersions() throws IOException {
5858
+ tvReference.name()
5959
+ "\") was used at "
6060
+ tvReference.location()
61-
+ ", but lacks a"
62-
+ " transport version definition. This can be generated with the <TODO> task" // todo
61+
+ ", but lacks a transport version definition. "
62+
+ "If this is a new transport version, run './gradle generateTransportVersion'."
6363
);
6464
}
6565
}

docs/changelog/134134.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
pr: 134134
2+
summary: Prevent field caps from failing due to can match failure
3+
area: Search
4+
type: bug
5+
issues:
6+
- 116106

docs/reference/query-languages/esql/esql-syntax.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ FROM index
6969
| WHERE first_name == "Georgi"
7070
```
7171

72-
If the literal string itself contains quotes, these need to be escaped (`\\"`). {{esql}} also supports the triple-quotes (`"""`) delimiter, for convenience:
72+
If the literal string itself contains quotes, these need to be escaped (`\"`). {{esql}} also supports the triple-quotes (`"""`) delimiter, for convenience:
7373

7474
```esql
7575
ROW name = """Indiana "Indy" Jones"""

0 commit comments

Comments
 (0)