Skip to content

Commit 91a6442

Browse files
Merge branch 'main' into fix/es-10982
2 parents b1fc83c + 1ba21c2 commit 91a6442

File tree

58 files changed

+775
-460
lines changed

Some content is hidden

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

58 files changed

+775
-460
lines changed

docs/changelog/128848.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 128848
2+
summary: Add `bucketedSort` based on int
3+
area: Search
4+
type: enhancement
5+
issues: []

docs/reference/elasticsearch/index-settings/index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,5 @@ Settings are available for the following modules:
3434
Configure the backing indices in a time series data stream (TSDS).
3535
* [Translog](translog.md)
3636
Control the transaction log and background flush operations.
37+
38+
There are also index settings associated with [text analysis](docs-content://manage-data/data-store/text-analysis.md), which define analyzers, tokenizers, token filters, and character filters.

muted-tests.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,18 @@ tests:
552552
- class: org.elasticsearch.xpack.esql.qa.mixed.EsqlClientYamlIT
553553
method: test {p0=esql/190_lookup_join/alias-pattern-single}
554554
issue: https://github.com/elastic/elasticsearch/issues/128855
555+
- class: org.elasticsearch.xpack.esql.qa.mixed.EsqlClientYamlIT
556+
method: test {p0=esql/191_lookup_join_on_datastreams/data streams supported in LOOKUP JOIN}
557+
issue: https://github.com/elastic/elasticsearch/issues/128856
558+
- class: org.elasticsearch.upgrades.IndexSortUpgradeIT
559+
method: testIndexSortForNumericTypes {upgradedNodes=3}
560+
issue: https://github.com/elastic/elasticsearch/issues/128861
561+
- class: org.elasticsearch.upgrades.IndexSortUpgradeIT
562+
method: testIndexSortForNumericTypes {upgradedNodes=1}
563+
issue: https://github.com/elastic/elasticsearch/issues/128862
564+
- class: org.elasticsearch.upgrades.IndexSortUpgradeIT
565+
method: testIndexSortForNumericTypes {upgradedNodes=2}
566+
issue: https://github.com/elastic/elasticsearch/issues/128863
555567

556568
# Examples:
557569
#

server/src/main/java/module-info.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*/
99

1010
import org.elasticsearch.plugins.internal.RestExtension;
11+
import org.elasticsearch.reservedstate.ReservedStateHandlerProvider;
1112

1213
/** The Elasticsearch Server Module. */
1314
module org.elasticsearch.server {
@@ -411,7 +412,7 @@
411412
org.elasticsearch.index.shard.ShardToolCliProvider;
412413

413414
uses org.elasticsearch.reservedstate.service.FileSettingsServiceProvider;
414-
uses org.elasticsearch.reservedstate.ReservedClusterStateHandlerProvider;
415+
uses ReservedStateHandlerProvider;
415416
uses org.elasticsearch.jdk.ModuleQualifiedExportsService;
416417
uses org.elasticsearch.node.internal.TerminationHandlerProvider;
417418
uses org.elasticsearch.internal.VersionExtension;

server/src/main/java/org/elasticsearch/action/ActionModule.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,7 @@
211211
import org.elasticsearch.action.termvectors.TransportTermVectorsAction;
212212
import org.elasticsearch.action.update.TransportUpdateAction;
213213
import org.elasticsearch.client.internal.node.NodeClient;
214-
import org.elasticsearch.cluster.ClusterState;
215214
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
216-
import org.elasticsearch.cluster.metadata.ProjectMetadata;
217215
import org.elasticsearch.cluster.node.DiscoveryNodes;
218216
import org.elasticsearch.cluster.project.ProjectIdResolver;
219217
import org.elasticsearch.cluster.routing.RerouteService;
@@ -254,6 +252,7 @@
254252
import org.elasticsearch.repositories.VerifyNodeRepositoryAction;
255253
import org.elasticsearch.repositories.VerifyNodeRepositoryCoordinationAction;
256254
import org.elasticsearch.reservedstate.ReservedClusterStateHandler;
255+
import org.elasticsearch.reservedstate.ReservedProjectStateHandler;
257256
import org.elasticsearch.reservedstate.service.ReservedClusterStateService;
258257
import org.elasticsearch.rest.RestController;
259258
import org.elasticsearch.rest.RestHandler;
@@ -474,8 +473,8 @@ public ActionModule(
474473
TelemetryProvider telemetryProvider,
475474
ClusterService clusterService,
476475
RerouteService rerouteService,
477-
List<ReservedClusterStateHandler<ClusterState, ?>> reservedClusterStateHandlers,
478-
List<ReservedClusterStateHandler<ProjectMetadata, ?>> reservedProjectStateHandlers,
476+
List<ReservedClusterStateHandler<?>> reservedClusterStateHandlers,
477+
List<ReservedProjectStateHandler<?>> reservedProjectStateHandlers,
479478
RestExtension restExtension,
480479
IncrementalBulkService bulkService,
481480
ProjectIdResolver projectIdResolver

server/src/main/java/org/elasticsearch/action/admin/cluster/repositories/reservedstate/ReservedRepositoryAction.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
* It is used by the ReservedClusterStateService to add/update or remove snapshot repositories. Typical usage
3535
* for this action is in the context of file based settings.
3636
*/
37-
public class ReservedRepositoryAction implements ReservedClusterStateHandler<ClusterState, List<PutRepositoryRequest>> {
37+
public class ReservedRepositoryAction implements ReservedClusterStateHandler<List<PutRepositoryRequest>> {
3838
public static final String NAME = "snapshot_repositories";
3939

4040
private final RepositoriesService repositoriesService;
@@ -67,8 +67,7 @@ public Collection<PutRepositoryRequest> prepare(Object input) {
6767
}
6868

6969
@Override
70-
public TransformState<ClusterState> transform(List<PutRepositoryRequest> source, TransformState<ClusterState> prevState)
71-
throws Exception {
70+
public TransformState transform(List<PutRepositoryRequest> source, TransformState prevState) throws Exception {
7271
var requests = prepare(source);
7372

7473
ClusterState state = prevState.state();
@@ -88,7 +87,7 @@ public TransformState<ClusterState> transform(List<PutRepositoryRequest> source,
8887
state = task.execute(state);
8988
}
9089

91-
return new TransformState<>(state, entities);
90+
return new TransformState(state, entities);
9291

9392
}
9493

server/src/main/java/org/elasticsearch/action/admin/indices/template/reservedstate/ReservedComposableIndexTemplateAction.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
import org.elasticsearch.action.admin.indices.template.put.PutComponentTemplateAction;
1313
import org.elasticsearch.action.admin.indices.template.put.TransportPutComponentTemplateAction;
1414
import org.elasticsearch.action.admin.indices.template.put.TransportPutComposableIndexTemplateAction;
15+
import org.elasticsearch.cluster.ClusterState;
1516
import org.elasticsearch.cluster.metadata.ComponentTemplate;
1617
import org.elasticsearch.cluster.metadata.ComposableIndexTemplate;
1718
import org.elasticsearch.cluster.metadata.MetadataIndexTemplateService;
19+
import org.elasticsearch.cluster.metadata.ProjectId;
1820
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1921
import org.elasticsearch.common.settings.IndexScopedSettings;
2022
import org.elasticsearch.common.util.set.Sets;
2123
import org.elasticsearch.reservedstate.ReservedClusterStateHandler;
24+
import org.elasticsearch.reservedstate.ReservedProjectStateHandler;
2225
import org.elasticsearch.reservedstate.TransformState;
2326
import org.elasticsearch.xcontent.XContentParser;
2427
import org.elasticsearch.xcontent.XContentParserConfiguration;
@@ -45,7 +48,7 @@
4548
*/
4649
public class ReservedComposableIndexTemplateAction
4750
implements
48-
ReservedClusterStateHandler<ProjectMetadata, ReservedComposableIndexTemplateAction.ComponentsAndComposables> {
51+
ReservedProjectStateHandler<ReservedComposableIndexTemplateAction.ComponentsAndComposables> {
4952
public static final String NAME = "index_templates";
5053
public static final String COMPONENTS = "component_templates";
5154
private static final String COMPONENT_PREFIX = "component_template:";
@@ -133,10 +136,10 @@ private ComponentsAndComposables prepare(ComponentsAndComposables componentsAndC
133136
}
134137

135138
@Override
136-
public TransformState<ProjectMetadata> transform(ComponentsAndComposables source, TransformState<ProjectMetadata> prevState)
137-
throws Exception {
139+
public TransformState transform(ProjectId projectId, ComponentsAndComposables source, TransformState prevState) throws Exception {
138140
var requests = prepare(source);
139-
ProjectMetadata project = prevState.state();
141+
ClusterState clusterState = prevState.state();
142+
ProjectMetadata project = clusterState.getMetadata().getProject(projectId);
140143

141144
// We transform in the following order:
142145
// 1. create or update component templates (composable templates depend on them)
@@ -192,7 +195,10 @@ public TransformState<ProjectMetadata> transform(ComponentsAndComposables source
192195
project = MetadataIndexTemplateService.innerRemoveComponentTemplate(project, componentNames);
193196
}
194197

195-
return new TransformState<>(project, Sets.union(componentEntities, composableEntities));
198+
return new TransformState(
199+
ClusterState.builder(clusterState).putProjectMetadata(project).build(),
200+
Sets.union(componentEntities, composableEntities)
201+
);
196202
}
197203

198204
@Override

server/src/main/java/org/elasticsearch/action/ingest/ReservedPipelineAction.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
package org.elasticsearch.action.ingest;
1111

1212
import org.elasticsearch.ElasticsearchGenerationException;
13+
import org.elasticsearch.cluster.ClusterState;
14+
import org.elasticsearch.cluster.metadata.ProjectId;
1315
import org.elasticsearch.cluster.metadata.ProjectMetadata;
1416
import org.elasticsearch.common.bytes.BytesReference;
1517
import org.elasticsearch.ingest.IngestMetadata;
1618
import org.elasticsearch.ingest.IngestService;
17-
import org.elasticsearch.reservedstate.ReservedClusterStateHandler;
19+
import org.elasticsearch.reservedstate.ReservedProjectStateHandler;
1820
import org.elasticsearch.reservedstate.TransformState;
1921
import org.elasticsearch.xcontent.XContentBuilder;
2022
import org.elasticsearch.xcontent.XContentFactory;
@@ -36,7 +38,7 @@
3638
* It is used by the ReservedClusterStateService to add/update or remove ingest pipelines. Typical usage
3739
* for this action is in the context of file based state.
3840
*/
39-
public class ReservedPipelineAction implements ReservedClusterStateHandler<ProjectMetadata, List<PutPipelineRequest>> {
41+
public class ReservedPipelineAction implements ReservedProjectStateHandler<List<PutPipelineRequest>> {
4042
public static final String NAME = "ingest_pipelines";
4143

4244
/**
@@ -78,21 +80,21 @@ private static ProjectMetadata wrapIngestTaskExecute(IngestService.PipelineClust
7880
}
7981

8082
@Override
81-
public TransformState<ProjectMetadata> transform(List<PutPipelineRequest> source, TransformState<ProjectMetadata> prevState)
82-
throws Exception {
83+
public TransformState transform(ProjectId projectId, List<PutPipelineRequest> source, TransformState prevState) throws Exception {
8384
var requests = prepare(source);
8485

85-
ProjectMetadata state = prevState.state();
86+
ClusterState clusterState = prevState.state();
87+
ProjectMetadata projectMetadata = clusterState.metadata().getProject(projectId);
8688

8789
for (var request : requests) {
88-
var nopUpdate = IngestService.isNoOpPipelineUpdate(state, request);
90+
var nopUpdate = IngestService.isNoOpPipelineUpdate(projectMetadata, request);
8991

9092
if (nopUpdate) {
9193
continue;
9294
}
9395

94-
var task = new IngestService.PutPipelineClusterStateUpdateTask(state.id(), request);
95-
state = wrapIngestTaskExecute(task, state);
96+
var task = new IngestService.PutPipelineClusterStateUpdateTask(projectMetadata.id(), request);
97+
projectMetadata = wrapIngestTaskExecute(task, projectMetadata);
9698
}
9799

98100
Set<String> entities = requests.stream().map(PutPipelineRequest::getId).collect(Collectors.toSet());
@@ -102,18 +104,18 @@ public TransformState<ProjectMetadata> transform(List<PutPipelineRequest> source
102104

103105
for (var pipelineToDelete : toDelete) {
104106
var task = new IngestService.DeletePipelineClusterStateUpdateTask(
105-
state.id(),
107+
projectMetadata.id(),
106108
null,
107109
new DeletePipelineRequest(
108110
RESERVED_CLUSTER_STATE_HANDLER_IGNORED_TIMEOUT,
109111
RESERVED_CLUSTER_STATE_HANDLER_IGNORED_TIMEOUT,
110112
pipelineToDelete
111113
)
112114
);
113-
state = wrapIngestTaskExecute(task, state);
115+
projectMetadata = wrapIngestTaskExecute(task, projectMetadata);
114116
}
115117

116-
return new TransformState<>(state, entities);
118+
return new TransformState(ClusterState.builder(clusterState).putProjectMetadata(projectMetadata).build(), entities);
117119
}
118120

119121
@Override

server/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/IntValuesComparatorSource.java

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@
1515
import org.apache.lucene.search.Pruning;
1616
import org.apache.lucene.search.SortField;
1717
import org.apache.lucene.search.comparators.IntComparator;
18+
import org.elasticsearch.common.util.BigArrays;
1819
import org.elasticsearch.core.Nullable;
1920
import org.elasticsearch.index.fielddata.IndexNumericFieldData;
2021
import org.elasticsearch.index.fielddata.IndexNumericFieldData.NumericType;
22+
import org.elasticsearch.search.DocValueFormat;
2123
import org.elasticsearch.search.MultiValueMode;
24+
import org.elasticsearch.search.sort.BucketedSort;
25+
import org.elasticsearch.search.sort.SortOrder;
2226

2327
import java.io.IOException;
2428

@@ -62,6 +66,39 @@ protected NumericDocValues getNumericDocValues(LeafReaderContext context, String
6266
};
6367
}
6468

65-
// TODO: add newBucketedSort based on integer values
69+
@Override
70+
public BucketedSort newBucketedSort(
71+
BigArrays bigArrays,
72+
SortOrder sortOrder,
73+
DocValueFormat format,
74+
int bucketSize,
75+
BucketedSort.ExtraData extra
76+
) {
77+
return new BucketedSort.ForInts(bigArrays, sortOrder, format, bucketSize, extra) {
78+
private final int iMissingValue = (Integer) missingObject(missingValue, sortOrder == SortOrder.DESC);
79+
80+
@Override
81+
public Leaf forLeaf(LeafReaderContext ctx) throws IOException {
82+
return new Leaf(ctx) {
83+
private final NumericDocValues docValues = getNumericDocValues(ctx, iMissingValue);
84+
private int docValue;
85+
86+
@Override
87+
protected boolean advanceExact(int doc) throws IOException {
88+
if (docValues.advanceExact(doc)) {
89+
docValue = (int) docValues.longValue();
90+
return true;
91+
}
92+
return false;
93+
}
94+
95+
@Override
96+
protected int docValue() {
97+
return docValue;
98+
}
99+
};
100+
}
101+
};
102+
}
66103

67104
}

server/src/main/java/org/elasticsearch/node/NodeConstruction.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
import org.elasticsearch.cluster.metadata.MetadataDataStreamsService;
5151
import org.elasticsearch.cluster.metadata.MetadataIndexTemplateService;
5252
import org.elasticsearch.cluster.metadata.MetadataUpdateSettingsService;
53-
import org.elasticsearch.cluster.metadata.ProjectMetadata;
5453
import org.elasticsearch.cluster.metadata.SystemIndexMetadataUpgradeService;
5554
import org.elasticsearch.cluster.metadata.TemplateUpgradeService;
5655
import org.elasticsearch.cluster.node.DiscoveryNode;
@@ -189,7 +188,8 @@
189188
import org.elasticsearch.repositories.RepositoriesModule;
190189
import org.elasticsearch.repositories.RepositoriesService;
191190
import org.elasticsearch.reservedstate.ReservedClusterStateHandler;
192-
import org.elasticsearch.reservedstate.ReservedClusterStateHandlerProvider;
191+
import org.elasticsearch.reservedstate.ReservedProjectStateHandler;
192+
import org.elasticsearch.reservedstate.ReservedStateHandlerProvider;
193193
import org.elasticsearch.reservedstate.action.ReservedClusterSettingsAction;
194194
import org.elasticsearch.reservedstate.service.FileSettingsService;
195195
import org.elasticsearch.reservedstate.service.FileSettingsService.FileSettingsHealthIndicatorService;
@@ -995,7 +995,7 @@ public Map<String, String> queryFields() {
995995
final ResponseCollectorService responseCollectorService = new ResponseCollectorService(clusterService);
996996
modules.bindToInstance(ResponseCollectorService.class, responseCollectorService);
997997

998-
var reservedStateHandlerProviders = pluginsService.loadServiceProviders(ReservedClusterStateHandlerProvider.class);
998+
var reservedStateHandlerProviders = pluginsService.loadServiceProviders(ReservedStateHandlerProvider.class);
999999

10001000
ActionModule actionModule = new ActionModule(
10011001
settings,
@@ -1599,11 +1599,11 @@ private Module loadPersistedClusterStateService(
15991599
return b -> b.bind(PersistedClusterStateService.class).toInstance(service);
16001600
}
16011601

1602-
private List<ReservedClusterStateHandler<ClusterState, ?>> buildReservedClusterStateHandlers(
1603-
List<? extends ReservedClusterStateHandlerProvider> handlers,
1602+
private List<ReservedClusterStateHandler<?>> buildReservedClusterStateHandlers(
1603+
List<? extends ReservedStateHandlerProvider> handlers,
16041604
SettingsModule settingsModule
16051605
) {
1606-
List<ReservedClusterStateHandler<ClusterState, ?>> reservedStateHandlers = new ArrayList<>();
1606+
List<ReservedClusterStateHandler<?>> reservedStateHandlers = new ArrayList<>();
16071607

16081608
// add all reserved state handlers from server
16091609
reservedStateHandlers.add(new ReservedClusterSettingsAction(settingsModule.getClusterSettings()));
@@ -1614,8 +1614,8 @@ private Module loadPersistedClusterStateService(
16141614
return reservedStateHandlers;
16151615
}
16161616

1617-
private List<ReservedClusterStateHandler<ProjectMetadata, ?>> buildReservedProjectStateHandlers(
1618-
List<? extends ReservedClusterStateHandlerProvider> handlers,
1617+
private List<ReservedProjectStateHandler<?>> buildReservedProjectStateHandlers(
1618+
List<? extends ReservedStateHandlerProvider> handlers,
16191619
SettingsModule settingsModule,
16201620
ClusterService clusterService,
16211621
IndicesService indicesService,
@@ -1624,7 +1624,7 @@ private Module loadPersistedClusterStateService(
16241624
MetadataCreateIndexService metadataCreateIndexService,
16251625
DataStreamGlobalRetentionSettings globalRetentionSettings
16261626
) {
1627-
List<ReservedClusterStateHandler<ProjectMetadata, ?>> reservedStateHandlers = new ArrayList<>();
1627+
List<ReservedProjectStateHandler<?>> reservedStateHandlers = new ArrayList<>();
16281628

16291629
var templateService = new MetadataIndexTemplateService(
16301630
clusterService,

0 commit comments

Comments
 (0)