Skip to content

Commit 88b74bc

Browse files
authored
Merge branch 'main' into kderusso/action-named-writeables
2 parents 32c2373 + c24d431 commit 88b74bc

File tree

124 files changed

+1304
-1494
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+1304
-1494
lines changed

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

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,4 +311,43 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes
311311
then:
312312
result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
313313
}
314+
315+
def "modification checks use PR base branch in CI"() {
316+
given:
317+
// create 9.1 branch
318+
execute("git checkout -b 9.1")
319+
// setup 9.1 upper bound as if 9.2 was just branched, so no patches yet
320+
unreferableTransportVersion("initial_9.1.0", "8013000")
321+
transportVersionUpperBound("9.1", "initial_9.1.0", "8013000")
322+
execute("git add .")
323+
execute("git commit -m initial")
324+
325+
// advance main branch
326+
execute("git checkout main")
327+
unreferableTransportVersion("initial_9.1.0", "8013000")
328+
referableAndReferencedTransportVersion("new_tv", "8124000,8013001")
329+
transportVersionUpperBound("9.2", "new_tv", "8124000")
330+
transportVersionUpperBound("9.1", "new_tv", "8013001")
331+
execute("git add .")
332+
execute("git commit -m update")
333+
334+
// create a 9.1 backport
335+
execute("git checkout 9.1")
336+
execute("git checkout -b test_9.1")
337+
referableAndReferencedTransportVersion("new_tv", "8124000,8013001")
338+
transportVersionUpperBound("9.2", "new_tv", "8124000")
339+
transportVersionUpperBound("9.1", "new_tv", "8013001")
340+
file("myserver/build.gradle") << """
341+
tasks.named('validateTransportVersionResources') {
342+
currentUpperBoundName = '9.1'
343+
}
344+
"""
345+
346+
when:
347+
def result = gradleRunner("validateTransportVersionResources")
348+
.withEnvironment(Map.of("BUILDKITE_PULL_REQUEST_BASE_BRANCH", "9.1")).build()
349+
350+
then:
351+
result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
352+
}
314353
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,23 @@
1414
import org.elasticsearch.gradle.internal.conventions.VersionPropertiesPlugin;
1515
import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin;
1616
import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTaskPlugin;
17+
import org.elasticsearch.gradle.internal.info.BuildParameterExtension;
18+
import org.elasticsearch.gradle.internal.info.GlobalBuildInfoPlugin;
1719
import org.gradle.api.Action;
1820
import org.gradle.api.Plugin;
1921
import org.gradle.api.Project;
2022
import org.gradle.api.file.Directory;
2123
import org.gradle.api.plugins.JavaPlugin;
24+
import org.gradle.api.provider.Property;
2225
import org.gradle.api.provider.Provider;
2326
import org.gradle.api.tasks.Copy;
2427
import org.gradle.language.base.plugins.LifecycleBasePlugin;
2528

2629
import java.util.Map;
2730
import java.util.Properties;
2831

