|
@@ -26,14 +26,17 @@ import org.elasticsearch.action.ActionRequestBuilder;
|
|
|
import org.elasticsearch.action.ActionResponse;
|
|
|
import org.elasticsearch.action.GenericAction;
|
|
|
import org.elasticsearch.action.support.TransportAction;
|
|
|
+import org.elasticsearch.client.Client;
|
|
|
import org.elasticsearch.client.support.AbstractClient;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
+import org.elasticsearch.tasks.Task;
|
|
|
+import org.elasticsearch.tasks.TaskListener;
|
|
|
import org.elasticsearch.threadpool.ThreadPool;
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
- *
|
|
|
+ * Client that executes actions on the local node.
|
|
|
*/
|
|
|
public class NodeClient extends AbstractClient {
|
|
|
|
|
@@ -52,10 +55,43 @@ public class NodeClient extends AbstractClient {
|
|
|
// nothing really to do
|
|
|
}
|
|
|
|
|
|
- @SuppressWarnings("unchecked")
|
|
|
@Override
|
|
|
- public <Request extends ActionRequest<Request>, Response extends ActionResponse, RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>> void doExecute(
|
|
|
- Action<Request, Response, RequestBuilder> action, Request request, ActionListener<Response> listener) {
|
|
|
+ public < Request extends ActionRequest<Request>,
|
|
|
+ Response extends ActionResponse,
|
|
|
+ RequestBuilder extends ActionRequestBuilder<Request, Response, RequestBuilder>
|
|
|
+ > void doExecute(Action<Request, Response, RequestBuilder> action, Request request, ActionListener<Response> listener) {
|
|
|
+ // Discard the task because the Client interface doesn't use it.
|
|
|
+ executeLocally(action, request, listener);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Execute an {@link Action} locally, returning that {@link Task} used to track it, and linking an {@link ActionListener}. Prefer this
|
|
|
+ * method if you don't need access to the task when listening for the response. This is the method used to implement the {@link Client}
|
|
|
+ * interface.
|
|
|
+ */
|
|
|
+ public < Request extends ActionRequest<Request>,
|
|
|
+ Response extends ActionResponse
|
|
|
+ > Task executeLocally(GenericAction<Request, Response> action, Request request, ActionListener<Response> listener) {
|
|
|
+ return transportAction(action).execute(request, listener);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Execute an {@link Action} locally, returning that {@link Task} used to track it, and linking an {@link TaskListener}. Prefer this
|
|
|
+ * method if you need access to the task when listening for the response.
|
|
|
+ */
|
|
|
+ public < Request extends ActionRequest<Request>,
|
|
|
+ Response extends ActionResponse
|
|
|
+ > Task executeLocally(GenericAction<Request, Response> action, Request request, TaskListener<Response> listener) {
|
|
|
+ return transportAction(action).execute(request, listener);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get the {@link TransportAction} for an {@link Action}, throwing exceptions if the action isn't available.
|
|
|
+ */
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ private < Request extends ActionRequest<Request>,
|
|
|
+ Response extends ActionResponse
|
|
|
+ > TransportAction<Request, Response> transportAction(GenericAction<Request, Response> action) {
|
|
|
if (actions == null) {
|
|
|
throw new IllegalStateException("NodeClient has not been initialized");
|
|
|
}
|
|
@@ -63,6 +99,6 @@ public class NodeClient extends AbstractClient {
|
|
|
if (transportAction == null) {
|
|
|
throw new IllegalStateException("failed to find action [" + action + "] to execute");
|
|
|
}
|
|
|
- transportAction.execute(request, listener);
|
|
|
+ return transportAction;
|
|
|
}
|
|
|
}
|