Skip to content

Commit b3ed9fb

Browse files
Revert "Add ResolvedExpression wrapper (#114592)" (#115317) (#115344)
This reverts commit 4c15cc0. This commit introduced an orders of magnitude regression when searching many shards. Co-authored-by: Elastic Machine <[email protected]>
1 parent 1d9b13d commit b3ed9fb

File tree

16 files changed

+361
-504
lines changed

16 files changed

+361
-504
lines changed

docs/changelog/115317.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 115317
2+
summary: Revert "Add `ResolvedExpression` wrapper"
3+
area: Indices APIs
4+
type: bug
5+
issues: []

server/src/main/java/org/elasticsearch/action/admin/cluster/shards/TransportClusterSearchShardsAction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.elasticsearch.cluster.block.ClusterBlockException;
1818
import org.elasticsearch.cluster.block.ClusterBlockLevel;
1919
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
20-
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.ResolvedExpression;
2120
import org.elasticsearch.cluster.node.DiscoveryNode;
2221
import org.elasticsearch.cluster.routing.GroupShardsIterator;
2322
import org.elasticsearch.cluster.routing.ShardIterator;
@@ -85,7 +84,7 @@ protected void masterOperation(
8584
String[] concreteIndices = indexNameExpressionResolver.concreteIndexNames(clusterState, request);
8685
Map<String, Set<String>> routingMap = indexNameExpressionResolver.resolveSearchRouting(state, request.routing(), request.indices());
8786
Map<String, AliasFilter> indicesAndFilters = new HashMap<>();
88-
Set<ResolvedExpression> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(clusterState, request.indices());
87+
Set<String> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(clusterState, request.indices());
8988
for (String index : concreteIndices) {
9089
final AliasFilter aliasFilter = indicesService.buildAliasFilter(clusterState, index, indicesAndAliases);
9190
final String[] aliases = indexNameExpressionResolver.indexAliases(

server/src/main/java/org/elasticsearch/action/admin/indices/resolve/ResolveIndexAction.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.elasticsearch.cluster.metadata.IndexAbstraction;
2626
import org.elasticsearch.cluster.metadata.IndexMetadata;
2727
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
28-
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.ResolvedExpression;
2928
import org.elasticsearch.cluster.metadata.Metadata;
3029
import org.elasticsearch.cluster.service.ClusterService;
3130
import org.elasticsearch.common.Strings;
@@ -566,8 +565,8 @@ static void resolveIndices(
566565
if (names.length == 1 && (Metadata.ALL.equals(names[0]) || Regex.isMatchAllPattern(names[0]))) {
567566
names = new String[] { "**" };
568567
}
569-
Set<ResolvedExpression> resolvedIndexAbstractions = resolver.resolveExpressions(clusterState, indicesOptions, true, names);
570-
for (ResolvedExpression s : resolvedIndexAbstractions) {
568+
Set<String> resolvedIndexAbstractions = resolver.resolveExpressions(clusterState, indicesOptions, true, names);
569+
for (String s : resolvedIndexAbstractions) {
571570
enrichIndexAbstraction(clusterState, s, indices, aliases, dataStreams);
572571
}
573572
indices.sort(Comparator.comparing(ResolvedIndexAbstraction::getName));
@@ -598,12 +597,12 @@ private static void mergeResults(
598597

599598
private static void enrichIndexAbstraction(
600599
ClusterState clusterState,
601-
ResolvedExpression indexAbstraction,
600+
String indexAbstraction,
602601
List<ResolvedIndex> indices,
603602
List<ResolvedAlias> aliases,
604603
List<ResolvedDataStream> dataStreams
605604
) {
606-
IndexAbstraction ia = clusterState.metadata().getIndicesLookup().get(indexAbstraction.resource());
605+
IndexAbstraction ia = clusterState.metadata().getIndicesLookup().get(indexAbstraction);
607606
if (ia != null) {
608607
switch (ia.getType()) {
609608
case CONCRETE_INDEX -> {

server/src/main/java/org/elasticsearch/action/admin/indices/validate/query/TransportValidateQueryAction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.elasticsearch.cluster.block.ClusterBlockException;
2222
import org.elasticsearch.cluster.block.ClusterBlockLevel;
2323
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
24-
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.ResolvedExpression;
2524
import org.elasticsearch.cluster.routing.GroupShardsIterator;
2625
import org.elasticsearch.cluster.routing.ShardIterator;
2726
import org.elasticsearch.cluster.routing.ShardRouting;
@@ -134,7 +133,7 @@ protected void doExecute(Task task, ValidateQueryRequest request, ActionListener
134133
@Override
135134
protected ShardValidateQueryRequest newShardRequest(int numShards, ShardRouting shard, ValidateQueryRequest request) {
136135
final ClusterState clusterState = clusterService.state();
137-
final Set<ResolvedExpression> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(clusterState, request.indices());
136+
final Set<String> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(clusterState, request.indices());
138137
final AliasFilter aliasFilter = searchService.buildAliasFilter(clusterState, shard.getIndexName(), indicesAndAliases);
139138
return new ShardValidateQueryRequest(shard.shardId(), aliasFilter, request);
140139
}

server/src/main/java/org/elasticsearch/action/explain/TransportExplainAction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.elasticsearch.action.support.single.shard.TransportSingleShardAction;
1919
import org.elasticsearch.cluster.ClusterState;
2020
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
21-
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.ResolvedExpression;
2221
import org.elasticsearch.cluster.routing.ShardIterator;
2322
import org.elasticsearch.cluster.service.ClusterService;
2423
import org.elasticsearch.common.io.stream.Writeable;
@@ -110,7 +109,7 @@ protected boolean resolveIndex(ExplainRequest request) {
110109

111110
@Override
112111
protected void resolveRequest(ClusterState state, InternalRequest request) {
113-
final Set<ResolvedExpression> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(state, request.request().index());
112+
final Set<String> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(state, request.request().index());
114113
final AliasFilter aliasFilter = searchService.buildAliasFilter(state, request.concreteIndex(), indicesAndAliases);
115114
request.request().filteringAlias(aliasFilter);
116115
}

server/src/main/java/org/elasticsearch/action/search/TransportSearchAction.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.elasticsearch.cluster.metadata.IndexAbstraction;
3838
import org.elasticsearch.cluster.metadata.IndexMetadata;
3939
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
40-
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.ResolvedExpression;
4140
import org.elasticsearch.cluster.node.DiscoveryNode;
4241
import org.elasticsearch.cluster.node.DiscoveryNodes;
4342
import org.elasticsearch.cluster.routing.GroupShardsIterator;
@@ -111,7 +110,6 @@
111110
import java.util.function.BiFunction;
112111
import java.util.function.Function;
113112
import java.util.function.LongSupplier;
114-
import java.util.stream.Collectors;
115113

116114
import static org.elasticsearch.action.search.SearchType.DFS_QUERY_THEN_FETCH;
117115
import static org.elasticsearch.action.search.SearchType.QUERY_THEN_FETCH;
@@ -205,17 +203,14 @@ public TransportSearchAction(
205203

206204
private Map<String, OriginalIndices> buildPerIndexOriginalIndices(
207205
ClusterState clusterState,
208-
Set<ResolvedExpression> indicesAndAliases,
206+
Set<String> indicesAndAliases,
209207
String[] indices,
210208
IndicesOptions indicesOptions
211209
) {
212210
Map<String, OriginalIndices> res = Maps.newMapWithExpectedSize(indices.length);
213211
var blocks = clusterState.blocks();
214212
// optimization: mostly we do not have any blocks so there's no point in the expensive per-index checking
215213
boolean hasBlocks = blocks.global().isEmpty() == false || blocks.indices().isEmpty() == false;
216-
// Get a distinct set of index abstraction names present from the resolved expressions to help with the reverse resolution from
217-
// concrete index to the expression that produced it.
218-
Set<String> indicesAndAliasesResources = indicesAndAliases.stream().map(ResolvedExpression::resource).collect(Collectors.toSet());
219214
for (String index : indices) {
220215
if (hasBlocks) {
221216
blocks.indexBlockedRaiseException(ClusterBlockLevel.READ, index);
@@ -232,8 +227,8 @@ private Map<String, OriginalIndices> buildPerIndexOriginalIndices(
232227
String[] finalIndices = Strings.EMPTY_ARRAY;
233228
if (aliases == null
234229
|| aliases.length == 0
235-
|| indicesAndAliasesResources.contains(index)
236-
|| hasDataStreamRef(clusterState, indicesAndAliasesResources, index)) {
230+
|| indicesAndAliases.contains(index)
231+
|| hasDataStreamRef(clusterState, indicesAndAliases, index)) {
237232
finalIndices = new String[] { index };
238233
}
239234
if (aliases != null) {
@@ -252,11 +247,7 @@ private static boolean hasDataStreamRef(ClusterState clusterState, Set<String> i
252247
return indicesAndAliases.contains(ret.getParentDataStream().getName());
253248
}
254249

255-
Map<String, AliasFilter> buildIndexAliasFilters(
256-
ClusterState clusterState,
257-
Set<ResolvedExpression> indicesAndAliases,
258-
Index[] concreteIndices
259-
) {
250+
Map<String, AliasFilter> buildIndexAliasFilters(ClusterState clusterState, Set<String> indicesAndAliases, Index[] concreteIndices) {
260251
final Map<String, AliasFilter> aliasFilterMap = new HashMap<>();
261252
for (Index index : concreteIndices) {
262253
clusterState.blocks().indexBlockedRaiseException(ClusterBlockLevel.READ, index.getName());
@@ -1246,10 +1237,7 @@ private void executeSearch(
12461237
} else {
12471238
final Index[] indices = resolvedIndices.getConcreteLocalIndices();
12481239
concreteLocalIndices = Arrays.stream(indices).map(Index::getName).toArray(String[]::new);
1249-
final Set<ResolvedExpression> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(
1250-
clusterState,
1251-
searchRequest.indices()
1252-
);
1240+
final Set<String> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(clusterState, searchRequest.indices());
12531241
aliasFilter = buildIndexAliasFilters(clusterState, indicesAndAliases, indices);
12541242
aliasFilter.putAll(remoteAliasMap);
12551243
localShardIterators = getLocalShardsIterator(
@@ -1822,7 +1810,7 @@ List<SearchShardIterator> getLocalShardsIterator(
18221810
ClusterState clusterState,
18231811
SearchRequest searchRequest,
18241812
String clusterAlias,
1825-
Set<ResolvedExpression> indicesAndAliases,
1813+
Set<String> indicesAndAliases,
18261814
String[] concreteIndices
18271815
) {
18281816
var routingMap = indexNameExpressionResolver.resolveSearchRouting(clusterState, searchRequest.routing(), searchRequest.indices());

server/src/main/java/org/elasticsearch/action/search/TransportSearchShardsAction.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.elasticsearch.action.support.HandledTransportAction;
1818
import org.elasticsearch.cluster.ClusterState;
1919
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
20-
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.ResolvedExpression;
2120
import org.elasticsearch.cluster.routing.GroupShardsIterator;
2221
import org.elasticsearch.cluster.service.ClusterService;
2322
import org.elasticsearch.index.Index;
@@ -128,10 +127,7 @@ public void searchShards(Task task, SearchShardsRequest searchShardsRequest, Act
128127
searchService.getRewriteContext(timeProvider::absoluteStartMillis, resolvedIndices, null),
129128
listener.delegateFailureAndWrap((delegate, searchRequest) -> {
130129
Index[] concreteIndices = resolvedIndices.getConcreteLocalIndices();
131-
final Set<ResolvedExpression> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(
132-
clusterState,
133-
searchRequest.indices()
134-
);
130+
final Set<String> indicesAndAliases = indexNameExpressionResolver.resolveExpressions(clusterState, searchRequest.indices());
135131
final Map<String, AliasFilter> aliasFilters = transportSearchAction.buildIndexAliasFilters(
136132
clusterState,
137133
indicesAndAliases,

0 commit comments

Comments
 (0)