Skip to content

Make the initial window size for H2 configurable #1551

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

Merged
merged 2 commits into from
Dec 19, 2019
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"type": "feature",
"category": "Netty NIO HTTP Client",
"description": "`SETTINGS_INITIAL_WINDOW_SIZE` is now configurable on HTTP/2 connections opened by the Netty client using `Http2Configuration#initialWindowSize(Integer)` along with `NettyNioAsyncHttpClient.Builder#http2Configuration(Http2Configuration)`. See https://tools.ietf.org/html/rfc7540#section-6.5.2 for more information."
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/*
* Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file 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 software.amazon.awssdk.http.nio.netty;

import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.utils.Validate;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;

/**
* Configuration specific to HTTP/2 connections.
*/
@SdkPublicApi
public final class Http2Configuration implements ToCopyableBuilder<Http2Configuration.Builder, Http2Configuration> {
private final Long maxStreams;
private final Integer initialWindowSize;

private Http2Configuration(DefaultBuilder builder) {
this.maxStreams = builder.maxStreams;
this.initialWindowSize = builder.initialWindowSize;
}

/**
* @return The maximum number of streams to be created per HTTP/2 connection.
*/
public Long maxStreams() {
return maxStreams;
}

/**
* @return The initial window size for an HTTP/2 stream.
*/
public Integer initialWindowSize() {
return initialWindowSize;
}

@Override
public Builder toBuilder() {
return new DefaultBuilder(this);
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}

if (o == null || getClass() != o.getClass()) {
return false;
}

Http2Configuration that = (Http2Configuration) o;

if (maxStreams != null ? !maxStreams.equals(that.maxStreams) : that.maxStreams != null) {
return false;
}

return initialWindowSize != null ? initialWindowSize.equals(that.initialWindowSize) : that.initialWindowSize == null;

}

@Override
public int hashCode() {
int result = maxStreams != null ? maxStreams.hashCode() : 0;
result = 31 * result + (initialWindowSize != null ? initialWindowSize.hashCode() : 0);
return result;
}

public static Builder builder() {
return new DefaultBuilder();
}

public interface Builder extends CopyableBuilder<Builder, Http2Configuration> {

/**
* Sets the max number of concurrent streams per connection.
*
* <p>Note that this cannot exceed the value of the MAX_CONCURRENT_STREAMS setting returned by the service. If it
* does the service setting is used instead.</p>
*
* @param maxStreams Max concurrent HTTP/2 streams per connection.
* @return This builder for method chaining.
*/
Builder maxStreams(Long maxStreams);

/**
* Sets initial window size of a stream. This setting is only respected when the HTTP/2 protocol is used.
*
* See <a href="https://tools.ietf.org/html/rfc7540#section-6.5.2">https://tools.ietf.org/html/rfc7540#section-6.5.2</a>
* for more information about this parameter.
*
* @param initialWindowSize The initial window size of a stream.
* @return This builder for method chaining.
*/
Builder initialWindowSize(Integer initialWindowSize);
}

