Skip to content

Commit

Permalink
Upgrade Netty to 4.1.x (#6417)
Browse files Browse the repository at this point in the history
* Update netty to 4.1.30.Final

* Fix compile time problems with new netty

* Remove netty-all from rocketmq extension
  • Loading branch information
drcrallen committed Oct 5, 2018
1 parent 868ebfa commit 1c4f787
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 37 deletions.
7 changes: 7 additions & 0 deletions extensions-contrib/druid-rocketmq/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@
<groupId>com.alibaba.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>${rocketmq.version}</version>
<exclusions>
<!-- Druid uses its own netty version -->
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.druid</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import org.apache.druid.security.basic.authentication.entity.BasicAuthenticatorUser;
import org.apache.druid.server.security.AuthConfig;
import org.apache.druid.server.security.AuthenticationResult;
import org.asynchttpclient.util.Base64;
import org.easymock.EasyMock;
import org.junit.Test;

Expand Down Expand Up @@ -82,9 +81,7 @@ public Map<String, BasicAuthenticatorUser> getUserMap(String authenticatorPrefix
@Test
public void testGoodPassword() throws IOException, ServletException
{
String header = Base64.encode(
StringUtils.toUtf8("userA:helloworld")
);
String header = StringUtils.utf8Base64("userA:helloworld");
header = StringUtils.format("Basic %s", header);

HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
Expand Down Expand Up @@ -113,9 +110,7 @@ public void testGoodPassword() throws IOException, ServletException
@Test
public void testBadPassword() throws IOException, ServletException
{
String header = Base64.encode(
StringUtils.toUtf8("userA:badpassword")
);
String header = StringUtils.utf8Base64("userA:badpassword");
header = StringUtils.format("Basic %s", header);

HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
Expand All @@ -139,9 +134,7 @@ public void testBadPassword() throws IOException, ServletException
@Test
public void testUnknownUser() throws IOException, ServletException
{
String header = Base64.encode(
StringUtils.toUtf8("userB:helloworld")
);
String header = StringUtils.utf8Base64("userB:helloworld");
header = StringUtils.format("Basic %s", header);

HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
Expand All @@ -165,9 +158,7 @@ public void testUnknownUser() throws IOException, ServletException
@Test
public void testRecognizedButMalformedBasicAuthHeader() throws IOException, ServletException
{
String header = Base64.encode(
StringUtils.toUtf8("malformed decoded header data")
);
String header = StringUtils.utf8Base64("malformed decoded header data");
header = StringUtils.format("Basic %s", header);

HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
Expand Down Expand Up @@ -214,9 +205,7 @@ public void testRecognizedButNotBase64BasicAuthHeader() throws IOException, Serv
@Test
public void testUnrecognizedHeader() throws IOException, ServletException
{
String header = Base64.encode(
StringUtils.toUtf8("userA:helloworld")
);
String header = StringUtils.utf8Base64("userA:helloworld");
header = StringUtils.format("NotBasic %s", header);

HttpServletRequest req = EasyMock.createMock(HttpServletRequest.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.IllegalFormatException;
import java.util.Locale;

Expand Down Expand Up @@ -218,4 +219,16 @@ public static String emptyToNullNonDruidDataString(@Nullable String string)
return Strings.emptyToNull(string);
//CHECKSTYLE.ON: Regexp
}

/**
* Convert an input to base 64 and return the utf8 string of that byte array
*
* @param input The string to convert to base64
*
* @return the base64 of the input in string form
*/
public static String utf8Base64(String input)
{
return fromUtf8(Base64.getEncoder().encode(toUtf8(input)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.common.lifecycle.Lifecycle;
import org.apache.druid.java.util.emitter.service.UnitEvent;
import org.asynchttpclient.DefaultAsyncHttpClientConfig;
import org.asynchttpclient.ListenableFuture;
import org.asynchttpclient.Request;
import org.asynchttpclient.Response;
Expand All @@ -53,32 +52,41 @@
import java.util.Properties;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;

/**
*/
public class EmitterTest
{
private static final ObjectMapper jsonMapper = new ObjectMapper();
public static String TARGET_URL = "http://metrics.foo.bar/";
public static final Response OK_RESPONSE = responseBuilder(HttpVersion.HTTP_1_1, HttpResponseStatus.CREATED)
.accumulate(new EagerResponseBodyPart(Unpooled.wrappedBuffer("Yay".getBytes(StandardCharsets.UTF_8)), true))
.build();

public static final Response BAD_RESPONSE = responseBuilder(HttpVersion.HTTP_1_1, HttpResponseStatus.FORBIDDEN)
.accumulate(new EagerResponseBodyPart(Unpooled.wrappedBuffer("Not yay".getBytes(StandardCharsets.UTF_8)), true))
.build();
public static final Response OK_RESPONSE = Stream
.of(responseBuilder(HttpVersion.HTTP_1_1, HttpResponseStatus.CREATED))
.map(b -> {
b.accumulate(new EagerResponseBodyPart(Unpooled.wrappedBuffer("Yay".getBytes(StandardCharsets.UTF_8)), true));
return b.build();
}).findFirst().get();

public static final Response BAD_RESPONSE = Stream
.of(responseBuilder(HttpVersion.HTTP_1_1, HttpResponseStatus.FORBIDDEN))
.map(b -> {
b.accumulate(new EagerResponseBodyPart(
Unpooled.wrappedBuffer("Not yay".getBytes(StandardCharsets.UTF_8)),
true
));
return b.build();
}).findFirst().get();

private static Response.ResponseBuilder responseBuilder(HttpVersion version, HttpResponseStatus status)
{
return new Response.ResponseBuilder()
.accumulate(
new NettyResponseStatus(
Uri.create(TARGET_URL),
new DefaultAsyncHttpClientConfig.Builder().build(),
new DefaultHttpResponse(version, status),
null
)
);
final Response.ResponseBuilder builder = new Response.ResponseBuilder();
builder.accumulate(
new NettyResponseStatus(
Uri.create(TARGET_URL),
new DefaultHttpResponse(version, status),
null
));
return builder;
}


Expand Down
8 changes: 4 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,8 @@
<log4j.version>2.5</log4j.version>
<!-- HttpClient has not yet been ported to Netty 4.x -->
<netty3.version>3.10.6.Final</netty3.version>
<!-- Update to Netty 4.1 is not possible yet, see https://github.com/apache/incubator-druid/issues/4390 and comments
in https://github.com/apache/incubator-druid/pull/4973 -->
<netty4.version>4.0.52.Final</netty4.version>
<!-- Spark updated in https://github.com/apache/spark/pull/19884 -->
<netty4.version>4.1.30.Final</netty4.version>
<slf4j.version>1.7.12</slf4j.version>
<!-- If compiling with different hadoop version also modify default hadoop coordinates in TaskConfig.java -->
<hadoop.compile.version>2.8.3</hadoop.compile.version>
Expand Down Expand Up @@ -680,7 +679,8 @@
<dependency>
<groupId>org.asynchttpclient</groupId>
<artifactId>async-http-client</artifactId>
<version>2.0.37</version>
<!-- Uses Netty 4.1.x -->
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>org.gridkit.lab</groupId>
Expand Down

0 comments on commit 1c4f787

Please sign in to comment.