|
@@ -23,6 +23,8 @@ import org.elasticsearch.action.ActionListener;
|
|
|
import org.elasticsearch.action.ActionListenerResponseHandler;
|
|
|
import org.elasticsearch.action.IndicesRequest;
|
|
|
import org.elasticsearch.action.OriginalIndices;
|
|
|
+import org.elasticsearch.action.search.SearchRequest;
|
|
|
+import org.elasticsearch.action.search.SearchTask;
|
|
|
import org.elasticsearch.action.support.IndicesOptions;
|
|
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
|
|
import org.elasticsearch.common.component.AbstractComponent;
|
|
@@ -42,7 +44,10 @@ import org.elasticsearch.search.query.QuerySearchRequest;
|
|
|
import org.elasticsearch.search.query.QuerySearchResult;
|
|
|
import org.elasticsearch.search.query.QuerySearchResultProvider;
|
|
|
import org.elasticsearch.search.query.ScrollQuerySearchResult;
|
|
|
+import org.elasticsearch.tasks.Task;
|
|
|
import org.elasticsearch.threadpool.ThreadPool;
|
|
|
+import org.elasticsearch.transport.TaskAwareTransportRequestHandler;
|
|
|
+import org.elasticsearch.transport.TransportChannel;
|
|
|
import org.elasticsearch.transport.TransportRequest;
|
|
|
import org.elasticsearch.transport.TransportResponse;
|
|
|
import org.elasticsearch.transport.TransportService;
|
|
@@ -77,22 +82,22 @@ public class SearchTransportService extends AbstractComponent {
|
|
|
|
|
|
public void sendFreeContext(DiscoveryNode node, final long contextId, SearchRequest request) {
|
|
|
transportService.sendRequest(node, FREE_CONTEXT_ACTION_NAME, new SearchFreeContextRequest(request, contextId),
|
|
|
- new ActionListenerResponseHandler<>(new ActionListener<SearchFreeContextResponse>() {
|
|
|
- @Override
|
|
|
- public void onResponse(SearchFreeContextResponse response) {
|
|
|
- // no need to respond if it was freed or not
|
|
|
- }
|
|
|
+ new ActionListenerResponseHandler<>(new ActionListener<SearchFreeContextResponse>() {
|
|
|
+ @Override
|
|
|
+ public void onResponse(SearchFreeContextResponse response) {
|
|
|
+ // no need to respond if it was freed or not
|
|
|
+ }
|
|
|
|
|
|
- @Override
|
|
|
- public void onFailure(Exception e) {
|
|
|
+ @Override
|
|
|
+ public void onFailure(Exception e) {
|
|
|
|
|
|
- }
|
|
|
- }, SearchFreeContextResponse::new));
|
|
|
+ }
|
|
|
+ }, SearchFreeContextResponse::new));
|
|
|
}
|
|
|
|
|
|
public void sendFreeContext(DiscoveryNode node, long contextId, final ActionListener<SearchFreeContextResponse> listener) {
|
|
|
transportService.sendRequest(node, FREE_CONTEXT_SCROLL_ACTION_NAME, new ScrollFreeContextRequest(contextId),
|
|
|
- new ActionListenerResponseHandler<>(listener, SearchFreeContextResponse::new));
|
|
|
+ new ActionListenerResponseHandler<>(listener, SearchFreeContextResponse::new));
|
|
|
}
|
|
|
|
|
|
public void sendClearAllScrollContexts(DiscoveryNode node, final ActionListener<TransportResponse> listener) {
|
|
@@ -100,59 +105,62 @@ public class SearchTransportService extends AbstractComponent {
|
|
|
new ActionListenerResponseHandler<>(listener, () -> TransportResponse.Empty.INSTANCE));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteDfs(DiscoveryNode node, final ShardSearchTransportRequest request,
|
|
|
+ public void sendExecuteDfs(DiscoveryNode node, final ShardSearchTransportRequest request, SearchTask task,
|
|
|
final ActionListener<DfsSearchResult> listener) {
|
|
|
- transportService.sendRequest(node, DFS_ACTION_NAME, request, new ActionListenerResponseHandler<>(listener, DfsSearchResult::new));
|
|
|
+ transportService.sendChildRequest(node, DFS_ACTION_NAME, request, task,
|
|
|
+ new ActionListenerResponseHandler<>(listener, DfsSearchResult::new));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteQuery(DiscoveryNode node, final ShardSearchTransportRequest request,
|
|
|
+ public void sendExecuteQuery(DiscoveryNode node, final ShardSearchTransportRequest request, SearchTask task,
|
|
|
final ActionListener<QuerySearchResultProvider> listener) {
|
|
|
- transportService.sendRequest(node, QUERY_ACTION_NAME, request,
|
|
|
- new ActionListenerResponseHandler<>(listener, QuerySearchResult::new));
|
|
|
+ transportService.sendChildRequest(node, QUERY_ACTION_NAME, request, task,
|
|
|
+ new ActionListenerResponseHandler<>(listener, QuerySearchResult::new));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteQuery(DiscoveryNode node, final QuerySearchRequest request, final ActionListener<QuerySearchResult> listener) {
|
|
|
- transportService.sendRequest(node, QUERY_ID_ACTION_NAME, request,
|
|
|
+ public void sendExecuteQuery(DiscoveryNode node, final QuerySearchRequest request, SearchTask task,
|
|
|
+ final ActionListener<QuerySearchResult> listener) {
|
|
|
+ transportService.sendChildRequest(node, QUERY_ID_ACTION_NAME, request, task,
|
|
|
new ActionListenerResponseHandler<>(listener, QuerySearchResult::new));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteQuery(DiscoveryNode node, final InternalScrollSearchRequest request,
|
|
|
+ public void sendExecuteQuery(DiscoveryNode node, final InternalScrollSearchRequest request, SearchTask task,
|
|
|
final ActionListener<ScrollQuerySearchResult> listener) {
|
|
|
- transportService.sendRequest(node, QUERY_SCROLL_ACTION_NAME, request,
|
|
|
- new ActionListenerResponseHandler<>(listener, ScrollQuerySearchResult::new));
|
|
|
+ transportService.sendChildRequest(node, QUERY_SCROLL_ACTION_NAME, request, task,
|
|
|
+ new ActionListenerResponseHandler<>(listener, ScrollQuerySearchResult::new));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteFetch(DiscoveryNode node, final ShardSearchTransportRequest request,
|
|
|
+ public void sendExecuteFetch(DiscoveryNode node, final ShardSearchTransportRequest request, SearchTask task,
|
|
|
final ActionListener<QueryFetchSearchResult> listener) {
|
|
|
- transportService.sendRequest(node, QUERY_FETCH_ACTION_NAME, request,
|
|
|
- new ActionListenerResponseHandler<>(listener, QueryFetchSearchResult::new));
|
|
|
+ transportService.sendChildRequest(node, QUERY_FETCH_ACTION_NAME, request, task,
|
|
|
+ new ActionListenerResponseHandler<>(listener, QueryFetchSearchResult::new));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteFetch(DiscoveryNode node, final QuerySearchRequest request,
|
|
|
+ public void sendExecuteFetch(DiscoveryNode node, final QuerySearchRequest request, SearchTask task,
|
|
|
final ActionListener<QueryFetchSearchResult> listener) {
|
|
|
- transportService.sendRequest(node, QUERY_QUERY_FETCH_ACTION_NAME, request,
|
|
|
- new ActionListenerResponseHandler<>(listener, QueryFetchSearchResult::new));
|
|
|
+ transportService.sendChildRequest(node, QUERY_QUERY_FETCH_ACTION_NAME, request, task,
|
|
|
+ new ActionListenerResponseHandler<>(listener, QueryFetchSearchResult::new));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteFetch(DiscoveryNode node, final InternalScrollSearchRequest request,
|
|
|
+ public void sendExecuteFetch(DiscoveryNode node, final InternalScrollSearchRequest request, SearchTask task,
|
|
|
final ActionListener<ScrollQueryFetchSearchResult> listener) {
|
|
|
- transportService.sendRequest(node, QUERY_FETCH_SCROLL_ACTION_NAME, request,
|
|
|
- new ActionListenerResponseHandler<>(listener, ScrollQueryFetchSearchResult::new));
|
|
|
+ transportService.sendChildRequest(node, QUERY_FETCH_SCROLL_ACTION_NAME, request, task,
|
|
|
+ new ActionListenerResponseHandler<>(listener, ScrollQueryFetchSearchResult::new));
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteFetch(DiscoveryNode node, final ShardFetchSearchRequest request,
|
|
|
+ public void sendExecuteFetch(DiscoveryNode node, final ShardFetchSearchRequest request, SearchTask task,
|
|
|
final ActionListener<FetchSearchResult> listener) {
|
|
|
- sendExecuteFetch(node, FETCH_ID_ACTION_NAME, request, listener);
|
|
|
+ sendExecuteFetch(node, FETCH_ID_ACTION_NAME, request, task, listener);
|
|
|
}
|
|
|
|
|
|
- public void sendExecuteFetchScroll(DiscoveryNode node, final ShardFetchRequest request,
|
|
|
+ public void sendExecuteFetchScroll(DiscoveryNode node, final ShardFetchRequest request, SearchTask task,
|
|
|
final ActionListener<FetchSearchResult> listener) {
|
|
|
- sendExecuteFetch(node, FETCH_ID_SCROLL_ACTION_NAME, request, listener);
|
|
|
+ sendExecuteFetch(node, FETCH_ID_SCROLL_ACTION_NAME, request, task, listener);
|
|
|
}
|
|
|
|
|
|
- private void sendExecuteFetch(DiscoveryNode node, String action, final ShardFetchRequest request,
|
|
|
+ private void sendExecuteFetch(DiscoveryNode node, String action, final ShardFetchRequest request, SearchTask task,
|
|
|
final ActionListener<FetchSearchResult> listener) {
|
|
|
- transportService.sendRequest(node, action, request, new ActionListenerResponseHandler<>(listener, FetchSearchResult::new));
|
|
|
+ transportService.sendChildRequest(node, action, request, task,
|
|
|
+ new ActionListenerResponseHandler<>(listener, FetchSearchResult::new));
|
|
|
}
|
|
|
|
|
|
static class ScrollFreeContextRequest extends TransportRequest {
|
|
@@ -252,64 +260,103 @@ public class SearchTransportService extends AbstractComponent {
|
|
|
|
|
|
public static void registerRequestHandler(TransportService transportService, SearchService searchService) {
|
|
|
transportService.registerRequestHandler(FREE_CONTEXT_SCROLL_ACTION_NAME, ScrollFreeContextRequest::new, ThreadPool.Names.SAME,
|
|
|
- ((request, channel) -> {
|
|
|
- boolean freed = searchService.freeContext(request.id());
|
|
|
- channel.sendResponse(new SearchFreeContextResponse(freed));
|
|
|
- }));
|
|
|
+ new TaskAwareTransportRequestHandler<ScrollFreeContextRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(ScrollFreeContextRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ boolean freed = searchService.freeContext(request.id());
|
|
|
+ channel.sendResponse(new SearchFreeContextResponse(freed));
|
|
|
+ }
|
|
|
+ });
|
|
|
transportService.registerRequestHandler(FREE_CONTEXT_ACTION_NAME, SearchFreeContextRequest::new, ThreadPool.Names.SAME,
|
|
|
- (request, channel) -> {
|
|
|
- boolean freed = searchService.freeContext(request.id());
|
|
|
- channel.sendResponse(new SearchFreeContextResponse(freed));
|
|
|
+ new TaskAwareTransportRequestHandler<SearchFreeContextRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(SearchFreeContextRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ boolean freed = searchService.freeContext(request.id());
|
|
|
+ channel.sendResponse(new SearchFreeContextResponse(freed));
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(CLEAR_SCROLL_CONTEXTS_ACTION_NAME, () -> TransportRequest.Empty.INSTANCE,
|
|
|
- ThreadPool.Names.SAME, (request, channel) -> {
|
|
|
- searchService.freeAllScrollContexts();
|
|
|
- channel.sendResponse(TransportResponse.Empty.INSTANCE);
|
|
|
+ ThreadPool.Names.SAME,
|
|
|
+ new TaskAwareTransportRequestHandler<TransportRequest.Empty>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(TransportRequest.Empty request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ searchService.freeAllScrollContexts();
|
|
|
+ channel.sendResponse(TransportResponse.Empty.INSTANCE);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(DFS_ACTION_NAME, ShardSearchTransportRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- DfsSearchResult result = searchService.executeDfsPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<ShardSearchTransportRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(ShardSearchTransportRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ DfsSearchResult result = searchService.executeDfsPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(QUERY_ACTION_NAME, ShardSearchTransportRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- QuerySearchResultProvider result = searchService.executeQueryPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<ShardSearchTransportRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(ShardSearchTransportRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ QuerySearchResultProvider result = searchService.executeQueryPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(QUERY_ID_ACTION_NAME, QuerySearchRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- QuerySearchResult result = searchService.executeQueryPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<QuerySearchRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(QuerySearchRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ QuerySearchResult result = searchService.executeQueryPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(QUERY_SCROLL_ACTION_NAME, InternalScrollSearchRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- ScrollQuerySearchResult result = searchService.executeQueryPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<InternalScrollSearchRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(InternalScrollSearchRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ ScrollQuerySearchResult result = searchService.executeQueryPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(QUERY_FETCH_ACTION_NAME, ShardSearchTransportRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- QueryFetchSearchResult result = searchService.executeFetchPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<ShardSearchTransportRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(ShardSearchTransportRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ QueryFetchSearchResult result = searchService.executeFetchPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(QUERY_QUERY_FETCH_ACTION_NAME, QuerySearchRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- QueryFetchSearchResult result = searchService.executeFetchPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<QuerySearchRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(QuerySearchRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ QueryFetchSearchResult result = searchService.executeFetchPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(QUERY_FETCH_SCROLL_ACTION_NAME, InternalScrollSearchRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- ScrollQueryFetchSearchResult result = searchService.executeFetchPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<InternalScrollSearchRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(InternalScrollSearchRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ ScrollQueryFetchSearchResult result = searchService.executeFetchPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(FETCH_ID_SCROLL_ACTION_NAME, ShardFetchRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- FetchSearchResult result = searchService.executeFetchPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<ShardFetchRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(ShardFetchRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ FetchSearchResult result = searchService.executeFetchPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
transportService.registerRequestHandler(FETCH_ID_ACTION_NAME, ShardFetchSearchRequest::new, ThreadPool.Names.SEARCH,
|
|
|
- (request, channel) -> {
|
|
|
- FetchSearchResult result = searchService.executeFetchPhase(request);
|
|
|
- channel.sendResponse(result);
|
|
|
+ new TaskAwareTransportRequestHandler<ShardFetchSearchRequest>() {
|
|
|
+ @Override
|
|
|
+ public void messageReceived(ShardFetchSearchRequest request, TransportChannel channel, Task task) throws Exception {
|
|
|
+ FetchSearchResult result = searchService.executeFetchPhase(request, (SearchTask)task);
|
|
|
+ channel.sendResponse(result);
|
|
|
+ }
|
|
|
});
|
|
|
+
|
|
|
}
|
|
|
}
|