Add client actions to action plugin
This commit adds an extension point for client actions to action plugins. This is useful for plugins to expose the client-side actions without exposing the server-side implementations to the client. The default implementation, of course, delegates to extracting the client-side action from the server-side implementation. Relates #28280
This commit is contained in:
parent
c122a6d4a0
commit
6b0036e0e1
|
@ -26,6 +26,7 @@ import org.elasticsearch.action.ActionModule;
|
||||||
import org.elasticsearch.action.ActionRequest;
|
import org.elasticsearch.action.ActionRequest;
|
||||||
import org.elasticsearch.action.ActionRequestBuilder;
|
import org.elasticsearch.action.ActionRequestBuilder;
|
||||||
import org.elasticsearch.action.ActionResponse;
|
import org.elasticsearch.action.ActionResponse;
|
||||||
|
import org.elasticsearch.action.GenericAction;
|
||||||
import org.elasticsearch.client.support.AbstractClient;
|
import org.elasticsearch.client.support.AbstractClient;
|
||||||
import org.elasticsearch.cluster.ClusterModule;
|
import org.elasticsearch.cluster.ClusterModule;
|
||||||
import org.elasticsearch.cluster.node.DiscoveryNode;
|
import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||||
|
@ -195,8 +196,16 @@ public abstract class TransportClient extends AbstractClient {
|
||||||
final TransportClientNodesService nodesService =
|
final TransportClientNodesService nodesService =
|
||||||
new TransportClientNodesService(settings, transportService, threadPool, failureListner == null
|
new TransportClientNodesService(settings, transportService, threadPool, failureListner == null
|
||||||
? (t, e) -> {} : failureListner);
|
? (t, e) -> {} : failureListner);
|
||||||
final TransportProxyClient proxy = new TransportProxyClient(settings, transportService, nodesService,
|
|
||||||
actionModule.getActions().values().stream().map(x -> x.getAction()).collect(Collectors.toList()));
|
// construct the list of client actions
|
||||||
|
final List<ActionPlugin> actionPlugins = pluginsService.filterPlugins(ActionPlugin.class);
|
||||||
|
final List<GenericAction> clientActions =
|
||||||
|
actionPlugins.stream().flatMap(p -> p.getClientActions().stream()).collect(Collectors.toList());
|
||||||
|
// add all the base actions
|
||||||
|
final List<? extends GenericAction<?, ?>> baseActions =
|
||||||
|
actionModule.getActions().values().stream().map(ActionPlugin.ActionHandler::getAction).collect(Collectors.toList());
|
||||||
|
clientActions.addAll(baseActions);
|
||||||
|
final TransportProxyClient proxy = new TransportProxyClient(settings, transportService, nodesService, clientActions);
|
||||||
|
|
||||||
List<LifecycleComponent> pluginLifecycleComponents = new ArrayList<>(pluginsService.getGuiceServiceClasses().stream()
|
List<LifecycleComponent> pluginLifecycleComponents = new ArrayList<>(pluginsService.getGuiceServiceClasses().stream()
|
||||||
.map(injector::getInstance).collect(Collectors.toList()));
|
.map(injector::getInstance).collect(Collectors.toList()));
|
||||||
|
|
|
@ -42,6 +42,7 @@ import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.function.UnaryOperator;
|
import java.util.function.UnaryOperator;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An additional extension point for {@link Plugin}s that extends Elasticsearch's scripting functionality. Implement it like this:
|
* An additional extension point for {@link Plugin}s that extends Elasticsearch's scripting functionality. Implement it like this:
|
||||||
|
@ -62,6 +63,15 @@ public interface ActionPlugin {
|
||||||
default List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
|
default List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Client actions added by this plugin. This defaults to all of the {@linkplain GenericAction} in
|
||||||
|
* {@linkplain ActionPlugin#getActions()}.
|
||||||
|
*/
|
||||||
|
default List<GenericAction> getClientActions() {
|
||||||
|
return getActions().stream().map(a -> a.action).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action filters added by this plugin.
|
* Action filters added by this plugin.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue