From fa8ccf0843d1c09425efcbe3e86edbc2fd3c90cf Mon Sep 17 00:00:00 2001 From: Craig Perkins Date: Thu, 5 Oct 2023 19:58:58 -0400 Subject: [PATCH 1/3] [Backport 1.3] Allow customization of netty channel handles before and during decompression (#10261) Signed-off-by: Peter Nied --- CHANGELOG.md | 2 + .../http/netty4/Netty4HeaderVerifierIT.java | 75 +++++++++++ .../transport/Netty4BlockingPlugin.java | 127 ++++++++++++++++++ .../netty4/Netty4HttpServerTransport.java | 22 ++- .../opensearch/transport/Netty4Plugin.java | 2 +- 5 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java create mode 100644 modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4BlockingPlugin.java diff --git a/CHANGELOG.md b/CHANGELOG.md index deb3e845cd81d..eb84b389901bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [Unreleased 1.3.x] ### Added +- Improve compressed request handling ([#10261](https://github.com/opensearch-project/OpenSearch/pull/10261)) + ### Dependencies - Bump asm from 9.5 to 9.6 ([#10302](https://github.com/opensearch-project/OpenSearch/pull/10302)) - Bump netty from 4.1.97.Final to 4.1.99.Final ([#10303](https://github.com/opensearch-project/OpenSearch/pull/10303)) diff --git a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java new file mode 100644 index 0000000000000..c39567a005fd1 --- /dev/null +++ b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java @@ -0,0 +1,75 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + */ + +package org.opensearch.http.netty4; + +import org.opensearch.OpenSearchNetty4IntegTestCase; +import org.opensearch.core.common.transport.TransportAddress; +import org.opensearch.http.HttpServerTransport; +import org.opensearch.plugins.Plugin; +import org.opensearch.test.OpenSearchIntegTestCase.ClusterScope; +import org.opensearch.test.OpenSearchIntegTestCase.Scope; +import org.opensearch.transport.Netty4BlockingPlugin; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import io.netty.buffer.ByteBufUtil; +import io.netty.handler.codec.http.DefaultFullHttpRequest; +import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpVersion; +import io.netty.handler.codec.http2.HttpConversionUtil; +import io.netty.util.ReferenceCounted; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.equalTo; +import static io.netty.handler.codec.http.HttpHeaderNames.HOST; + +@ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numDataNodes = 1) +public class Netty4HeaderVerifierIT extends OpenSearchNetty4IntegTestCase { + + @Override + protected boolean addMockHttpTransport() { + return false; // enable http + } + + @Override + protected Collection> nodePlugins() { + return Collections.singletonList(Netty4BlockingPlugin.class); + } + + public void testThatNettyHttpServerRequestBlockedWithHeaderVerifier() throws Exception { + HttpServerTransport httpServerTransport = internalCluster().getInstance(HttpServerTransport.class); + TransportAddress[] boundAddresses = httpServerTransport.boundAddress().boundAddresses(); + TransportAddress transportAddress = randomFrom(boundAddresses); + + final FullHttpRequest blockedRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/"); + blockedRequest.headers().add("blockme", "Not Allowed"); + blockedRequest.headers().add(HOST, "localhost"); + blockedRequest.headers().add(HttpConversionUtil.ExtensionHeaderNames.SCHEME.text(), "http"); + + final List responses = new ArrayList<>(); + try (Netty4HttpClient nettyHttpClient = Netty4HttpClient.http2()) { + try { + FullHttpResponse blockedResponse = nettyHttpClient.send(transportAddress.address(), blockedRequest); + responses.add(blockedResponse); + String blockedResponseContent = new String(ByteBufUtil.getBytes(blockedResponse.content()), StandardCharsets.UTF_8); + assertThat(blockedResponseContent, containsString("Hit header_verifier")); + assertThat(blockedResponse.status().code(), equalTo(401)); + } finally { + responses.forEach(ReferenceCounted::release); + } + } + } + +} diff --git a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4BlockingPlugin.java b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4BlockingPlugin.java new file mode 100644 index 0000000000000..d5fe49952add3 --- /dev/null +++ b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4BlockingPlugin.java @@ -0,0 +1,127 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + */ + +package org.opensearch.transport; + +import org.opensearch.common.network.NetworkService; +import org.opensearch.common.settings.ClusterSettings; +import org.opensearch.common.settings.Settings; +import org.opensearch.common.util.BigArrays; +import org.opensearch.common.util.PageCacheRecycler; +import org.opensearch.core.indices.breaker.CircuitBreakerService; +import org.opensearch.core.xcontent.NamedXContentRegistry; +import org.opensearch.http.HttpServerTransport; +import org.opensearch.http.netty4.Netty4HttpServerTransport; +import org.opensearch.telemetry.tracing.Tracer; +import org.opensearch.threadpool.ThreadPool; + +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Map; +import java.util.function.Supplier; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.DefaultHttpRequest; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponseStatus; +import io.netty.util.ReferenceCountUtil; + +public class Netty4BlockingPlugin extends Netty4ModulePlugin { + + public class Netty4BlockingHttpServerTransport extends Netty4HttpServerTransport { + + public Netty4BlockingHttpServerTransport( + Settings settings, + NetworkService networkService, + BigArrays bigArrays, + ThreadPool threadPool, + NamedXContentRegistry xContentRegistry, + Dispatcher dispatcher, + ClusterSettings clusterSettings, + SharedGroupFactory sharedGroupFactory, + Tracer tracer + ) { + super( + settings, + networkService, + bigArrays, + threadPool, + xContentRegistry, + dispatcher, + clusterSettings, + sharedGroupFactory, + tracer + ); + } + + @Override + protected ChannelInboundHandlerAdapter createHeaderVerifier() { + return new ExampleBlockingNetty4HeaderVerifier(); + } + } + + @Override + public Map> getHttpTransports( + Settings settings, + ThreadPool threadPool, + BigArrays bigArrays, + PageCacheRecycler pageCacheRecycler, + CircuitBreakerService circuitBreakerService, + NamedXContentRegistry xContentRegistry, + NetworkService networkService, + HttpServerTransport.Dispatcher dispatcher, + ClusterSettings clusterSettings, + Tracer tracer + ) { + return Collections.singletonMap( + NETTY_HTTP_TRANSPORT_NAME, + () -> new Netty4BlockingHttpServerTransport( + settings, + networkService, + bigArrays, + threadPool, + xContentRegistry, + dispatcher, + clusterSettings, + getSharedGroupFactory(settings), + tracer + ) + ); + } + + /** POC for how an external header verifier would be implemented */ + public class ExampleBlockingNetty4HeaderVerifier extends SimpleChannelInboundHandler { + + @Override + public void channelRead0(ChannelHandlerContext ctx, DefaultHttpRequest msg) throws Exception { + ReferenceCountUtil.retain(msg); + if (isBlocked(msg)) { + ByteBuf buf = Unpooled.copiedBuffer("Hit header_verifier".getBytes(StandardCharsets.UTF_8)); + final FullHttpResponse response = new DefaultFullHttpResponse(msg.protocolVersion(), HttpResponseStatus.UNAUTHORIZED, buf); + ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE); + ReferenceCountUtil.release(msg); + } else { + // Lets the request pass to the next channel handler + ctx.fireChannelRead(msg); + } + } + + private boolean isBlocked(HttpRequest request) { + final boolean shouldBlock = request.headers().contains("blockme"); + + return shouldBlock; + } + } +} diff --git a/modules/transport-netty4/src/main/java/org/opensearch/http/netty4/Netty4HttpServerTransport.java b/modules/transport-netty4/src/main/java/org/opensearch/http/netty4/Netty4HttpServerTransport.java index b077723bd65c5..38e0e93ffa341 100644 --- a/modules/transport-netty4/src/main/java/org/opensearch/http/netty4/Netty4HttpServerTransport.java +++ b/modules/transport-netty4/src/main/java/org/opensearch/http/netty4/Netty4HttpServerTransport.java @@ -314,7 +314,7 @@ public ChannelHandler configureServerChannelHandler() { return new HttpChannelHandler(this, handlingSettings); } - static final AttributeKey HTTP_CHANNEL_KEY = AttributeKey.newInstance("es-http-channel"); + public static final AttributeKey HTTP_CHANNEL_KEY = AttributeKey.newInstance("es-http-channel"); static final AttributeKey HTTP_SERVER_CHANNEL_KEY = AttributeKey.newInstance("es-http-server-channel"); protected static class HttpChannelHandler extends ChannelInitializer { @@ -348,7 +348,8 @@ protected void initChannel(Channel ch) throws Exception { ); decoder.setCumulator(ByteToMessageDecoder.COMPOSITE_CUMULATOR); ch.pipeline().addLast("decoder", decoder); - ch.pipeline().addLast("decoder_compress", new HttpContentDecompressor()); + ch.pipeline().addLast("header_verifier", transport.createHeaderVerifier()); + ch.pipeline().addLast("decoder_compress", transport.createDecompressor()); ch.pipeline().addLast("encoder", new HttpResponseEncoder()); final HttpObjectAggregator aggregator = new HttpObjectAggregator(handlingSettings.getMaxContentLength()); aggregator.setMaxCumulationBufferComponents(transport.maxCompositeBufferComponents); @@ -390,4 +391,21 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { } } } + + /** + * Extension point that allows a NetworkPlugin to extend the netty pipeline and inspect headers after request decoding + */ + protected ChannelInboundHandlerAdapter createHeaderVerifier() { + // pass-through + return new ChannelInboundHandlerAdapter(); + } + + /** + * Extension point that allows a NetworkPlugin to override the default netty HttpContentDecompressor and supply a custom decompressor. + * + * Used in instances to conditionally decompress depending on the outcome from header verification + */ + protected ChannelInboundHandlerAdapter createDecompressor() { + return new HttpContentDecompressor(); + } } diff --git a/modules/transport-netty4/src/main/java/org/opensearch/transport/Netty4Plugin.java b/modules/transport-netty4/src/main/java/org/opensearch/transport/Netty4Plugin.java index 73cfe4e46fbda..e9226b89430bd 100644 --- a/modules/transport-netty4/src/main/java/org/opensearch/transport/Netty4Plugin.java +++ b/modules/transport-netty4/src/main/java/org/opensearch/transport/Netty4Plugin.java @@ -139,7 +139,7 @@ public Map> getHttpTransports( ); } - private SharedGroupFactory getSharedGroupFactory(Settings settings) { + SharedGroupFactory getSharedGroupFactory(Settings settings) { SharedGroupFactory groupFactory = this.groupFactory.get(); if (groupFactory != null) { assert groupFactory.getSettings().equals(settings) : "Different settings than originally provided"; From 96da1b9ae5eb3f5ed69da327c4ecf6b5b493ab4a Mon Sep 17 00:00:00 2001 From: Peter Nied Date: Tue, 7 Nov 2023 23:18:29 +0000 Subject: [PATCH 2/3] Fix test cases issues by switching to marked instead of blocked workflow Signed-off-by: Peter Nied --- .../http/netty4/Netty4HeaderVerifierIT.java | 33 ++++++------ ...in.java => Netty4MarkedMessagePlugin.java} | 52 +++++++------------ 2 files changed, 38 insertions(+), 47 deletions(-) rename modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/{Netty4BlockingPlugin.java => Netty4MarkedMessagePlugin.java} (66%) diff --git a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java index c39567a005fd1..721144fa1a9be 100644 --- a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java +++ b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java @@ -9,12 +9,12 @@ package org.opensearch.http.netty4; import org.opensearch.OpenSearchNetty4IntegTestCase; -import org.opensearch.core.common.transport.TransportAddress; +import org.opensearch.common.transport.TransportAddress; import org.opensearch.http.HttpServerTransport; import org.opensearch.plugins.Plugin; import org.opensearch.test.OpenSearchIntegTestCase.ClusterScope; import org.opensearch.test.OpenSearchIntegTestCase.Scope; -import org.opensearch.transport.Netty4BlockingPlugin; +import org.opensearch.transport.Netty4MarkedMessagePlugin; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -28,11 +28,12 @@ import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpVersion; -import io.netty.handler.codec.http2.HttpConversionUtil; import io.netty.util.ReferenceCounted; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.hasItems; +import static org.junit.Assert.assertThat; import static io.netty.handler.codec.http.HttpHeaderNames.HOST; @ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numDataNodes = 1) @@ -45,31 +46,33 @@ protected boolean addMockHttpTransport() { @Override protected Collection> nodePlugins() { - return Collections.singletonList(Netty4BlockingPlugin.class); + return Collections.singletonList(Netty4MarkedMessagePlugin.class); } - public void testThatNettyHttpServerRequestBlockedWithHeaderVerifier() throws Exception { + public void testThatNettyHttpServerRequestMarksMessageWithHeaderVerifier() throws Exception { HttpServerTransport httpServerTransport = internalCluster().getInstance(HttpServerTransport.class); TransportAddress[] boundAddresses = httpServerTransport.boundAddress().boundAddresses(); TransportAddress transportAddress = randomFrom(boundAddresses); - final FullHttpRequest blockedRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/"); - blockedRequest.headers().add("blockme", "Not Allowed"); - blockedRequest.headers().add(HOST, "localhost"); - blockedRequest.headers().add(HttpConversionUtil.ExtensionHeaderNames.SCHEME.text(), "http"); + final FullHttpRequest markedRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/"); + final String expectedMarkedHeaderValue = "Mark with" + randomAlphaOfLength(10); + markedRequest.headers().add("marked-message", expectedMarkedHeaderValue); final List responses = new ArrayList<>(); - try (Netty4HttpClient nettyHttpClient = Netty4HttpClient.http2()) { + try (Netty4HttpClient nettyHttpClient = new Netty4HttpClient()) { try { - FullHttpResponse blockedResponse = nettyHttpClient.send(transportAddress.address(), blockedRequest); - responses.add(blockedResponse); - String blockedResponseContent = new String(ByteBufUtil.getBytes(blockedResponse.content()), StandardCharsets.UTF_8); - assertThat(blockedResponseContent, containsString("Hit header_verifier")); - assertThat(blockedResponse.status().code(), equalTo(401)); + final FullHttpResponse markedResponse = nettyHttpClient.send(transportAddress.address(), markedRequest); + responses.add(markedResponse); + final String rootResponseContent = new String(ByteBufUtil.getBytes(markedResponse.content()), StandardCharsets.UTF_8); + assertThat(rootResponseContent, containsString("opensearch")); + assertThat(markedResponse.status().code(), equalTo(200)); + + assertThat(Netty4MarkedMessagePlugin.MESSAGE.get().headers().get("marked-message"), equalTo(expectedMarkedHeaderValue)); } finally { responses.forEach(ReferenceCounted::release); } } + } } diff --git a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4BlockingPlugin.java b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4MarkedMessagePlugin.java similarity index 66% rename from modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4BlockingPlugin.java rename to modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4MarkedMessagePlugin.java index d5fe49952add3..bd8558cf78a8c 100644 --- a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4BlockingPlugin.java +++ b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4MarkedMessagePlugin.java @@ -13,32 +13,28 @@ import org.opensearch.common.settings.Settings; import org.opensearch.common.util.BigArrays; import org.opensearch.common.util.PageCacheRecycler; -import org.opensearch.core.indices.breaker.CircuitBreakerService; -import org.opensearch.core.xcontent.NamedXContentRegistry; +import org.opensearch.indices.breaker.CircuitBreakerService; +import org.opensearch.common.xcontent.NamedXContentRegistry; import org.opensearch.http.HttpServerTransport; import org.opensearch.http.netty4.Netty4HttpServerTransport; -import org.opensearch.telemetry.tracing.Tracer; import org.opensearch.threadpool.ThreadPool; - -import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.channel.ChannelHandler.Sharable; import io.netty.handler.codec.http.DefaultHttpRequest; -import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpMessage; import io.netty.handler.codec.http.HttpRequest; -import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.util.ReferenceCountUtil; -public class Netty4BlockingPlugin extends Netty4ModulePlugin { +public class Netty4MarkedMessagePlugin extends Netty4Plugin { + + public static final AtomicReference MESSAGE = new AtomicReference<>(); public class Netty4BlockingHttpServerTransport extends Netty4HttpServerTransport { @@ -50,8 +46,7 @@ public Netty4BlockingHttpServerTransport( NamedXContentRegistry xContentRegistry, Dispatcher dispatcher, ClusterSettings clusterSettings, - SharedGroupFactory sharedGroupFactory, - Tracer tracer + SharedGroupFactory sharedGroupFactory ) { super( settings, @@ -61,8 +56,7 @@ public Netty4BlockingHttpServerTransport( xContentRegistry, dispatcher, clusterSettings, - sharedGroupFactory, - tracer + sharedGroupFactory ); } @@ -82,8 +76,7 @@ public Map> getHttpTransports( NamedXContentRegistry xContentRegistry, NetworkService networkService, HttpServerTransport.Dispatcher dispatcher, - ClusterSettings clusterSettings, - Tracer tracer + ClusterSettings clusterSettings ) { return Collections.singletonMap( NETTY_HTTP_TRANSPORT_NAME, @@ -95,33 +88,28 @@ public Map> getHttpTransports( xContentRegistry, dispatcher, clusterSettings, - getSharedGroupFactory(settings), - tracer + getSharedGroupFactory(settings) ) ); } /** POC for how an external header verifier would be implemented */ + @Sharable public class ExampleBlockingNetty4HeaderVerifier extends SimpleChannelInboundHandler { @Override public void channelRead0(ChannelHandlerContext ctx, DefaultHttpRequest msg) throws Exception { ReferenceCountUtil.retain(msg); - if (isBlocked(msg)) { - ByteBuf buf = Unpooled.copiedBuffer("Hit header_verifier".getBytes(StandardCharsets.UTF_8)); - final FullHttpResponse response = new DefaultFullHttpResponse(msg.protocolVersion(), HttpResponseStatus.UNAUTHORIZED, buf); - ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE); - ReferenceCountUtil.release(msg); - } else { - // Lets the request pass to the next channel handler - ctx.fireChannelRead(msg); + if (isMarked(msg)) { + MESSAGE.compareAndSet(null, msg); } - } - private boolean isBlocked(HttpRequest request) { - final boolean shouldBlock = request.headers().contains("blockme"); + // Lets the request pass to the next channel handler + ctx.fireChannelRead(msg); + } - return shouldBlock; + private boolean isMarked(HttpRequest request) { + return request.headers().contains("marked-message"); } } } From 0198b94b4869345116c51d29a50b98d07d45c854 Mon Sep 17 00:00:00 2001 From: Peter Nied Date: Tue, 7 Nov 2023 23:59:38 +0000 Subject: [PATCH 3/3] Fix spotless issues Signed-off-by: Peter Nied --- .../http/netty4/Netty4HeaderVerifierIT.java | 2 -- .../transport/Netty4MarkedMessagePlugin.java | 13 ++----------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java index 721144fa1a9be..a2d30a0319675 100644 --- a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java +++ b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/http/netty4/Netty4HeaderVerifierIT.java @@ -32,9 +32,7 @@ import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.hasItems; import static org.junit.Assert.assertThat; -import static io.netty.handler.codec.http.HttpHeaderNames.HOST; @ClusterScope(scope = Scope.TEST, supportsDedicatedMasters = false, numDataNodes = 1) public class Netty4HeaderVerifierIT extends OpenSearchNetty4IntegTestCase { diff --git a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4MarkedMessagePlugin.java b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4MarkedMessagePlugin.java index bd8558cf78a8c..a30480ce76715 100644 --- a/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4MarkedMessagePlugin.java +++ b/modules/transport-netty4/src/internalClusterTest/java/org/opensearch/transport/Netty4MarkedMessagePlugin.java @@ -34,7 +34,7 @@ public class Netty4MarkedMessagePlugin extends Netty4Plugin { - public static final AtomicReference MESSAGE = new AtomicReference<>(); + public static final AtomicReference MESSAGE = new AtomicReference<>(); public class Netty4BlockingHttpServerTransport extends Netty4HttpServerTransport { @@ -48,16 +48,7 @@ public Netty4BlockingHttpServerTransport( ClusterSettings clusterSettings, SharedGroupFactory sharedGroupFactory ) { - super( - settings, - networkService, - bigArrays, - threadPool, - xContentRegistry, - dispatcher, - clusterSettings, - sharedGroupFactory - ); + super(settings, networkService, bigArrays, threadPool, xContentRegistry, dispatcher, clusterSettings, sharedGroupFactory); } @Override