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.
This commit is contained in:
parent
45bdaeced5
commit
7526c29a05
|
@ -23,6 +23,7 @@ import org.apache.logging.log4j.message.ParameterizedMessage;
|
|||
import org.apache.logging.log4j.util.Supplier;
|
||||
import org.elasticsearch.ExceptionsHelper;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.transport.TransportRequest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -110,8 +111,9 @@ public interface SearchOperationListener {
|
|||
* from the active contexts. If the context is deemed invalid a runtime
|
||||
* exception can be thrown, which will prevent the context from being used.
|
||||
* @param context the context retrieved from the active contexts
|
||||
* @param transportRequest the request that is going to use the search context
|
||||
*/
|
||||
default void validateSearchContext(SearchContext context) {}
|
||||
default void validateSearchContext(SearchContext context, TransportRequest transportRequest) {}
|
||||
|
||||
/**
|
||||
* A Composite listener that multiplexes calls to each of the listeners methods.
|
||||
|
@ -236,11 +238,11 @@ public interface SearchOperationListener {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void validateSearchContext(SearchContext context) {
|
||||
public void validateSearchContext(SearchContext context, TransportRequest request) {
|
||||
Exception exception = null;
|
||||
for (SearchOperationListener listener : listeners) {
|
||||
try {
|
||||
listener.validateSearchContext(context);
|
||||
listener.validateSearchContext(context, request);
|
||||
} catch (Exception e) {
|
||||
exception = ExceptionsHelper.useOrSuppress(exception, e);
|
||||
}
|
||||
|
|
|
@ -85,6 +85,7 @@ import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
|
|||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.elasticsearch.threadpool.ThreadPool.Cancellable;
|
||||
import org.elasticsearch.threadpool.ThreadPool.Names;
|
||||
import org.elasticsearch.transport.TransportRequest;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
|
@ -309,7 +310,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
|
|||
}
|
||||
|
||||
public ScrollQuerySearchResult executeQueryPhase(InternalScrollSearchRequest request, SearchTask task) {
|
||||
final SearchContext context = findContext(request.id());
|
||||
final SearchContext context = findContext(request.id(), request);
|
||||
SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
|
||||
context.incRef();
|
||||
try {
|
||||
|
@ -333,7 +334,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
|
|||
}
|
||||
|
||||
public QuerySearchResult executeQueryPhase(QuerySearchRequest request, SearchTask task) {
|
||||
final SearchContext context = findContext(request.id());
|
||||
final SearchContext context = findContext(request.id(), request);
|
||||
context.setTask(task);
|
||||
IndexShard indexShard = context.indexShard();
|
||||
SearchOperationListener operationListener = indexShard.getSearchOperationListener();
|
||||
|
@ -374,7 +375,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
|
|||
}
|
||||
|
||||
public ScrollQueryFetchSearchResult executeFetchPhase(InternalScrollSearchRequest request, SearchTask task) {
|
||||
final SearchContext context = findContext(request.id());
|
||||
final SearchContext context = findContext(request.id(), request);
|
||||
context.incRef();
|
||||
try {
|
||||
context.setTask(task);
|
||||
|
@ -405,7 +406,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
|
|||
}
|
||||
|
||||
public FetchSearchResult executeFetchPhase(ShardFetchRequest request, SearchTask task) {
|
||||
final SearchContext context = findContext(request.id());
|
||||
final SearchContext context = findContext(request.id(), request);
|
||||
final SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
|
||||
context.incRef();
|
||||
try {
|
||||
|
@ -435,7 +436,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
|
|||
}
|
||||
}
|
||||
|
||||
private SearchContext findContext(long id) throws SearchContextMissingException {
|
||||
private SearchContext findContext(long id, TransportRequest request) throws SearchContextMissingException {
|
||||
SearchContext context = activeContexts.get(id);
|
||||
if (context == null) {
|
||||
throw new SearchContextMissingException(id);
|
||||
|
@ -443,7 +444,7 @@ public class SearchService extends AbstractLifecycleComponent implements IndexEv
|
|||
|
||||
SearchOperationListener operationListener = context.indexShard().getSearchOperationListener();
|
||||
try {
|
||||
operationListener.validateSearchContext(context);
|
||||
operationListener.validateSearchContext(context, request);
|
||||
return context;
|
||||
} catch (Exception e) {
|
||||
processFailure(context, e);
|
||||
|
|
|
@ -21,6 +21,8 @@ package org.elasticsearch.index.shard;
|
|||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.TestSearchContext;
|
||||
import org.elasticsearch.transport.TransportRequest;
|
||||
import org.elasticsearch.transport.TransportRequest.Empty;
|
||||
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.ArrayList;
|
||||
|
@ -112,7 +114,7 @@ public class SearchOperationListenerTests extends ESTestCase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void validateSearchContext(SearchContext context) {
|
||||
public void validateSearchContext(SearchContext context, TransportRequest request) {
|
||||
assertNotNull(context);
|
||||
validateSearchContext.incrementAndGet();
|
||||
}
|
||||
|
@ -267,9 +269,10 @@ public class SearchOperationListenerTests extends ESTestCase {
|
|||
assertEquals(0, validateSearchContext.get());
|
||||
|
||||
if (throwingListeners == 0) {
|
||||
compositeListener.validateSearchContext(ctx);
|
||||
compositeListener.validateSearchContext(ctx, Empty.INSTANCE);
|
||||
} else {
|
||||
RuntimeException expected = expectThrows(RuntimeException.class, () -> compositeListener.validateSearchContext(ctx));
|
||||
RuntimeException expected =
|
||||
expectThrows(RuntimeException.class, () -> compositeListener.validateSearchContext(ctx, Empty.INSTANCE));
|
||||
assertNull(expected.getMessage());
|
||||
assertEquals(throwingListeners - 1, expected.getSuppressed().length);
|
||||
if (throwingListeners > 1) {
|
||||
|
|
Loading…
Reference in New Issue