Skip to content

Commit 771c99e

Browse files
committed
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 da4b249 commit 771c99e

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
@@ -86,6 +86,7 @@
8686
import org.elasticsearch.threadpool.ThreadPool;
8787
import org.elasticsearch.threadpool.ThreadPool.Cancellable;
8888
import org.elasticsearch.threadpool.ThreadPool.Names;
89+
import org.elasticsearch.transport.TransportRequest;
8990

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

312313
public ScrollQuerySearchResult executeQueryPhase(InternalScrollSearchRequest request, SearchTask task) {
313-
final SearchContext context = findContext(request.id());
314+
final SearchContext context = findContext(request.id(), request);
314315
SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
315316
context.incRef();
316317
try {
@@ -334,7 +335,7 @@ public ScrollQuerySearchResult executeQueryPhase(InternalScrollSearchRequest req
334335
}
335336

336337
public QuerySearchResult executeQueryPhase(QuerySearchRequest request, SearchTask task) {
337-
final SearchContext context = findContext(request.id());
338+
final SearchContext context = findContext(request.id(), request);
338339
context.setTask(task);
339340
IndexShard indexShard = context.indexShard();
340341
SearchOperationListener operationListener = indexShard.getSearchOperationListener();
@@ -375,7 +376,7 @@ private boolean fetchPhaseShouldFreeContext(SearchContext context) {
375376
}
376377

377378
public ScrollQueryFetchSearchResult executeFetchPhase(InternalScrollSearchRequest request, SearchTask task) {
378-
final SearchContext context = findContext(request.id());
379+
final SearchContext context = findContext(request.id(), request);
379380
context.incRef();
380381
try {
381382
context.setTask(task);
@@ -406,7 +407,7 @@ public ScrollQueryFetchSearchResult executeFetchPhase(InternalScrollSearchReques
406407
}
407408

408409
public FetchSearchResult executeFetchPhase(ShardFetchRequest request, SearchTask task) {
409-
final SearchContext context = findContext(request.id());
410+
final SearchContext context = findContext(request.id(), request);
410411
final SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
411412
context.incRef();
412413
try {
@@ -436,15 +437,15 @@ public FetchSearchResult executeFetchPhase(ShardFetchRequest request, SearchTask
436437
}
437438
}
438439

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

445446
SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
446447
try {
447-
operationListener.validateSearchContext(context);
448+
operationListener.validateSearchContext(context, request);
448449
return context;
449450
} catch (Exception e) {
450451
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)