Skip to content

Commit efa5c30

Browse files
committed
Merge remote-tracking branch 'upstream/main' into security-stats
* upstream/main: Turn NumericValues into functional interface (elastic#135068) Improve block loader for source only runtime fields of type keyword (elastic#135026) Mute org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT test {csv-spec:stats.StdDeviationGroupedAllTypes} elastic#135103 Mute org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT test {csv-spec:stats.StdDeviationWithLongs} elastic#135102 Mute org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT test {csv-spec:inlinestats.StdDevFilter} elastic#135101 Mute org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT test {csv-spec:stats.StdDevFilter} elastic#135100 Remove track_live_docs_in_memory_bytes feature flag (elastic#134900) Create SPI to allow prohibiting certain top-level mappings (elastic#132360) Only validate primary ids on release branches (elastic#135044) Added no-op support for project_routing query param to REST endpoints that will support cross-project search (elastic#134741) Fix race in FileSettingsServiceIT.testSettingsAppliedOnStart (elastic#134368)
2 parents f1d7291 + 58e7dd6 commit efa5c30

File tree

64 files changed

+1048
-188
lines changed

Some content is hidden

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

64 files changed

+1048
-188
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
125125
tasks.named('generateTransportVersion') {
126126
currentUpperBoundName = '9.2'
127127
}
128+
tasks.named('validateTransportVersionResources') {
129+
currentUpperBoundName = '9.2'
130+
}
128131
"""
129132
referableAndReferencedTransportVersion("existing_91", "8012000")
130133
referableAndReferencedTransportVersion("older_92", "8122000")

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,21 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes
277277
"[myserver/src/main/resources/transport/definitions/referable/existing_92.csv]"
278278
)
279279
}
280+
281+
def "primary id checks skipped on release branch"() {
282+
given:
283+
file("myserver/build.gradle") << """
284+
tasks.named('validateTransportVersionResources') {
285+
currentUpperBoundName = '9.1'
286+
}
287+
"""
288+
referableAndReferencedTransportVersion("some_tv", "8125000")
289+
transportVersionUpperBound("9.2", "some_tv", "8125000")
290+
291+
when:
292+
def result = gradleRunner("validateTransportVersionResources").build()
293+
294+
then:
295+
result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
296+
}
280297
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
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.gradle.api.Action;
1718
import org.gradle.api.Plugin;
1819
import org.gradle.api.Project;
1920
import org.gradle.api.file.Directory;
@@ -23,7 +24,6 @@
2324

2425
import java.util.Map;
2526
import java.util.Properties;
26-
import java.util.function.Consumer;
2727

2828
public class TransportVersionResourcesPlugin implements Plugin<Project> {
2929

@@ -70,6 +70,7 @@ public void apply(Project project) {
7070
t.getReferencesFiles().setFrom(tvReferencesConfig);
7171
t.getShouldValidateDensity().convention(true);
7272
t.getShouldValidatePrimaryIdNotPatch().convention(true);
73+
t.getCurrentUpperBoundName().convention(currentVersion.getMajor() + "." + currentVersion.getMinor());
7374
});
7475
project.getTasks().named(PrecommitPlugin.PRECOMMIT_TASK_NAME).configure(t -> t.dependsOn(validateTask));
7576

@@ -83,7 +84,7 @@ public void apply(Project project) {
8384
t.into(resourceRoot + "/definitions", c -> c.from(generateManifestTask));
8485
});
8586

86-
Consumer<GenerateTransportVersionDefinitionTask> generationConfiguration = t -> {
87+
Action<GenerateTransportVersionDefinitionTask> generationConfiguration = t -> {
8788
t.setGroup(taskGroup);
8889
t.getReferencesFiles().setFrom(tvReferencesConfig);
8990
t.getIncrement().convention(1000);
@@ -92,17 +93,17 @@ public void apply(Project project) {
9293

9394
var generateDefinitionsTask = project.getTasks()
9495
.register("generateTransportVersion", GenerateTransportVersionDefinitionTask.class, t -> {
95-
generationConfiguration.accept(t);
9696
t.setDescription("(Re)generates a transport version definition file");
9797
});
98+
generateDefinitionsTask.configure(generationConfiguration);
9899
validateTask.configure(t -> t.mustRunAfter(generateDefinitionsTask));
99100

100101
var resolveConflictTask = project.getTasks()
101102
.register("resolveTransportVersionConflict", GenerateTransportVersionDefinitionTask.class, t -> {
102-
generationConfiguration.accept(t);
103103
t.setDescription("Resolve merge conflicts in transport version internal state files");
104104
t.getResolveConflict().set(true);
105105
});
106+
resolveConflictTask.configure(generationConfiguration);
106107
validateTask.configure(t -> t.mustRunAfter(resolveConflictTask));
107108

108109
var generateInitialTask = project.getTasks()

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ public Path getResourcesDir() {
6060
@Input
6161
public abstract Property<Boolean> getShouldValidatePrimaryIdNotPatch();
6262

63+
/**
64+
* The name of the upper bounds file which will be used at runtime on the current branch. Normally
65+
* this equates to VersionProperties.getElasticsearchVersion().
66+
*/
67+
@Input
68+
public abstract Property<String> getCurrentUpperBoundName();
69+
6370
private record IdAndDefinition(TransportVersionId id, TransportVersionDefinition definition) {}
6471

6572
private static final Pattern NAME_FORMAT = Pattern.compile("[a-z0-9_]+");
@@ -76,6 +83,7 @@ public void validateTransportVersions() throws IOException {
7683
Map<String, TransportVersionDefinition> allDefinitions = collectAllDefinitions(referableDefinitions, unreferableDefinitions);
7784
Map<Integer, List<IdAndDefinition>> idsByBase = collectIdsByBase(allDefinitions.values());
7885
Map<String, TransportVersionUpperBound> upperBounds = resources.getUpperBounds();
86+
boolean onReleaseBranch = checkIfDefinitelyOnReleaseBranch(upperBounds);
7987

8088
for (var definition : referableDefinitions.values()) {
8189
validateNamedDefinition(definition, referencedNames);
@@ -93,7 +101,9 @@ public void validateTransportVersions() throws IOException {
93101
validateUpperBound(upperBound, allDefinitions, idsByBase);
94102
}
95103

96-
validatePrimaryIds(resources, upperBounds, allDefinitions);
104+
if (onReleaseBranch == false) {
105+
validatePrimaryIds(resources, upperBounds, allDefinitions);
106+
}
97107
}
98108

99109
private Map<String, TransportVersionDefinition> collectAllDefinitions(
@@ -318,6 +328,15 @@ private void validatePrimaryIds(
318328
);
319329
}
320330

331+
private boolean checkIfDefinitelyOnReleaseBranch(Map<String, TransportVersionUpperBound> upperBounds) {
332+
// only want to look at definitions <= the current upper bound.
333+
// TODO: we should filter all of the upper bounds/definitions that are validated by this, not just in this method
334+
String currentUpperBoundName = getCurrentUpperBoundName().get();
335+
TransportVersionUpperBound currentUpperBound = upperBounds.get(currentUpperBoundName);
336+
337+
return upperBounds.values().stream().anyMatch(u -> u.definitionId().complete() > currentUpperBound.definitionId().complete());
338+
}
339+
321340
private void throwDefinitionFailure(TransportVersionDefinition definition, String message) {
322341
Path relativePath = getResources().get().getDefinitionPath(definition);
323342
throw new VerificationException("Transport version definition file [" + relativePath + "] " + message);

docs/changelog/135026.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 135026
2+
summary: Improve block loader for source only runtime fields of type keyword
3+
area: Mapping
4+
type: enhancement
5+
issues: []

modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/MustachePlugin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public List<RestHandler> getRestHandlers(
6767
Predicate<NodeFeature> clusterSupportsFeature
6868
) {
6969
return Arrays.asList(
70-
new RestSearchTemplateAction(clusterSupportsFeature),
70+
new RestSearchTemplateAction(clusterSupportsFeature, settings),
7171
new RestMultiSearchTemplateAction(settings),
7272
new RestRenderSearchTemplateAction()
7373
);

modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestMultiSearchTemplateAction.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ public class RestMultiSearchTemplateAction extends BaseRestHandler {
3434
private static final Set<String> RESPONSE_PARAMS = Set.of(RestSearchAction.TYPED_KEYS_PARAM, RestSearchAction.TOTAL_HITS_AS_INT_PARAM);
3535

3636
private final boolean allowExplicitIndex;
37+
private final Settings settings;
3738

3839
public RestMultiSearchTemplateAction(Settings settings) {
3940
this.allowExplicitIndex = MULTI_ALLOW_EXPLICIT_INDEX.get(settings);
41+
this.settings = settings;
4042
}
4143

4244
@Override
@@ -63,7 +65,12 @@ public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client
6365
/**
6466
* Parses a {@link RestRequest} body and returns a {@link MultiSearchTemplateRequest}
6567
*/
66-
public static MultiSearchTemplateRequest parseRequest(RestRequest restRequest, boolean allowExplicitIndex) throws IOException {
68+
public MultiSearchTemplateRequest parseRequest(RestRequest restRequest, boolean allowExplicitIndex) throws IOException {
69+
if (settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false)) {
70+
// accept but drop project_routing param until fully supported
71+
restRequest.param("project_routing");
72+
}
73+
6774
MultiSearchTemplateRequest multiRequest = new MultiSearchTemplateRequest();
6875
if (restRequest.hasParam("max_concurrent_searches")) {
6976
multiRequest.maxConcurrentSearchRequests(restRequest.paramAsInt("max_concurrent_searches", 0));

modules/lang-mustache/src/main/java/org/elasticsearch/script/mustache/RestSearchTemplateAction.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.elasticsearch.action.search.SearchRequest;
1313
import org.elasticsearch.client.internal.node.NodeClient;
14+
import org.elasticsearch.common.settings.Settings;
1415
import org.elasticsearch.features.NodeFeature;
1516
import org.elasticsearch.rest.BaseRestHandler;
1617
import org.elasticsearch.rest.RestRequest;
@@ -36,9 +37,11 @@ public class RestSearchTemplateAction extends BaseRestHandler {
3637
private static final Set<String> RESPONSE_PARAMS = Set.of(TYPED_KEYS_PARAM, RestSearchAction.TOTAL_HITS_AS_INT_PARAM);
3738

3839
private final Predicate<NodeFeature> clusterSupportsFeature;
40+
private final Settings settings;
3941

40-
public RestSearchTemplateAction(Predicate<NodeFeature> clusterSupportsFeature) {
42+
public RestSearchTemplateAction(Predicate<NodeFeature> clusterSupportsFeature, Settings settings) {
4143
this.clusterSupportsFeature = clusterSupportsFeature;
44+
this.settings = settings;
4245
}
4346

4447
@Override
@@ -58,6 +61,11 @@ public String getName() {
5861

5962
@Override
6063
public RestChannelConsumer prepareRequest(RestRequest request, NodeClient client) throws IOException {
64+
if (settings != null && settings.getAsBoolean("serverless.cross_project.enabled", false)) {
65+
// accept but drop project_routing param until fully supported
66+
request.param("project_routing");
67+
}
68+
6169
// Creates the search request with all required params
6270
SearchRequest searchRequest = new SearchRequest();
6371
RestSearchAction.parseSearchRequest(

modules/lang-mustache/src/test/java/org/elasticsearch/script/mustache/MultiSearchTemplateRequestTests.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.elasticsearch.action.search.SearchRequest;
1313
import org.elasticsearch.common.bytes.BytesArray;
14+
import org.elasticsearch.common.settings.Settings;
1415
import org.elasticsearch.rest.RestRequest;
1516
import org.elasticsearch.script.ScriptType;
1617
import org.elasticsearch.search.builder.SearchSourceBuilder;
@@ -35,7 +36,7 @@ public void testParseRequest() throws Exception {
3536
RestRequest restRequest = new FakeRestRequest.Builder(xContentRegistry()).withContent(new BytesArray(data), XContentType.JSON)
3637
.build();
3738

38-
MultiSearchTemplateRequest request = RestMultiSearchTemplateAction.parseRequest(restRequest, true);
39+
MultiSearchTemplateRequest request = new RestMultiSearchTemplateAction(Settings.EMPTY).parseRequest(restRequest, true);
3940

4041
assertThat(request.requests().size(), equalTo(3));
4142
assertThat(request.requests().get(0).getRequest().indices()[0], equalTo("test0"));
@@ -73,7 +74,7 @@ public void testParseWithCarriageReturn() throws Exception {
7374
RestRequest restRequest = new FakeRestRequest.Builder(xContentRegistry()).withContent(new BytesArray(content), XContentType.JSON)
7475
.build();
7576

76-
MultiSearchTemplateRequest request = RestMultiSearchTemplateAction.parseRequest(restRequest, true);
77+
MultiSearchTemplateRequest request = new RestMultiSearchTemplateAction(Settings.EMPTY).parseRequest(restRequest, true);
7778

7879
assertThat(request.requests().size(), equalTo(1));
7980
assertThat(request.requests().get(0).getRequest().indices()[0], equalTo("test0"));
@@ -125,7 +126,7 @@ public void testMultiSearchTemplateToJson() throws Exception {
125126
// Deserialize the request
126127
RestRequest restRequest = new FakeRestRequest.Builder(xContentRegistry()).withContent(new BytesArray(serialized), XContentType.JSON)
127128
.build();
128-
MultiSearchTemplateRequest deser = RestMultiSearchTemplateAction.parseRequest(restRequest, true);
129+
MultiSearchTemplateRequest deser = new RestMultiSearchTemplateAction(Settings.EMPTY).parseRequest(restRequest, true);
129130

130131
// For object equality purposes need to set the search requests' source to non-null
131132
for (SearchTemplateRequest str : deser.requests()) {

muted-tests.yml

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,9 +411,6 @@ tests:
411411
- class: org.elasticsearch.gradle.internal.transport.TransportVersionManagementPluginFuncTest
412412
method: cannot change committed ids to a branch
413413
issue: https://github.com/elastic/elasticsearch/issues/132790
414-
- class: org.elasticsearch.reservedstate.service.FileSettingsServiceIT
415-
method: testSettingsAppliedOnStart
416-
issue: https://github.com/elastic/elasticsearch/issues/131210
417414
- class: org.elasticsearch.packaging.test.ArchiveGenerateInitialCredentialsTests
418415
method: test40VerifyAutogeneratedCredentials
419416
issue: https://github.com/elastic/elasticsearch/issues/132877
@@ -579,6 +576,18 @@ tests:
579576
- class: org.elasticsearch.xpack.esql.qa.single_node.GenerativeMetricsIT
580577
method: test
581578
issue: https://github.com/elastic/elasticsearch/issues/135055
579+
- class: org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT
580+
method: test {csv-spec:stats.StdDevFilter}
581+
issue: https://github.com/elastic/elasticsearch/issues/135100
582+
- class: org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT
583+
method: test {csv-spec:inlinestats.StdDevFilter}
584+
issue: https://github.com/elastic/elasticsearch/issues/135101
585+
- class: org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT
586+
method: test {csv-spec:stats.StdDeviationWithLongs}
587+
issue: https://github.com/elastic/elasticsearch/issues/135102
588+
- class: org.elasticsearch.xpack.esql.qa.single_node.EsqlSpecIT
589+
method: test {csv-spec:stats.StdDeviationGroupedAllTypes}
590+
issue: https://github.com/elastic/elasticsearch/issues/135103
582591

583592
# Examples:
584593
#

0 commit comments

Comments
 (0)