Skip to content

Commit 7526c29

Browse files
authored
Provide the TransportRequest during validation of a search context (#24985)
This commit provides the TransportRequest that caused the retrieval of a search context to the SearchOperationListener#validateSearchContext method so that implementers have access to the request.
1 parent 45bdaec commit 7526c29

File tree

3 files changed

+18
-12
lines changed

3 files changed

+18
-12
lines changed

core/src/main/java/org/elasticsearch/index/shard/SearchOperationListener.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.logging.log4j.util.Supplier;
2424
import org.elasticsearch.ExceptionsHelper;
2525
import org.elasticsearch.search.internal.SearchContext;
26+
import org.elasticsearch.transport.TransportRequest;
2627

2728
import java.util.List;
2829

@@ -110,8 +111,9 @@ public interface SearchOperationListener {
110111
* from the active contexts. If the context is deemed invalid a runtime
111112
* exception can be thrown, which will prevent the context from being used.
112113
* @param context the context retrieved from the active contexts
114+
* @param transportRequest the request that is going to use the search context
113115
*/
114-
default void validateSearchContext(SearchContext context) {}
116+
default void validateSearchContext(SearchContext context, TransportRequest transportRequest) {}
115117

116118
/**
117119
* A Composite listener that multiplexes calls to each of the listeners methods.
@@ -236,11 +238,11 @@ public void onFreeScrollContext(SearchContext context) {
236238
}
237239

238240
@Override
239-
public void validateSearchContext(SearchContext context) {
241+
public void validateSearchContext(SearchContext context, TransportRequest request) {
240242
Exception exception = null;
241243
for (SearchOperationListener listener : listeners) {
242244
try {
243-
listener.validateSearchContext(context);
245+
listener.validateSearchContext(context, request);
244246
} catch (Exception e) {
245247
exception = ExceptionsHelper.useOrSuppress(exception, e);
246248
}

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
import org.elasticsearch.threadpool.ThreadPool;
8686
import org.elasticsearch.threadpool.ThreadPool.Cancellable;
8787
import org.elasticsearch.threadpool.ThreadPool.Names;
88+
import org.elasticsearch.transport.TransportRequest;
8889

8990
import java.io.IOException;
9091
import java.util.Collections;
@@ -309,7 +310,7 @@ private QueryFetchSearchResult executeFetchPhase(SearchContext context, SearchOp
309310
}
310311

311312
public ScrollQuerySearchResult executeQueryPhase(InternalScrollSearchRequest request, SearchTask task) {
312-
final SearchContext context = findContext(request.id());
313+
final SearchContext context = findContext(request.id(), request);
313314
SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
314315
context.incRef();
315316
try {
@@ -333,7 +334,7 @@ public ScrollQuerySearchResult executeQueryPhase(InternalScrollSearchRequest req
333334
}
334335

335336
public QuerySearchResult executeQueryPhase(QuerySearchRequest request, SearchTask task) {
336-
final SearchContext context = findContext(request.id());
337+
final SearchContext context = findContext(request.id(), request);
337338
context.setTask(task);
338339
IndexShard indexShard = context.indexShard();
339340
SearchOperationListener operationListener = indexShard.getSearchOperationListener();
@@ -374,7 +375,7 @@ private boolean fetchPhaseShouldFreeContext(SearchContext context) {
374375
}
375376

376377
public ScrollQueryFetchSearchResult executeFetchPhase(InternalScrollSearchRequest request, SearchTask task) {
377-
final SearchContext context = findContext(request.id());
378+
final SearchContext context = findContext(request.id(), request);
378379
context.incRef();
379380
try {
380381
context.setTask(task);
@@ -405,7 +406,7 @@ public ScrollQueryFetchSearchResult executeFetchPhase(InternalScrollSearchReques
405406
}
406407

407408
public FetchSearchResult executeFetchPhase(ShardFetchRequest request, SearchTask task) {
408-
final SearchContext context = findContext(request.id());
409+
final SearchContext context = findContext(request.id(), request);
409410
final SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
410411
context.incRef();
411412
try {
@@ -435,15 +436,15 @@ public FetchSearchResult executeFetchPhase(ShardFetchRequest request, SearchTask
435436
}
436437
}
437438

438-
private SearchContext findContext(long id) throws SearchContextMissingException {
439+
private SearchContext findContext(long id, TransportRequest request) throws SearchContextMissingException {
439440
SearchContext context = activeContexts.get(id);
440441
if (context == null) {
441442
throw new SearchContextMissingException(id);
442443
}
443444

444445
SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
445446
try {
446-
operationListener.validateSearchContext(context);
447+
operationListener.validateSearchContext(context, request);
447448
return context;
448449
} catch (Exception e) {
449450
processFailure(context, e);

core/src/test/java/org/elasticsearch/index/shard/SearchOperationListenerTests.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.elasticsearch.search.internal.SearchContext;
2222
import org.elasticsearch.test.ESTestCase;
2323
import org.elasticsearch.test.TestSearchContext;
24+
import org.elasticsearch.transport.TransportRequest;
25+
import org.elasticsearch.transport.TransportRequest.Empty;
2426

2527
import java.lang.reflect.Proxy;
2628
import java.util.ArrayList;
@@ -112,7 +114,7 @@ public void onFreeScrollContext(SearchContext context) {
112114
}
113115

114116
@Override
115-
public void validateSearchContext(SearchContext context) {
117+
public void validateSearchContext(SearchContext context, TransportRequest request) {
116118
assertNotNull(context);
117119
validateSearchContext.incrementAndGet();
118120
}
@@ -267,9 +269,10 @@ public void validateSearchContext(SearchContext context) {
267269
assertEquals(0, validateSearchContext.get());
268270

269271
if (throwingListeners == 0) {
270-
compositeListener.validateSearchContext(ctx);
272+
compositeListener.validateSearchContext(ctx, Empty.INSTANCE);
271273
} else {
272-
RuntimeException expected = expectThrows(RuntimeException.class, () -> compositeListener.validateSearchContext(ctx));
274+
RuntimeException expected =
275+
expectThrows(RuntimeException.class, () -> compositeListener.validateSearchContext(ctx, Empty.INSTANCE));
273276
assertNull(expected.getMessage());
274277
assertEquals(throwingListeners - 1, expected.getSuppressed().length);
275278
if (throwingListeners > 1) {

0 commit comments

Comments
 (0)