32+
import static org.elasticsearch.gradle.internal.util.ParamsUtils.loadBuildParams;
33+
2934
public class TransportVersionResourcesPlugin implements Plugin<Project> {
3035

3136
public static final String TRANSPORT_REFERENCES_TOPIC = "transportReferences";
@@ -37,6 +42,9 @@ public void apply(Project project) {
3742
project.getPluginManager().apply(PrecommitTaskPlugin.class);
3843
var psService = project.getPlugins().apply(ProjectSubscribeServicePlugin.class).getService();
3944

45+
project.getRootProject().getPlugins().apply(GlobalBuildInfoPlugin.class);
46+
Property<BuildParameterExtension> buildParams = loadBuildParams(project);
47+
4048
Properties versions = (Properties) project.getExtensions().getByName(VersionPropertiesPlugin.VERSIONS_EXT);
4149
Version currentVersion = Version.fromString(versions.getProperty("elasticsearch"));
4250

@@ -76,6 +84,7 @@ public void apply(Project project) {
7684
t.getShouldValidateDensity().convention(true);
7785
t.getShouldValidatePrimaryIdNotPatch().convention(true);
7886
t.getCurrentUpperBoundName().convention(currentVersion.getMajor() + "." + currentVersion.getMinor());
87+
t.getCI().set(buildParams.get().getCi());
7988
});
8089
project.getTasks().named(PrecommitPlugin.PRECOMMIT_TASK_NAME).configure(t -> t.dependsOn(validateTask));
8190

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,11 @@ private String findUpstreamRef() {
284284
logger.warn("No remotes found. Using 'main' branch as upstream ref for transport version resources");
285285
return "main";
286286
}
287+
// default the branch name to look at to that which a PR in CI is targeting
288+
String branchName = System.getenv("BUILDKITE_PULL_REQUEST_BASE_BRANCH");
289+
if (branchName == null || branchName.strip().isEmpty()) {
290+
branchName = "main";
291+
}
287292
List<String> remoteNames = List.of(remotesOutput.split("\n"));
288293
if (remoteNames.contains(UPSTREAM_REMOTE_NAME) == false) {
289294
// our special remote doesn't exist yet, so create it
@@ -299,14 +304,14 @@ private String findUpstreamRef() {
299304
gitCommand("remote", "add", UPSTREAM_REMOTE_NAME, upstreamUrl);
300305
} else {
301306
logger.warn("No elastic github remotes found to copy. Using 'main' branch as upstream ref for transport version resources");
302-
return "main";
307+
return branchName;
303308
}
304309
}
305310

306311
// make sure the remote main ref is up to date
307-
gitCommand("fetch", UPSTREAM_REMOTE_NAME, "main");
312+
gitCommand("fetch", UPSTREAM_REMOTE_NAME, branchName);
308313

309-
return UPSTREAM_REMOTE_NAME + "/main";
314+
return UPSTREAM_REMOTE_NAME + "/" + branchName;
310315
}
311316

312317
// Return the transport version resources paths that exist in upstream

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

Lines changed: 51 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ public Path getResourcesDir() {
6666
@Input
6767
public abstract Property<String> getCurrentUpperBoundName();
6868

69+
@Input
70+
public abstract Property<Boolean> getCI();
71+
6972
private static final Pattern NAME_FORMAT = Pattern.compile("[a-z0-9_]+");
7073

7174
@ServiceReference("transportVersionResources")
@@ -82,13 +85,14 @@ public void validateTransportVersions() throws IOException {
8285
Map<String, TransportVersionUpperBound> upperBounds = resources.getUpperBounds();
8386
TransportVersionUpperBound currentUpperBound = upperBounds.get(getCurrentUpperBoundName().get());
8487
boolean onReleaseBranch = checkIfDefinitelyOnReleaseBranch(upperBounds);
88+
boolean validateModifications = onReleaseBranch == false || getCI().get();
8589

8690
for (var definition : referableDefinitions.values()) {
87-
validateNamedDefinition(definition, referencedNames);
91+
validateNamedDefinition(definition, referencedNames, validateModifications);
8892
}
8993

9094
for (var definition : unreferableDefinitions.values()) {
91-
validateUnreferableDefinition(definition);
95+
validateUnreferableDefinition(definition, validateModifications);
9296
}
9397

9498
for (var entry : idsByBase.entrySet()) {
@@ -101,10 +105,10 @@ public void validateTransportVersions() throws IOException {
101105

102106
if (onReleaseBranch) {
103107
// on release branches we only check the current upper bound, others may be inaccurate
104-
validateUpperBound(currentUpperBound, allDefinitions, idsByBase);
108+
validateUpperBound(currentUpperBound, allDefinitions, idsByBase, validateModifications);
105109
} else {
106110
for (var upperBound : upperBounds.values()) {
107-
validateUpperBound(upperBound, allDefinitions, idsByBase);
111+
validateUpperBound(upperBound, allDefinitions, idsByBase, validateModifications);
108112
}
109113

110114
validatePrimaryIds(resources, upperBounds, allDefinitions);
@@ -126,7 +130,11 @@ private Map<String, TransportVersionDefinition> collectAllDefinitions(
126130
return allDefinitions;
127131
}
128132

129-
private void validateNamedDefinition(TransportVersionDefinition definition, Set<String> referencedNames) {
133+
private void validateNamedDefinition(
134+
TransportVersionDefinition definition,
135+
Set<String> referencedNames,
136+
boolean validateModifications
137+
) {
130138
if (referencedNames.contains(definition.name()) == false) {
131139
throwDefinitionFailure(definition, "is not referenced");
132140
}
@@ -152,35 +160,39 @@ private void validateNamedDefinition(TransportVersionDefinition definition, Set<
152160
}
153161
}
154162
}
155-
// validate any modifications
156-
TransportVersionDefinition originalDefinition = getResources().get().getReferableDefinitionFromGitBase(definition.name());
157-
if (originalDefinition != null) {
158-
validateIdenticalPrimaryId(definition, originalDefinition);
159-
for (int i = 1; i < originalDefinition.ids().size(); ++i) {
160-
TransportVersionId originalId = originalDefinition.ids().get(i);
161-
162-
// we have a very small number of ids in a definition, so just search linearly
163-
boolean found = false;
164-
for (int j = 1; j < definition.ids().size(); ++j) {
165-
TransportVersionId id = definition.ids().get(j);
166-
if (id.base() == originalId.base()) {
167-
found = true;
168-
if (id.complete() != originalId.complete()) {
169-
throwDefinitionFailure(definition, "has modified patch id from " + originalId + " to " + id);
163+
164+
if (validateModifications) {
165+
TransportVersionDefinition originalDefinition = getResources().get().getReferableDefinitionFromGitBase(definition.name());
166+
if (originalDefinition != null) {
167+
validateIdenticalPrimaryId(definition, originalDefinition);
168+
for (int i = 1; i < originalDefinition.ids().size(); ++i) {
169+
TransportVersionId originalId = originalDefinition.ids().get(i);
170+
171+
// we have a very small number of ids in a definition, so just search linearly
172+
boolean found = false;
173+
for (int j = 1; j < definition.ids().size(); ++j) {
174+
TransportVersionId id = definition.ids().get(j);
175+
if (id.base() == originalId.base()) {
176+
found = true;
177+
if (id.complete() != originalId.complete()) {
178+
throwDefinitionFailure(definition, "has modified patch id from " + originalId + " to " + id);
179+
}
170180
}
171181
}
172-
}
173-
if (found == false) {
174-
throwDefinitionFailure(definition, "has removed id " + originalId);
182+
if (found == false) {
183+
throwDefinitionFailure(definition, "has removed id " + originalId);
184+
}
175185
}
176186
}
177187
}
178188
}
179189

180-
private void validateUnreferableDefinition(TransportVersionDefinition definition) {
181-
TransportVersionDefinition originalDefinition = getResources().get().getUnreferableDefinitionFromGitBase(definition.name());
182-
if (originalDefinition != null) {
183-
validateIdenticalPrimaryId(definition, originalDefinition);
190+
private void validateUnreferableDefinition(TransportVersionDefinition definition, boolean validateModifications) {
191+
if (validateModifications) {
192+
TransportVersionDefinition originalDefinition = getResources().get().getUnreferableDefinitionFromGitBase(definition.name());
193+
if (originalDefinition != null) {
194+
validateIdenticalPrimaryId(definition, originalDefinition);
195+
}
184196
}
185197
if (definition.ids().isEmpty()) {
186198
throwDefinitionFailure(definition, "does not contain any ids");
@@ -204,7 +216,8 @@ private void validateIdenticalPrimaryId(TransportVersionDefinition definition, T
204216
private void validateUpperBound(
205217
TransportVersionUpperBound upperBound,
206218
Map<String, TransportVersionDefinition> definitions,
207-
Map<Integer, List<IdAndDefinition>> idsByBase
219+
Map<Integer, List<IdAndDefinition>> idsByBase,
220+
boolean validateModifications
208221
) {
209222
TransportVersionDefinition upperBoundDefinition = definitions.get(upperBound.definitionName());
210223
if (upperBoundDefinition == null) {
@@ -240,13 +253,16 @@ private void validateUpperBound(
240253
);
241254
}
242255

243-
TransportVersionUpperBound existingUpperBound = getResources().get().getUpperBoundFromGitBase(upperBound.name());
244-
if (existingUpperBound != null && getShouldValidatePrimaryIdNotPatch().get()) {
245-
if (upperBound.definitionId().patch() != 0 && upperBound.definitionId().base() != existingUpperBound.definitionId().base()) {
246-
throwUpperBoundFailure(
247-
upperBound,
248-
"modifies base id from " + existingUpperBound.definitionId().base() + " to " + upperBound.definitionId().base()
249-
);
256+
if (validateModifications) {
257+
TransportVersionUpperBound existingUpperBound = getResources().get().getUpperBoundFromGitBase(upperBound.name());
258+
if (existingUpperBound != null && getShouldValidatePrimaryIdNotPatch().get()) {
259+
if (upperBound.definitionId().patch() != 0
260+
&& upperBound.definitionId().base() != existingUpperBound.definitionId().base()) {
261+
throwUpperBoundFailure(
262+
upperBound,
263+
"modifies base id from " + existingUpperBound.definitionId().base() + " to " + upperBound.definitionId().base()
264+
);
265+
}
250266
}
251267
}
252268
}

docs/changelog/135701.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 135701
2+
summary: Add Google Model Garden's Meta, Mistral, Hugging Face and Ai21 providers support to Inference Plugin
3+
area: Machine Learning
4+
type: enhancement
5+
issues: []

docs/changelog/136060.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 136060
2+
summary: Limit number of allocation explanations in `shards_availability` health indicator
3+
area: Health
4+
type: bug
5+
issues: []

docs/reference/elasticsearch/mapping-reference/semantic-text.md

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,27 @@ POST test-index/_search
658658
This will return verbose chunked embeddings content that is used to perform
659659
semantic search for `semantic_text` fields.
660660

661+
## Cross-cluster search (CCS) [ccs]
662+
```{applies_to}
663+
stack: ga 9.2
664+
serverless: unavailable
665+
```
666+
667+
`semantic_text` supports [Cross-Cluster Search (CCS)](docs-content://solutions/search/cross-cluster-search.md) through the [`_search` endpoint](https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-search)
668+
when [`ccs_minimize_roundtrips`](docs-content://solutions/search/cross-cluster-search.md#ccs-network-delays) is set to `true`.
669+
This is the default value for `ccs_minimize_roundtrips`, so most CCS queries should work automatically:
670+
671+
```console
672+
POST local-index,remote-cluster:remote-index/_search
673+
{
674+
"query": {
675+
"match": {
676+
"my_semantic_field": "Which country is Paris in?"
677+
}
678+
}
679+
}
680+
```
681+
661682
## Limitations [limitations]
662683

663684
`semantic_text` field types have the following limitations:
@@ -666,5 +687,6 @@ semantic search for `semantic_text` fields.
666687
of [nested fields](/reference/elasticsearch/mapping-reference/nested.md).
667688
* `semantic_text` fields can’t currently be set as part
668689
of [dynamic templates](docs-content://manage-data/data-store/mapping/dynamic-templates.md).
669-
* `semantic_text` fields are not supported with Cross-Cluster Search (CCS) or
670-
Cross-Cluster Replication (CCR).
690+
* `semantic_text` fields do not support [Cross-Cluster Search (CCS)](docs-content://solutions/search/cross-cluster-search.md) when [`ccs_minimize_roundtrips`](docs-content://solutions/search/cross-cluster-search.md#ccs-network-delays) is set to `false`.
691+
* `semantic_text` fields do not support [Cross-Cluster Search (CCS)](docs-content://solutions/search/cross-cluster-search.md) in [ES|QL](/reference/query-languages/esql.md).
692+
* `semantic_text` fields do not support [Cross-Cluster Replication (CCR)](docs-content://deploy-manage/tools/cross-cluster-replication.md).

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,10 @@ Also, [`INLINE STATS`](/reference/query-languages/esql/commands/inlinestats-by.m
260260
* CSV export from Discover shows no more than 10,000 rows. This limit only applies to the number of rows that are retrieved by the query and displayed in Discover. Queries and aggregations run on the full data set.
261261
* Querying many indices at once without any filters can cause an error in kibana which looks like `[esql] > Unexpected error from Elasticsearch: The content length (536885793) is bigger than the maximum allowed string (536870888)`. The response from {{esql}} is too long. Use [`DROP`](/reference/query-languages/esql/commands/drop.md) or [`KEEP`](/reference/query-languages/esql/commands/keep.md) to limit the number of fields returned.
262262

263+
## Cross-cluster search limitations [esql-ccs-limitations]
264+
265+
{{esql}} does not support [Cross-Cluster Search (CCS)](docs-content://solutions/search/cross-cluster-search.md) on [`semantic_text` fields](/reference/elasticsearch/mapping-reference/semantic-text.md).
266+
263267
## Known issues [esql-known-issues]
264268

265269
Refer to [Known issues](/release-notes/known-issues.md) for a list of known issues for {{esql}}.

muted-tests.yml

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -627,21 +627,42 @@ tests:
627627
- class: org.elasticsearch.xpack.esql.qa.single_node.GenerativeForkIT
628628
method: test {csv-spec:string.SpaceNegative}
629629
issue: https://github.com/elastic/elasticsearch/issues/136249
630-
- class: org.elasticsearch.index.store.AsyncDirectIODirectoryTests
631-
method: testIsLoadedOnSlice
632-
issue: https://github.com/elastic/elasticsearch/issues/136331
633-
- class: org.elasticsearch.cluster.coordination.NodeJoiningIT
634-
method: testNodeTriesToJoinClusterAndThenSameMasterIsElected
635-
issue: https://github.com/elastic/elasticsearch/issues/136332
636-
- class: org.elasticsearch.index.store.AsyncDirectIODirectoryTests
637-
method: testSeekPastEOFAndRead
638-
issue: https://github.com/elastic/elasticsearch/issues/136351
639630
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
640631
method: testDataStreams {cluster=UPGRADED}
641632
issue: https://github.com/elastic/elasticsearch/issues/136353
642633
- class: org.elasticsearch.xpack.remotecluster.RemoteClusterSecurityBWCToRCS2ClusterRestIT
643634
method: testBwcCCSViaRCS1orRCS2
644635
issue: https://github.com/elastic/elasticsearch/issues/136368
636+
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
637+
method: testServiceAccountApiKey {cluster=UPGRADED}
638+
issue: https://github.com/elastic/elasticsearch/issues/136390
639+
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
640+
method: testWatcher {cluster=UPGRADED}
641+
issue: https://github.com/elastic/elasticsearch/issues/136391
642+
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
643+
method: testSingleDoc {cluster=UPGRADED}
644+
issue: https://github.com/elastic/elasticsearch/issues/136392
645+
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
646+
method: testTransformLegacyTemplateCleanup {cluster=UPGRADED}
647+
issue: https://github.com/elastic/elasticsearch/issues/136393
648+
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
649+
method: testApiKeySuperuser {cluster=UPGRADED}
650+
issue: https://github.com/elastic/elasticsearch/issues/136394
651+
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
652+
method: testSecurityNativeRealm {cluster=UPGRADED}
653+
issue: https://github.com/elastic/elasticsearch/issues/136395
654+
- class: org.elasticsearch.xpack.restart.FullClusterRestartIT
655+
method: testSlmPolicyAndStats {cluster=UPGRADED}
656+
issue: https://github.com/elastic/elasticsearch/issues/136399
657+
- class: org.elasticsearch.test.rest.yaml.RcsCcsCommonYamlTestSuiteIT
658+
method: test {p0=search.vectors/160_knn_query_missing_params/kNN query in a bool clause - missing num_candidates}
659+
issue: https://github.com/elastic/elasticsearch/issues/136402
660+
- class: org.elasticsearch.test.rest.yaml.CcsCommonYamlTestSuiteIT
661+
method: test {p0=search.vectors/220_dense_vector_node_index_stats/index node stats non-quantized}
662+
issue: https://github.com/elastic/elasticsearch/issues/136403
663+
- class: org.elasticsearch.TransportVersionTests
664+
method: testVersionComparison
665+
issue: https://github.com/elastic/elasticsearch/issues/136410
645666

646667
# Examples:
647668
#

rest-api-spec/src/main/resources/rest-api-spec/api/_internal.update_desired_nodes.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"description": "the history id"
2828
},
2929
"version": {
30-
"type": "integer",
30+
"type": "int",
3131
"description": "the version number"
3232
}
3333
}

0 commit comments

Comments
 (0)