diff --git a/core/src/main/java/org/elasticsearch/client/transport/ClientTransportModule.java b/core/src/main/java/org/elasticsearch/client/transport/ClientTransportModule.java
deleted file mode 100644
index 895b3d844f6..00000000000
--- a/core/src/main/java/org/elasticsearch/client/transport/ClientTransportModule.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.elasticsearch.client.transport;
-
-import org.elasticsearch.client.support.Headers;
-import org.elasticsearch.client.transport.support.TransportProxyClient;
-import org.elasticsearch.common.inject.AbstractModule;
-
-/**
- *
- */
-public class ClientTransportModule extends AbstractModule {
-
- @Override
- protected void configure() {
- bind(Headers.class).asEagerSingleton();
- bind(TransportProxyClient.class).asEagerSingleton();
- bind(TransportClientNodesService.class).asEagerSingleton();
- }
-}
diff --git a/core/src/main/java/org/elasticsearch/client/transport/TransportClient.java b/core/src/main/java/org/elasticsearch/client/transport/TransportClient.java
index 33cf3479419..3b8be668f43 100644
--- a/core/src/main/java/org/elasticsearch/client/transport/TransportClient.java
+++ b/core/src/main/java/org/elasticsearch/client/transport/TransportClient.java
@@ -32,7 +32,6 @@ import org.elasticsearch.client.support.Headers;
import org.elasticsearch.client.transport.support.TransportProxyClient;
import org.elasticsearch.cluster.ClusterNameModule;
import org.elasticsearch.cluster.node.DiscoveryNode;
-import org.elasticsearch.common.collect.Tuple;
import org.elasticsearch.common.component.LifecycleComponent;
import org.elasticsearch.common.inject.Injector;
import org.elasticsearch.common.inject.Module;
@@ -43,19 +42,15 @@ import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.settings.SettingsFilter;
import org.elasticsearch.common.settings.SettingsModule;
import org.elasticsearch.common.transport.TransportAddress;
-import org.elasticsearch.env.Environment;
-import org.elasticsearch.env.EnvironmentModule;
import org.elasticsearch.indices.breaker.CircuitBreakerModule;
import org.elasticsearch.monitor.MonitorService;
import org.elasticsearch.node.internal.InternalSettingsPreparer;
-import org.elasticsearch.node.settings.NodeSettingsService;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.plugins.PluginsModule;
import org.elasticsearch.plugins.PluginsService;
import org.elasticsearch.search.SearchModule;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.threadpool.ThreadPoolModule;
-import org.elasticsearch.transport.TransportModule;
import org.elasticsearch.transport.TransportService;
import org.elasticsearch.transport.netty.NettyTransport;
@@ -69,7 +64,7 @@ import static org.elasticsearch.common.settings.Settings.settingsBuilder;
* The transport client allows to create a client that is not part of the cluster, but simply connects to one
* or more nodes directly by adding their respective addresses using {@link #addTransportAddress(org.elasticsearch.common.transport.TransportAddress)}.
*
- * The transport client important modules used is the {@link org.elasticsearch.transport.TransportModule} which is
+ * The transport client important modules used is the {@link org.elasticsearch.common.network.NetworkModule} which is
* started in client mode (only connects, no bind).
*/
public class TransportClient extends AbstractClient {
@@ -143,10 +138,9 @@ public class TransportClient extends AbstractClient {
}
modules.add(new PluginsModule(pluginsService));
modules.add(new SettingsModule(this.settings, settingsFilter ));
- modules.add(new NetworkModule(networkService));
+ modules.add(new NetworkModule(networkService, this.settings, true));
modules.add(new ClusterNameModule(this.settings));
modules.add(new ThreadPoolModule(threadPool));
- modules.add(new TransportModule(this.settings));
modules.add(new SearchModule() {
@Override
protected void configure() {
@@ -154,7 +148,6 @@ public class TransportClient extends AbstractClient {
}
});
modules.add(new ActionModule(true));
- modules.add(new ClientTransportModule());
modules.add(new CircuitBreakerModule(this.settings));
pluginsService.processModules(modules);
diff --git a/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java b/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java
index c1f282ac234..f7eab3da2ac 100644
--- a/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java
+++ b/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java
@@ -19,21 +19,362 @@
package org.elasticsearch.common.network;
+import org.elasticsearch.client.support.Headers;
+import org.elasticsearch.client.transport.TransportClientNodesService;
+import org.elasticsearch.client.transport.support.TransportProxyClient;
+import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.common.inject.AbstractModule;
+import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
+import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.util.ExtensionPoint;
+import org.elasticsearch.http.HttpServer;
+import org.elasticsearch.http.HttpServerTransport;
+import org.elasticsearch.http.netty.NettyHttpServerTransport;
+import org.elasticsearch.rest.RestController;
+import org.elasticsearch.rest.RestHandler;
+import org.elasticsearch.rest.action.admin.cluster.health.RestClusterHealthAction;
+import org.elasticsearch.rest.action.admin.cluster.node.hotthreads.RestNodesHotThreadsAction;
+import org.elasticsearch.rest.action.admin.cluster.node.info.RestNodesInfoAction;
+import org.elasticsearch.rest.action.admin.cluster.node.stats.RestNodesStatsAction;
+import org.elasticsearch.rest.action.admin.cluster.repositories.delete.RestDeleteRepositoryAction;
+import org.elasticsearch.rest.action.admin.cluster.repositories.get.RestGetRepositoriesAction;
+import org.elasticsearch.rest.action.admin.cluster.repositories.put.RestPutRepositoryAction;
+import org.elasticsearch.rest.action.admin.cluster.repositories.verify.RestVerifyRepositoryAction;
+import org.elasticsearch.rest.action.admin.cluster.reroute.RestClusterRerouteAction;
+import org.elasticsearch.rest.action.admin.cluster.settings.RestClusterGetSettingsAction;
+import org.elasticsearch.rest.action.admin.cluster.settings.RestClusterUpdateSettingsAction;
+import org.elasticsearch.rest.action.admin.cluster.shards.RestClusterSearchShardsAction;
+import org.elasticsearch.rest.action.admin.cluster.snapshots.create.RestCreateSnapshotAction;
+import org.elasticsearch.rest.action.admin.cluster.snapshots.delete.RestDeleteSnapshotAction;
+import org.elasticsearch.rest.action.admin.cluster.snapshots.get.RestGetSnapshotsAction;
+import org.elasticsearch.rest.action.admin.cluster.snapshots.restore.RestRestoreSnapshotAction;
+import org.elasticsearch.rest.action.admin.cluster.snapshots.status.RestSnapshotsStatusAction;
+import org.elasticsearch.rest.action.admin.cluster.state.RestClusterStateAction;
+import org.elasticsearch.rest.action.admin.cluster.stats.RestClusterStatsAction;
+import org.elasticsearch.rest.action.admin.cluster.tasks.RestPendingClusterTasksAction;
+import org.elasticsearch.rest.action.admin.indices.alias.RestIndicesAliasesAction;
+import org.elasticsearch.rest.action.admin.indices.alias.delete.RestIndexDeleteAliasesAction;
+import org.elasticsearch.rest.action.admin.indices.alias.get.RestGetAliasesAction;
+import org.elasticsearch.rest.action.admin.indices.alias.get.RestGetIndicesAliasesAction;
+import org.elasticsearch.rest.action.admin.indices.alias.head.RestAliasesExistAction;
+import org.elasticsearch.rest.action.admin.indices.alias.put.RestIndexPutAliasAction;
+import org.elasticsearch.rest.action.admin.indices.analyze.RestAnalyzeAction;
+import org.elasticsearch.rest.action.admin.indices.cache.clear.RestClearIndicesCacheAction;
+import org.elasticsearch.rest.action.admin.indices.close.RestCloseIndexAction;
+import org.elasticsearch.rest.action.admin.indices.create.RestCreateIndexAction;
+import org.elasticsearch.rest.action.admin.indices.delete.RestDeleteIndexAction;
+import org.elasticsearch.rest.action.admin.indices.exists.indices.RestIndicesExistsAction;
+import org.elasticsearch.rest.action.admin.indices.exists.types.RestTypesExistsAction;
+import org.elasticsearch.rest.action.admin.indices.flush.RestFlushAction;
+import org.elasticsearch.rest.action.admin.indices.flush.RestSyncedFlushAction;
+import org.elasticsearch.rest.action.admin.indices.forcemerge.RestForceMergeAction;
+import org.elasticsearch.rest.action.admin.indices.get.RestGetIndicesAction;
+import org.elasticsearch.rest.action.admin.indices.mapping.get.RestGetFieldMappingAction;
+import org.elasticsearch.rest.action.admin.indices.mapping.get.RestGetMappingAction;
+import org.elasticsearch.rest.action.admin.indices.mapping.put.RestPutMappingAction;
+import org.elasticsearch.rest.action.admin.indices.open.RestOpenIndexAction;
+import org.elasticsearch.rest.action.admin.indices.recovery.RestRecoveryAction;
+import org.elasticsearch.rest.action.admin.indices.refresh.RestRefreshAction;
+import org.elasticsearch.rest.action.admin.indices.segments.RestIndicesSegmentsAction;
+import org.elasticsearch.rest.action.admin.indices.settings.RestGetSettingsAction;
+import org.elasticsearch.rest.action.admin.indices.settings.RestUpdateSettingsAction;
+import org.elasticsearch.rest.action.admin.indices.shards.RestIndicesShardStoresAction;
+import org.elasticsearch.rest.action.admin.indices.stats.RestIndicesStatsAction;
+import org.elasticsearch.rest.action.admin.indices.template.delete.RestDeleteIndexTemplateAction;
+import org.elasticsearch.rest.action.admin.indices.template.get.RestGetIndexTemplateAction;
+import org.elasticsearch.rest.action.admin.indices.template.head.RestHeadIndexTemplateAction;
+import org.elasticsearch.rest.action.admin.indices.template.put.RestPutIndexTemplateAction;
+import org.elasticsearch.rest.action.admin.indices.upgrade.RestUpgradeAction;
+import org.elasticsearch.rest.action.admin.indices.validate.query.RestValidateQueryAction;
+import org.elasticsearch.rest.action.admin.indices.validate.template.RestRenderSearchTemplateAction;
+import org.elasticsearch.rest.action.admin.indices.warmer.delete.RestDeleteWarmerAction;
+import org.elasticsearch.rest.action.admin.indices.warmer.get.RestGetWarmerAction;
+import org.elasticsearch.rest.action.admin.indices.warmer.put.RestPutWarmerAction;
+import org.elasticsearch.rest.action.bulk.RestBulkAction;
+import org.elasticsearch.rest.action.cat.AbstractCatAction;
+import org.elasticsearch.rest.action.cat.RestAliasAction;
+import org.elasticsearch.rest.action.cat.RestAllocationAction;
+import org.elasticsearch.rest.action.cat.RestCatAction;
+import org.elasticsearch.rest.action.cat.RestFielddataAction;
+import org.elasticsearch.rest.action.cat.RestHealthAction;
+import org.elasticsearch.rest.action.cat.RestIndicesAction;
+import org.elasticsearch.rest.action.cat.RestMasterAction;
+import org.elasticsearch.rest.action.cat.RestNodeAttrsAction;
+import org.elasticsearch.rest.action.cat.RestNodesAction;
+import org.elasticsearch.rest.action.cat.RestPluginsAction;
+import org.elasticsearch.rest.action.cat.RestRepositoriesAction;
+import org.elasticsearch.rest.action.cat.RestSegmentsAction;
+import org.elasticsearch.rest.action.cat.RestShardsAction;
+import org.elasticsearch.rest.action.cat.RestSnapshotAction;
+import org.elasticsearch.rest.action.cat.RestThreadPoolAction;
+import org.elasticsearch.rest.action.delete.RestDeleteAction;
+import org.elasticsearch.rest.action.explain.RestExplainAction;
+import org.elasticsearch.rest.action.fieldstats.RestFieldStatsAction;
+import org.elasticsearch.rest.action.get.RestGetAction;
+import org.elasticsearch.rest.action.get.RestGetSourceAction;
+import org.elasticsearch.rest.action.get.RestHeadAction;
+import org.elasticsearch.rest.action.get.RestMultiGetAction;
+import org.elasticsearch.rest.action.index.RestIndexAction;
+import org.elasticsearch.rest.action.main.RestMainAction;
+import org.elasticsearch.rest.action.percolate.RestMultiPercolateAction;
+import org.elasticsearch.rest.action.percolate.RestPercolateAction;
+import org.elasticsearch.rest.action.script.RestDeleteIndexedScriptAction;
+import org.elasticsearch.rest.action.script.RestGetIndexedScriptAction;
+import org.elasticsearch.rest.action.script.RestPutIndexedScriptAction;
+import org.elasticsearch.rest.action.search.RestClearScrollAction;
+import org.elasticsearch.rest.action.search.RestMultiSearchAction;
+import org.elasticsearch.rest.action.search.RestSearchAction;
+import org.elasticsearch.rest.action.search.RestSearchScrollAction;
+import org.elasticsearch.rest.action.suggest.RestSuggestAction;
+import org.elasticsearch.rest.action.template.RestDeleteSearchTemplateAction;
+import org.elasticsearch.rest.action.template.RestGetSearchTemplateAction;
+import org.elasticsearch.rest.action.template.RestPutSearchTemplateAction;
+import org.elasticsearch.rest.action.termvectors.RestMultiTermVectorsAction;
+import org.elasticsearch.rest.action.termvectors.RestTermVectorsAction;
+import org.elasticsearch.rest.action.update.RestUpdateAction;
+import org.elasticsearch.transport.Transport;
+import org.elasticsearch.transport.TransportService;
+import org.elasticsearch.transport.local.LocalTransport;
+import org.elasticsearch.transport.netty.NettyTransport;
+
+import java.util.Arrays;
+import java.util.List;
/**
- *
+ * A module to handle registering and binding all network related classes.
*/
public class NetworkModule extends AbstractModule {
- private final NetworkService networkService;
+ public static final String TRANSPORT_TYPE_KEY = "transport.type";
+ public static final String TRANSPORT_SERVICE_TYPE_KEY = "transport.service.type";
- public NetworkModule(NetworkService networkService) {
+ public static final String LOCAL_TRANSPORT = "local";
+ public static final String NETTY_TRANSPORT = "netty";
+
+ public static final String HTTP_TYPE_KEY = "http.type";
+ public static final String HTTP_ENABLED = "http.enabled";
+
+ private static final List> builtinRestHandlers = Arrays.asList(
+ RestMainAction.class,
+
+ RestNodesInfoAction.class,
+ RestNodesStatsAction.class,
+ RestNodesHotThreadsAction.class,
+ RestClusterStatsAction.class,
+ RestClusterStateAction.class,
+ RestClusterHealthAction.class,
+ RestClusterUpdateSettingsAction.class,
+ RestClusterGetSettingsAction.class,
+ RestClusterRerouteAction.class,
+ RestClusterSearchShardsAction.class,
+ RestPendingClusterTasksAction.class,
+ RestPutRepositoryAction.class,
+ RestGetRepositoriesAction.class,
+ RestDeleteRepositoryAction.class,
+ RestVerifyRepositoryAction.class,
+ RestGetSnapshotsAction.class,
+ RestCreateSnapshotAction.class,
+ RestRestoreSnapshotAction.class,
+ RestDeleteSnapshotAction.class,
+ RestSnapshotsStatusAction.class,
+
+ RestIndicesExistsAction.class,
+ RestTypesExistsAction.class,
+ RestGetIndicesAction.class,
+ RestIndicesStatsAction.class,
+ RestIndicesSegmentsAction.class,
+ RestIndicesShardStoresAction.class,
+ RestGetAliasesAction.class,
+ RestAliasesExistAction.class,
+ RestIndexDeleteAliasesAction.class,
+ RestIndexPutAliasAction.class,
+ RestIndicesAliasesAction.class,
+ RestGetIndicesAliasesAction.class,
+ RestCreateIndexAction.class,
+ RestDeleteIndexAction.class,
+ RestCloseIndexAction.class,
+ RestOpenIndexAction.class,
+
+ RestUpdateSettingsAction.class,
+ RestGetSettingsAction.class,
+
+ RestAnalyzeAction.class,
+ RestGetIndexTemplateAction.class,
+ RestPutIndexTemplateAction.class,
+ RestDeleteIndexTemplateAction.class,
+ RestHeadIndexTemplateAction.class,
+
+ RestPutWarmerAction.class,
+ RestDeleteWarmerAction.class,
+ RestGetWarmerAction.class,
+
+ RestPutMappingAction.class,
+ RestGetMappingAction.class,
+ RestGetFieldMappingAction.class,
+
+ RestRefreshAction.class,
+ RestFlushAction.class,
+ RestSyncedFlushAction.class,
+ RestForceMergeAction.class,
+ RestUpgradeAction.class,
+ RestClearIndicesCacheAction.class,
+
+ RestIndexAction.class,
+ RestGetAction.class,
+ RestGetSourceAction.class,
+ RestHeadAction.class,
+ RestMultiGetAction.class,
+ RestDeleteAction.class,
+ org.elasticsearch.rest.action.count.RestCountAction.class,
+ RestSuggestAction.class,
+ RestTermVectorsAction.class,
+ RestMultiTermVectorsAction.class,
+ RestBulkAction.class,
+ RestUpdateAction.class,
+ RestPercolateAction.class,
+ RestMultiPercolateAction.class,
+
+ RestSearchAction.class,
+ RestSearchScrollAction.class,
+ RestClearScrollAction.class,
+ RestMultiSearchAction.class,
+ RestRenderSearchTemplateAction.class,
+
+ RestValidateQueryAction.class,
+
+ RestExplainAction.class,
+
+ RestRecoveryAction.class,
+
+ // Templates API
+ RestGetSearchTemplateAction.class,
+ RestPutSearchTemplateAction.class,
+ RestDeleteSearchTemplateAction.class,
+
+ // Scripts API
+ RestGetIndexedScriptAction.class,
+ RestPutIndexedScriptAction.class,
+ RestDeleteIndexedScriptAction.class,
+
+ RestFieldStatsAction.class,
+
+ // no abstract cat action
+ RestCatAction.class
+ );
+
+ private static final List> builtinCatHandlers = Arrays.asList(
+ RestAllocationAction.class,
+ RestShardsAction.class,
+ RestMasterAction.class,
+ RestNodesAction.class,
+ RestIndicesAction.class,
+ RestSegmentsAction.class,
+ // Fully qualified to prevent interference with rest.action.count.RestCountAction
+ org.elasticsearch.rest.action.cat.RestCountAction.class,
+ // Fully qualified to prevent interference with rest.action.indices.RestRecoveryAction
+ org.elasticsearch.rest.action.cat.RestRecoveryAction.class,
+ RestHealthAction.class,
+ org.elasticsearch.rest.action.cat.RestPendingClusterTasksAction.class,
+ RestAliasAction.class,
+ RestThreadPoolAction.class,
+ RestPluginsAction.class,
+ RestFielddataAction.class,
+ RestNodeAttrsAction.class,
+ RestRepositoriesAction.class,
+ RestSnapshotAction.class
+ );
+
+ private final NetworkService networkService;
+ private final Settings settings;
+ private final boolean transportClient;
+
+ private final ExtensionPoint.SelectedType transportServiceTypes = new ExtensionPoint.SelectedType<>("transport_service", TransportService.class);
+ private final ExtensionPoint.SelectedType transportTypes = new ExtensionPoint.SelectedType<>("transport", Transport.class);
+ private final ExtensionPoint.SelectedType httpTransportTypes = new ExtensionPoint.SelectedType<>("http_transport", HttpServerTransport.class);
+ private final ExtensionPoint.ClassSet restHandlers = new ExtensionPoint.ClassSet<>("rest_handler", RestHandler.class);
+ // we must separate the cat rest handlers so RestCatAction can collect them...
+ private final ExtensionPoint.ClassSet catHandlers = new ExtensionPoint.ClassSet<>("cat_handler", AbstractCatAction.class);
+
+ /**
+ * Creates a network module that custom networking classes can be plugged into.
+ *
+ * @param networkService A constructed network service object to bind.
+ * @param settings The settings for the node
+ * @param transportClient True if only transport classes should be allowed to be registered, false otherwise.
+ */
+ public NetworkModule(NetworkService networkService, Settings settings, boolean transportClient) {
this.networkService = networkService;
+ this.settings = settings;
+ this.transportClient = transportClient;
+ registerTransportService(NETTY_TRANSPORT, TransportService.class);
+ registerTransport(LOCAL_TRANSPORT, LocalTransport.class);
+ registerTransport(NETTY_TRANSPORT, NettyTransport.class);
+
+ if (transportClient == false) {
+ registerHttpTransport(NETTY_TRANSPORT, NettyHttpServerTransport.class);
+
+ for (Class extends AbstractCatAction> catAction : builtinCatHandlers) {
+ catHandlers.registerExtension(catAction);
+ }
+ for (Class extends RestHandler> restAction : builtinRestHandlers) {
+ restHandlers.registerExtension(restAction);
+ }
+ }
+ }
+
+ /** Adds a transport service implementation that can be selected by setting {@link #TRANSPORT_SERVICE_TYPE_KEY}. */
+ public void registerTransportService(String name, Class extends TransportService> clazz) {
+ transportServiceTypes.registerExtension(name, clazz);
+ }
+
+ /** Adds a transport implementation that can be selected by setting {@link #TRANSPORT_TYPE_KEY}. */
+ public void registerTransport(String name, Class extends Transport> clazz) {
+ transportTypes.registerExtension(name, clazz);
+ }
+
+ /** Adds an http transport implementation that can be selected by setting {@link #HTTP_TYPE_KEY}. */
+ // TODO: we need another name than "http transport"....so confusing with transportClient...
+ public void registerHttpTransport(String name, Class extends HttpServerTransport> clazz) {
+ if (transportClient) {
+ throw new IllegalArgumentException("Cannot register http transport " + clazz.getName() + " for transport client");
+ }
+ httpTransportTypes.registerExtension(name, clazz);
+ }
+
+ /** Adds an additional rest action. */
+ // TODO: change this further to eliminate the middle man, ie RestController, and just register method and path here
+ public void registerRestHandler(Class extends RestHandler> clazz) {
+ if (transportClient) {
+ throw new IllegalArgumentException("Cannot register rest handler " + clazz.getName() + " for transport client");
+ }
+ if (AbstractCatAction.class.isAssignableFrom(clazz)) {
+ catHandlers.registerExtension(clazz.asSubclass(AbstractCatAction.class));
+ } else {
+ restHandlers.registerExtension(clazz);
+ }
}
@Override
protected void configure() {
bind(NetworkService.class).toInstance(networkService);
+ bind(NamedWriteableRegistry.class).asEagerSingleton();
+
+ transportServiceTypes.bindType(binder(), settings, TRANSPORT_SERVICE_TYPE_KEY, NETTY_TRANSPORT);
+ String defaultTransport = DiscoveryNode.localNode(settings) ? LOCAL_TRANSPORT : NETTY_TRANSPORT;
+ transportTypes.bindType(binder(), settings, TRANSPORT_TYPE_KEY, defaultTransport);
+
+ if (transportClient) {
+ bind(Headers.class).asEagerSingleton();
+ bind(TransportProxyClient.class).asEagerSingleton();
+ bind(TransportClientNodesService.class).asEagerSingleton();
+ } else {
+ if (settings.getAsBoolean(HTTP_ENABLED, true)) {
+ bind(HttpServer.class).asEagerSingleton();
+ httpTransportTypes.bindType(binder(), settings, HTTP_TYPE_KEY, NETTY_TRANSPORT);
+ }
+ bind(RestController.class).asEagerSingleton();
+ catHandlers.bind(binder());
+ restHandlers.bind(binder());
+ }
}
}
diff --git a/core/src/main/java/org/elasticsearch/http/HttpServerModule.java b/core/src/main/java/org/elasticsearch/http/HttpServerModule.java
deleted file mode 100644
index 49d67369643..00000000000
--- a/core/src/main/java/org/elasticsearch/http/HttpServerModule.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.elasticsearch.http;
-
-import org.elasticsearch.common.inject.AbstractModule;
-import org.elasticsearch.common.logging.ESLogger;
-import org.elasticsearch.common.logging.Loggers;
-import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.http.netty.NettyHttpServerTransport;
-
-import java.util.Objects;
-
-/**
- *
- */
-public class HttpServerModule extends AbstractModule {
-
- private final Settings settings;
- private final ESLogger logger;
-
- private Class extends HttpServerTransport> httpServerTransportClass;
-
- public HttpServerModule(Settings settings) {
- this.settings = settings;
- this.logger = Loggers.getLogger(getClass(), settings);
- this.httpServerTransportClass = NettyHttpServerTransport.class;
- }
-
- @SuppressWarnings({"unchecked"})
- @Override
- protected void configure() {
- bind(HttpServerTransport.class).to(httpServerTransportClass).asEagerSingleton();
- bind(HttpServer.class).asEagerSingleton();
- }
-
- public void setHttpServerTransport(Class extends HttpServerTransport> httpServerTransport, String source) {
- Objects.requireNonNull(httpServerTransport, "Configured http server transport may not be null");
- Objects.requireNonNull(source, "Plugin, that changes transport may not be null");
- logger.info("Using [{}] as http transport, overridden by [{}]", httpServerTransportClass.getName(), source);
- this.httpServerTransportClass = httpServerTransport;
- }
-}
diff --git a/core/src/main/java/org/elasticsearch/node/Node.java b/core/src/main/java/org/elasticsearch/node/Node.java
index d3f6367cac0..c05e1969c23 100644
--- a/core/src/main/java/org/elasticsearch/node/Node.java
+++ b/core/src/main/java/org/elasticsearch/node/Node.java
@@ -23,7 +23,6 @@ import org.elasticsearch.Build;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.Version;
import org.elasticsearch.action.ActionModule;
-import org.elasticsearch.bootstrap.Elasticsearch;
import org.elasticsearch.cache.recycler.PageCacheRecycler;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.node.NodeClientModule;
@@ -33,7 +32,6 @@ import org.elasticsearch.cluster.ClusterService;
import org.elasticsearch.cluster.action.index.MappingUpdatedAction;
import org.elasticsearch.cluster.routing.RoutingService;
import org.elasticsearch.common.StopWatch;
-import org.elasticsearch.common.SuppressForbidden;
import org.elasticsearch.common.component.Lifecycle;
import org.elasticsearch.common.component.LifecycleComponent;
import org.elasticsearch.common.inject.Injector;
@@ -62,7 +60,6 @@ import org.elasticsearch.gateway.GatewayAllocator;
import org.elasticsearch.gateway.GatewayModule;
import org.elasticsearch.gateway.GatewayService;
import org.elasticsearch.http.HttpServer;
-import org.elasticsearch.http.HttpServerModule;
import org.elasticsearch.http.HttpServerTransport;
import org.elasticsearch.indices.IndicesModule;
import org.elasticsearch.indices.IndicesService;
@@ -86,7 +83,6 @@ import org.elasticsearch.plugins.PluginsModule;
import org.elasticsearch.plugins.PluginsService;
import org.elasticsearch.repositories.RepositoriesModule;
import org.elasticsearch.rest.RestController;
-import org.elasticsearch.rest.RestModule;
import org.elasticsearch.script.ScriptModule;
import org.elasticsearch.script.ScriptService;
import org.elasticsearch.search.SearchModule;
@@ -95,7 +91,6 @@ import org.elasticsearch.snapshots.SnapshotShardsService;
import org.elasticsearch.snapshots.SnapshotsService;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.threadpool.ThreadPoolModule;
-import org.elasticsearch.transport.TransportModule;
import org.elasticsearch.transport.TransportService;
import org.elasticsearch.tribe.TribeModule;
import org.elasticsearch.tribe.TribeService;
@@ -108,7 +103,6 @@ import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
-import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
@@ -185,20 +179,15 @@ public class Node implements Releasable {
}
modules.add(new PluginsModule(pluginsService));
modules.add(new SettingsModule(this.settings, settingsFilter));
- modules.add(new NodeModule(this, nodeSettingsService, monitorService));
- modules.add(new NetworkModule(networkService));
- modules.add(new ScriptModule(this.settings));
modules.add(new EnvironmentModule(environment));
+ modules.add(new NodeModule(this, nodeSettingsService, monitorService));
+ modules.add(new NetworkModule(networkService, settings, false));
+ modules.add(new ScriptModule(this.settings));
modules.add(new NodeEnvironmentModule(nodeEnvironment));
modules.add(new ClusterNameModule(this.settings));
modules.add(new ThreadPoolModule(threadPool));
modules.add(new DiscoveryModule(this.settings));
modules.add(new ClusterModule(this.settings));
- modules.add(new RestModule(this.settings));
- modules.add(new TransportModule(settings));
- if (settings.getAsBoolean(HTTP_ENABLED, true)) {
- modules.add(new HttpServerModule(settings));
- }
modules.add(new IndicesModule());
modules.add(new SearchModule());
modules.add(new ActionModule(false));
diff --git a/core/src/main/java/org/elasticsearch/rest/RestModule.java b/core/src/main/java/org/elasticsearch/rest/RestModule.java
deleted file mode 100644
index e7949172d0a..00000000000
--- a/core/src/main/java/org/elasticsearch/rest/RestModule.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.elasticsearch.rest;
-
-import org.elasticsearch.common.inject.AbstractModule;
-import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.rest.action.RestActionModule;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *
- */
-public class RestModule extends AbstractModule {
-
- private final Settings settings;
- private List> restPluginsActions = new ArrayList<>();
-
- public void addRestAction(Class extends BaseRestHandler> restAction) {
- restPluginsActions.add(restAction);
- }
-
- public RestModule(Settings settings) {
- this.settings = settings;
- }
-
-
- @Override
- protected void configure() {
- bind(RestController.class).asEagerSingleton();
- new RestActionModule(restPluginsActions).configure(binder());
- }
-}
diff --git a/core/src/main/java/org/elasticsearch/rest/action/RestActionModule.java b/core/src/main/java/org/elasticsearch/rest/action/RestActionModule.java
deleted file mode 100644
index f0e4d10d7c4..00000000000
--- a/core/src/main/java/org/elasticsearch/rest/action/RestActionModule.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.elasticsearch.rest.action;
-
-import org.elasticsearch.common.inject.AbstractModule;
-import org.elasticsearch.common.inject.multibindings.Multibinder;
-import org.elasticsearch.rest.BaseRestHandler;
-import org.elasticsearch.rest.action.admin.cluster.health.RestClusterHealthAction;
-import org.elasticsearch.rest.action.admin.cluster.node.hotthreads.RestNodesHotThreadsAction;
-import org.elasticsearch.rest.action.admin.cluster.node.info.RestNodesInfoAction;
-import org.elasticsearch.rest.action.admin.cluster.node.stats.RestNodesStatsAction;
-import org.elasticsearch.rest.action.admin.cluster.repositories.delete.RestDeleteRepositoryAction;
-import org.elasticsearch.rest.action.admin.cluster.repositories.get.RestGetRepositoriesAction;
-import org.elasticsearch.rest.action.admin.cluster.repositories.put.RestPutRepositoryAction;
-import org.elasticsearch.rest.action.admin.cluster.repositories.verify.RestVerifyRepositoryAction;
-import org.elasticsearch.rest.action.admin.cluster.reroute.RestClusterRerouteAction;
-import org.elasticsearch.rest.action.admin.cluster.settings.RestClusterGetSettingsAction;
-import org.elasticsearch.rest.action.admin.cluster.settings.RestClusterUpdateSettingsAction;
-import org.elasticsearch.rest.action.admin.cluster.shards.RestClusterSearchShardsAction;
-import org.elasticsearch.rest.action.admin.cluster.snapshots.create.RestCreateSnapshotAction;
-import org.elasticsearch.rest.action.admin.cluster.snapshots.delete.RestDeleteSnapshotAction;
-import org.elasticsearch.rest.action.admin.cluster.snapshots.get.RestGetSnapshotsAction;
-import org.elasticsearch.rest.action.admin.cluster.snapshots.restore.RestRestoreSnapshotAction;
-import org.elasticsearch.rest.action.admin.cluster.snapshots.status.RestSnapshotsStatusAction;
-import org.elasticsearch.rest.action.admin.cluster.state.RestClusterStateAction;
-import org.elasticsearch.rest.action.admin.cluster.stats.RestClusterStatsAction;
-import org.elasticsearch.rest.action.admin.cluster.tasks.RestPendingClusterTasksAction;
-import org.elasticsearch.rest.action.admin.indices.alias.RestIndicesAliasesAction;
-import org.elasticsearch.rest.action.admin.indices.alias.delete.RestIndexDeleteAliasesAction;
-import org.elasticsearch.rest.action.admin.indices.alias.get.RestGetAliasesAction;
-import org.elasticsearch.rest.action.admin.indices.alias.get.RestGetIndicesAliasesAction;
-import org.elasticsearch.rest.action.admin.indices.alias.head.RestAliasesExistAction;
-import org.elasticsearch.rest.action.admin.indices.alias.put.RestIndexPutAliasAction;
-import org.elasticsearch.rest.action.admin.indices.analyze.RestAnalyzeAction;
-import org.elasticsearch.rest.action.admin.indices.cache.clear.RestClearIndicesCacheAction;
-import org.elasticsearch.rest.action.admin.indices.close.RestCloseIndexAction;
-import org.elasticsearch.rest.action.admin.indices.create.RestCreateIndexAction;
-import org.elasticsearch.rest.action.admin.indices.delete.RestDeleteIndexAction;
-import org.elasticsearch.rest.action.admin.indices.exists.indices.RestIndicesExistsAction;
-import org.elasticsearch.rest.action.admin.indices.exists.types.RestTypesExistsAction;
-import org.elasticsearch.rest.action.admin.indices.flush.RestFlushAction;
-import org.elasticsearch.rest.action.admin.indices.flush.RestSyncedFlushAction;
-import org.elasticsearch.rest.action.admin.indices.forcemerge.RestForceMergeAction;
-import org.elasticsearch.rest.action.admin.indices.get.RestGetIndicesAction;
-import org.elasticsearch.rest.action.admin.indices.mapping.get.RestGetFieldMappingAction;
-import org.elasticsearch.rest.action.admin.indices.mapping.get.RestGetMappingAction;
-import org.elasticsearch.rest.action.admin.indices.mapping.put.RestPutMappingAction;
-import org.elasticsearch.rest.action.admin.indices.open.RestOpenIndexAction;
-import org.elasticsearch.rest.action.admin.indices.recovery.RestRecoveryAction;
-import org.elasticsearch.rest.action.admin.indices.refresh.RestRefreshAction;
-import org.elasticsearch.rest.action.admin.indices.segments.RestIndicesSegmentsAction;
-import org.elasticsearch.rest.action.admin.indices.settings.RestGetSettingsAction;
-import org.elasticsearch.rest.action.admin.indices.settings.RestUpdateSettingsAction;
-import org.elasticsearch.rest.action.admin.indices.shards.RestIndicesShardStoresAction;
-import org.elasticsearch.rest.action.admin.indices.stats.RestIndicesStatsAction;
-import org.elasticsearch.rest.action.admin.indices.template.delete.RestDeleteIndexTemplateAction;
-import org.elasticsearch.rest.action.admin.indices.template.get.RestGetIndexTemplateAction;
-import org.elasticsearch.rest.action.admin.indices.template.head.RestHeadIndexTemplateAction;
-import org.elasticsearch.rest.action.admin.indices.template.put.RestPutIndexTemplateAction;
-import org.elasticsearch.rest.action.admin.indices.upgrade.RestUpgradeAction;
-import org.elasticsearch.rest.action.admin.indices.validate.query.RestValidateQueryAction;
-import org.elasticsearch.rest.action.admin.indices.validate.template.RestRenderSearchTemplateAction;
-import org.elasticsearch.rest.action.admin.indices.warmer.delete.RestDeleteWarmerAction;
-import org.elasticsearch.rest.action.admin.indices.warmer.get.RestGetWarmerAction;
-import org.elasticsearch.rest.action.admin.indices.warmer.put.RestPutWarmerAction;
-import org.elasticsearch.rest.action.bulk.RestBulkAction;
-import org.elasticsearch.rest.action.cat.AbstractCatAction;
-import org.elasticsearch.rest.action.cat.RestAliasAction;
-import org.elasticsearch.rest.action.cat.RestAllocationAction;
-import org.elasticsearch.rest.action.cat.RestCatAction;
-import org.elasticsearch.rest.action.cat.RestFielddataAction;
-import org.elasticsearch.rest.action.cat.RestHealthAction;
-import org.elasticsearch.rest.action.cat.RestIndicesAction;
-import org.elasticsearch.rest.action.cat.RestMasterAction;
-import org.elasticsearch.rest.action.cat.RestNodeAttrsAction;
-import org.elasticsearch.rest.action.cat.RestNodesAction;
-import org.elasticsearch.rest.action.cat.RestPluginsAction;
-import org.elasticsearch.rest.action.cat.RestRepositoriesAction;
-import org.elasticsearch.rest.action.cat.RestSegmentsAction;
-import org.elasticsearch.rest.action.cat.RestShardsAction;
-import org.elasticsearch.rest.action.cat.RestSnapshotAction;
-import org.elasticsearch.rest.action.cat.RestThreadPoolAction;
-import org.elasticsearch.rest.action.delete.RestDeleteAction;
-import org.elasticsearch.rest.action.explain.RestExplainAction;
-import org.elasticsearch.rest.action.fieldstats.RestFieldStatsAction;
-import org.elasticsearch.rest.action.get.RestGetAction;
-import org.elasticsearch.rest.action.get.RestGetSourceAction;
-import org.elasticsearch.rest.action.get.RestHeadAction;
-import org.elasticsearch.rest.action.get.RestMultiGetAction;
-import org.elasticsearch.rest.action.index.RestIndexAction;
-import org.elasticsearch.rest.action.main.RestMainAction;
-import org.elasticsearch.rest.action.percolate.RestMultiPercolateAction;
-import org.elasticsearch.rest.action.percolate.RestPercolateAction;
-import org.elasticsearch.rest.action.script.RestDeleteIndexedScriptAction;
-import org.elasticsearch.rest.action.script.RestGetIndexedScriptAction;
-import org.elasticsearch.rest.action.script.RestPutIndexedScriptAction;
-import org.elasticsearch.rest.action.search.RestClearScrollAction;
-import org.elasticsearch.rest.action.search.RestMultiSearchAction;
-import org.elasticsearch.rest.action.search.RestSearchAction;
-import org.elasticsearch.rest.action.search.RestSearchScrollAction;
-import org.elasticsearch.rest.action.suggest.RestSuggestAction;
-import org.elasticsearch.rest.action.template.RestDeleteSearchTemplateAction;
-import org.elasticsearch.rest.action.template.RestGetSearchTemplateAction;
-import org.elasticsearch.rest.action.template.RestPutSearchTemplateAction;
-import org.elasticsearch.rest.action.termvectors.RestMultiTermVectorsAction;
-import org.elasticsearch.rest.action.termvectors.RestTermVectorsAction;
-import org.elasticsearch.rest.action.update.RestUpdateAction;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- *
- */
-public class RestActionModule extends AbstractModule {
- private List> restPluginsActions = new ArrayList<>();
-
- public RestActionModule(List> restPluginsActions) {
- this.restPluginsActions = restPluginsActions;
- }
-
- @Override
- protected void configure() {
- for (Class extends BaseRestHandler> restAction : restPluginsActions) {
- bind(restAction).asEagerSingleton();
- }
-
- bind(RestMainAction.class).asEagerSingleton();
-
- bind(RestNodesInfoAction.class).asEagerSingleton();
- bind(RestNodesStatsAction.class).asEagerSingleton();
- bind(RestNodesHotThreadsAction.class).asEagerSingleton();
- bind(RestClusterStatsAction.class).asEagerSingleton();
- bind(RestClusterStateAction.class).asEagerSingleton();
- bind(RestClusterHealthAction.class).asEagerSingleton();
- bind(RestClusterUpdateSettingsAction.class).asEagerSingleton();
- bind(RestClusterGetSettingsAction.class).asEagerSingleton();
- bind(RestClusterRerouteAction.class).asEagerSingleton();
- bind(RestClusterSearchShardsAction.class).asEagerSingleton();
- bind(RestPendingClusterTasksAction.class).asEagerSingleton();
- bind(RestPutRepositoryAction.class).asEagerSingleton();
- bind(RestGetRepositoriesAction.class).asEagerSingleton();
- bind(RestDeleteRepositoryAction.class).asEagerSingleton();
- bind(RestVerifyRepositoryAction.class).asEagerSingleton();
- bind(RestGetSnapshotsAction.class).asEagerSingleton();
- bind(RestCreateSnapshotAction.class).asEagerSingleton();
- bind(RestRestoreSnapshotAction.class).asEagerSingleton();
- bind(RestDeleteSnapshotAction.class).asEagerSingleton();
- bind(RestSnapshotsStatusAction.class).asEagerSingleton();
-
- bind(RestIndicesExistsAction.class).asEagerSingleton();
- bind(RestTypesExistsAction.class).asEagerSingleton();
- bind(RestGetIndicesAction.class).asEagerSingleton();
- bind(RestIndicesStatsAction.class).asEagerSingleton();
- bind(RestIndicesSegmentsAction.class).asEagerSingleton();
- bind(RestIndicesShardStoresAction.class).asEagerSingleton();
- bind(RestGetAliasesAction.class).asEagerSingleton();
- bind(RestAliasesExistAction.class).asEagerSingleton();
- bind(RestIndexDeleteAliasesAction.class).asEagerSingleton();
- bind(RestIndexPutAliasAction.class).asEagerSingleton();
- bind(RestIndicesAliasesAction.class).asEagerSingleton();
- bind(RestGetIndicesAliasesAction.class).asEagerSingleton();
- bind(RestCreateIndexAction.class).asEagerSingleton();
- bind(RestDeleteIndexAction.class).asEagerSingleton();
- bind(RestCloseIndexAction.class).asEagerSingleton();
- bind(RestOpenIndexAction.class).asEagerSingleton();
-
- bind(RestUpdateSettingsAction.class).asEagerSingleton();
- bind(RestGetSettingsAction.class).asEagerSingleton();
-
- bind(RestAnalyzeAction.class).asEagerSingleton();
- bind(RestGetIndexTemplateAction.class).asEagerSingleton();
- bind(RestPutIndexTemplateAction.class).asEagerSingleton();
- bind(RestDeleteIndexTemplateAction.class).asEagerSingleton();
- bind(RestHeadIndexTemplateAction.class).asEagerSingleton();
-
- bind(RestPutWarmerAction.class).asEagerSingleton();
- bind(RestDeleteWarmerAction.class).asEagerSingleton();
- bind(RestGetWarmerAction.class).asEagerSingleton();
-
- bind(RestPutMappingAction.class).asEagerSingleton();
- bind(RestGetMappingAction.class).asEagerSingleton();
- bind(RestGetFieldMappingAction.class).asEagerSingleton();
-
- bind(RestRefreshAction.class).asEagerSingleton();
- bind(RestFlushAction.class).asEagerSingleton();
- bind(RestSyncedFlushAction.class).asEagerSingleton();
- bind(RestForceMergeAction.class).asEagerSingleton();
- bind(RestUpgradeAction.class).asEagerSingleton();
- bind(RestClearIndicesCacheAction.class).asEagerSingleton();
-
- bind(RestIndexAction.class).asEagerSingleton();
- bind(RestGetAction.class).asEagerSingleton();
- bind(RestGetSourceAction.class).asEagerSingleton();
- bind(RestHeadAction.class).asEagerSingleton();
- bind(RestMultiGetAction.class).asEagerSingleton();
- bind(RestDeleteAction.class).asEagerSingleton();
- bind(org.elasticsearch.rest.action.count.RestCountAction.class).asEagerSingleton();
- bind(RestSuggestAction.class).asEagerSingleton();
- bind(RestTermVectorsAction.class).asEagerSingleton();
- bind(RestMultiTermVectorsAction.class).asEagerSingleton();
- bind(RestBulkAction.class).asEagerSingleton();
- bind(RestUpdateAction.class).asEagerSingleton();
- bind(RestPercolateAction.class).asEagerSingleton();
- bind(RestMultiPercolateAction.class).asEagerSingleton();
-
- bind(RestSearchAction.class).asEagerSingleton();
- bind(RestSearchScrollAction.class).asEagerSingleton();
- bind(RestClearScrollAction.class).asEagerSingleton();
- bind(RestMultiSearchAction.class).asEagerSingleton();
- bind(RestRenderSearchTemplateAction.class).asEagerSingleton();
-
- bind(RestValidateQueryAction.class).asEagerSingleton();
-
- bind(RestExplainAction.class).asEagerSingleton();
-
- bind(RestRecoveryAction.class).asEagerSingleton();
-
- // Templates API
- bind(RestGetSearchTemplateAction.class).asEagerSingleton();
- bind(RestPutSearchTemplateAction.class).asEagerSingleton();
- bind(RestDeleteSearchTemplateAction.class).asEagerSingleton();
-
- // Scripts API
- bind(RestGetIndexedScriptAction.class).asEagerSingleton();
- bind(RestPutIndexedScriptAction.class).asEagerSingleton();
- bind(RestDeleteIndexedScriptAction.class).asEagerSingleton();
-
-
- bind(RestFieldStatsAction.class).asEagerSingleton();
-
- // cat API
- Multibinder catActionMultibinder = Multibinder.newSetBinder(binder(), AbstractCatAction.class);
- catActionMultibinder.addBinding().to(RestAllocationAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestShardsAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestMasterAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestNodesAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestIndicesAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestSegmentsAction.class).asEagerSingleton();
- // Fully qualified to prevent interference with rest.action.count.RestCountAction
- catActionMultibinder.addBinding().to(org.elasticsearch.rest.action.cat.RestCountAction.class).asEagerSingleton();
- // Fully qualified to prevent interference with rest.action.indices.RestRecoveryAction
- catActionMultibinder.addBinding().to(org.elasticsearch.rest.action.cat.RestRecoveryAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestHealthAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(org.elasticsearch.rest.action.cat.RestPendingClusterTasksAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestAliasAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestThreadPoolAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestPluginsAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestFielddataAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestNodeAttrsAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestRepositoriesAction.class).asEagerSingleton();
- catActionMultibinder.addBinding().to(RestSnapshotAction.class).asEagerSingleton();
- // no abstract cat action
- bind(RestCatAction.class).asEagerSingleton();
- }
-}
diff --git a/core/src/main/java/org/elasticsearch/transport/TransportModule.java b/core/src/main/java/org/elasticsearch/transport/TransportModule.java
deleted file mode 100644
index abf90deee81..00000000000
--- a/core/src/main/java/org/elasticsearch/transport/TransportModule.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.elasticsearch.transport;
-
-import org.elasticsearch.cluster.node.DiscoveryNode;
-import org.elasticsearch.common.inject.AbstractModule;
-import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
-import org.elasticsearch.common.logging.ESLogger;
-import org.elasticsearch.common.logging.Loggers;
-import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.transport.local.LocalTransport;
-import org.elasticsearch.transport.netty.NettyTransport;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- *
- */
-public class TransportModule extends AbstractModule {
-
- public static final String TRANSPORT_TYPE_KEY = "transport.type";
- public static final String TRANSPORT_SERVICE_TYPE_KEY = "transport.service.type";
-
- public static final String LOCAL_TRANSPORT = "local";
- public static final String NETTY_TRANSPORT = "netty";
-
- private final ESLogger logger;
- private final Settings settings;
-
- private final Map> transportServices = new HashMap<>();
- private final Map> transports = new HashMap<>();
- private Class extends TransportService> configuredTransportService;
- private Class extends Transport> configuredTransport;
- private String configuredTransportServiceSource;
- private String configuredTransportSource;
-
- public TransportModule(Settings settings) {
- this.settings = settings;
- this.logger = Loggers.getLogger(getClass(), settings);
- addTransport(LOCAL_TRANSPORT, LocalTransport.class);
- addTransport(NETTY_TRANSPORT, NettyTransport.class);
- }
-
- public void addTransportService(String name, Class extends TransportService> clazz) {
- Class extends TransportService> oldClazz = transportServices.put(name, clazz);
- if (oldClazz != null) {
- throw new IllegalArgumentException("Cannot register TransportService [" + name + "] to " + clazz.getName() + ", already registered to " + oldClazz.getName());
- }
- }
-
- public void addTransport(String name, Class extends Transport> clazz) {
- Class extends Transport> oldClazz = transports.put(name, clazz);
- if (oldClazz != null) {
- throw new IllegalArgumentException("Cannot register Transport [" + name + "] to " + clazz.getName() + ", already registered to " + oldClazz.getName());
- }
- }
-
- @Override
- protected void configure() {
- if (configuredTransportService != null) {
- logger.info("Using [{}] as transport service, overridden by [{}]", configuredTransportService.getName(), configuredTransportServiceSource);
- bind(TransportService.class).to(configuredTransportService).asEagerSingleton();
- } else {
- String typeName = settings.get(TRANSPORT_SERVICE_TYPE_KEY);
- if (typeName == null) {
- bind(TransportService.class).asEagerSingleton();
- } else {
- if (transportServices.containsKey(typeName) == false) {
- throw new IllegalArgumentException("Unknown TransportService type [" + typeName + "], known types are: " + transportServices.keySet());
- }
- bind(TransportService.class).to(transportServices.get(typeName)).asEagerSingleton();
- }
- }
-
- bind(NamedWriteableRegistry.class).asEagerSingleton();
- if (configuredTransport != null) {
- logger.info("Using [{}] as transport, overridden by [{}]", configuredTransport.getName(), configuredTransportSource);
- bind(Transport.class).to(configuredTransport).asEagerSingleton();
- } else {
- String defaultType = DiscoveryNode.localNode(settings) ? LOCAL_TRANSPORT : NETTY_TRANSPORT;
- String typeName = settings.get(TRANSPORT_TYPE_KEY, defaultType);
- Class extends Transport> clazz = transports.get(typeName);
- if (clazz == null) {
- throw new IllegalArgumentException("Unknown Transport [" + typeName + "]");
- }
- bind(Transport.class).to(clazz).asEagerSingleton();
- }
- }
-
- public void setTransportService(Class extends TransportService> transportService, String source) {
- Objects.requireNonNull(transportService, "Configured transport service may not be null");
- Objects.requireNonNull(source, "Plugin, that changes transport service may not be null");
- this.configuredTransportService = transportService;
- this.configuredTransportServiceSource = source;
- }
-
- public void setTransport(Class extends Transport> transport, String source) {
- Objects.requireNonNull(transport, "Configured transport may not be null");
- Objects.requireNonNull(source, "Plugin, that changes transport may not be null");
- this.configuredTransport = transport;
- this.configuredTransportSource = source;
- }
-}
\ No newline at end of file
diff --git a/core/src/test/java/org/elasticsearch/client/transport/TransportClientHeadersTests.java b/core/src/test/java/org/elasticsearch/client/transport/TransportClientHeadersTests.java
index f4b29768b91..f452bb5c36c 100644
--- a/core/src/test/java/org/elasticsearch/client/transport/TransportClientHeadersTests.java
+++ b/core/src/test/java/org/elasticsearch/client/transport/TransportClientHeadersTests.java
@@ -32,6 +32,7 @@ import org.elasticsearch.cluster.ClusterState;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.cluster.node.DiscoveryNodes;
import org.elasticsearch.common.inject.Inject;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.LocalTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
@@ -40,7 +41,6 @@ import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.ConnectTransportException;
import org.elasticsearch.transport.Transport;
import org.elasticsearch.transport.TransportException;
-import org.elasticsearch.transport.TransportModule;
import org.elasticsearch.transport.TransportRequest;
import org.elasticsearch.transport.TransportRequestOptions;
import org.elasticsearch.transport.TransportResponse;
@@ -114,12 +114,12 @@ public class TransportClientHeadersTests extends AbstractClientHeadersTestCase {
public String description() {
return "a mock transport service";
}
- public void onModule(TransportModule transportModule) {
- transportModule.addTransportService("internal", InternalTransportService.class);
+ public void onModule(NetworkModule transportModule) {
+ transportModule.registerTransportService("internal", InternalTransportService.class);
}
@Override
public Settings additionalSettings() {
- return Settings.builder().put(TransportModule.TRANSPORT_SERVICE_TYPE_KEY, "internal").build();
+ return Settings.builder().put(NetworkModule.TRANSPORT_SERVICE_TYPE_KEY, "internal").build();
}
}
diff --git a/core/src/test/java/org/elasticsearch/common/inject/ModuleTestCase.java b/core/src/test/java/org/elasticsearch/common/inject/ModuleTestCase.java
index 7901694bd4b..7d696b0cd81 100644
--- a/core/src/test/java/org/elasticsearch/common/inject/ModuleTestCase.java
+++ b/core/src/test/java/org/elasticsearch/common/inject/ModuleTestCase.java
@@ -60,6 +60,24 @@ public abstract class ModuleTestCase extends ESTestCase {
fail("Did not find any binding to " + to.getName() + ". Found these bindings:\n" + s);
}
+ /** Configures the module and asserts "clazz" is not bound to anything. */
+ public void assertNotBound(Module module, Class clazz) {
+ List elements = Elements.getElements(module);
+ for (Element element : elements) {
+ if (element instanceof LinkedKeyBinding) {
+ LinkedKeyBinding binding = (LinkedKeyBinding) element;
+ if (clazz.equals(binding.getKey().getTypeLiteral().getType())) {
+ fail("Found binding for " + clazz.getName() + " to " + binding.getKey().getTypeLiteral().getType().getTypeName());
+ }
+ } else if (element instanceof UntargettedBinding) {
+ UntargettedBinding binding = (UntargettedBinding) element;
+ if (clazz.equals(binding.getKey().getTypeLiteral().getType())) {
+ fail("Found binding for " + clazz.getName());
+ }
+ }
+ }
+ }
+
/**
* Attempts to configure the module, and asserts an {@link IllegalArgumentException} is
* caught, containing the given messages
diff --git a/core/src/test/java/org/elasticsearch/common/network/NetworkModuleTests.java b/core/src/test/java/org/elasticsearch/common/network/NetworkModuleTests.java
new file mode 100644
index 00000000000..798e82a979e
--- /dev/null
+++ b/core/src/test/java/org/elasticsearch/common/network/NetworkModuleTests.java
@@ -0,0 +1,176 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.elasticsearch.common.network;
+
+import org.elasticsearch.client.Client;
+import org.elasticsearch.common.Table;
+import org.elasticsearch.common.component.AbstractLifecycleComponent;
+import org.elasticsearch.common.inject.ModuleTestCase;
+import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.transport.BoundTransportAddress;
+import org.elasticsearch.http.HttpInfo;
+import org.elasticsearch.http.HttpServerAdapter;
+import org.elasticsearch.http.HttpServerTransport;
+import org.elasticsearch.http.HttpStats;
+import org.elasticsearch.rest.BaseRestHandler;
+import org.elasticsearch.rest.RestChannel;
+import org.elasticsearch.rest.RestHandler;
+import org.elasticsearch.rest.RestRequest;
+import org.elasticsearch.rest.action.cat.AbstractCatAction;
+import org.elasticsearch.rest.action.cat.RestNodesAction;
+import org.elasticsearch.rest.action.main.RestMainAction;
+import org.elasticsearch.test.transport.AssertingLocalTransport;
+import org.elasticsearch.transport.Transport;
+import org.elasticsearch.transport.TransportService;
+
+public class NetworkModuleTests extends ModuleTestCase {
+
+ static class FakeTransportService extends TransportService {
+ public FakeTransportService() {
+ super(null, null);
+ }
+ }
+
+ static class FakeTransport extends AssertingLocalTransport {
+ public FakeTransport() {
+ super(null, null, null, null);
+ }
+ }
+
+ static class FakeHttpTransport extends AbstractLifecycleComponent implements HttpServerTransport {
+ public FakeHttpTransport() {
+ super(null);
+ }
+ @Override
+ protected void doStart() {}
+ @Override
+ protected void doStop() {}
+ @Override
+ protected void doClose() {}
+ @Override
+ public BoundTransportAddress boundAddress() {
+ return null;
+ }
+ @Override
+ public HttpInfo info() {
+ return null;
+ }
+ @Override
+ public HttpStats stats() {
+ return null;
+ }
+ @Override
+ public void httpServerAdapter(HttpServerAdapter httpServerAdapter) {}
+ }
+
+ static class FakeRestHandler extends BaseRestHandler {
+ public FakeRestHandler() {
+ super(null, null, null);
+ }
+ @Override
+ protected void handleRequest(RestRequest request, RestChannel channel, Client client) throws Exception {}
+ }
+
+ static class FakeCatRestHandler extends AbstractCatAction {
+ public FakeCatRestHandler() {
+ super(null, null, null);
+ }
+ @Override
+ protected void doRequest(RestRequest request, RestChannel channel, Client client) {}
+ @Override
+ protected void documentation(StringBuilder sb) {}
+ @Override
+ protected Table getTableWithHeader(RestRequest request) {
+ return null;
+ }
+ }
+
+ public void testRegisterTransportService() {
+ Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_SERVICE_TYPE_KEY, "custom").build();
+ NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
+ module.registerTransportService("custom", FakeTransportService.class);
+ assertBinding(module, TransportService.class, FakeTransportService.class);
+
+ // check it works with transport only as well
+ module = new NetworkModule(new NetworkService(settings), settings, true);
+ module.registerTransportService("custom", FakeTransportService.class);
+ assertBinding(module, TransportService.class, FakeTransportService.class);
+ }
+
+ public void testRegisterTransport() {
+ Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_TYPE_KEY, "custom").build();
+ NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
+ module.registerTransport("custom", FakeTransport.class);
+ assertBinding(module, Transport.class, FakeTransport.class);
+
+ // check it works with transport only as well
+ module = new NetworkModule(new NetworkService(settings), settings, true);
+ module.registerTransport("custom", FakeTransport.class);
+ assertBinding(module, Transport.class, FakeTransport.class);
+ }
+
+ public void testRegisterHttpTransport() {
+ Settings settings = Settings.builder().put(NetworkModule.HTTP_TYPE_KEY, "custom").build();
+ NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
+ module.registerHttpTransport("custom", FakeHttpTransport.class);
+ assertBinding(module, HttpServerTransport.class, FakeHttpTransport.class);
+
+ // check registration not allowed for transport only
+ module = new NetworkModule(new NetworkService(settings), settings, true);
+ try {
+ module.registerHttpTransport("custom", FakeHttpTransport.class);
+ fail();
+ } catch (IllegalArgumentException e) {
+ assertTrue(e.getMessage().contains("Cannot register http transport"));
+ assertTrue(e.getMessage().contains("for transport client"));
+ }
+
+ // not added if http is disabled
+ settings = Settings.builder().put(NetworkModule.HTTP_ENABLED, false).build();
+ module = new NetworkModule(new NetworkService(settings), settings, false);
+ assertNotBound(module, HttpServerTransport.class);
+ }
+
+ public void testRegisterRestHandler() {
+ Settings settings = Settings.EMPTY;
+ NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
+ module.registerRestHandler(FakeRestHandler.class);
+ // also check a builtin is bound
+ assertSetMultiBinding(module, RestHandler.class, FakeRestHandler.class, RestMainAction.class);
+
+ // check registration not allowed for transport only
+ module = new NetworkModule(new NetworkService(settings), settings, true);
+ try {
+ module.registerRestHandler(FakeRestHandler.class);
+ fail();
+ } catch (IllegalArgumentException e) {
+ assertTrue(e.getMessage().contains("Cannot register rest handler"));
+ assertTrue(e.getMessage().contains("for transport client"));
+ }
+ }
+
+ public void testRegisterCatRestHandler() {
+ Settings settings = Settings.EMPTY;
+ NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
+ module.registerRestHandler(FakeCatRestHandler.class);
+ // also check a builtin is bound
+ assertSetMultiBinding(module, AbstractCatAction.class, FakeCatRestHandler.class, RestNodesAction.class);
+ }
+}
diff --git a/core/src/test/java/org/elasticsearch/plugins/PluggableTransportModuleIT.java b/core/src/test/java/org/elasticsearch/plugins/PluggableTransportModuleIT.java
deleted file mode 100644
index 7831b7ca994..00000000000
--- a/core/src/test/java/org/elasticsearch/plugins/PluggableTransportModuleIT.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to Elasticsearch under one or more contributor
- * license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright
- * ownership. Elasticsearch licenses this file to you under
- * the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.elasticsearch.plugins;
-
-import org.elasticsearch.Version;
-import org.elasticsearch.cluster.node.DiscoveryNode;
-import org.elasticsearch.common.inject.Inject;
-import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
-import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.discovery.DiscoveryModule;
-import org.elasticsearch.test.ESIntegTestCase;
-import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
-import org.elasticsearch.test.ESIntegTestCase.Scope;
-import org.elasticsearch.test.transport.AssertingLocalTransport;
-import org.elasticsearch.threadpool.ThreadPool;
-import org.elasticsearch.transport.Transport;
-import org.elasticsearch.transport.TransportException;
-import org.elasticsearch.transport.TransportModule;
-import org.elasticsearch.transport.TransportRequest;
-import org.elasticsearch.transport.TransportRequestOptions;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import static org.elasticsearch.common.settings.Settings.settingsBuilder;
-import static org.hamcrest.Matchers.greaterThan;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-
-/**
- *
- */
-@ClusterScope(scope = Scope.SUITE, numDataNodes = 2)
-public class PluggableTransportModuleIT extends ESIntegTestCase {
- public static final AtomicInteger SENT_REQUEST_COUNTER = new AtomicInteger(0);
-
- @Override
- protected Settings nodeSettings(int nodeOrdinal) {
- return settingsBuilder()
- .put(super.nodeSettings(nodeOrdinal))
- .put(DiscoveryModule.DISCOVERY_TYPE_KEY, "local")
- .build();
- }
-
- @Override
- protected Collection> nodePlugins() {
- return pluginList(CountingSentRequestsPlugin.class);
- }
-
- @Override
- protected Collection> transportClientPlugins() {
- return pluginList(CountingSentRequestsPlugin.class);
- }
-
- public void testThatPluginFunctionalityIsLoadedWithoutConfiguration() throws Exception {
- for (Transport transport : internalCluster().getInstances(Transport.class)) {
- assertThat(transport, instanceOf(CountingAssertingLocalTransport.class));
- }
-
- int countBeforeRequest = SENT_REQUEST_COUNTER.get();
- internalCluster().clientNodeClient().admin().cluster().prepareHealth().get();
- int countAfterRequest = SENT_REQUEST_COUNTER.get();
- assertThat("Expected send request counter to be greather than zero", countAfterRequest, is(greaterThan(countBeforeRequest)));
- }
-
- public static class CountingSentRequestsPlugin extends Plugin {
- @Override
- public String name() {
- return "counting-pipelines-plugin";
- }
-
- @Override
- public String description() {
- return "counting-pipelines-plugin";
- }
-
- public void onModule(TransportModule transportModule) {
- transportModule.setTransport(CountingAssertingLocalTransport.class, this.name());
- }
- }
-
- public static final class CountingAssertingLocalTransport extends AssertingLocalTransport {
-
- @Inject
- public CountingAssertingLocalTransport(Settings settings, ThreadPool threadPool, Version version, NamedWriteableRegistry namedWriteableRegistry) {
- super(settings, threadPool, version, namedWriteableRegistry);
- }
-
- @Override
- public void sendRequest(final DiscoveryNode node, final long requestId, final String action, final TransportRequest request, TransportRequestOptions options) throws IOException, TransportException {
- SENT_REQUEST_COUNTER.incrementAndGet();
- super.sendRequest(node, requestId, action, request, options);
- }
- }
-}
diff --git a/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderPlugin.java b/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderPlugin.java
index b9282cf05ad..a16f318140f 100644
--- a/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderPlugin.java
+++ b/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderPlugin.java
@@ -19,8 +19,8 @@
package org.elasticsearch.plugins.responseheader;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.plugins.Plugin;
-import org.elasticsearch.rest.RestModule;
public class TestResponseHeaderPlugin extends Plugin {
@@ -34,7 +34,7 @@ public class TestResponseHeaderPlugin extends Plugin {
return "test-plugin-custom-header-desc";
}
- public void onModule(RestModule restModule) {
- restModule.addRestAction(TestResponseHeaderRestAction.class);
+ public void onModule(NetworkModule module) {
+ module.registerRestHandler(TestResponseHeaderRestAction.class);
}
}
diff --git a/core/src/test/java/org/elasticsearch/transport/TransportModuleTests.java b/core/src/test/java/org/elasticsearch/transport/TransportModuleTests.java
new file mode 100644
index 00000000000..d587ab05e45
--- /dev/null
+++ b/core/src/test/java/org/elasticsearch/transport/TransportModuleTests.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to Elasticsearch under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Elasticsearch licenses this file to you under
+ * the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.elasticsearch.transport;
+
+import org.elasticsearch.Version;
+import org.elasticsearch.common.inject.Inject;
+import org.elasticsearch.common.inject.ModuleTestCase;
+import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
+import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.test.transport.AssertingLocalTransport;
+import org.elasticsearch.threadpool.ThreadPool;
+
+/** Unit tests for module registering custom transport and transport service */
+public class TransportModuleTests extends ModuleTestCase {
+
+
+
+ static class FakeTransport extends AssertingLocalTransport {
+ @Inject
+ public FakeTransport(Settings settings, ThreadPool threadPool, Version version, NamedWriteableRegistry namedWriteableRegistry) {
+ super(settings, threadPool, version, namedWriteableRegistry);
+ }
+ }
+
+ static class FakeTransportService extends TransportService {
+ @Inject
+ public FakeTransportService(Settings settings, Transport transport, ThreadPool threadPool) {
+ super(settings, transport, threadPool);
+ }
+ }
+}
diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java b/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java
index c84a9eb9a55..78caef498d1 100644
--- a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java
+++ b/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java
@@ -21,13 +21,14 @@ package org.elasticsearch.transport.netty;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.Version;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
-import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.client.Client;
+import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.common.component.Lifecycle;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.logging.ESLogger;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.network.NetworkService;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
@@ -40,7 +41,6 @@ import org.elasticsearch.test.ESIntegTestCase.Scope;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.ActionNotFoundTransportException;
import org.elasticsearch.transport.RequestHandlerRegistry;
-import org.elasticsearch.transport.TransportModule;
import org.elasticsearch.transport.TransportRequest;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelPipeline;
@@ -66,7 +66,7 @@ public class NettyTransportIT extends ESIntegTestCase {
protected Settings nodeSettings(int nodeOrdinal) {
return settingsBuilder().put(super.nodeSettings(nodeOrdinal))
.put("node.mode", "network")
- .put(TransportModule.TRANSPORT_TYPE_KEY, "exception-throwing").build();
+ .put(NetworkModule.TRANSPORT_TYPE_KEY, "exception-throwing").build();
}
@Override
@@ -99,8 +99,8 @@ public class NettyTransportIT extends ESIntegTestCase {
public String description() {
return "an exception throwing transport for testing";
}
- public void onModule(TransportModule transportModule) {
- transportModule.addTransport("exception-throwing", ExceptionThrowingNettyTransport.class);
+ public void onModule(NetworkModule module) {
+ module.registerTransport("exception-throwing", ExceptionThrowingNettyTransport.class);
}
}
diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java b/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java
index 59ef26c42af..ee49012291d 100644
--- a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java
+++ b/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java
@@ -19,11 +19,12 @@
package org.elasticsearch.transport.netty;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
-import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.action.admin.cluster.node.info.NodeInfo;
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
import org.elasticsearch.client.transport.TransportClient;
+import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.common.network.NetworkAddress;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
@@ -31,7 +32,6 @@ import org.elasticsearch.test.ESIntegTestCase;
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
import org.elasticsearch.test.ESIntegTestCase.Scope;
import org.elasticsearch.test.junit.annotations.Network;
-import org.elasticsearch.transport.TransportModule;
import java.net.InetAddress;
import java.util.Locale;
@@ -60,7 +60,7 @@ public class NettyTransportMultiPortIntegrationIT extends ESIntegTestCase {
Settings.Builder builder = settingsBuilder()
.put(super.nodeSettings(nodeOrdinal))
.put("network.host", "127.0.0.1")
- .put(TransportModule.TRANSPORT_TYPE_KEY, "netty")
+ .put(NetworkModule.TRANSPORT_TYPE_KEY, "netty")
.put("node.mode", "network")
.put("transport.profiles.client1.port", randomPortRange)
.put("transport.profiles.client1.publish_host", "127.0.0.7")
@@ -72,7 +72,7 @@ public class NettyTransportMultiPortIntegrationIT extends ESIntegTestCase {
public void testThatTransportClientCanConnect() throws Exception {
Settings settings = settingsBuilder()
.put("cluster.name", internalCluster().getClusterName())
- .put(TransportModule.TRANSPORT_TYPE_KEY, "netty")
+ .put(NetworkModule.TRANSPORT_TYPE_KEY, "netty")
.put("path.home", createTempDir().toString())
.build();
try (TransportClient transportClient = TransportClient.builder().settings(settings).build()) {
diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java b/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java
index 3437701f6c9..ea67ce32717 100644
--- a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java
+++ b/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java
@@ -21,22 +21,19 @@ package org.elasticsearch.transport.netty;
import org.elasticsearch.action.admin.cluster.node.info.NodeInfo;
import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.network.NetworkUtils;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.BoundTransportAddress;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.test.ESIntegTestCase;
-import org.elasticsearch.transport.TransportModule;
import java.net.Inet4Address;
-import java.net.Inet6Address;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThan;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.not;
/**
* Checks that Elasticsearch produces a sane publish_address when it binds to
@@ -48,7 +45,7 @@ public class NettyTransportPublishAddressIT extends ESIntegTestCase {
protected Settings nodeSettings(int nodeOrdinal) {
return Settings.builder()
.put(super.nodeSettings(nodeOrdinal))
- .put(TransportModule.TRANSPORT_TYPE_KEY, "netty")
+ .put(NetworkModule.TRANSPORT_TYPE_KEY, "netty")
.put("node.mode", "network").build();
}
diff --git a/modules/lang-groovy/src/test/java/org/elasticsearch/messy/tests/IndicesRequestTests.java b/modules/lang-groovy/src/test/java/org/elasticsearch/messy/tests/IndicesRequestTests.java
index 66a764dd75a..516514599ae 100644
--- a/modules/lang-groovy/src/test/java/org/elasticsearch/messy/tests/IndicesRequestTests.java
+++ b/modules/lang-groovy/src/test/java/org/elasticsearch/messy/tests/IndicesRequestTests.java
@@ -85,6 +85,7 @@ import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
import org.elasticsearch.common.inject.Inject;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.plugins.Plugin;
@@ -95,16 +96,32 @@ import org.elasticsearch.test.ESIntegTestCase;
import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
import org.elasticsearch.test.ESIntegTestCase.Scope;
import org.elasticsearch.threadpool.ThreadPool;
-import org.elasticsearch.transport.*;
+import org.elasticsearch.transport.Transport;
+import org.elasticsearch.transport.TransportChannel;
+import org.elasticsearch.transport.TransportRequest;
+import org.elasticsearch.transport.TransportRequestHandler;
+import org.elasticsearch.transport.TransportService;
import org.junit.After;
import org.junit.Before;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import java.util.function.Supplier;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertNoFailures;
-import static org.hamcrest.Matchers.*;
+import static org.hamcrest.Matchers.emptyIterable;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.instanceOf;
@ClusterScope(scope = Scope.SUITE, numClientNodes = 1, minNumDataNodes = 2)
public class IndicesRequestTests extends ESIntegTestCase {
@@ -127,7 +144,7 @@ public class IndicesRequestTests extends ESIntegTestCase {
protected Settings nodeSettings(int ordinal) {
// must set this independently of the plugin so it overrides MockTransportService
return Settings.builder().put(super.nodeSettings(ordinal))
- .put(TransportModule.TRANSPORT_SERVICE_TYPE_KEY, "intercepting").build();
+ .put(NetworkModule.TRANSPORT_SERVICE_TYPE_KEY, "intercepting").build();
}
@Override
@@ -756,8 +773,8 @@ public class IndicesRequestTests extends ESIntegTestCase {
public String description() {
return "an intercepting transport service for testing";
}
- public void onModule(TransportModule transportModule) {
- transportModule.addTransportService("intercepting", InterceptingTransportService.class);
+ public void onModule(NetworkModule module) {
+ module.registerTransportService("intercepting", InterceptingTransportService.class);
}
}
diff --git a/plugins/delete-by-query/src/main/java/org/elasticsearch/plugin/deletebyquery/DeleteByQueryPlugin.java b/plugins/delete-by-query/src/main/java/org/elasticsearch/plugin/deletebyquery/DeleteByQueryPlugin.java
index b189745408f..8395223f669 100644
--- a/plugins/delete-by-query/src/main/java/org/elasticsearch/plugin/deletebyquery/DeleteByQueryPlugin.java
+++ b/plugins/delete-by-query/src/main/java/org/elasticsearch/plugin/deletebyquery/DeleteByQueryPlugin.java
@@ -22,14 +22,10 @@ package org.elasticsearch.plugin.deletebyquery;
import org.elasticsearch.action.ActionModule;
import org.elasticsearch.action.deletebyquery.DeleteByQueryAction;
import org.elasticsearch.action.deletebyquery.TransportDeleteByQueryAction;
-import org.elasticsearch.common.inject.Module;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.plugins.Plugin;
-import org.elasticsearch.rest.RestModule;
import org.elasticsearch.rest.action.deletebyquery.RestDeleteByQueryAction;
-import java.util.Collection;
-import java.util.Collections;
-
public class DeleteByQueryPlugin extends Plugin {
public static final String NAME = "delete-by-query";
@@ -48,8 +44,8 @@ public class DeleteByQueryPlugin extends Plugin {
actionModule.registerAction(DeleteByQueryAction.INSTANCE, TransportDeleteByQueryAction.class);
}
- public void onModule(RestModule restModule) {
- restModule.addRestAction(RestDeleteByQueryAction.class);
+ public void onModule(NetworkModule module) {
+ module.registerRestHandler(RestDeleteByQueryAction.class);
}
}
diff --git a/test-framework/src/main/java/org/elasticsearch/test/ESBackcompatTestCase.java b/test-framework/src/main/java/org/elasticsearch/test/ESBackcompatTestCase.java
index 3e5c903a1ba..ade424599fe 100644
--- a/test-framework/src/main/java/org/elasticsearch/test/ESBackcompatTestCase.java
+++ b/test-framework/src/main/java/org/elasticsearch/test/ESBackcompatTestCase.java
@@ -26,14 +26,11 @@ import org.elasticsearch.cluster.routing.IndexShardRoutingTable;
import org.elasticsearch.cluster.routing.ShardRouting;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.io.PathUtils;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.regex.Regex;
import org.elasticsearch.common.settings.Settings;
-import org.elasticsearch.indices.recovery.RecoverySettings;
-import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.test.junit.annotations.TestLogging;
import org.elasticsearch.test.junit.listeners.LoggingListener;
-import org.elasticsearch.transport.Transport;
-import org.elasticsearch.transport.TransportModule;
import java.io.IOException;
import java.lang.annotation.ElementType;
@@ -43,10 +40,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Map;
-import java.util.Random;
import static org.hamcrest.Matchers.is;
@@ -238,7 +232,7 @@ public abstract class ESBackcompatTestCase extends ESIntegTestCase {
protected Settings commonNodeSettings(int nodeOrdinal) {
Settings.Builder builder = Settings.builder().put(requiredSettings());
- builder.put(TransportModule.TRANSPORT_TYPE_KEY, "netty"); // run same transport / disco as external
+ builder.put(NetworkModule.TRANSPORT_TYPE_KEY, "netty"); // run same transport / disco as external
builder.put("node.mode", "network");
return builder.build();
}
diff --git a/test-framework/src/main/java/org/elasticsearch/test/ExternalNode.java b/test-framework/src/main/java/org/elasticsearch/test/ExternalNode.java
index 6ab39a5b139..05f194fc26a 100644
--- a/test-framework/src/main/java/org/elasticsearch/test/ExternalNode.java
+++ b/test-framework/src/main/java/org/elasticsearch/test/ExternalNode.java
@@ -28,11 +28,11 @@ import org.elasticsearch.common.SuppressForbidden;
import org.elasticsearch.common.io.PathUtils;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.discovery.DiscoveryModule;
import org.elasticsearch.node.internal.InternalSettingsPreparer;
-import org.elasticsearch.transport.TransportModule;
import java.io.Closeable;
import java.io.IOException;
@@ -111,9 +111,9 @@ final class ExternalNode implements Closeable {
case "path.home":
case "node.mode":
case "node.local":
- case TransportModule.TRANSPORT_TYPE_KEY:
+ case NetworkModule.TRANSPORT_TYPE_KEY:
case DiscoveryModule.DISCOVERY_TYPE_KEY:
- case TransportModule.TRANSPORT_SERVICE_TYPE_KEY:
+ case NetworkModule.TRANSPORT_SERVICE_TYPE_KEY:
case InternalSettingsPreparer.IGNORE_SYSTEM_PROPERTIES_SETTING:
continue;
default:
diff --git a/test-framework/src/main/java/org/elasticsearch/test/transport/AssertingLocalTransport.java b/test-framework/src/main/java/org/elasticsearch/test/transport/AssertingLocalTransport.java
index 64cc401cb5f..8b395003576 100644
--- a/test-framework/src/main/java/org/elasticsearch/test/transport/AssertingLocalTransport.java
+++ b/test-framework/src/main/java/org/elasticsearch/test/transport/AssertingLocalTransport.java
@@ -23,6 +23,7 @@ import org.elasticsearch.Version;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.plugins.Plugin;
import org.elasticsearch.test.ESIntegTestCase;
@@ -30,7 +31,6 @@ import org.elasticsearch.test.VersionUtils;
import org.elasticsearch.test.hamcrest.ElasticsearchAssertions;
import org.elasticsearch.threadpool.ThreadPool;
import org.elasticsearch.transport.TransportException;
-import org.elasticsearch.transport.TransportModule;
import org.elasticsearch.transport.TransportRequest;
import org.elasticsearch.transport.TransportRequestOptions;
import org.elasticsearch.transport.TransportResponse;
@@ -51,12 +51,12 @@ public class AssertingLocalTransport extends LocalTransport {
public String description() {
return "an asserting transport for testing";
}
- public void onModule(TransportModule transportModule) {
- transportModule.addTransport("mock", AssertingLocalTransport.class);
+ public void onModule(NetworkModule module) {
+ module.registerTransport("mock", AssertingLocalTransport.class);
}
@Override
public Settings additionalSettings() {
- return Settings.builder().put(TransportModule.TRANSPORT_TYPE_KEY, "mock").build();
+ return Settings.builder().put(NetworkModule.TRANSPORT_TYPE_KEY, "mock").build();
}
}
diff --git a/test-framework/src/main/java/org/elasticsearch/test/transport/MockTransportService.java b/test-framework/src/main/java/org/elasticsearch/test/transport/MockTransportService.java
index e1efd6c3745..d636341e42f 100644
--- a/test-framework/src/main/java/org/elasticsearch/test/transport/MockTransportService.java
+++ b/test-framework/src/main/java/org/elasticsearch/test/transport/MockTransportService.java
@@ -25,6 +25,7 @@ import org.elasticsearch.common.component.LifecycleListener;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.io.stream.BytesStreamOutput;
import org.elasticsearch.common.io.stream.StreamInput;
+import org.elasticsearch.common.network.NetworkModule;
import org.elasticsearch.common.network.NetworkService;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.BoundTransportAddress;
@@ -38,7 +39,6 @@ import org.elasticsearch.transport.ConnectTransportException;
import org.elasticsearch.transport.RequestHandlerRegistry;
import org.elasticsearch.transport.Transport;
import org.elasticsearch.transport.TransportException;
-import org.elasticsearch.transport.TransportModule;
import org.elasticsearch.transport.TransportRequest;
import org.elasticsearch.transport.TransportRequestOptions;
import org.elasticsearch.transport.TransportService;
@@ -75,12 +75,12 @@ public class MockTransportService extends TransportService {
public String description() {
return "a mock transport service for testing";
}
- public void onModule(TransportModule transportModule) {
- transportModule.addTransportService("mock", MockTransportService.class);
+ public void onModule(NetworkModule module) {
+ module.registerTransportService("mock", MockTransportService.class);
}
@Override
public Settings additionalSettings() {
- return Settings.builder().put(TransportModule.TRANSPORT_SERVICE_TYPE_KEY, "mock").build();
+ return Settings.builder().put(NetworkModule.TRANSPORT_SERVICE_TYPE_KEY, "mock").build();
}
}