diff --git a/buildSrc/src/main/resources/checkstyle_suppressions.xml b/buildSrc/src/main/resources/checkstyle_suppressions.xml index c61d86abd9d..c3ae18705e2 100644 --- a/buildSrc/src/main/resources/checkstyle_suppressions.xml +++ b/buildSrc/src/main/resources/checkstyle_suppressions.xml @@ -848,7 +848,6 @@ - diff --git a/core/build.gradle b/core/build.gradle index 6fd8c62af3e..2cf20b1c774 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -74,8 +74,6 @@ dependencies { compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${versions.jackson}" compile "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${versions.jackson}" - // network stack - compile 'io.netty:netty:3.10.6.Final' // percentiles aggregation compile 'com.tdunning:t-digest:3.0' // precentil ranks aggregation @@ -152,26 +150,11 @@ processResources { } thirdPartyAudit.excludes = [ - // uses internal java api: sun.security.x509 (X509CertInfo, X509CertImpl, X500Name) - 'org.jboss.netty.handler.ssl.util.OpenJdkSelfSignedCertGenerator', - // classes are missing! // from com.fasterxml.jackson.dataformat.yaml.YAMLMapper (jackson-dataformat-yaml) 'com.fasterxml.jackson.databind.ObjectMapper', - // from org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder (netty) - 'com.google.protobuf.CodedInputStream', - - // from org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender (netty) - 'com.google.protobuf.CodedOutputStream', - - // from org.jboss.netty.handler.codec.protobuf.ProtobufDecoder (netty) - 'com.google.protobuf.ExtensionRegistry', - 'com.google.protobuf.MessageLite$Builder', - 'com.google.protobuf.MessageLite', - 'com.google.protobuf.Parser', - // from org.apache.log4j.receivers.net.JMSReceiver (log4j-extras) 'javax.jms.Message', 'javax.jms.MessageListener', @@ -196,72 +179,8 @@ thirdPartyAudit.excludes = [ 'javax.mail.internet.MimeMessage', 'javax.mail.internet.MimeMultipart', 'javax.mail.internet.MimeUtility', - - // from org.jboss.netty.channel.socket.http.HttpTunnelingServlet (netty) - 'javax.servlet.ServletConfig', - 'javax.servlet.ServletException', - 'javax.servlet.ServletOutputStream', - 'javax.servlet.http.HttpServlet', - 'javax.servlet.http.HttpServletRequest', - 'javax.servlet.http.HttpServletResponse', - - // from org.jboss.netty.logging.CommonsLoggerFactory (netty) - 'org.apache.commons.logging.Log', - 'org.apache.commons.logging.LogFactory', - - // from org.jboss.netty.handler.ssl.OpenSslEngine (netty) - 'org.apache.tomcat.jni.Buffer', - 'org.apache.tomcat.jni.Library', - 'org.apache.tomcat.jni.Pool', - 'org.apache.tomcat.jni.SSL', - 'org.apache.tomcat.jni.SSLContext', - - // from org.jboss.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator (netty) - 'org.bouncycastle.asn1.x500.X500Name', - 'org.bouncycastle.cert.X509v3CertificateBuilder', - 'org.bouncycastle.cert.jcajce.JcaX509CertificateConverter', - 'org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder', - 'org.bouncycastle.jce.provider.BouncyCastleProvider', - 'org.bouncycastle.operator.jcajce.JcaContentSignerBuilder', - - // from org.jboss.netty.handler.ssl.JettyNpnSslEngine (netty) - 'org.eclipse.jetty.npn.NextProtoNego$ClientProvider', - 'org.eclipse.jetty.npn.NextProtoNego$ServerProvider', - 'org.eclipse.jetty.npn.NextProtoNego', - - // from org.jboss.netty.logging.JBossLoggerFactory (netty) - 'org.jboss.logging.Logger', - - // from org.jboss.netty.handler.codec.marshalling.ChannelBufferByteInput (netty) - 'org.jboss.marshalling.ByteInput', - - // from org.jboss.netty.handler.codec.marshalling.ChannelBufferByteOutput (netty) - 'org.jboss.marshalling.ByteOutput', - - // from org.jboss.netty.handler.codec.marshalling.CompatibleMarshallingEncoder (netty) - 'org.jboss.marshalling.Marshaller', - - // from org.jboss.netty.handler.codec.marshalling.ContextBoundUnmarshallerProvider (netty) - 'org.jboss.marshalling.MarshallerFactory', - 'org.jboss.marshalling.MarshallingConfiguration', - 'org.jboss.marshalling.Unmarshaller', - // from org.locationtech.spatial4j.io.GeoJSONReader (spatial4j) 'org.noggit.JSONParser', - - // from org.jboss.netty.container.osgi.NettyBundleActivator (netty) - 'org.osgi.framework.BundleActivator', - 'org.osgi.framework.BundleContext', - - // from org.jboss.netty.logging.OsgiLoggerFactory$1 (netty) - 'org.osgi.framework.ServiceReference', - 'org.osgi.service.log.LogService', - 'org.osgi.util.tracker.ServiceTracker', - 'org.osgi.util.tracker.ServiceTrackerCustomizer', - - // from org.netty.util.internal.logging.InternalLoggerFactory (netty) - it's optional - 'org.slf4j.Logger', - 'org.slf4j.LoggerFactory', ] // dependency license are currently checked in distribution diff --git a/core/src/main/java/org/elasticsearch/common/compress/Compressor.java b/core/src/main/java/org/elasticsearch/common/compress/Compressor.java index 62ed1cb6edb..883078dafe8 100644 --- a/core/src/main/java/org/elasticsearch/common/compress/Compressor.java +++ b/core/src/main/java/org/elasticsearch/common/compress/Compressor.java @@ -19,11 +19,9 @@ package org.elasticsearch.common.compress; -import org.apache.lucene.store.IndexInput; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.io.stream.StreamInput; import org.elasticsearch.common.io.stream.StreamOutput; -import org.jboss.netty.buffer.ChannelBuffer; import java.io.IOException; 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 fc65ed6c5b2..0ef71502207 100644 --- a/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java +++ b/core/src/main/java/org/elasticsearch/common/network/NetworkModule.java @@ -20,8 +20,6 @@ package org.elasticsearch.common.network; import org.elasticsearch.action.support.replication.ReplicationTask; -import org.elasticsearch.client.transport.TransportClientNodesService; -import org.elasticsearch.client.transport.support.TransportProxyClient; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.routing.allocation.command.AllocateEmptyPrimaryAllocationCommand; import org.elasticsearch.cluster.routing.allocation.command.AllocateReplicaAllocationCommand; @@ -41,13 +39,11 @@ 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.tasks.RawTaskStatus; import org.elasticsearch.tasks.Task; import org.elasticsearch.transport.Transport; import org.elasticsearch.transport.TransportService; import org.elasticsearch.transport.local.LocalTransport; -import org.elasticsearch.transport.netty.NettyTransport; /** * A module to handle registering and binding all network related classes. @@ -91,14 +87,9 @@ public class NetworkModule extends AbstractModule { this.namedWriteableRegistry = namedWriteableRegistry; registerTransportService(NETTY_TRANSPORT, TransportService.class); registerTransport(LOCAL_TRANSPORT, LocalTransport.class); - registerTransport(NETTY_TRANSPORT, NettyTransport.class); registerTaskStatus(ReplicationTask.Status.NAME, ReplicationTask.Status::new); registerTaskStatus(RawTaskStatus.NAME, RawTaskStatus::new); registerBuiltinAllocationCommands(); - - if (transportClient == false) { - registerHttpTransport(NETTY_TRANSPORT, NettyHttpServerTransport.class); - } } public boolean isTransportClient() { @@ -156,8 +147,9 @@ public class NetworkModule extends AbstractModule { bind(NetworkService.class).toInstance(networkService); bind(NamedWriteableRegistry.class).toInstance(namedWriteableRegistry); + boolean nettyRegistered = transportTypes.getExtension(NETTY_TRANSPORT) != null; transportServiceTypes.bindType(binder(), settings, TRANSPORT_SERVICE_TYPE_KEY, NETTY_TRANSPORT); - String defaultTransport = DiscoveryNode.isLocalNode(settings) ? LOCAL_TRANSPORT : NETTY_TRANSPORT; + String defaultTransport = DiscoveryNode.isLocalNode(settings) || nettyRegistered == false ? LOCAL_TRANSPORT : NETTY_TRANSPORT; transportTypes.bindType(binder(), settings, TRANSPORT_TYPE_KEY, defaultTransport); if (transportClient == false) { @@ -185,4 +177,8 @@ public class NetworkModule extends AbstractModule { AllocateStalePrimaryAllocationCommand.COMMAND_NAME_FIELD); } + + public boolean canRegisterHttpExtensions() { + return transportClient == false; + } } diff --git a/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java b/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java index 9f8eda54fa1..736371a08b3 100644 --- a/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java +++ b/core/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java @@ -61,7 +61,6 @@ import org.elasticsearch.env.NodeEnvironment; import org.elasticsearch.gateway.GatewayService; import org.elasticsearch.gateway.PrimaryShardAllocator; import org.elasticsearch.http.HttpTransportSettings; -import org.elasticsearch.http.netty.NettyHttpServerTransport; import org.elasticsearch.index.IndexSettings; import org.elasticsearch.index.store.IndexStoreConfig; import org.elasticsearch.indices.IndexingMemoryController; @@ -92,7 +91,6 @@ import org.elasticsearch.transport.TcpTransport; import org.elasticsearch.transport.Transport; import org.elasticsearch.transport.TransportService; import org.elasticsearch.transport.TransportSettings; -import org.elasticsearch.transport.netty.NettyTransport; import org.elasticsearch.tribe.TribeService; import org.elasticsearch.watcher.ResourceWatcherService; @@ -241,18 +239,6 @@ public final class ClusterSettings extends AbstractScopedSettings { HttpTransportSettings.SETTING_HTTP_MAX_HEADER_SIZE, HttpTransportSettings.SETTING_HTTP_MAX_INITIAL_LINE_LENGTH, HttpTransportSettings.SETTING_HTTP_RESET_COOKIES, - NettyHttpServerTransport.SETTING_HTTP_NETTY_MAX_CUMULATION_BUFFER_CAPACITY, - NettyHttpServerTransport.SETTING_HTTP_NETTY_MAX_COMPOSITE_BUFFER_COMPONENTS, - NettyHttpServerTransport.SETTING_HTTP_NETTY_RECEIVE_PREDICTOR_SIZE, - NettyHttpServerTransport.SETTING_HTTP_NETTY_RECEIVE_PREDICTOR_MIN, - NettyHttpServerTransport.SETTING_HTTP_NETTY_RECEIVE_PREDICTOR_MAX, - NettyHttpServerTransport.SETTING_HTTP_WORKER_COUNT, - NettyHttpServerTransport.SETTING_HTTP_TCP_NO_DELAY, - NettyHttpServerTransport.SETTING_HTTP_TCP_KEEP_ALIVE, - NettyHttpServerTransport.SETTING_HTTP_TCP_BLOCKING_SERVER, - NettyHttpServerTransport.SETTING_HTTP_TCP_REUSE_ADDRESS, - NettyHttpServerTransport.SETTING_HTTP_TCP_SEND_BUFFER_SIZE, - NettyHttpServerTransport.SETTING_HTTP_TCP_RECEIVE_BUFFER_SIZE, HierarchyCircuitBreakerService.TOTAL_CIRCUIT_BREAKER_LIMIT_SETTING, HierarchyCircuitBreakerService.FIELDDATA_CIRCUIT_BREAKER_LIMIT_SETTING, HierarchyCircuitBreakerService.FIELDDATA_CIRCUIT_BREAKER_OVERHEAD_SETTING, @@ -278,7 +264,6 @@ public final class ClusterSettings extends AbstractScopedSettings { TransportSettings.BIND_HOST, TransportSettings.PUBLISH_PORT, TransportSettings.PORT, - NettyTransport.WORKER_COUNT, TcpTransport.CONNECTIONS_PER_NODE_RECOVERY, TcpTransport.CONNECTIONS_PER_NODE_BULK, TcpTransport.CONNECTIONS_PER_NODE_REG, @@ -287,13 +272,7 @@ public final class ClusterSettings extends AbstractScopedSettings { TcpTransport.PING_SCHEDULE, TcpTransport.TCP_BLOCKING_CLIENT, TcpTransport.TCP_CONNECT_TIMEOUT, - NettyTransport.NETTY_MAX_CUMULATION_BUFFER_CAPACITY, - NettyTransport.NETTY_MAX_COMPOSITE_BUFFER_COMPONENTS, - NettyTransport.NETTY_RECEIVE_PREDICTOR_SIZE, - NettyTransport.NETTY_RECEIVE_PREDICTOR_MIN, - NettyTransport.NETTY_RECEIVE_PREDICTOR_MAX, NetworkService.NETWORK_SERVER, - NettyTransport.NETTY_BOSS_COUNT, TcpTransport.TCP_NO_DELAY, TcpTransport.TCP_KEEP_ALIVE, TcpTransport.TCP_REUSE_ADDRESS, diff --git a/core/src/main/resources/org/elasticsearch/bootstrap/security.policy b/core/src/main/resources/org/elasticsearch/bootstrap/security.policy index a4a45585b5f..2f83d56543d 100644 --- a/core/src/main/resources/org/elasticsearch/bootstrap/security.policy +++ b/core/src/main/resources/org/elasticsearch/bootstrap/security.policy @@ -83,14 +83,6 @@ grant { permission java.util.PropertyPermission "junit4.childvm.count", "write"; permission java.util.PropertyPermission "junit4.childvm.id", "write"; - // set by NettyTransport/NettyHttpServerTransport based on another parameter - // TODO: look into this and decide if users should simply set the actual sysprop?! - permission java.util.PropertyPermission "org.jboss.netty.epollBugWorkaround", "write"; - - // Netty SelectorUtil wants to change this, because of https://bugs.openjdk.java.net/browse/JDK-6427854 - // the bug says it only happened rarely, and that its fixed, but apparently it still happens rarely! - permission java.util.PropertyPermission "sun.nio.ch.bugLevel", "write"; - // needed by Settings permission java.lang.RuntimePermission "getenv.*"; diff --git a/core/src/test/java/org/elasticsearch/common/network/NetworkModuleTests.java b/core/src/test/java/org/elasticsearch/common/network/NetworkModuleTests.java index 131636e2011..cfd123272cd 100644 --- a/core/src/test/java/org/elasticsearch/common/network/NetworkModuleTests.java +++ b/core/src/test/java/org/elasticsearch/common/network/NetworkModuleTests.java @@ -108,7 +108,9 @@ public class NetworkModuleTests extends ModuleTestCase { } public void testRegisterTransportService() { - Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_SERVICE_TYPE_KEY, "custom").build(); + Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_SERVICE_TYPE_KEY, "custom") + .put(NetworkModule.HTTP_ENABLED.getKey(), false) + .build(); NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false, new NamedWriteableRegistry()); module.registerTransportService("custom", FakeTransportService.class); assertBinding(module, TransportService.class, FakeTransportService.class); @@ -122,7 +124,9 @@ public class NetworkModuleTests extends ModuleTestCase { } public void testRegisterTransport() { - Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_TYPE_KEY, "custom").build(); + Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_TYPE_KEY, "custom") + .put(NetworkModule.HTTP_ENABLED.getKey(), false) + .build(); NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false, new NamedWriteableRegistry()); module.registerTransport("custom", FakeTransport.class); assertBinding(module, Transport.class, FakeTransport.class); diff --git a/core/src/test/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPingIT.java b/core/src/test/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPingIT.java index 7715749fdf6..3d74b8f537f 100644 --- a/core/src/test/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPingIT.java +++ b/core/src/test/java/org/elasticsearch/discovery/zen/ping/unicast/UnicastZenPingIT.java @@ -39,10 +39,10 @@ import org.elasticsearch.test.ESTestCase; import org.elasticsearch.test.VersionUtils; import org.elasticsearch.threadpool.TestThreadPool; import org.elasticsearch.threadpool.ThreadPool; +import org.elasticsearch.transport.MockTcpTransport; import org.elasticsearch.transport.TransportConnectionListener; import org.elasticsearch.transport.TransportService; import org.elasticsearch.transport.TransportSettings; -import org.elasticsearch.transport.netty.NettyTransport; import java.net.InetSocketAddress; import java.util.concurrent.ConcurrentMap; @@ -198,13 +198,8 @@ public class UnicastZenPingIT extends ESTestCase { private NetworkHandle startServices(Settings settings, ThreadPool threadPool, NetworkService networkService, String nodeId, Version version) { - NettyTransport transport = new NettyTransport(settings, threadPool, networkService, BigArrays.NON_RECYCLING_INSTANCE, - new NamedWriteableRegistry(), new NoneCircuitBreakerService()) { - @Override - protected Version getCurrentVersion() { - return version; - } - }; + MockTcpTransport transport = new MockTcpTransport("mock", settings, threadPool, BigArrays.NON_RECYCLING_INSTANCE, + new NoneCircuitBreakerService(), new NamedWriteableRegistry(), networkService, version); final TransportService transportService = new TransportService(settings, transport, threadPool); transportService.start(); transportService.acceptIncomingRequests(); diff --git a/core/src/test/java/org/elasticsearch/transport/NettyTransportServiceHandshakeTests.java b/core/src/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java similarity index 94% rename from core/src/test/java/org/elasticsearch/transport/NettyTransportServiceHandshakeTests.java rename to core/src/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java index 7bbd6e0fea7..a1525c6e764 100644 --- a/core/src/test/java/org/elasticsearch/transport/NettyTransportServiceHandshakeTests.java +++ b/core/src/test/java/org/elasticsearch/transport/TransportServiceHandshakeTests.java @@ -20,7 +20,6 @@ package org.elasticsearch.transport; import org.elasticsearch.Version; -import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.network.NetworkService; @@ -32,7 +31,6 @@ import org.elasticsearch.test.VersionUtils; import org.elasticsearch.test.transport.MockTransportService; import org.elasticsearch.threadpool.TestThreadPool; import org.elasticsearch.threadpool.ThreadPool; -import org.elasticsearch.transport.netty.NettyTransport; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -45,27 +43,27 @@ import static java.util.Collections.emptyMap; import static java.util.Collections.emptySet; import static org.hamcrest.Matchers.containsString; -public class NettyTransportServiceHandshakeTests extends ESTestCase { +public class TransportServiceHandshakeTests extends ESTestCase { private static ThreadPool threadPool; private static final long timeout = Long.MAX_VALUE; @BeforeClass public static void startThreadPool() { - threadPool = new TestThreadPool(NettyTransportServiceHandshakeTests.class.getSimpleName()); + threadPool = new TestThreadPool(TransportServiceHandshakeTests.class.getSimpleName()); } private List transportServices = new ArrayList<>(); private NetworkHandle startServices(String nodeNameAndId, Settings settings, Version version) { - NettyTransport transport = - new NettyTransport( + MockTcpTransport transport = + new MockTcpTransport("mock", settings, threadPool, - new NetworkService(settings), BigArrays.NON_RECYCLING_INSTANCE, + new NoneCircuitBreakerService(), new NamedWriteableRegistry(), - new NoneCircuitBreakerService()); + new NetworkService(settings)); TransportService transportService = new MockTransportService(settings, transport, threadPool); transportService.start(); transportService.acceptIncomingRequests(); diff --git a/core/src/test/java/org/elasticsearch/tribe/TribeIT.java b/core/src/test/java/org/elasticsearch/tribe/TribeIT.java index 463a048b88a..b7521bdf74f 100644 --- a/core/src/test/java/org/elasticsearch/tribe/TribeIT.java +++ b/core/src/test/java/org/elasticsearch/tribe/TribeIT.java @@ -33,6 +33,7 @@ import org.elasticsearch.cluster.node.DiscoveryNodes; import org.elasticsearch.common.Priority; import org.elasticsearch.common.UUIDs; import org.elasticsearch.common.collect.Tuple; +import org.elasticsearch.common.network.NetworkModule; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.discovery.MasterNotDiscoveredException; @@ -131,6 +132,7 @@ public class TribeIT extends ESIntegTestCase { .put("tribe.t1.cluster.name", internalCluster().getClusterName()) .put("tribe.t2.cluster.name", cluster2.getClusterName()) .put("tribe.blocks.write", false) + .put(NetworkModule.HTTP_ENABLED.getKey(), false) .put(settings) .put(tribe1Defaults.build()) .put(tribe2Defaults.build()) diff --git a/distribution/build.gradle b/distribution/build.gradle index 540796fc5a3..dcd5f170fc5 100644 --- a/distribution/build.gradle +++ b/distribution/build.gradle @@ -49,7 +49,7 @@ ext.dependencyFiles = project(':core').configurations.runtime.copyRecursive() task buildModules(type: Sync) { into 'build/modules' -} +} ext.restTestExpansions = [ 'expected.modules.count': 0, @@ -82,6 +82,21 @@ project.rootProject.subprojects.findAll { it.path.startsWith(':modules:') }.each restTestExpansions['expected.modules.count'] += 1 } +// Integ tests work over the rest http layer, so we need a transport included with the integ test zip. +// All transport modules are included so that they may be randomized for testing +task buildTransportModules(type: Sync) { + into 'build/transport-modules' +} + +project.rootProject.subprojects.findAll { it.path.startsWith(':modules:transport-') }.each { Project transport -> + buildTransportModules { + dependsOn({ project(transport.path).bundlePlugin }) + into(transport.name) { + from { zipTree(project(transport.path).bundlePlugin.outputs.files.singleFile) } + } + } +} + // make sure we have a clean task since we aren't a java project, but we have tasks that // put stuff in the build dir task clean(type: Delete) { @@ -145,6 +160,11 @@ subprojects { from project(':distribution').buildModules } + transportModulesFiles = copySpec { + into "modules" + from project(':distribution').buildTransportModules + } + configFiles = copySpec { from '../src/main/resources/config' MavenFilteringHack.filter(it, expansions) @@ -209,6 +229,8 @@ configure(subprojects.findAll { ['zip', 'tar', 'integ-test-zip'].contains(it.nam } if (project.name != 'integ-test-zip') { with modulesFiles + } else { + with transportModulesFiles } } } diff --git a/modules/reindex/build.gradle b/modules/reindex/build.gradle index c6def124326..5a48b94c1e8 100644 --- a/modules/reindex/build.gradle +++ b/modules/reindex/build.gradle @@ -42,6 +42,8 @@ dependencies { compile "org.apache.httpcomponents:httpcore:${versions.httpcore}" compile "commons-codec:commons-codec:${versions.commonscodec}" compile "commons-logging:commons-logging:${versions.commonslogging}" + // for http - testing reindex from remote + testCompile project(path: ':modules:transport-netty', configuration: 'runtime') } dependencyLicenses { diff --git a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/RetryTests.java b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/RetryTests.java index fd5ddaedd69..4b23a525e50 100644 --- a/modules/reindex/src/test/java/org/elasticsearch/index/reindex/RetryTests.java +++ b/modules/reindex/src/test/java/org/elasticsearch/index/reindex/RetryTests.java @@ -28,6 +28,7 @@ import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.bulk.Retry; import org.elasticsearch.common.bytes.BytesArray; import org.elasticsearch.common.network.NetworkModule; +import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException; @@ -35,11 +36,13 @@ import org.elasticsearch.index.reindex.remote.RemoteInfo; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.test.ESSingleNodeTestCase; import org.elasticsearch.threadpool.ThreadPool; +import org.elasticsearch.transport.NettyPlugin; import org.junit.After; import org.junit.Before; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.concurrent.CyclicBarrier; @@ -59,7 +62,19 @@ public class RetryTests extends ESSingleNodeTestCase { @Override protected Collection> getPlugins() { - return pluginList(ReindexPlugin.class); + return pluginList(ReindexPlugin.class, NettyPlugin.class, BogusPlugin.class); // we need netty here to http communication + } + + public static final class BogusPlugin extends Plugin { + // se NettyPlugin.... this runs without the permission from the netty module so it will fail since reindex can't set the property + // to make it still work we disable that check but need to register the setting first + private static final Setting ASSERT_NETTY_BUGLEVEL = Setting.boolSetting("netty.assert.buglevel", true, + Setting.Property.NodeScope); + + @Override + public List> getSettings() { + return Collections.singletonList(ASSERT_NETTY_BUGLEVEL); + } } /** @@ -69,6 +84,7 @@ public class RetryTests extends ESSingleNodeTestCase { protected Settings nodeSettings() { Settings.Builder settings = Settings.builder().put(super.nodeSettings()); // Use pools of size 1 so we can block them + settings.put("netty.assert.buglevel", false); settings.put("thread_pool.bulk.size", 1); settings.put("thread_pool.search.size", 1); // Use queues of size 1 because size 0 is broken and because search requests need the queue to function @@ -188,7 +204,7 @@ public class RetryTests extends ESSingleNodeTestCase { barrier.await(); logger.info("Blocked the [{}] executor", name); barrier.await(); - logger.info("Ublocking the [{}] executor", name); + logger.info("Unblocking the [{}] executor", name); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/modules/transport-netty/build.gradle b/modules/transport-netty/build.gradle new file mode 100644 index 00000000000..7a61e0fe8c0 --- /dev/null +++ b/modules/transport-netty/build.gradle @@ -0,0 +1,118 @@ +/* + * 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. + */ + +/* + TODOs: + * fix permissions such that only netty can open sockets etc? + * fix the hack in the build framework that copies transport-netty into the integ test cluster + * maybe figure out a way to run all tests from core with netty/network? + */ +esplugin { + description 'Netty 3 based transport implementation' + classname 'org.elasticsearch.transport.NettyPlugin' +} + +compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-rawtypes,-try,-unchecked" + +dependencies { + // network stack + compile 'io.netty:netty:3.10.6.Final' +} + +thirdPartyAudit.excludes = [ + // uses internal java api: sun.security.x509 (X509CertInfo, X509CertImpl, X500Name) + 'org.jboss.netty.handler.ssl.util.OpenJdkSelfSignedCertGenerator', + // classes are missing + + // from org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder (netty) + 'com.google.protobuf.CodedInputStream', + + // from org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender (netty) + 'com.google.protobuf.CodedOutputStream', + + // from org.jboss.netty.handler.codec.protobuf.ProtobufDecoder (netty) + 'com.google.protobuf.ExtensionRegistry', + 'com.google.protobuf.MessageLite$Builder', + 'com.google.protobuf.MessageLite', + 'com.google.protobuf.Parser', + + // from org.jboss.netty.channel.socket.http.HttpTunnelingServlet (netty) + 'javax.servlet.ServletConfig', + 'javax.servlet.ServletException', + 'javax.servlet.ServletOutputStream', + 'javax.servlet.http.HttpServlet', + 'javax.servlet.http.HttpServletRequest', + 'javax.servlet.http.HttpServletResponse', + + // from org.jboss.netty.logging.CommonsLoggerFactory (netty) + 'org.apache.commons.logging.Log', + 'org.apache.commons.logging.LogFactory', + + // from org.jboss.netty.handler.ssl.OpenSslEngine (netty) + 'org.apache.tomcat.jni.Buffer', + 'org.apache.tomcat.jni.Library', + 'org.apache.tomcat.jni.Pool', + 'org.apache.tomcat.jni.SSL', + 'org.apache.tomcat.jni.SSLContext', + + // from org.jboss.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator (netty) + 'org.bouncycastle.asn1.x500.X500Name', + 'org.bouncycastle.cert.X509v3CertificateBuilder', + 'org.bouncycastle.cert.jcajce.JcaX509CertificateConverter', + 'org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder', + 'org.bouncycastle.jce.provider.BouncyCastleProvider', + 'org.bouncycastle.operator.jcajce.JcaContentSignerBuilder', + + // from org.jboss.netty.handler.ssl.JettyNpnSslEngine (netty) + 'org.eclipse.jetty.npn.NextProtoNego$ClientProvider', + 'org.eclipse.jetty.npn.NextProtoNego$ServerProvider', + 'org.eclipse.jetty.npn.NextProtoNego', + + // from org.jboss.netty.logging.JBossLoggerFactory (netty) + 'org.jboss.logging.Logger', + + // from org.jboss.netty.handler.codec.marshalling.ChannelBufferByteInput (netty) + 'org.jboss.marshalling.ByteInput', + + // from org.jboss.netty.handler.codec.marshalling.ChannelBufferByteOutput (netty) + 'org.jboss.marshalling.ByteOutput', + + // from org.jboss.netty.handler.codec.marshalling.CompatibleMarshallingEncoder (netty) + 'org.jboss.marshalling.Marshaller', + + // from org.jboss.netty.handler.codec.marshalling.ContextBoundUnmarshallerProvider (netty) + 'org.jboss.marshalling.MarshallerFactory', + 'org.jboss.marshalling.MarshallingConfiguration', + 'org.jboss.marshalling.Unmarshaller', + + // from org.jboss.netty.container.osgi.NettyBundleActivator (netty) + 'org.osgi.framework.BundleActivator', + 'org.osgi.framework.BundleContext', + + // from org.jboss.netty.logging.OsgiLoggerFactory$1 (netty) + 'org.osgi.framework.ServiceReference', + 'org.osgi.service.log.LogService', + 'org.osgi.util.tracker.ServiceTracker', + 'org.osgi.util.tracker.ServiceTrackerCustomizer', + + // from org.netty.util.internal.logging.InternalLoggerFactory (netty) - it's optional + 'org.slf4j.Logger', + 'org.slf4j.LoggerFactory', +] + diff --git a/distribution/licenses/netty-3.10.6.Final.jar.sha1 b/modules/transport-netty/licenses/netty-3.10.6.Final.jar.sha1 similarity index 100% rename from distribution/licenses/netty-3.10.6.Final.jar.sha1 rename to modules/transport-netty/licenses/netty-3.10.6.Final.jar.sha1 diff --git a/distribution/licenses/netty-LICENSE.txt b/modules/transport-netty/licenses/netty-LICENSE.txt similarity index 100% rename from distribution/licenses/netty-LICENSE.txt rename to modules/transport-netty/licenses/netty-LICENSE.txt diff --git a/distribution/licenses/netty-NOTICE.txt b/modules/transport-netty/licenses/netty-NOTICE.txt similarity index 100% rename from distribution/licenses/netty-NOTICE.txt rename to modules/transport-netty/licenses/netty-NOTICE.txt diff --git a/core/src/main/java/org/elasticsearch/http/netty/ESHttpResponseEncoder.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/ESHttpResponseEncoder.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/ESHttpResponseEncoder.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/ESHttpResponseEncoder.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/HttpRequestHandler.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/NettyHttpRequest.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/NettyHttpServerTransport.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/NettyHttpServerTransport.java similarity index 98% rename from core/src/main/java/org/elasticsearch/http/netty/NettyHttpServerTransport.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/NettyHttpServerTransport.java index 6578628107e..628b823f04f 100644 --- a/core/src/main/java/org/elasticsearch/http/netty/NettyHttpServerTransport.java +++ b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/NettyHttpServerTransport.java @@ -110,9 +110,6 @@ import static org.elasticsearch.http.HttpTransportSettings.SETTING_PIPELINING; import static org.elasticsearch.http.HttpTransportSettings.SETTING_PIPELINING_MAX_EVENTS; import static org.elasticsearch.http.netty.cors.CorsHandler.ANY_ORIGIN; -/** - * - */ public class NettyHttpServerTransport extends AbstractLifecycleComponent implements HttpServerTransport { static { @@ -284,19 +281,17 @@ public class NettyHttpServerTransport extends AbstractLifecycleComponent impleme @Override protected void doStart() { this.serverOpenChannels = new OpenChannelsHandler(logger); - if (blockingServer) { serverBootstrap = new ServerBootstrap(new OioServerSocketChannelFactory( - Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_boss")), - Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_worker")) + Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_boss")), + Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_worker")) )); } else { serverBootstrap = new ServerBootstrap(new NioServerSocketChannelFactory( - Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_boss")), - Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_worker")), - workerCount)); + Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_boss")), + Executors.newCachedThreadPool(daemonThreadFactory(settings, "http_server_worker")), + workerCount)); } - serverBootstrap.setPipelineFactory(configureServerChannelPipelineFactory()); serverBootstrap.setOption("child.tcpNoDelay", tcpNoDelay); diff --git a/core/src/main/java/org/elasticsearch/http/netty/cors/CorsConfig.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/cors/CorsConfig.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/cors/CorsConfig.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/cors/CorsConfig.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/cors/CorsConfigBuilder.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/cors/CorsConfigBuilder.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/cors/CorsConfigBuilder.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/cors/CorsConfigBuilder.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/cors/CorsHandler.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/cors/CorsHandler.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/cors/CorsHandler.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/cors/CorsHandler.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandler.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandler.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandler.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandler.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedDownstreamChannelEvent.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedDownstreamChannelEvent.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedDownstreamChannelEvent.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedDownstreamChannelEvent.java diff --git a/core/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedUpstreamMessageEvent.java b/modules/transport-netty/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedUpstreamMessageEvent.java similarity index 100% rename from core/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedUpstreamMessageEvent.java rename to modules/transport-netty/src/main/java/org/elasticsearch/http/netty/pipelining/OrderedUpstreamMessageEvent.java diff --git a/modules/transport-netty/src/main/java/org/elasticsearch/transport/NettyPlugin.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/NettyPlugin.java new file mode 100644 index 00000000000..5a9a8af009e --- /dev/null +++ b/modules/transport-netty/src/main/java/org/elasticsearch/transport/NettyPlugin.java @@ -0,0 +1,94 @@ +/* + * 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.SpecialPermission; +import org.elasticsearch.common.network.NetworkModule; +import org.elasticsearch.common.settings.Setting; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.http.netty.NettyHttpServerTransport; +import org.elasticsearch.plugins.Plugin; +import org.elasticsearch.transport.netty.NettyTransport; + +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.Arrays; +import java.util.List; + +public class NettyPlugin extends Plugin { + + + public static final String NETTY_TRANSPORT_NAME = "netty"; + public static final String NETTY_HTTP_TRANSPORT_NAME = "netty"; + + public NettyPlugin(Settings settings) { + SecurityManager sm = System.getSecurityManager(); + if (sm != null) { + sm.checkPermission(new SpecialPermission()); + } + AccessController.doPrivileged((PrivilegedAction) () -> { + try { + Class.forName("org.jboss.netty.channel.socket.nio.SelectorUtil"); + } catch (ClassNotFoundException e) { + throw new AssertionError(e); // we don't do anything with this + } + return null; + }); + /* + * Asserts that sun.nio.ch.bugLevel has been set to a non-null value. This assertion will fail if the corresponding code + * is not executed in a doPrivileged block. This can be disabled via `netty.assert.buglevel` setting which isn't registered + * by default but test can do so if they depend on the jar instead of the module. + */ + //TODO Once we have no jar level dependency we can get rid of this. + if (settings.getAsBoolean("netty.assert.buglevel", true)) { + assert System.getProperty("sun.nio.ch.bugLevel") != null : + "sun.nio.ch.bugLevel is null somebody pulls in SelectorUtil without doing stuff in a doPrivileged block?"; + } + } + + @Override + public List> getSettings() { + return Arrays.asList( + NettyHttpServerTransport.SETTING_HTTP_NETTY_MAX_CUMULATION_BUFFER_CAPACITY, + NettyHttpServerTransport.SETTING_HTTP_NETTY_MAX_COMPOSITE_BUFFER_COMPONENTS, + NettyHttpServerTransport.SETTING_HTTP_WORKER_COUNT, + NettyHttpServerTransport.SETTING_HTTP_TCP_NO_DELAY, + NettyHttpServerTransport.SETTING_HTTP_TCP_KEEP_ALIVE, + NettyHttpServerTransport.SETTING_HTTP_TCP_BLOCKING_SERVER, + NettyHttpServerTransport.SETTING_HTTP_TCP_REUSE_ADDRESS, + NettyHttpServerTransport.SETTING_HTTP_TCP_SEND_BUFFER_SIZE, + NettyHttpServerTransport.SETTING_HTTP_TCP_RECEIVE_BUFFER_SIZE, + NettyTransport.WORKER_COUNT, + NettyTransport.NETTY_MAX_CUMULATION_BUFFER_CAPACITY, + NettyTransport.NETTY_MAX_COMPOSITE_BUFFER_COMPONENTS, + NettyTransport.NETTY_RECEIVE_PREDICTOR_SIZE, + NettyTransport.NETTY_RECEIVE_PREDICTOR_MIN, + NettyTransport.NETTY_RECEIVE_PREDICTOR_MAX, + NettyTransport.NETTY_BOSS_COUNT + ); + } + + public void onModule(NetworkModule networkModule) { + if (networkModule.canRegisterHttpExtensions()) { + networkModule.registerHttpTransport(NETTY_HTTP_TRANSPORT_NAME, NettyHttpServerTransport.class); + } + networkModule.registerTransport(NETTY_TRANSPORT_NAME, NettyTransport.class); + } +} diff --git a/core/src/main/java/org/elasticsearch/transport/netty/ChannelBufferBytesReference.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/ChannelBufferBytesReference.java similarity index 100% rename from core/src/main/java/org/elasticsearch/transport/netty/ChannelBufferBytesReference.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/ChannelBufferBytesReference.java diff --git a/core/src/main/java/org/elasticsearch/transport/netty/ChannelBufferStreamInput.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/ChannelBufferStreamInput.java similarity index 100% rename from core/src/main/java/org/elasticsearch/transport/netty/ChannelBufferStreamInput.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/ChannelBufferStreamInput.java diff --git a/core/src/main/java/org/elasticsearch/transport/netty/NettyInternalESLogger.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyInternalESLogger.java similarity index 100% rename from core/src/main/java/org/elasticsearch/transport/netty/NettyInternalESLogger.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyInternalESLogger.java diff --git a/core/src/main/java/org/elasticsearch/transport/netty/NettyMessageChannelHandler.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyMessageChannelHandler.java similarity index 100% rename from core/src/main/java/org/elasticsearch/transport/netty/NettyMessageChannelHandler.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyMessageChannelHandler.java diff --git a/core/src/main/java/org/elasticsearch/transport/netty/NettyTransport.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyTransport.java similarity index 99% rename from core/src/main/java/org/elasticsearch/transport/netty/NettyTransport.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyTransport.java index dac33e5f84d..d55f90cf34f 100644 --- a/core/src/main/java/org/elasticsearch/transport/netty/NettyTransport.java +++ b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyTransport.java @@ -182,6 +182,7 @@ public class NettyTransport extends TcpTransport { } private ClientBootstrap createClientBootstrap() { + // this doPrivileged is for SelectorUtil.java that tries to set "sun.nio.ch.bugLevel" if (blockingClient) { clientBootstrap = new ClientBootstrap(new OioClientSocketChannelFactory( Executors.newCachedThreadPool(daemonThreadFactory(settings, TRANSPORT_CLIENT_WORKER_THREAD_NAME_PREFIX)))); @@ -280,7 +281,7 @@ public class NettyTransport extends TcpTransport { final ThreadFactory bossFactory = daemonThreadFactory(this.settings, HTTP_SERVER_BOSS_THREAD_NAME_PREFIX, name); final ThreadFactory workerFactory = daemonThreadFactory(this.settings, HTTP_SERVER_WORKER_THREAD_NAME_PREFIX, name); - ServerBootstrap serverBootstrap; + final ServerBootstrap serverBootstrap; if (blockingServer) { serverBootstrap = new ServerBootstrap(new OioServerSocketChannelFactory( Executors.newCachedThreadPool(bossFactory), diff --git a/core/src/main/java/org/elasticsearch/transport/netty/NettyUtils.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyUtils.java similarity index 99% rename from core/src/main/java/org/elasticsearch/transport/netty/NettyUtils.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyUtils.java index f3fdde5e91c..4f291c8069c 100644 --- a/core/src/main/java/org/elasticsearch/transport/netty/NettyUtils.java +++ b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/NettyUtils.java @@ -105,7 +105,6 @@ public class NettyUtils { } public static void setup() { - } /** diff --git a/core/src/main/java/org/elasticsearch/transport/netty/OpenChannelsHandler.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/OpenChannelsHandler.java similarity index 100% rename from core/src/main/java/org/elasticsearch/transport/netty/OpenChannelsHandler.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/OpenChannelsHandler.java diff --git a/core/src/main/java/org/elasticsearch/transport/netty/SizeHeaderFrameDecoder.java b/modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/SizeHeaderFrameDecoder.java similarity index 100% rename from core/src/main/java/org/elasticsearch/transport/netty/SizeHeaderFrameDecoder.java rename to modules/transport-netty/src/main/java/org/elasticsearch/transport/netty/SizeHeaderFrameDecoder.java diff --git a/modules/transport-netty/src/main/plugin-metadata/plugin-security.policy b/modules/transport-netty/src/main/plugin-metadata/plugin-security.policy new file mode 100644 index 00000000000..45c8cd923aa --- /dev/null +++ b/modules/transport-netty/src/main/plugin-metadata/plugin-security.policy @@ -0,0 +1,24 @@ +/* + * 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. + */ + +grant { + // Netty SelectorUtil wants to change this, because of https://bugs.openjdk.java.net/browse/JDK-6427854 + // the bug says it only happened rarely, and that its fixed, but apparently it still happens rarely! + permission java.util.PropertyPermission "sun.nio.ch.bugLevel", "write"; +}; \ No newline at end of file diff --git a/modules/transport-netty/src/test/java/org/elasticsearch/ESNettyIntegTestCase.java b/modules/transport-netty/src/test/java/org/elasticsearch/ESNettyIntegTestCase.java new file mode 100644 index 00000000000..9486a813c48 --- /dev/null +++ b/modules/transport-netty/src/test/java/org/elasticsearch/ESNettyIntegTestCase.java @@ -0,0 +1,72 @@ +/* + * 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; + +import org.elasticsearch.common.network.NetworkModule; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.plugins.Plugin; +import org.elasticsearch.test.ESIntegTestCase; +import org.elasticsearch.transport.NettyPlugin; +import org.elasticsearch.transport.netty.NettyTransport; + +import java.util.Collection; + +@ESIntegTestCase.SuppressLocalMode +public abstract class ESNettyIntegTestCase extends ESIntegTestCase { + + @Override + protected boolean ignoreExternalCluster() { + return true; + } + + @Override + protected boolean addMockTransportService() { + return false; + } + + @Override + protected Settings nodeSettings(int nodeOrdinal) { + Settings.Builder builder = Settings.builder().put(super.nodeSettings(nodeOrdinal)); + // randomize netty settings + if (randomBoolean()) { + builder.put(NettyTransport.WORKER_COUNT.getKey(), random().nextInt(3) + 1); + } + builder.put(NetworkModule.TRANSPORT_TYPE_KEY, "netty"); + builder.put(NetworkModule.HTTP_TYPE_KEY, "netty"); + return builder.build(); + } + + @Override + protected Settings transportClientSettings() { + Settings.Builder builder = Settings.builder().put(super.transportClientSettings()); + builder.put(NetworkModule.TRANSPORT_TYPE_KEY, "netty"); + return builder.build(); + } + + @Override + protected Collection> nodePlugins() { + return pluginList(NettyPlugin.class); + } + + @Override + protected Collection> transportClientPlugins() { + return pluginList(NettyPlugin.class); + } + +} diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpChannelTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpChannelTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/http/netty/NettyHttpChannelTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpChannelTests.java diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpClient.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpClient.java similarity index 100% rename from core/src/test/java/org/elasticsearch/http/netty/NettyHttpClient.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpClient.java diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpPublishPortTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpPublishPortTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/http/netty/NettyHttpPublishPortTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpPublishPortTests.java diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpRequestSizeLimitIT.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpRequestSizeLimitIT.java similarity index 98% rename from core/src/test/java/org/elasticsearch/http/netty/NettyHttpRequestSizeLimitIT.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpRequestSizeLimitIT.java index 47b34811df6..2bfd5dd1cf9 100644 --- a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpRequestSizeLimitIT.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpRequestSizeLimitIT.java @@ -18,6 +18,7 @@ */ package org.elasticsearch.http.netty; +import org.elasticsearch.ESNettyIntegTestCase; import org.elasticsearch.common.collect.Tuple; import org.elasticsearch.common.network.NetworkModule; import org.elasticsearch.common.settings.Settings; @@ -45,7 +46,7 @@ import static org.hamcrest.Matchers.hasSize; * a single node "cluster". We also force test infrastructure to use the node client instead of the transport client for the same reason. */ @ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numClientNodes = 0, numDataNodes = 1, transportClientRatio = 0) -public class NettyHttpRequestSizeLimitIT extends ESIntegTestCase { +public class NettyHttpRequestSizeLimitIT extends ESNettyIntegTestCase { private static final ByteSizeValue LIMIT = new ByteSizeValue(2, ByteSizeUnit.KB); @Override diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpServerPipeliningTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpServerPipeliningTests.java similarity index 95% rename from core/src/test/java/org/elasticsearch/http/netty/NettyHttpServerPipeliningTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpServerPipeliningTests.java index ef8621dfcd3..e92478ef390 100644 --- a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpServerPipeliningTests.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpServerPipeliningTests.java @@ -95,7 +95,8 @@ public class NettyHttpServerPipeliningTests extends ESTestCase { .build(); httpServerTransport = new CustomNettyHttpServerTransport(settings); httpServerTransport.start(); - InetSocketTransportAddress transportAddress = (InetSocketTransportAddress) randomFrom(httpServerTransport.boundAddress().boundAddresses()); + InetSocketTransportAddress transportAddress = (InetSocketTransportAddress) randomFrom(httpServerTransport.boundAddress() + .boundAddresses()); List requests = Arrays.asList("/firstfast", "/slow?sleep=500", "/secondfast", "/slow?sleep=1000", "/thirdfast"); try (NettyHttpClient nettyHttpClient = new NettyHttpClient()) { @@ -112,7 +113,8 @@ public class NettyHttpServerPipeliningTests extends ESTestCase { .build(); httpServerTransport = new CustomNettyHttpServerTransport(settings); httpServerTransport.start(); - InetSocketTransportAddress transportAddress = (InetSocketTransportAddress) randomFrom(httpServerTransport.boundAddress().boundAddresses()); + InetSocketTransportAddress transportAddress = (InetSocketTransportAddress) randomFrom(httpServerTransport.boundAddress() + .boundAddresses()); List requests = Arrays.asList("/slow?sleep=1000", "/firstfast", "/secondfast", "/thirdfast", "/slow?sleep=500"); try (NettyHttpClient nettyHttpClient = new NettyHttpClient()) { @@ -138,7 +140,8 @@ public class NettyHttpServerPipeliningTests extends ESTestCase { @Override public ChannelPipelineFactory configureServerChannelPipelineFactory() { - return new CustomHttpChannelPipelineFactory(this, executorService, NettyHttpServerPipeliningTests.this.threadPool.getThreadContext()); + return new CustomHttpChannelPipelineFactory(this, executorService, NettyHttpServerPipeliningTests.this.threadPool + .getThreadContext()); } @Override @@ -152,7 +155,8 @@ public class NettyHttpServerPipeliningTests extends ESTestCase { private final ExecutorService executorService; - public CustomHttpChannelPipelineFactory(NettyHttpServerTransport transport, ExecutorService executorService, ThreadContext threadContext) { + public CustomHttpChannelPipelineFactory(NettyHttpServerTransport transport, ExecutorService executorService, + ThreadContext threadContext) { super(transport, randomBoolean(), threadContext); this.executorService = executorService; } @@ -214,7 +218,8 @@ public class NettyHttpServerPipeliningTests extends ESTestCase { QueryStringDecoder decoder = new QueryStringDecoder(request.getUri()); - final int timeout = request.getUri().startsWith("/slow") && decoder.getParameters().containsKey("sleep") ? Integer.valueOf(decoder.getParameters().get("sleep").get(0)) : 0; + final int timeout = request.getUri().startsWith("/slow") && decoder.getParameters().containsKey("sleep") + ? Integer.valueOf(decoder.getParameters().get("sleep").get(0)) : 0; if (timeout > 0) { try { Thread.sleep(timeout); diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyHttpServerTransportTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpServerTransportTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/http/netty/NettyHttpServerTransportTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyHttpServerTransportTests.java diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyPipeliningDisabledIT.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyPipeliningDisabledIT.java similarity index 96% rename from core/src/test/java/org/elasticsearch/http/netty/NettyPipeliningDisabledIT.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyPipeliningDisabledIT.java index 576456c0647..126cdb2e284 100644 --- a/core/src/test/java/org/elasticsearch/http/netty/NettyPipeliningDisabledIT.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyPipeliningDisabledIT.java @@ -18,6 +18,7 @@ */ package org.elasticsearch.http.netty; +import org.elasticsearch.ESNettyIntegTestCase; import org.elasticsearch.common.network.NetworkModule; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; @@ -41,7 +42,7 @@ import static org.hamcrest.Matchers.hasSize; * */ @ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numDataNodes = 1) -public class NettyPipeliningDisabledIT extends ESIntegTestCase { +public class NettyPipeliningDisabledIT extends ESNettyIntegTestCase { @Override protected Settings nodeSettings(int nodeOrdinal) { return Settings.builder() diff --git a/core/src/test/java/org/elasticsearch/http/netty/NettyPipeliningEnabledIT.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyPipeliningEnabledIT.java similarity index 70% rename from core/src/test/java/org/elasticsearch/http/netty/NettyPipeliningEnabledIT.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyPipeliningEnabledIT.java index 7ca714ece93..ed938fea511 100644 --- a/core/src/test/java/org/elasticsearch/http/netty/NettyPipeliningEnabledIT.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/NettyPipeliningEnabledIT.java @@ -18,16 +18,16 @@ */ package org.elasticsearch.http.netty; -import org.elasticsearch.common.network.NetworkModule; -import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.http.HttpServerTransport; +import org.elasticsearch.plugins.Plugin; import org.elasticsearch.test.ESIntegTestCase; -import org.elasticsearch.test.ESIntegTestCase.ClusterScope; -import org.elasticsearch.test.ESIntegTestCase.Scope; +import org.elasticsearch.test.ExternalTestCluster; +import org.elasticsearch.transport.NettyPlugin; import org.jboss.netty.handler.codec.http.HttpResponse; +import java.net.InetSocketAddress; import java.util.Collection; import java.util.Locale; @@ -36,26 +36,19 @@ import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; -@ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numDataNodes = 1) public class NettyPipeliningEnabledIT extends ESIntegTestCase { + @Override - protected Settings nodeSettings(int nodeOrdinal) { - return Settings.builder() - .put(super.nodeSettings(nodeOrdinal)) - .put(NetworkModule.HTTP_ENABLED.getKey(), true) - .put("http.pipelining", true) - .build(); + protected Collection> transportClientPlugins() { + return pluginList(NettyPlugin.class); } public void testThatNettyHttpServerSupportsPipelining() throws Exception { String[] requests = new String[]{"/", "/_nodes/stats", "/", "/_cluster/state", "/"}; - HttpServerTransport httpServerTransport = internalCluster().getInstance(HttpServerTransport.class); - TransportAddress[] boundAddresses = httpServerTransport.boundAddress().boundAddresses(); - InetSocketTransportAddress inetSocketTransportAddress = (InetSocketTransportAddress) randomFrom(boundAddresses); - + InetSocketAddress inetSocketAddress = randomFrom(cluster().httpAddresses()); try (NettyHttpClient nettyHttpClient = new NettyHttpClient()) { - Collection responses = nettyHttpClient.get(inetSocketTransportAddress.address(), requests); + Collection responses = nettyHttpClient.get(inetSocketAddress, requests); assertThat(responses, hasSize(5)); Collection opaqueIds = returnOpaqueIds(responses); diff --git a/core/src/test/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandlerTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandlerTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandlerTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/http/netty/pipelining/HttpPipeliningHandlerTests.java diff --git a/core/src/test/java/org/elasticsearch/transport/NettySizeHeaderFrameDecoderTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/NettySizeHeaderFrameDecoderTests.java similarity index 97% rename from core/src/test/java/org/elasticsearch/transport/NettySizeHeaderFrameDecoderTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/NettySizeHeaderFrameDecoderTests.java index f436b719260..8537dc05971 100644 --- a/core/src/test/java/org/elasticsearch/transport/NettySizeHeaderFrameDecoderTests.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/transport/NettySizeHeaderFrameDecoderTests.java @@ -19,11 +19,8 @@ package org.elasticsearch.transport; -import org.elasticsearch.Version; -import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; import org.elasticsearch.common.network.NetworkService; -import org.elasticsearch.common.settings.ClusterSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.transport.TransportAddress; diff --git a/core/src/test/java/org/elasticsearch/transport/netty/ChannelBufferBytesReferenceTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/ChannelBufferBytesReferenceTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/transport/netty/ChannelBufferBytesReferenceTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/ChannelBufferBytesReferenceTests.java diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyScheduledPingTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyScheduledPingTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/transport/netty/NettyScheduledPingTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyScheduledPingTests.java diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java similarity index 93% rename from core/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java index 5552d0e7dc7..dbdab3d245e 100644 --- a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportIT.java @@ -18,6 +18,7 @@ */ package org.elasticsearch.transport.netty; +import org.elasticsearch.ESNettyIntegTestCase; import org.elasticsearch.ElasticsearchException; import org.elasticsearch.Version; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; @@ -46,8 +47,10 @@ import org.jboss.netty.channel.ChannelPipelineFactory; import java.io.IOException; import java.net.InetSocketAddress; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.List; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; @@ -56,21 +59,22 @@ import static org.hamcrest.Matchers.is; * */ @ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numDataNodes = 1) -public class NettyTransportIT extends ESIntegTestCase { +public class NettyTransportIT extends ESNettyIntegTestCase { // static so we can use it in anonymous classes private static String channelProfileName = null; @Override protected Settings nodeSettings(int nodeOrdinal) { return Settings.builder().put(super.nodeSettings(nodeOrdinal)) - .put(Node.NODE_MODE_SETTING.getKey(), "network") - .put(NetworkModule.TRANSPORT_TYPE_KEY, "netty") .put(NetworkModule.TRANSPORT_TYPE_KEY, "exception-throwing").build(); } @Override protected Collection> nodePlugins() { - return pluginList(ExceptionThrowingNettyTransport.TestPlugin.class); + List> list = new ArrayList<>(); + list.add(ExceptionThrowingNettyTransport.TestPlugin.class); + list.addAll(super.nodePlugins()); + return Collections.unmodifiableCollection(list); } public void testThatConnectionFailsAsIntended() throws Exception { diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java similarity index 94% rename from core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java index 0189b73799a..024afe1bf9d 100644 --- a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortIntegrationIT.java @@ -18,6 +18,7 @@ */ package org.elasticsearch.transport.netty; +import org.elasticsearch.ESNettyIntegTestCase; import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; import org.elasticsearch.action.admin.cluster.node.info.NodeInfo; import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse; @@ -30,11 +31,10 @@ import org.elasticsearch.common.transport.BoundTransportAddress; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.env.Environment; -import org.elasticsearch.node.Node; -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.NettyPlugin; import java.net.InetAddress; import java.util.Locale; @@ -48,7 +48,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.lessThanOrEqualTo; @ClusterScope(scope = Scope.SUITE, supportsDedicatedMasters = false, numDataNodes = 1, numClientNodes = 0) -public class NettyTransportMultiPortIntegrationIT extends ESIntegTestCase { +public class NettyTransportMultiPortIntegrationIT extends ESNettyIntegTestCase { private static int randomPort = -1; private static String randomPortRange; @@ -62,8 +62,6 @@ public class NettyTransportMultiPortIntegrationIT extends ESIntegTestCase { Settings.Builder builder = Settings.builder() .put(super.nodeSettings(nodeOrdinal)) .put("network.host", "127.0.0.1") - .put(NetworkModule.TRANSPORT_TYPE_KEY, "netty") - .put(Node.NODE_MODE_SETTING.getKey(), "network") .put("transport.profiles.client1.port", randomPortRange) .put("transport.profiles.client1.publish_host", "127.0.0.7") .put("transport.profiles.client1.publish_port", "4321") @@ -77,7 +75,7 @@ public class NettyTransportMultiPortIntegrationIT extends ESIntegTestCase { .put(NetworkModule.TRANSPORT_TYPE_KEY, "netty") .put(Environment.PATH_HOME_SETTING.getKey(), createTempDir().toString()) .build(); - try (TransportClient transportClient = TransportClient.builder().settings(settings).build()) { + try (TransportClient transportClient = TransportClient.builder().addPlugin(NettyPlugin.class).settings(settings).build()) { transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), randomPort)); ClusterHealthResponse response = transportClient.admin().cluster().prepareHealth().get(); assertThat(response.getStatus(), is(ClusterHealthStatus.GREEN)); diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportMultiPortTests.java diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java similarity index 91% rename from core/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java index 75faa8c49b4..3fdbae59b51 100644 --- a/core/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyTransportPublishAddressIT.java @@ -19,6 +19,7 @@ package org.elasticsearch.transport.netty; +import org.elasticsearch.ESNettyIntegTestCase; import org.elasticsearch.action.admin.cluster.node.info.NodeInfo; import org.elasticsearch.action.admin.cluster.node.info.NodesInfoResponse; import org.elasticsearch.common.network.NetworkModule; @@ -41,14 +42,7 @@ import static org.hamcrest.Matchers.instanceOf; * different ports on ipv4 and ipv6. */ @ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.TEST, numDataNodes = 0) -public class NettyTransportPublishAddressIT extends ESIntegTestCase { - @Override - protected Settings nodeSettings(int nodeOrdinal) { - return Settings.builder() - .put(super.nodeSettings(nodeOrdinal)) - .put(NetworkModule.TRANSPORT_TYPE_KEY, "netty") - .put(Node.NODE_MODE_SETTING.getKey(), "network").build(); - } +public class NettyTransportPublishAddressIT extends ESNettyIntegTestCase { public void testDifferentPorts() throws Exception { if (!NetworkUtils.SUPPORTS_V6) { diff --git a/core/src/test/java/org/elasticsearch/transport/netty/NettyUtilsTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyUtilsTests.java similarity index 100% rename from core/src/test/java/org/elasticsearch/transport/netty/NettyUtilsTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/NettyUtilsTests.java diff --git a/core/src/test/java/org/elasticsearch/transport/netty/SimpleNettyTransportTests.java b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/SimpleNettyTransportTests.java similarity index 71% rename from core/src/test/java/org/elasticsearch/transport/netty/SimpleNettyTransportTests.java rename to modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/SimpleNettyTransportTests.java index 96275d099db..7a57e9e1362 100644 --- a/core/src/test/java/org/elasticsearch/transport/netty/SimpleNettyTransportTests.java +++ b/modules/transport-netty/src/test/java/org/elasticsearch/transport/netty/SimpleNettyTransportTests.java @@ -23,11 +23,16 @@ import org.elasticsearch.Version; import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.common.io.stream.NamedWriteableRegistry; +import org.elasticsearch.common.network.NetworkService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; +import org.elasticsearch.common.util.BigArrays; +import org.elasticsearch.indices.breaker.NoneCircuitBreakerService; import org.elasticsearch.test.transport.MockTransportService; +import org.elasticsearch.threadpool.ThreadPool; import org.elasticsearch.transport.AbstractSimpleTransportTestCase; import org.elasticsearch.transport.ConnectTransportException; +import org.elasticsearch.transport.Transport; import org.elasticsearch.transport.TransportSettings; import java.net.InetAddress; @@ -39,10 +44,24 @@ import static org.hamcrest.Matchers.containsString; public class SimpleNettyTransportTests extends AbstractSimpleTransportTestCase { + public static MockTransportService nettyFromThreadPool( + Settings settings, + ThreadPool threadPool, final Version version) { + NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(); + Transport transport = new NettyTransport(settings, threadPool, new NetworkService(settings), BigArrays.NON_RECYCLING_INSTANCE, + namedWriteableRegistry, new NoneCircuitBreakerService()) { + @Override + protected Version getCurrentVersion() { + return version; + } + }; + return new MockTransportService(Settings.EMPTY, transport, threadPool); + } + @Override protected MockTransportService build(Settings settings, Version version) { settings = Settings.builder().put(settings).put(TransportSettings.PORT.getKey(), "0").build(); - MockTransportService transportService = MockTransportService.nettyFromThreadPool(settings, threadPool, version); + MockTransportService transportService = nettyFromThreadPool(settings, threadPool, version); transportService.start(); return transportService; } diff --git a/modules/transport-netty/src/test/resources/rest-api-spec/test/10_basic.yaml b/modules/transport-netty/src/test/resources/rest-api-spec/test/10_basic.yaml new file mode 100644 index 00000000000..e1f098ea552 --- /dev/null +++ b/modules/transport-netty/src/test/resources/rest-api-spec/test/10_basic.yaml @@ -0,0 +1,13 @@ +# Integration tests for Netty transport +# +"Netty loaded": + - do: + cluster.state: {} + + # Get master node id + - set: { master_node: master } + + - do: + nodes.info: {} + + - match: { nodes.$master.modules.0.name: transport-netty } \ No newline at end of file diff --git a/plugins/discovery-ec2/src/test/java/org/elasticsearch/discovery/ec2/Ec2DiscoveryClusterFormationTests.java b/plugins/discovery-ec2/src/test/java/org/elasticsearch/discovery/ec2/Ec2DiscoveryClusterFormationTests.java index 54f70d80cfb..ebada53025c 100644 --- a/plugins/discovery-ec2/src/test/java/org/elasticsearch/discovery/ec2/Ec2DiscoveryClusterFormationTests.java +++ b/plugins/discovery-ec2/src/test/java/org/elasticsearch/discovery/ec2/Ec2DiscoveryClusterFormationTests.java @@ -22,6 +22,8 @@ package org.elasticsearch.discovery.ec2; import com.amazonaws.util.IOUtils; import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpServer; +import org.apache.http.NameValuePair; +import org.apache.http.client.utils.URLEncodedUtils; import org.elasticsearch.cloud.aws.AwsEc2Service; import org.elasticsearch.common.SuppressForbidden; import org.elasticsearch.common.io.FileSystemUtils; @@ -30,7 +32,6 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.plugin.discovery.ec2.Ec2DiscoveryPlugin; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.test.ESIntegTestCase; -import org.jboss.netty.handler.codec.http.QueryStringDecoder; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -49,7 +50,6 @@ import java.nio.file.Path; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -101,9 +101,13 @@ public class Ec2DiscoveryClusterFormationTests extends ESIntegTestCase { httpServer.createContext("/", (s) -> { Headers headers = s.getResponseHeaders(); headers.add("Content-Type", "text/xml; charset=UTF-8"); - QueryStringDecoder decoder = new QueryStringDecoder("?" + IOUtils.toString(s.getRequestBody())); - Map> queryParams = decoder.getParameters(); - String action = queryParams.get("Action").get(0); + String action = null; + for (NameValuePair parse : URLEncodedUtils.parse(IOUtils.toString(s.getRequestBody()), StandardCharsets.UTF_8)) { + if ("Action".equals(parse.getName())) { + action = parse.getValue(); + break; + } + } assertThat(action, equalTo("DescribeInstances")); XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newFactory(); diff --git a/qa/smoke-test-client/build.gradle b/qa/smoke-test-client/build.gradle index 0475243467a..2cc491efe17 100644 --- a/qa/smoke-test-client/build.gradle +++ b/qa/smoke-test-client/build.gradle @@ -20,3 +20,7 @@ apply plugin: 'elasticsearch.rest-test' // TODO: this test works, but it isn't really a rest test...should we have another plugin for "non rest test that just needs N clusters?" + +dependencies { + testCompile project(path: ':modules:transport-netty', configuration: 'runtime') // randomly swapped in as a transport +} \ No newline at end of file diff --git a/qa/smoke-test-client/src/test/java/org/elasticsearch/smoketest/ESSmokeClientTestCase.java b/qa/smoke-test-client/src/test/java/org/elasticsearch/smoketest/ESSmokeClientTestCase.java index 6297ce244f9..f037ad7142e 100644 --- a/qa/smoke-test-client/src/test/java/org/elasticsearch/smoketest/ESSmokeClientTestCase.java +++ b/qa/smoke-test-client/src/test/java/org/elasticsearch/smoketest/ESSmokeClientTestCase.java @@ -25,12 +25,18 @@ import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.logging.ESLogger; import org.elasticsearch.common.logging.ESLoggerFactory; +import org.elasticsearch.common.network.NetworkModule; +import org.elasticsearch.common.settings.Setting; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.env.Environment; import org.elasticsearch.node.Node; import org.elasticsearch.node.internal.InternalSettingsPreparer; +import org.elasticsearch.plugins.Plugin; +import org.elasticsearch.test.ESIntegTestCase; +import org.elasticsearch.transport.MockTcpTransportPlugin; +import org.elasticsearch.transport.NettyPlugin; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -41,6 +47,8 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.URL; import java.nio.file.Path; +import java.util.Collections; +import java.util.List; import java.util.Locale; import java.util.concurrent.atomic.AtomicInteger; @@ -72,14 +80,34 @@ public abstract class ESSmokeClientTestCase extends LuceneTestCase { private static String clusterAddresses; protected String index; - private static Client startClient(Path tempDir, TransportAddress... transportAddresses) { - Settings clientSettings = Settings.builder() - .put("node.name", "qa_smoke_client_" + counter.getAndIncrement()) - .put("client.transport.ignore_cluster_name", true) - .put(Environment.PATH_HOME_SETTING.getKey(), tempDir) - .put(Node.NODE_MODE_SETTING.getKey(), "network").build(); // we require network here! + public static final class BogusPlugin extends Plugin { + // se NettyPlugin.... this runs without the permission from the netty module so it will fail since reindex can't set the property + // to make it still work we disable that check but need to register the setting first + private static final Setting ASSERT_NETTY_BUGLEVEL = Setting.boolSetting("netty.assert.buglevel", true, + Setting.Property.NodeScope); + @Override + public List> getSettings() { + return Collections.singletonList(ASSERT_NETTY_BUGLEVEL); + } + } - TransportClient.Builder transportClientBuilder = TransportClient.builder().settings(clientSettings); + private static Client startClient(Path tempDir, TransportAddress... transportAddresses) { + TransportClient.Builder transportClientBuilder = TransportClient.builder(); + Settings.Builder builder = Settings.builder() + .put("node.name", "qa_smoke_client_" + counter.getAndIncrement()) + .put("client.transport.ignore_cluster_name", true) + .put(Environment.PATH_HOME_SETTING.getKey(), tempDir) + .put(Node.NODE_MODE_SETTING.getKey(), "network");// we require network here! + if (random().nextBoolean()) { + builder.put(NetworkModule.TRANSPORT_TYPE_KEY, NettyPlugin.NETTY_TRANSPORT_NAME); + transportClientBuilder.addPlugin(NettyPlugin.class); + transportClientBuilder.addPlugin(BogusPlugin.class); + builder.put("netty.assert.buglevel", false); // see BogusPlugin + } else { + builder.put(NetworkModule.TRANSPORT_TYPE_KEY, MockTcpTransportPlugin.MOCK_TCP_TRANSPORT_NAME); + transportClientBuilder.addPlugin(MockTcpTransportPlugin.class); + } + transportClientBuilder.settings(builder.build()); TransportClient client = transportClientBuilder.build().addTransportAddresses(transportAddresses); logger.info("--> Elasticsearch Java TransportClient started"); diff --git a/qa/smoke-test-http/build.gradle b/qa/smoke-test-http/build.gradle index 51a2647f444..6de809eab20 100644 --- a/qa/smoke-test-http/build.gradle +++ b/qa/smoke-test-http/build.gradle @@ -18,3 +18,7 @@ */ apply plugin: 'elasticsearch.rest-test' + +dependencies { + testCompile project(path: ':modules:transport-netty', configuration: 'runtime') // for http +} \ No newline at end of file diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ContextAndHeaderTransportIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ContextAndHeaderTransportIT.java index e271ea10dca..8d68e19e30a 100644 --- a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ContextAndHeaderTransportIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ContextAndHeaderTransportIT.java @@ -47,7 +47,6 @@ import org.elasticsearch.indices.TermsLookup; import org.elasticsearch.plugins.ActionPlugin; import org.elasticsearch.plugins.Plugin; import org.elasticsearch.rest.RestController; -import org.elasticsearch.test.ESIntegTestCase; import org.elasticsearch.test.ESIntegTestCase.ClusterScope; import org.elasticsearch.threadpool.ThreadPool; import org.junit.After; @@ -74,7 +73,7 @@ import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; @ClusterScope(scope = SUITE) -public class ContextAndHeaderTransportIT extends ESIntegTestCase { +public class ContextAndHeaderTransportIT extends HttpSmokeTestCase { private static final List requests = new CopyOnWriteArrayList<>(); private String randomHeaderKey = randomAsciiOfLength(10); private String randomHeaderValue = randomAsciiOfLength(20); @@ -96,7 +95,9 @@ public class ContextAndHeaderTransportIT extends ESIntegTestCase { @Override protected Collection> nodePlugins() { - return pluginList(ActionLoggingPlugin.class); + ArrayList> plugins = new ArrayList<>(super.nodePlugins()); + plugins.add(ActionLoggingPlugin.class); + return plugins; } @Before diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsNotSetIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsNotSetIT.java index ac8eebd8857..7cc84354f6f 100644 --- a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsNotSetIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsNotSetIT.java @@ -26,7 +26,7 @@ import org.elasticsearch.test.ESIntegTestCase; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; -public class CorsNotSetIT extends ESIntegTestCase { +public class CorsNotSetIT extends HttpSmokeTestCase { public void testCorsSettingDefaultBehaviourDoesNotReturnAnything() throws Exception { diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsRegexIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsRegexIT.java index 579698b008c..a7d3f4156df 100644 --- a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsRegexIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/CorsRegexIT.java @@ -21,14 +21,11 @@ package org.elasticsearch.http; import org.apache.http.message.BasicHeader; import org.elasticsearch.client.Response; import org.elasticsearch.client.ResponseException; -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.test.ESIntegTestCase; import org.elasticsearch.test.ESIntegTestCase.ClusterScope; import org.elasticsearch.test.ESIntegTestCase.Scope; -import org.jboss.netty.handler.codec.http.HttpHeaders; import static org.elasticsearch.http.HttpTransportSettings.SETTING_CORS_ALLOW_CREDENTIALS; import static org.elasticsearch.http.HttpTransportSettings.SETTING_CORS_ALLOW_METHODS; @@ -41,7 +38,7 @@ import static org.hamcrest.Matchers.nullValue; * Test CORS where the allow origin value is a regular expression. */ @ClusterScope(scope = Scope.SUITE, supportsDedicatedMasters = false, numDataNodes = 1) -public class CorsRegexIT extends ESIntegTestCase { +public class CorsRegexIT extends HttpSmokeTestCase { @Override protected Settings nodeSettings(int nodeOrdinal) { @@ -105,7 +102,7 @@ public class CorsRegexIT extends ESIntegTestCase { String corsValue = "http://localhost:9200"; try (Response response = getRestClient().performRequest("OPTIONS", "/", new BasicHeader("User-Agent", "Mozilla Bar"), new BasicHeader("Origin", corsValue), - new BasicHeader(HttpHeaders.Names.ACCESS_CONTROL_REQUEST_METHOD, "GET"));) { + new BasicHeader("Access-Control-Request-Method", "GET"));) { assertResponseWithOriginheader(response, corsValue); assertNotNull(response.getHeader("Access-Control-Allow-Methods")); } @@ -115,7 +112,7 @@ public class CorsRegexIT extends ESIntegTestCase { try { getRestClient().performRequest("OPTIONS", "/", new BasicHeader("User-Agent", "Mozilla Bar"), new BasicHeader("Origin", "http://evil-host:9200"), - new BasicHeader(HttpHeaders.Names.ACCESS_CONTROL_REQUEST_METHOD, "GET")); + new BasicHeader("Access-Control-Request-Method", "GET")); fail("request should have failed"); } catch(ResponseException e) { Response response = e.getResponse(); diff --git a/core/src/test/java/org/elasticsearch/rest/DeprecationHttpIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DeprecationHttpIT.java similarity index 92% rename from core/src/test/java/org/elasticsearch/rest/DeprecationHttpIT.java rename to qa/smoke-test-http/src/test/java/org/elasticsearch/http/DeprecationHttpIT.java index 3bb61f64e36..f3b5d214fa4 100644 --- a/core/src/test/java/org/elasticsearch/rest/DeprecationHttpIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DeprecationHttpIT.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.rest; +package org.elasticsearch.http; import org.apache.http.Header; import org.apache.http.HttpEntity; @@ -29,10 +29,6 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.plugins.Plugin; -import org.elasticsearch.rest.plugins.TestDeprecatedQueryBuilder; -import org.elasticsearch.rest.plugins.TestDeprecationHeaderRestAction; -import org.elasticsearch.rest.plugins.TestDeprecationPlugin; -import org.elasticsearch.test.ESIntegTestCase; import org.hamcrest.Matcher; @@ -45,9 +41,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import static org.elasticsearch.rest.RestStatus.OK; -import static org.elasticsearch.rest.plugins.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE1; -import static org.elasticsearch.rest.plugins.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE2; -import static org.elasticsearch.rest.plugins.TestDeprecationHeaderRestAction.TEST_NOT_DEPRECATED_SETTING; +import static org.elasticsearch.http.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE1; +import static org.elasticsearch.http.TestDeprecationHeaderRestAction.TEST_DEPRECATED_SETTING_TRUE2; +import static org.elasticsearch.http.TestDeprecationHeaderRestAction.TEST_NOT_DEPRECATED_SETTING; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItem; @@ -56,7 +52,7 @@ import static org.hamcrest.Matchers.hasSize; /** * Tests {@code DeprecationLogger} uses the {@code ThreadContext} to add response headers. */ -public class DeprecationHttpIT extends ESIntegTestCase { +public class DeprecationHttpIT extends HttpSmokeTestCase { @Override protected Settings nodeSettings(int nodeOrdinal) { @@ -73,7 +69,9 @@ public class DeprecationHttpIT extends ESIntegTestCase { @Override protected Collection> nodePlugins() { - return pluginList(TestDeprecationPlugin.class); + ArrayList> plugins = new ArrayList<>(super.nodePlugins()); + plugins.add(TestDeprecationPlugin.class); + return plugins; } /** diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsDisabledIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsDisabledIT.java index 6f103952112..feca7cd1d5f 100644 --- a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsDisabledIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsDisabledIT.java @@ -36,7 +36,7 @@ import static org.hamcrest.Matchers.is; * Tests that when disabling detailed errors, a request with the error_trace parameter returns a HTTP 400 */ @ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numDataNodes = 1) -public class DetailedErrorsDisabledIT extends ESIntegTestCase { +public class DetailedErrorsDisabledIT extends HttpSmokeTestCase { // Build our cluster settings @Override protected Settings nodeSettings(int nodeOrdinal) { diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsEnabledIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsEnabledIT.java index dd55df33572..daabb1bc70d 100644 --- a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsEnabledIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/DetailedErrorsEnabledIT.java @@ -35,7 +35,7 @@ import static org.hamcrest.Matchers.not; /** * Tests that by default the error_trace parameter can be used to show stacktraces */ -public class DetailedErrorsEnabledIT extends ESIntegTestCase { +public class DetailedErrorsEnabledIT extends HttpSmokeTestCase { public void testThatErrorTraceWorksByDefault() throws Exception { try { diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/HttpCompressionIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/HttpCompressionIT.java index 6319d494e16..f08bb2b4a9e 100644 --- a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/HttpCompressionIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/HttpCompressionIT.java @@ -33,7 +33,6 @@ import org.elasticsearch.test.ESIntegTestCase; import java.io.IOException; import java.util.Collections; -@ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE, numDataNodes = 1, numClientNodes = 1) public class HttpCompressionIT extends ESIntegTestCase { private static final String GZIP_ENCODING = "gzip"; @@ -44,6 +43,10 @@ public class HttpCompressionIT extends ESIntegTestCase { " }\n" + "}", RestClient.JSON_CONTENT_TYPE); + @Override + protected boolean ignoreExternalCluster() { + return false; + } public void testCompressesResponseIfRequested() throws Exception { ensureGreen(); diff --git a/qa/smoke-test-http/src/test/java/org/elasticsearch/http/HttpSmokeTestCase.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/HttpSmokeTestCase.java new file mode 100644 index 00000000000..ac420c9b56a --- /dev/null +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/HttpSmokeTestCase.java @@ -0,0 +1,81 @@ +/* + * 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.network.NetworkModule; +import org.elasticsearch.common.settings.Setting; +import org.elasticsearch.common.settings.Settings; +import org.elasticsearch.plugins.Plugin; +import org.elasticsearch.test.ESIntegTestCase; +import org.elasticsearch.transport.MockTcpTransport; +import org.elasticsearch.transport.MockTcpTransportPlugin; +import org.elasticsearch.transport.NettyPlugin; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public abstract class HttpSmokeTestCase extends ESIntegTestCase { + + @Override + protected Settings nodeSettings(int nodeOrdinal) { + return Settings.builder() + .put(super.nodeSettings(nodeOrdinal)) + .put("netty.assert.buglevel", false) + .put(NetworkModule.TRANSPORT_TYPE_KEY, randomFrom(NettyPlugin.NETTY_TRANSPORT_NAME, + MockTcpTransportPlugin.MOCK_TCP_TRANSPORT_NAME)) + .put(NetworkModule.HTTP_ENABLED.getKey(), true).build(); + } + + @Override + protected Collection> nodePlugins() { + return pluginList(MockTcpTransportPlugin.class, NettyPlugin.class, BogusPlugin.class); + } + + @Override + protected Collection> transportClientPlugins() { + return pluginList(MockTcpTransportPlugin.class, NettyPlugin.class, BogusPlugin.class); + } + + @Override + protected Settings transportClientSettings() { + return Settings.builder() + .put(super.transportClientSettings()) + .put("netty.assert.buglevel", false) + .put(NetworkModule.TRANSPORT_TYPE_KEY, randomFrom(NettyPlugin.NETTY_TRANSPORT_NAME, + MockTcpTransportPlugin.MOCK_TCP_TRANSPORT_NAME)).build(); + } + + @Override + protected boolean ignoreExternalCluster() { + return true; + } + + + public static final class BogusPlugin extends Plugin { + // see NettyPlugin.... this runs without the permission from the netty module so it will fail since reindex can't set the property + // to make it still work we disable that check but need to register the setting first + private static final Setting ASSERT_NETTY_BUGLEVEL = Setting.boolSetting("netty.assert.buglevel", true, + Setting.Property.NodeScope); + @Override + public List> getSettings() { + return Collections.singletonList(ASSERT_NETTY_BUGLEVEL); + } + } +} diff --git a/core/src/test/java/org/elasticsearch/plugins/ResponseHeaderPluginIT.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ResponseHeaderPluginIT.java similarity index 85% rename from core/src/test/java/org/elasticsearch/plugins/ResponseHeaderPluginIT.java rename to qa/smoke-test-http/src/test/java/org/elasticsearch/http/ResponseHeaderPluginIT.java index 59b52f5cf39..482edc36702 100644 --- a/core/src/test/java/org/elasticsearch/plugins/ResponseHeaderPluginIT.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/ResponseHeaderPluginIT.java @@ -16,17 +16,17 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.plugins; +package org.elasticsearch.http; import org.apache.http.message.BasicHeader; import org.elasticsearch.client.Response; import org.elasticsearch.client.ResponseException; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.plugins.responseheader.TestResponseHeaderPlugin; -import org.elasticsearch.test.ESIntegTestCase; +import org.elasticsearch.plugins.Plugin; import org.elasticsearch.test.ESIntegTestCase.ClusterScope; import org.elasticsearch.test.ESIntegTestCase.Scope; +import java.util.ArrayList; import java.util.Collection; import static org.hamcrest.Matchers.equalTo; @@ -35,7 +35,7 @@ import static org.hamcrest.Matchers.equalTo; * Test a rest action that sets special response headers */ @ClusterScope(scope = Scope.SUITE, supportsDedicatedMasters = false, numDataNodes = 1) -public class ResponseHeaderPluginIT extends ESIntegTestCase { +public class ResponseHeaderPluginIT extends HttpSmokeTestCase { @Override protected Settings nodeSettings(int nodeOrdinal) { return Settings.builder() @@ -44,9 +44,16 @@ public class ResponseHeaderPluginIT extends ESIntegTestCase { .build(); } + @Override + protected boolean ignoreExternalCluster() { + return true; + } + @Override protected Collection> nodePlugins() { - return pluginList(TestResponseHeaderPlugin.class); + ArrayList> plugins = new ArrayList<>(super.nodePlugins()); + plugins.add(TestResponseHeaderPlugin.class); + return plugins; } public void testThatSettingHeadersWorks() throws Exception { diff --git a/core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecatedQueryBuilder.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecatedQueryBuilder.java similarity index 98% rename from core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecatedQueryBuilder.java rename to qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecatedQueryBuilder.java index f3b02d1f6bc..6e168fed7af 100644 --- a/core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecatedQueryBuilder.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecatedQueryBuilder.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.rest.plugins; +package org.elasticsearch.http; import org.apache.lucene.search.Query; import org.elasticsearch.common.ParseField; diff --git a/core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecationHeaderRestAction.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecationHeaderRestAction.java similarity index 99% rename from core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecationHeaderRestAction.java rename to qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecationHeaderRestAction.java index da1d165b6cf..cff7b55f9de 100644 --- a/core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecationHeaderRestAction.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecationHeaderRestAction.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.rest.plugins; +package org.elasticsearch.http; import org.elasticsearch.client.node.NodeClient; import org.elasticsearch.common.inject.Inject; diff --git a/core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecationPlugin.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecationPlugin.java similarity index 98% rename from core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecationPlugin.java rename to qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecationPlugin.java index c85674a1962..f64bccb6315 100644 --- a/core/src/test/java/org/elasticsearch/rest/plugins/TestDeprecationPlugin.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestDeprecationPlugin.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.rest.plugins; +package org.elasticsearch.http; import org.elasticsearch.common.settings.Setting; import org.elasticsearch.plugins.ActionPlugin; diff --git a/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderPlugin.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestResponseHeaderPlugin.java similarity index 96% rename from core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderPlugin.java rename to qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestResponseHeaderPlugin.java index 9dfd5b6a93a..398f990a5cf 100644 --- a/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderPlugin.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestResponseHeaderPlugin.java @@ -17,7 +17,7 @@ * under the License. */ -package org.elasticsearch.plugins.responseheader; +package org.elasticsearch.http; import org.elasticsearch.plugins.ActionPlugin; import org.elasticsearch.plugins.Plugin; diff --git a/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderRestAction.java b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestResponseHeaderRestAction.java similarity index 97% rename from core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderRestAction.java rename to qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestResponseHeaderRestAction.java index 499b6fadc93..a321fc0a457 100644 --- a/core/src/test/java/org/elasticsearch/plugins/responseheader/TestResponseHeaderRestAction.java +++ b/qa/smoke-test-http/src/test/java/org/elasticsearch/http/TestResponseHeaderRestAction.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.elasticsearch.plugins.responseheader; +package org.elasticsearch.http; import org.elasticsearch.client.node.NodeClient; import org.elasticsearch.common.inject.Inject; diff --git a/settings.gradle b/settings.gradle index 43c374b2e1a..e152569d00a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -24,6 +24,7 @@ List projects = [ 'modules:lang-groovy', 'modules:lang-mustache', 'modules:lang-painless', + 'modules:transport-netty', 'modules:reindex', 'modules:percolator', 'plugins:analysis-icu', diff --git a/core/src/test/java/org/elasticsearch/common/bytes/AbstractBytesReferenceTestCase.java b/test/framework/src/main/java/org/elasticsearch/common/bytes/AbstractBytesReferenceTestCase.java similarity index 100% rename from core/src/test/java/org/elasticsearch/common/bytes/AbstractBytesReferenceTestCase.java rename to test/framework/src/main/java/org/elasticsearch/common/bytes/AbstractBytesReferenceTestCase.java diff --git a/test/framework/src/main/java/org/elasticsearch/test/ESIntegTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/ESIntegTestCase.java index 73d0fc71ee7..445f70026dc 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/ESIntegTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/ESIntegTestCase.java @@ -1772,7 +1772,7 @@ public abstract class ESIntegTestCase extends ESTestCase { @Override public Collection> transportClientPlugins() { Collection> plugins = ESIntegTestCase.this.transportClientPlugins(); - if (isNetwork) { + if (isNetwork && plugins.contains(MockTcpTransportPlugin.class) == false) { plugins = new ArrayList<>(plugins); plugins.add(MockTcpTransportPlugin.class); } diff --git a/test/framework/src/main/java/org/elasticsearch/test/ExternalTestCluster.java b/test/framework/src/main/java/org/elasticsearch/test/ExternalTestCluster.java index 71fe622d8c0..6cee28b50bb 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/ExternalTestCluster.java +++ b/test/framework/src/main/java/org/elasticsearch/test/ExternalTestCluster.java @@ -29,6 +29,7 @@ import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.common.breaker.CircuitBreaker; 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.InetSocketTransportAddress; import org.elasticsearch.common.transport.TransportAddress; @@ -36,6 +37,8 @@ import org.elasticsearch.env.Environment; import org.elasticsearch.node.Node; import org.elasticsearch.node.internal.InternalSettingsPreparer; import org.elasticsearch.plugins.Plugin; +import org.elasticsearch.transport.MockTcpTransport; +import org.elasticsearch.transport.MockTcpTransportPlugin; import java.io.IOException; import java.net.InetSocketAddress; @@ -70,14 +73,22 @@ public final class ExternalTestCluster extends TestCluster { public ExternalTestCluster(Path tempDir, Settings additionalSettings, Collection> pluginClasses, TransportAddress... transportAddresses) { super(0); - Settings clientSettings = Settings.builder() - .put(additionalSettings) - .put("node.name", InternalTestCluster.TRANSPORT_CLIENT_PREFIX + EXTERNAL_CLUSTER_PREFIX + counter.getAndIncrement()) - .put("client.transport.ignore_cluster_name", true) - .put(Environment.PATH_HOME_SETTING.getKey(), tempDir) - .put(Node.NODE_MODE_SETTING.getKey(), "network").build(); // we require network here! - - TransportClient.Builder transportClientBuilder = TransportClient.builder().settings(clientSettings); + Settings.Builder clientSettingsBuilder = Settings.builder() + .put(additionalSettings) + .put("node.name", InternalTestCluster.TRANSPORT_CLIENT_PREFIX + EXTERNAL_CLUSTER_PREFIX + counter.getAndIncrement()) + .put("client.transport.ignore_cluster_name", true) + .put(Environment.PATH_HOME_SETTING.getKey(), tempDir) + .put(Node.NODE_MODE_SETTING.getKey(), "network");// we require network here! + TransportClient.Builder transportClientBuilder = TransportClient.builder(); + boolean addMockTcpTransport = additionalSettings.get(NetworkModule.TRANSPORT_TYPE_KEY) == null; + if (addMockTcpTransport) { + clientSettingsBuilder.put(NetworkModule.TRANSPORT_TYPE_KEY, MockTcpTransportPlugin.MOCK_TCP_TRANSPORT_NAME); + if (pluginClasses.contains(MockTcpTransportPlugin.class) == false) { + transportClientBuilder.addPlugin(MockTcpTransportPlugin.class); + } + } + Settings clientSettings = clientSettingsBuilder.build(); + transportClientBuilder.settings(clientSettings); for (Class pluginClass : pluginClasses) { transportClientBuilder.addPlugin(pluginClass); } diff --git a/test/framework/src/main/java/org/elasticsearch/test/InternalTestCluster.java b/test/framework/src/main/java/org/elasticsearch/test/InternalTestCluster.java index dc21dd73e02..9ef47cd78cf 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/InternalTestCluster.java +++ b/test/framework/src/main/java/org/elasticsearch/test/InternalTestCluster.java @@ -86,13 +86,11 @@ import org.elasticsearch.plugins.Plugin; import org.elasticsearch.script.ScriptService; import org.elasticsearch.search.SearchService; import org.elasticsearch.test.disruption.ServiceDisruptionScheme; -import org.elasticsearch.test.transport.AssertingLocalTransport; import org.elasticsearch.test.transport.MockTransportService; import org.elasticsearch.transport.TcpTransport; import org.elasticsearch.transport.Transport; import org.elasticsearch.transport.TransportService; import org.elasticsearch.transport.TransportSettings; -import org.elasticsearch.transport.netty.NettyTransport; import org.junit.Assert; import java.io.Closeable; @@ -414,9 +412,8 @@ public final class InternalTestCluster extends TestCluster { } } - // randomize netty settings + // randomize tcp settings if (random.nextBoolean()) { - builder.put(NettyTransport.WORKER_COUNT.getKey(), random.nextInt(3) + 1); builder.put(TcpTransport.CONNECTIONS_PER_NODE_RECOVERY.getKey(), random.nextInt(2) + 1); builder.put(TcpTransport.CONNECTIONS_PER_NODE_BULK.getKey(), random.nextInt(3) + 1); builder.put(TcpTransport.CONNECTIONS_PER_NODE_REG.getKey(), random.nextInt(6) + 1); diff --git a/test/framework/src/main/java/org/elasticsearch/test/NodeConfigurationSource.java b/test/framework/src/main/java/org/elasticsearch/test/NodeConfigurationSource.java index e04e840e525..6d8d36e3d11 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/NodeConfigurationSource.java +++ b/test/framework/src/main/java/org/elasticsearch/test/NodeConfigurationSource.java @@ -29,12 +29,12 @@ public abstract class NodeConfigurationSource { public static final NodeConfigurationSource EMPTY = new NodeConfigurationSource() { @Override public Settings nodeSettings(int nodeOrdinal) { - return null; + return Settings.EMPTY; } @Override public Settings transportClientSettings() { - return null; + return Settings.EMPTY; } }; @@ -48,7 +48,9 @@ public abstract class NodeConfigurationSource { return Collections.emptyList(); } - public abstract Settings transportClientSettings(); + public Settings transportClientSettings() { + return Settings.EMPTY; + } /** Returns plugins that should be loaded in the transport client */ public Collection> transportClientPlugins() { 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 463b31905d2..d7f806f27b0 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 @@ -35,7 +35,6 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.BoundTransportAddress; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.unit.TimeValue; -import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.common.util.concurrent.AbstractRunnable; import org.elasticsearch.common.util.concurrent.ConcurrentCollections; import org.elasticsearch.indices.breaker.NoneCircuitBreakerService; @@ -51,7 +50,6 @@ import org.elasticsearch.transport.TransportRequest; import org.elasticsearch.transport.TransportRequestOptions; import org.elasticsearch.transport.TransportServiceAdapter; import org.elasticsearch.transport.local.LocalTransport; -import org.elasticsearch.transport.netty.NettyTransport; import java.io.IOException; import java.util.Arrays; @@ -101,21 +99,6 @@ public class MockTransportService extends TransportService { return new MockTransportService(settings, transport, threadPool); } - public static MockTransportService nettyFromThreadPool( - Settings settings, - ThreadPool threadPool, final Version version) { - NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(); - Transport transport = new NettyTransport(settings, threadPool, new NetworkService(settings), BigArrays.NON_RECYCLING_INSTANCE, - namedWriteableRegistry, new NoneCircuitBreakerService()) { - @Override - protected Version getCurrentVersion() { - return version; - } - }; - return new MockTransportService(Settings.EMPTY, transport, threadPool); - } - - private final Transport original; @Inject diff --git a/test/framework/src/test/java/org/elasticsearch/test/test/InternalTestClusterTests.java b/test/framework/src/test/java/org/elasticsearch/test/test/InternalTestClusterTests.java index 5bf11e4dc98..43f276197c6 100644 --- a/test/framework/src/test/java/org/elasticsearch/test/test/InternalTestClusterTests.java +++ b/test/framework/src/test/java/org/elasticsearch/test/test/InternalTestClusterTests.java @@ -24,6 +24,7 @@ import org.elasticsearch.client.Client; import org.elasticsearch.cluster.ClusterName; import org.elasticsearch.cluster.node.DiscoveryNode; import org.elasticsearch.cluster.service.ClusterService; +import org.elasticsearch.common.network.NetworkModule; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.discovery.DiscoverySettings; import org.elasticsearch.env.NodeEnvironment; @@ -125,15 +126,16 @@ public class InternalTestClusterTests extends ESTestCase { boolean masterNodes = randomBoolean(); int minNumDataNodes = randomIntBetween(0, 3); int maxNumDataNodes = randomIntBetween(minNumDataNodes, 4); - final String clusterName1 = "shared1";//clusterName("shared1", clusterSeed); - final String clusterName2 = "shared2";//clusterName("shared", Integer.toString(CHILD_JVM_ID), clusterSeed); - /*while (clusterName.equals(clusterName1)) { - clusterName1 = clusterName("shared", Integer.toString(CHILD_JVM_ID), clusterSeed); // spin until the time changes - }*/ - NodeConfigurationSource nodeConfigurationSource = NodeConfigurationSource.EMPTY; + final String clusterName1 = "shared1"; + final String clusterName2 = "shared2"; + NodeConfigurationSource nodeConfigurationSource = new NodeConfigurationSource() { + @Override + public Settings nodeSettings(int nodeOrdinal) { + return Settings.builder().put(NetworkModule.HTTP_ENABLED.getKey(), false).build(); + } + }; int numClientNodes = randomIntBetween(0, 2); boolean enableHttpPipelining = randomBoolean(); - int jvmOrdinal = randomIntBetween(0, 10); String nodePrefix = "foobar"; Path baseDir = createTempDir(); @@ -177,8 +179,12 @@ public class InternalTestClusterTests extends ESTestCase { int minNumDataNodes = 2; int maxNumDataNodes = 2; final String clusterName1 = "shared1"; - NodeConfigurationSource nodeConfigurationSource = NodeConfigurationSource.EMPTY; - int numClientNodes = randomIntBetween(0, 2); + NodeConfigurationSource nodeConfigurationSource = new NodeConfigurationSource() { + @Override + public Settings nodeSettings(int nodeOrdinal) { + return Settings.builder().put(NetworkModule.HTTP_ENABLED.getKey(), false).build(); + } + }; int numClientNodes = randomIntBetween(0, 2); boolean enableHttpPipelining = randomBoolean(); String nodePrefix = "test"; Path baseDir = createTempDir(); @@ -248,7 +254,9 @@ public class InternalTestClusterTests extends ESTestCase { new NodeConfigurationSource() { @Override public Settings nodeSettings(int nodeOrdinal) { - return Settings.builder().put(DiscoverySettings.INITIAL_STATE_TIMEOUT_SETTING.getKey(), 0).build(); + return Settings.builder() + .put(NetworkModule.HTTP_ENABLED.getKey(), false) + .put(DiscoverySettings.INITIAL_STATE_TIMEOUT_SETTING.getKey(), 0).build(); } @Override