Skip to content

Commit 3b4751b

Browse files
authored
Avoid I/O operations when rewriting shard search request (#54044) (#54139)
This commit ensures that we rewrite the shard request with a short-lived can_match searcher. This is required for frozen indices since the high level rewrite is now performed on a network thread where we don't want to perform I/O. Closes #53985
1 parent 381d758 commit 3b4751b

File tree

5 files changed

+202
-249
lines changed

5 files changed

+202
-249
lines changed

server/src/main/java/org/elasticsearch/index/shard/IndexShard.java

+4-7
Original file line numberDiff line numberDiff line change
@@ -1228,12 +1228,12 @@ public void failShard(String reason, @Nullable Exception e) {
12281228
}
12291229

12301230
/**
1231-
* Acquire the searcher without applying the additional reader wrapper.
1231+
* Acquire a lightweight searcher which can be used to rewrite shard search requests.
12321232
*/
1233-
public Engine.Searcher acquireSearcherNoWrap(String source) {
1233+
public Engine.Searcher acquireCanMatchSearcher() {
12341234
readAllowed();
12351235
markSearcherAccessed();
1236-
return getEngine().acquireSearcher(source, Engine.SearcherScope.EXTERNAL);
1236+
return getEngine().acquireSearcher("can_match", Engine.SearcherScope.EXTERNAL);
12371237
}
12381238

12391239
public Engine.Searcher acquireSearcher(String source) {
@@ -1252,10 +1252,7 @@ private Engine.Searcher acquireSearcher(String source, Engine.SearcherScope scop
12521252
return wrapSearcher(searcher);
12531253
}
12541254

1255-
/**
1256-
* Wraps the provided searcher acquired with {@link #acquireSearcherNoWrap(String)}.
1257-
*/
1258-
public Engine.Searcher wrapSearcher(Engine.Searcher searcher) {
1255+
private Engine.Searcher wrapSearcher(Engine.Searcher searcher) {
12591256
assert ElasticsearchDirectoryReader.unwrap(searcher.getDirectoryReader())
12601257
!= null : "DirectoryReader must be an instance or ElasticsearchDirectoryReader";
12611258
boolean success = false;

0 commit comments

Comments
 (0)