Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade Netty to 4.1.x #6417

Merged
merged 3 commits into from
Oct 5, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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