private static final class DefaultBuilder implements Builder {
private Long maxStreams;
private Integer initialWindowSize;

private DefaultBuilder() {
}

private DefaultBuilder(Http2Configuration http2Configuration) {
this.maxStreams = http2Configuration.maxStreams;
this.initialWindowSize = http2Configuration.initialWindowSize;
}

@Override
public Builder maxStreams(Long maxStreams) {
this.maxStreams = Validate.isPositiveOrNull(maxStreams, "maxStreams");
return this;
}

public void setMaxStreams(Long maxStreams) {
maxStreams(maxStreams);
}

@Override
public Builder initialWindowSize(Integer initialWindowSize) {
this.initialWindowSize = Validate.isPositiveOrNull(initialWindowSize, "initialWindowSize");
return this;
}

public void setInitialWindowSize(Integer initialWindowSize) {
initialWindowSize(initialWindowSize);
}

@Override
public Http2Configuration build() {
return new Http2Configuration(this);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.function.Consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.annotations.SdkPublicApi;
Expand Down Expand Up @@ -77,6 +78,7 @@ public final class NettyNioAsyncHttpClient implements SdkAsyncHttpClient {

private static final Logger log = LoggerFactory.getLogger(NettyNioAsyncHttpClient.class);
private static final long MAX_STREAMS_ALLOWED = 4294967295L; // unsigned 32-bit, 2^32 -1
private static final int DEFAULT_INITIAL_WINDOW_SIZE = 1_048_576; // 1MiB

// Override connection idle timeout for Netty http client to reduce the frequency of "server failed to complete the
// response error". see https://github.com/aws/aws-sdk-java-v2/issues/1122
Expand All @@ -91,13 +93,19 @@ public final class NettyNioAsyncHttpClient implements SdkAsyncHttpClient {
private NettyNioAsyncHttpClient(DefaultBuilder builder, AttributeMap serviceDefaultsMap) {
this.configuration = new NettyConfiguration(serviceDefaultsMap);
Protocol protocol = serviceDefaultsMap.get(SdkHttpConfigurationOption.PROTOCOL);
long maxStreams = builder.maxHttp2Streams == null ? MAX_STREAMS_ALLOWED : builder.maxHttp2Streams;
this.sdkEventLoopGroup = eventLoopGroup(builder);

Http2Configuration http2Configuration = builder.http2Configuration;

long maxStreams = resolveMaxHttp2Streams(builder.maxHttp2Streams, http2Configuration);
int initialWindowSize = resolveInitialWindowSize(http2Configuration);

this.pools = AwaitCloseChannelPoolMap.builder()
.sdkChannelOptions(builder.sdkChannelOptions)
.configuration(configuration)
.protocol(protocol)
.maxStreams(maxStreams)
.initialWindowSize(initialWindowSize)
.sdkEventLoopGroup(sdkEventLoopGroup)
.sslProvider(resolveSslProvider(builder))
.proxyConfiguration(builder.proxyConfiguration)
Expand Down Expand Up @@ -149,6 +157,25 @@ private SslProvider resolveSslProvider(DefaultBuilder builder) {
return SslContext.defaultClientProvider();
}

private long resolveMaxHttp2Streams(Integer topLevelValue, Http2Configuration http2Configuration) {
if (topLevelValue != null) {
return topLevelValue;
}

if (http2Configuration == null || http2Configuration.maxStreams() == null) {
return MAX_STREAMS_ALLOWED;
}

return Math.min(http2Configuration.maxStreams(), MAX_STREAMS_ALLOWED);
}

private int resolveInitialWindowSize(Http2Configuration http2Configuration) {
if (http2Configuration == null || http2Configuration.initialWindowSize() == null) {
return DEFAULT_INITIAL_WINDOW_SIZE;
}
return http2Configuration.initialWindowSize();
}

private SdkEventLoopGroup nonManagedEventLoopGroup(SdkEventLoopGroup eventLoopGroup) {
return SdkEventLoopGroup.create(new NonManagedEventLoopGroup(eventLoopGroup.eventLoopGroup()),
eventLoopGroup.channelFactory());
Expand Down Expand Up @@ -343,6 +370,9 @@ public interface Builder extends SdkAsyncHttpClient.Builder<NettyNioAsyncHttpCli
*
* @param maxHttp2Streams Max concurrent HTTP/2 streams per connection.
* @return This builder for method chaining.
*
* @deprecated Use {@link #http2Configuration(Http2Configuration)} along with
* {@link Http2Configuration.Builder#maxStreams(Integer)} instead.
*/
Builder maxHttp2Streams(Integer maxHttp2Streams);

Expand Down Expand Up @@ -380,6 +410,28 @@ public interface Builder extends SdkAsyncHttpClient.Builder<NettyNioAsyncHttpCli
* @return The builder for method chaining.
*/
Builder tlsKeyManagersProvider(TlsKeyManagersProvider keyManagersProvider);

/**
* Set the HTTP/2 specific configuration for this client.
* <p>
* <b>Note:</b>If {@link #maxHttp2Streams(Integer)} and {@link Http2Configuration#maxStreams()} are both set,
* the value set using {@link #maxHttp2Streams(Integer)} takes precedence.
*
* @param http2Configuration The HTTP/2 configuration object.
* @return the builder for method chaining.
*/
Builder http2Configuration(Http2Configuration http2Configuration);

/**
* Set the HTTP/2 specific configuration for this client.
* <p>
* <b>Note:</b>If {@link #maxHttp2Streams(Integer)} and {@link Http2Configuration#maxStreams()} are both set,
* the value set using {@link #maxHttp2Streams(Integer)} takes precedence.
*
* @param http2ConfigurationBuilderConsumer The consumer of the HTTP/2 configuration builder object.
* @return the builder for method chaining.
*/
Builder http2Configuration(Consumer<Http2Configuration.Builder> http2ConfigurationBuilderConsumer);
}

/**
Expand All @@ -394,6 +446,7 @@ private static final class DefaultBuilder implements Builder {
private SdkEventLoopGroup eventLoopGroup;
private SdkEventLoopGroup.Builder eventLoopGroupBuilder;
private Integer maxHttp2Streams;
private Http2Configuration http2Configuration;
private SslProvider sslProvider;
private ProxyConfiguration proxyConfiguration;

Expand Down Expand Up @@ -568,6 +621,23 @@ public Builder tlsKeyManagersProvider(TlsKeyManagersProvider tlsKeyManagersProvi
return this;
}

@Override
public Builder http2Configuration(Http2Configuration http2Configuration) {
this.http2Configuration = http2Configuration;
return this;
}

@Override
public Builder http2Configuration(Consumer<Http2Configuration.Builder> http2ConfigurationBuilderConsumer) {
Http2Configuration.Builder builder = Http2Configuration.builder();
http2ConfigurationBuilderConsumer.accept(builder);
return http2Configuration(builder.build());
}

public void setHttp2Configuration(Http2Configuration http2Configuration) {
http2Configuration(http2Configuration);
}

@Override
public SdkAsyncHttpClient buildWithDefaults(AttributeMap serviceDefaults) {
return new NettyNioAsyncHttpClient(this, standardOptions.build()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public void channelCreated(Channel ch) throws Exception {
private final NettyConfiguration configuration;
private final Protocol protocol;
private final long maxStreams;
private final int initialWindowSize;
private final SslProvider sslProvider;
private final ProxyConfiguration proxyConfiguration;

Expand All @@ -90,6 +91,7 @@ private AwaitCloseChannelPoolMap(Builder builder) {
this.configuration = builder.configuration;
this.protocol = builder.protocol;
this.maxStreams = builder.maxStreams;
this.initialWindowSize = builder.initialWindowSize;
this.sslProvider = builder.sslProvider;
this.proxyConfiguration = builder.proxyConfiguration;
}
Expand All @@ -112,8 +114,13 @@ protected SimpleChannelPoolAwareChannelPool newPool(URI key) {

AtomicReference<ChannelPool> channelPoolRef = new AtomicReference<>();

ChannelPipelineInitializer pipelineInitializer =
new ChannelPipelineInitializer(protocol, sslContext, maxStreams, channelPoolRef, configuration, key);
ChannelPipelineInitializer pipelineInitializer = new ChannelPipelineInitializer(protocol,
sslContext,
maxStreams,
initialWindowSize,
channelPoolRef,
configuration,
key);

BetterSimpleChannelPool tcpChannelPool;
ChannelPool baseChannelPool;
Expand Down Expand Up @@ -289,6 +296,7 @@ public static class Builder {
private NettyConfiguration configuration;
private Protocol protocol;
private long maxStreams;
private int initialWindowSize;
private SslProvider sslProvider;
private ProxyConfiguration proxyConfiguration;

Expand Down Expand Up @@ -320,6 +328,11 @@ public Builder maxStreams(long maxStreams) {
return this;
}

public Builder initialWindowSize(int initialWindowSize) {
this.initialWindowSize = initialWindowSize;
return this;
}

public Builder sslProvider(SslProvider sslProvider) {
this.sslProvider = sslProvider;
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,22 @@ public final class ChannelPipelineInitializer extends AbstractChannelPoolHandler
private final Protocol protocol;
private final SslContext sslCtx;
private final long clientMaxStreams;
private final int clientInitialWindowSize;
private final AtomicReference<ChannelPool> channelPoolRef;
private final NettyConfiguration configuration;
private final URI poolKey;

public ChannelPipelineInitializer(Protocol protocol,
SslContext sslCtx,
long clientMaxStreams,
int clientInitialWindowSize,
AtomicReference<ChannelPool> channelPoolRef,
NettyConfiguration configuration,
URI poolKey) {
this.protocol = protocol;
this.sslCtx = sslCtx;
this.clientMaxStreams = clientMaxStreams;
this.clientInitialWindowSize = clientInitialWindowSize;
this.channelPoolRef = channelPoolRef;
this.configuration = configuration;
this.poolKey = poolKey;
Expand Down Expand Up @@ -125,7 +128,7 @@ private void configureHttp2(Channel ch, ChannelPipeline pipeline) {
Http2FrameCodec codec =
Http2FrameCodecBuilder.forClient()
.headerSensitivityDetector((name, value) -> lowerCase(name.toString()).equals("authorization"))
.initialSettings(Http2Settings.defaultSettings().initialWindowSize(1_048_576))
.initialSettings(Http2Settings.defaultSettings().initialWindowSize(clientInitialWindowSize))
Copy link

@zzmao zzmao Apr 20, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @dagnir ,

I am doing a netty http2 based project by referencing aws sdk netty implementation.
The code works, now I am trying to tune window size and burst performance.

However, my frame size is limited to 64KB even if I change initial window size to 1MB(both server and client), set max frame size to 1MB and netty buffer size to 1MB. Do you have any suggestion for this case?

Do I need to have a settingFrameHandler? (I thought Netty http2 automatically process it.)

Here is a sample output of sending 1MB data from client to server.

[2020-04-20 11:31:07,363] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] OUTBOUND SETTINGS: ack=false settings={INITIAL_WINDOW_SIZE=1000001, MAX_FRAME_SIZE=1048576, MAX_HEADER_LIST_SIZE=8192} (server)
[2020-04-20 11:31:07,363] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND SETTINGS: ack=false settings={INITIAL_WINDOW_SIZE=1000002, MAX_FRAME_SIZE=1048576, MAX_HEADER_LIST_SIZE=8192} (client)
[2020-04-20 11:31:07,364] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] OUTBOUND WINDOW_UPDATE: streamId=0 windowSizeIncrement=1868932 (server)
[2020-04-20 11:31:07,365] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND WINDOW_UPDATE: streamId=0 windowSizeIncrement=1868934 (client)
[2020-04-20 11:31:07,380] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] INBOUND SETTINGS: ack=false settings={INITIAL_WINDOW_SIZE=1000001, MAX_FRAME_SIZE=1048576, MAX_HEADER_LIST_SIZE=8192} (client)
[2020-04-20 11:31:07,381] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND SETTINGS: ack=true (client)
[2020-04-20 11:31:07,382] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] INBOUND WINDOW_UPDATE: streamId=0 windowSizeIncrement=1868932 (client)
[2020-04-20 11:31:07,382] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND SETTINGS: ack=false settings={INITIAL_WINDOW_SIZE=1000002, MAX_FRAME_SIZE=1048576, MAX_HEADER_LIST_SIZE=8192} (server)
[2020-04-20 11:31:07,382] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] OUTBOUND SETTINGS: ack=true (server)
[2020-04-20 11:31:07,383] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND WINDOW_UPDATE: streamId=0 windowSizeIncrement=1868934 (server)
[2020-04-20 11:31:07,383] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND SETTINGS: ack=true (server)
[2020-04-20 11:31:07,383] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] INBOUND SETTINGS: ack=true (client)
[2020-04-20 11:31:07,397] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND HEADERS: streamId=3 headers=DefaultHttp2Headers[:method: POST, :scheme: https, :path: /] streamDependency=0 weight=16 exclusive=false padding=0 endStream=false (client)
1049715
[2020-04-20 11:31:07,429] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=65519 bytes=0000000000100473000000040000000100000007636c69656e74310006100016340752000100000000000000001f8ddeae4cc4436ca7ff20dcf5a903c80003ff... (client)
[2020-04-20 11:31:07,431] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48797 bytes=84d5e53283c02b98ccdf0b05c954f956634fb356388e26f53c100ae67cd38783c5c2b4c71c96586c6384fa91eaf33b3981b5caf3f2fb588db510745c478a100c... (client)
[2020-04-20 11:31:07,432] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=49277 bytes=6d1c38c5d10857a7d979577b3f164fcf819d08d36354b59b6d8c56cb1a6599b7f55ec7d716f1f6ecd0007ed1eca481c10ca4313bb32e80bf1eab2a199198c0b4... (client)
[2020-04-20 11:31:07,433] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=7a7ec64a103729e71c51d9711fe959bc1155a5c4e13901f3cead3870f04032326b1a16c3f690f222dd643bbcd970013da5ea49fcb37d669b2e28e169a3692289... (client)
[2020-04-20 11:31:07,433] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=cd3fac52b7fcf37be5476c88a65d399ff056b2397a8dab6b692866c8dff882731352139bf2436d665ff377f187548a0fab6ecf8042084660a8c3f6b1449b838d... (client)
[2020-04-20 11:31:07,434] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=c944383ca89c6de1dc660e347bcef000811b7cb1fca036c13d73ffb9588f86eaaf21e9ccfc4850f0000fc5448843d436512a033d36a15ae7538c3198725a76ab... (client)
[2020-04-20 11:31:07,434] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND HEADERS: streamId=3 headers=DefaultHttp2Headers[:method: POST, :scheme: https, :path: /] streamDependency=0 weight=16 exclusive=false padding=0 endStream=false (server)
[2020-04-20 11:31:07,435] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=18ce2bc93318631d8bc931dda301c17f9ccead375d046e46f1dbeaadbdc35b6d434f9169ce4d1114210ec92d4fc54fe4ce02c863b4e1cec5c41f4b8eb85eb8ff... (client)
[2020-04-20 11:31:07,435] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=4c69a54cbc92db05bc65cecedf9d78bdc6b775a0d9a679cf9d33809c792bb425a1a034179dc31afe6a9f15c0addfad497dbc89cce993068e5bf1b12bbd22f1c1... (client)
[2020-04-20 11:31:07,436] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=296f12be797c2e3d3c3618b06d98c5c6fdd6a75cf7aa4187df61f437467411c5eab5db0ba483c9f7b7dc5b2b050061f89e5f19ae8c5dd18af03878ff2dffea5f... (client)
[2020-04-20 11:31:07,437] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=3ea9f3aabd6fa02723b02a720c0ab7e132df7668cb21ad7cde3f486b2bbfafbdf56b16699206f17955f563eb5c80c56e4e3705547be2549c691a59a991922837... (client)
[2020-04-20 11:31:07,437] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=f36fad036afd4661d50a5a445a6c2a422a52348de8164ad2ad4fce3224223ee7a069d09a58206cc6f264aa2497f9408bd2e5f2706dfb5c3ab2359fcf6f95a082... (client)
[2020-04-20 11:31:07,437] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=6e8c1f7844147e66619be97b84d67bd104d822b2b178f06d4ce1f2f41d318797fa8f8eb6e72ab432b9cbcbde05222da670b3da3cc93847f3fefa23abc1fcee18... (client)
[2020-04-20 11:31:07,438] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=3f8df5afc121b5a8b0985eff2a3c52a6570f90a95512ee87dd30fe31c62823287e96e26b7d28e3e653f2c12fc456d8cd52d13be84b96402882cc2099e4be075b... (client)
[2020-04-20 11:31:07,438] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=9543b6bc95ff5ba1c4646bcea8a785902188f7edd4380af147adef3e45a9b22336a77f93405c0a31eea1b3715e6efa752e06560933ddb8fc456a43831962422a... (client)
[2020-04-20 11:31:07,439] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=730ec6ca97906f528620a974420a56ceebfe866c7703b3dc4ef61b1424212ecc2489d9ba0bfc6c26dfaa0d6721e232b0ad105e4be8952bb0a423921398d63c3f... (client)
[2020-04-20 11:31:07,439] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=5a56e449e0616a467092a37e4f814918ce6de543c220ef702006eb8f814f2e22182d03af334ee7213d4c655928cb34f380dc7a383fa1c0654655a931e3f746f2... (client)
[2020-04-20 11:31:07,440] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=f0514b3284ae8778ac275890fa84d0e843064d3cd09a81232a60ce6689103f3064ba869670818be51e23490a283cc94d3e2af2727721dc617d3cdfa6c5c00dc1... (client)
[2020-04-20 11:31:07,441] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=dbfbb722e0c74c869c8574961c65b302735c3e0a25d587402be45eb82f9e0965ab411336ade15dc6f4585d6b2065b090ab13c2e620bef71803873c49dcf2bd6e... (client)
[2020-04-20 11:31:07,441] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=0b308f281a6502275c4c4b448fdbf24ceabde1addc7b15c89eb7c5f9f9ecd524d7f939f2465b7f987acc1ad64e1ea46b2cf3712a98f248b2ea39b0baf2c917e6... (client)
[2020-04-20 11:31:07,442] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=1490c576c06368f063f8200ed2d0bc1e80a09859e23ecf6d1f97935d91f644c2c555e28087260126b745b2606d2ec40e9d99f8cb64bac329aeb3c179e667fd11... (client)
[2020-04-20 11:31:07,442] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=e396cd257ec1ca99499109ba6287f4b82330f3e3487a2da4d77cd7aad7fd48bb50fb56b7fade7d62e27ff6b538f2d65c8733d33b07e0c20182f7d5d10e2a77f0... (client)
[2020-04-20 11:31:07,443] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=1cb2aadb99483c47b2b961cf0a4e9cc85fceba19f7fea4f55ad37aee5a3be399a7edaca72999bdeb54f93ae606793f5de3492da178cf803a20050e0072e3129c... (client)
[2020-04-20 11:31:07,443] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=f45bc3968b627271571889d3a86ccbc8a67ebdd4261f72cdc77014c29963be8bc352a3b6a7426fc1ecb910753a318f4eb273e0672d9693f906622d55c8ecd087... (client)
[2020-04-20 11:31:07,443] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=false length=20758 bytes=6644769ea9b21b2a9c57531e26095b2ae56e5487dffa67ad74f4a3a5921ded162e99b84d3da5feb8bd9f80f5a2d6f6645513be2ea0da95015c648955d917ed73... (client)
[2020-04-20 11:31:07,444] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=65519 bytes=0000000000100473000000040000000100000007636c69656e74310006100016340752000100000000000000001f8ddeae4cc4436ca7ff20dcf5a903c80003ff... (server)
[2020-04-20 11:31:07,447] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48797 bytes=84d5e53283c02b98ccdf0b05c954f956634fb356388e26f53c100ae67cd38783c5c2b4c71c96586c6384fa91eaf33b3981b5caf3f2fb588db510745c478a100c... (server)
[2020-04-20 11:31:07,448] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=49277 bytes=6d1c38c5d10857a7d979577b3f164fcf819d08d36354b59b6d8c56cb1a6599b7f55ec7d716f1f6ecd0007ed1eca481c10ca4313bb32e80bf1eab2a199198c0b4... (server)
[2020-04-20 11:31:07,448] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=7a7ec64a103729e71c51d9711fe959bc1155a5c4e13901f3cead3870f04032326b1a16c3f690f222dd643bbcd970013da5ea49fcb37d669b2e28e169a3692289... (server)
[2020-04-20 11:31:07,449] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=cd3fac52b7fcf37be5476c88a65d399ff056b2397a8dab6b692866c8dff882731352139bf2436d665ff377f187548a0fab6ecf8042084660a8c3f6b1449b838d... (server)
[2020-04-20 11:31:07,449] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=c944383ca89c6de1dc660e347bcef000811b7cb1fca036c13d73ffb9588f86eaaf21e9ccfc4850f0000fc5448843d436512a033d36a15ae7538c3198725a76ab... (server)
[2020-04-20 11:31:07,450] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=18ce2bc93318631d8bc931dda301c17f9ccead375d046e46f1dbeaadbdc35b6d434f9169ce4d1114210ec92d4fc54fe4ce02c863b4e1cec5c41f4b8eb85eb8ff... (server)
[2020-04-20 11:31:07,450] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=4c69a54cbc92db05bc65cecedf9d78bdc6b775a0d9a679cf9d33809c792bb425a1a034179dc31afe6a9f15c0addfad497dbc89cce993068e5bf1b12bbd22f1c1... (server)
[2020-04-20 11:31:07,450] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=296f12be797c2e3d3c3618b06d98c5c6fdd6a75cf7aa4187df61f437467411c5eab5db0ba483c9f7b7dc5b2b050061f89e5f19ae8c5dd18af03878ff2dffea5f... (server)
[2020-04-20 11:31:07,451] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=3ea9f3aabd6fa02723b02a720c0ab7e132df7668cb21ad7cde3f486b2bbfafbdf56b16699206f17955f563eb5c80c56e4e3705547be2549c691a59a991922837... (server)
[2020-04-20 11:31:07,451] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=f36fad036afd4661d50a5a445a6c2a422a52348de8164ad2ad4fce3224223ee7a069d09a58206cc6f264aa2497f9408bd2e5f2706dfb5c3ab2359fcf6f95a082... (server)
[2020-04-20 11:31:07,451] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=6e8c1f7844147e66619be97b84d67bd104d822b2b178f06d4ce1f2f41d318797fa8f8eb6e72ab432b9cbcbde05222da670b3da3cc93847f3fefa23abc1fcee18... (server)
[2020-04-20 11:31:07,452] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=3f8df5afc121b5a8b0985eff2a3c52a6570f90a95512ee87dd30fe31c62823287e96e26b7d28e3e653f2c12fc456d8cd52d13be84b96402882cc2099e4be075b... (server)
[2020-04-20 11:31:07,453] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=9543b6bc95ff5ba1c4646bcea8a785902188f7edd4380af147adef3e45a9b22336a77f93405c0a31eea1b3715e6efa752e06560933ddb8fc456a43831962422a... (server)
[2020-04-20 11:31:07,453] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=730ec6ca97906f528620a974420a56ceebfe866c7703b3dc4ef61b1424212ecc2489d9ba0bfc6c26dfaa0d6721e232b0ad105e4be8952bb0a423921398d63c3f... (server)
[2020-04-20 11:31:07,453] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] OUTBOUND WINDOW_UPDATE: streamId=3 windowSizeIncrement=652983 (server)
[2020-04-20 11:31:07,454] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=5a56e449e0616a467092a37e4f814918ce6de543c220ef702006eb8f814f2e22182d03af334ee7213d4c655928cb34f380dc7a383fa1c0654655a931e3f746f2... (server)
[2020-04-20 11:31:07,454] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=f0514b3284ae8778ac275890fa84d0e843064d3cd09a81232a60ce6689103f3064ba869670818be51e23490a283cc94d3e2af2727721dc617d3cdfa6c5c00dc1... (server)
[2020-04-20 11:31:07,454] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=dbfbb722e0c74c869c8574961c65b302735c3e0a25d587402be45eb82f9e0965ab411336ade15dc6f4585d6b2065b090ab13c2e620bef71803873c49dcf2bd6e... (server)
[2020-04-20 11:31:07,455] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=0b308f281a6502275c4c4b448fdbf24ceabde1addc7b15c89eb7c5f9f9ecd524d7f939f2465b7f987acc1ad64e1ea46b2cf3712a98f248b2ea39b0baf2c917e6... (server)
[2020-04-20 11:31:07,455] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=1490c576c06368f063f8200ed2d0bc1e80a09859e23ecf6d1f97935d91f644c2c555e28087260126b745b2606d2ec40e9d99f8cb64bac329aeb3c179e667fd11... (server)
[2020-04-20 11:31:07,456] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=e396cd257ec1ca99499109ba6287f4b82330f3e3487a2da4d77cd7aad7fd48bb50fb56b7fade7d62e27ff6b538f2d65c8733d33b07e0c20182f7d5d10e2a77f0... (server)
[2020-04-20 11:31:07,456] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=48672 bytes=1cb2aadb99483c47b2b961cf0a4e9cc85fceba19f7fea4f55ad37aee5a3be399a7edaca72999bdeb54f93ae606793f5de3492da178cf803a20050e0072e3129c... (server)
[2020-04-20 11:31:07,456] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=32893 bytes=f45bc3968b627271571889d3a86ccbc8a67ebdd4261f72cdc77014c29963be8bc352a3b6a7426fc1ecb910753a318f4eb273e0672d9693f906622d55c8ecd087... (server)
[2020-04-20 11:31:07,456] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] OUTBOUND WINDOW_UPDATE: streamId=0 windowSizeIncrement=979243 (server)
[2020-04-20 11:31:07,457] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=false length=20758 bytes=6644769ea9b21b2a9c57531e26095b2ae56e5487dffa67ad74f4a3a5921ded162e99b84d3da5feb8bd9f80f5a2d6f6645513be2ea0da95015c648955d917ed73... (server)
[2020-04-20 11:31:07,457] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] INBOUND WINDOW_UPDATE: streamId=3 windowSizeIncrement=652983 (client)
[2020-04-20 11:31:07,457] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] INBOUND WINDOW_UPDATE: streamId=0 windowSizeIncrement=979243 (client)
[2020-04-20 11:31:07,457] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND DATA: streamId=3 padding=0 endStream=true length=49714 bytes=2af5f643a8414096775219030073d04afad4f2b2a89d5693dac1c8411998b61914e7c4e6a9bd3f719a48c20a82fae080476dc1fb90083740272eb7dcbd94a7e9... (client)
[2020-04-20 11:31:07,458] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND DATA: streamId=3 padding=0 endStream=true length=49714 bytes=2af5f643a8414096775219030073d04afad4f2b2a89d5693dac1c8411998b61914e7c4e6a9bd3f719a48c20a82fae080476dc1fb90083740272eb7dcbd94a7e9... (server)
[2020-04-20 11:31:07,515] INFO Creating first segment with start offset Name = [] Offset = [0] (com.github.ambry.store.PersistentIndex)
[2020-04-20 11:31:07,524] INFO Chunk size: 29 (com.github.ambry.rest.NettyResponseChannel)
[2020-04-20 11:31:07,525] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] OUTBOUND HEADERS: streamId=3 headers=DefaultHttp2Headers[:status: 200, content-length: 29] streamDependency=0 weight=16 exclusive=false padding=0 endStream=false (server)
[2020-04-20 11:31:07,527] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] INBOUND HEADERS: streamId=3 headers=DefaultHttp2Headers[:status: 200, content-length: 29] streamDependency=0 weight=16 exclusive=false padding=0 endStream=false (client)
[2020-04-20 11:31:07,528] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] OUTBOUND DATA: streamId=3 padding=0 endStream=true length=29 bytes=000000000000001d000100010000000100000007636c69656e74310000 (server)
[2020-04-20 11:31:07,529] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] INBOUND DATA: streamId=3 padding=0 endStream=true length=29 bytes=000000000000001d000100010000000100000007636c69656e74310000 (client)
[2020-04-20 11:31:07,529] INFO fame size: 29 (com.github.ambry.network.http2.Http2ClientStreamStatsHandler)
[2020-04-20 11:31:07,529] INFO frame(data) count is 2 (com.github.ambry.network.http2.Http2ClientStreamStatsHandler)
[2020-04-20 11:31:07,529] INFO [id: 0xcb379da5, L:/127.0.0.1:60952 - R:localhost/127.0.0.1:64001] OUTBOUND RST_STREAM: streamId=3 errorCode=8 (client)
[2020-04-20 11:31:07,530] INFO [id: 0x02eee363, L:/127.0.0.1:64001 - R:localhost/127.0.0.1:60952] INBOUND RST_STREAM: streamId=3 errorCode=8 (server)

.frameLogger(new Http2FrameLogger(LogLevel.DEBUG))
.build();

Expand Down
Loading