mirror of https://github.com/grpc/grpc-java.git
parent
4029b3f0c2
commit
26913bb82e
|
|
@ -123,17 +123,19 @@ class NettyClientHandler extends AbstractNettyHandler {
|
|||
Http2Connection connection = new DefaultHttp2Connection(false);
|
||||
|
||||
return newHandler(connection, frameReader, frameWriter, lifecycleManager, keepAliveManager,
|
||||
flowControlWindow, ticker);
|
||||
flowControlWindow, maxHeaderListSize, ticker);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
static NettyClientHandler newHandler(Http2Connection connection, Http2FrameReader frameReader,
|
||||
Http2FrameWriter frameWriter, ClientTransportLifecycleManager lifecycleManager,
|
||||
KeepAliveManager keepAliveManager, int flowControlWindow, Ticker ticker) {
|
||||
KeepAliveManager keepAliveManager, int flowControlWindow, int maxHeaderListSize,
|
||||
Ticker ticker) {
|
||||
Preconditions.checkNotNull(connection, "connection");
|
||||
Preconditions.checkNotNull(frameReader, "frameReader");
|
||||
Preconditions.checkNotNull(lifecycleManager, "lifecycleManager");
|
||||
Preconditions.checkArgument(flowControlWindow > 0, "flowControlWindow must be positive");
|
||||
Preconditions.checkArgument(maxHeaderListSize > 0, "maxHeaderListSize must be positive");
|
||||
Preconditions.checkNotNull(ticker, "ticker");
|
||||
|
||||
Http2FrameLogger frameLogger = new Http2FrameLogger(LogLevel.DEBUG, NettyClientHandler.class);
|
||||
|
|
@ -154,6 +156,7 @@ class NettyClientHandler extends AbstractNettyHandler {
|
|||
settings.pushEnabled(false);
|
||||
settings.initialWindowSize(flowControlWindow);
|
||||
settings.maxConcurrentStreams(0);
|
||||
settings.maxHeaderListSize(maxHeaderListSize);
|
||||
|
||||
return new NettyClientHandler(decoder, encoder, settings, lifecycleManager, keepAliveManager,
|
||||
ticker);
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ class NettyServerHandler extends AbstractNettyHandler {
|
|||
Http2FrameWriter frameWriter =
|
||||
new Http2OutboundFrameLogger(new DefaultHttp2FrameWriter(), frameLogger);
|
||||
return newHandler(frameReader, frameWriter, transportListener, maxStreams, flowControlWindow,
|
||||
maxMessageSize);
|
||||
maxHeaderListSize, maxMessageSize);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
|
@ -121,9 +121,11 @@ class NettyServerHandler extends AbstractNettyHandler {
|
|||
ServerTransportListener transportListener,
|
||||
int maxStreams,
|
||||
int flowControlWindow,
|
||||
int maxHeaderListSize,
|
||||
int maxMessageSize) {
|
||||
Preconditions.checkArgument(maxStreams > 0, "maxStreams must be positive");
|
||||
Preconditions.checkArgument(flowControlWindow > 0, "flowControlWindow must be positive");
|
||||
Preconditions.checkArgument(maxHeaderListSize > 0, "maxHeaderListSize must be positive");
|
||||
Preconditions.checkArgument(maxMessageSize > 0, "maxMessageSize must be positive");
|
||||
|
||||
Http2Connection connection = new DefaultHttp2Connection(true);
|
||||
|
|
@ -140,6 +142,7 @@ class NettyServerHandler extends AbstractNettyHandler {
|
|||
Http2Settings settings = new Http2Settings();
|
||||
settings.initialWindowSize(flowControlWindow);
|
||||
settings.maxConcurrentStreams(maxStreams);
|
||||
settings.maxHeaderListSize(maxHeaderListSize);
|
||||
|
||||
return new NettyServerHandler(transportListener, decoder, encoder, settings, maxMessageSize);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ public class NettyClientHandlerTest extends NettyHandlerTestBase<NettyClientHand
|
|||
private Http2Headers grpcHeaders;
|
||||
private long nanoTime; // backs a ticker, for testing ping round-trip time measurement
|
||||
private int flowControlWindow = DEFAULT_WINDOW_SIZE;
|
||||
private int maxHeaderListSize = Integer.MAX_VALUE;
|
||||
private int streamId = 3;
|
||||
private ClientTransportLifecycleManager lifecycleManager;
|
||||
private KeepAliveManager mockKeepAliveManager = null;
|
||||
|
|
@ -574,7 +575,7 @@ public class NettyClientHandlerTest extends NettyHandlerTestBase<NettyClientHand
|
|||
};
|
||||
|
||||
return NettyClientHandler.newHandler(connection, frameReader(), frameWriter(),
|
||||
lifecycleManager, mockKeepAliveManager, flowControlWindow, ticker);
|
||||
lifecycleManager, mockKeepAliveManager, flowControlWindow, maxHeaderListSize, ticker);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -70,7 +70,6 @@ import io.netty.channel.nio.NioEventLoopGroup;
|
|||
import io.netty.channel.socket.SocketChannelConfig;
|
||||
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||
import io.netty.handler.codec.http2.Http2Exception;
|
||||
import io.netty.handler.codec.http2.StreamBufferingEncoder;
|
||||
import io.netty.handler.ssl.SslContext;
|
||||
import io.netty.handler.ssl.SupportedCipherSuiteFilter;
|
||||
|
|
@ -290,8 +289,10 @@ public class NettyClientTransportTest {
|
|||
+ " size limit!");
|
||||
} catch (Exception e) {
|
||||
Throwable rootCause = getRootCause(e);
|
||||
assertTrue(rootCause instanceof Http2Exception);
|
||||
assertEquals("Header size exceeded max allowed size (1)", rootCause.getMessage());
|
||||
Status status = ((StatusException) rootCause).getStatus();
|
||||
assertEquals(Status.Code.INTERNAL, status.getCode());
|
||||
assertEquals("HTTP/2 error code: PROTOCOL_ERROR\nReceived Rst Stream",
|
||||
status.getDescription());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ public class NettyServerHandlerTest extends NettyHandlerTestBase<NettyServerHand
|
|||
|
||||
private int flowControlWindow = DEFAULT_WINDOW_SIZE;
|
||||
private int maxConcurrentStreams = Integer.MAX_VALUE;
|
||||
private int maxHeaderListSize = Integer.MAX_VALUE;
|
||||
|
||||
private class ServerTransportListenerImpl implements ServerTransportListener {
|
||||
|
||||
|
|
@ -275,6 +276,18 @@ public class NettyServerHandlerTest extends NettyHandlerTestBase<NettyServerHand
|
|||
assertEquals(maxConcurrentStreams, captor.getValue().maxConcurrentStreams().intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAdvertiseMaxHeaderListSize() throws Exception {
|
||||
maxHeaderListSize = 123;
|
||||
setUp();
|
||||
|
||||
ArgumentCaptor<Http2Settings> captor = ArgumentCaptor.forClass(Http2Settings.class);
|
||||
verifyWrite().writeSettings(
|
||||
any(ChannelHandlerContext.class), captor.capture(), any(ChannelPromise.class));
|
||||
|
||||
assertEquals(maxHeaderListSize, captor.getValue().maxHeaderListSize().intValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore("Re-enable once https://github.com/grpc/grpc-java/issues/1175 is fixed")
|
||||
public void connectionWindowShouldBeOverridden() throws Exception {
|
||||
|
|
@ -357,7 +370,7 @@ public class NettyServerHandlerTest extends NettyHandlerTestBase<NettyServerHand
|
|||
@Override
|
||||
protected NettyServerHandler newHandler() {
|
||||
return NettyServerHandler.newHandler(frameReader(), frameWriter(), transportListener,
|
||||
maxConcurrentStreams, flowControlWindow, DEFAULT_MAX_MESSAGE_SIZE);
|
||||
maxConcurrentStreams, flowControlWindow, maxHeaderListSize, DEFAULT_MAX_MESSAGE_SIZE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
Loading…
Reference in New Issue