Skip to content

Commit cdb935a

Browse files
original-brownbearcbuescher
authored andcommitted
Avoid building O(N) list in can_match phase (elastic#112458)
We can be a little faster and memory efficient here by not building a list of shard requests up-front and instead building them as we need them.
1 parent 91bafe1 commit cdb935a

File tree

2 files changed

+4
-10
lines changed

2 files changed

+4
-10
lines changed

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,6 @@ public List<Shard> getShardLevelRequests() {
229229
return shards;
230230
}
231231

232-
public List<ShardSearchRequest> createShardSearchRequests() {
233-
return shards.stream().map(this::createShardSearchRequest).toList();
234-
}
235-
236232
public ShardSearchRequest createShardSearchRequest(Shard r) {
237233
ShardSearchRequest shardSearchRequest = new ShardSearchRequest(
238234
new OriginalIndices(r.indices, indicesOptions),

server/src/main/java/org/elasticsearch/search/SearchService.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1664,13 +1664,11 @@ public AliasFilter buildAliasFilter(ClusterState state, String index, Set<String
16641664
}
16651665

16661666
public void canMatch(CanMatchNodeRequest request, ActionListener<CanMatchNodeResponse> listener) {
1667-
final List<ShardSearchRequest> shardSearchRequests = request.createShardSearchRequests();
1668-
final List<CanMatchNodeResponse.ResponseOrFailure> responses = new ArrayList<>(shardSearchRequests.size());
1669-
for (ShardSearchRequest shardSearchRequest : shardSearchRequests) {
1670-
CanMatchShardResponse canMatchShardResponse;
1667+
var shardLevelRequests = request.getShardLevelRequests();
1668+
final List<CanMatchNodeResponse.ResponseOrFailure> responses = new ArrayList<>(shardLevelRequests.size());
1669+
for (var shardLevelRequest : shardLevelRequests) {
16711670
try {
1672-
canMatchShardResponse = canMatch(shardSearchRequest);
1673-
responses.add(new CanMatchNodeResponse.ResponseOrFailure(canMatchShardResponse));
1671+
responses.add(new CanMatchNodeResponse.ResponseOrFailure(canMatch(request.createShardSearchRequest(shardLevelRequest))));
16741672
} catch (Exception e) {
16751673
responses.add(new CanMatchNodeResponse.ResponseOrFailure(e));
16761674
}

0 commit comments

Comments
 (0)