aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/transport/chttp2
diff options
context:
space:
mode:
authorGravatar ctiller <ctiller@google.com>2014-12-07 15:09:10 -0800
committerGravatar Nicolas Noble <nnoble@google.com>2014-12-08 18:50:12 -0800
commit493fbcc2afd232faa93e8f294b6f1b17a6d54335 (patch)
tree4d2880271d4e07c687844ef76560e0835a53fded /src/core/transport/chttp2
parentec63b8e926058d61bc02d533f8a7beaaf470da13 (diff)
Flow Control Fixes.
- Fix default window size - Allow force-sending specific http2 settings - Force send default window size always on connection (to avoid [] - Default to using a larger connection window (but keep the per-stream limit small) - Initialize window sizes per the settings frame received - Be more aggressive in updating flow control windows (send at 1/4 usage, not 1/2 usage) Change on 2014/12/07 by ctiller <ctiller@google.com> ------------- Created by MOE: http://code.google.com/p/moe-java MOE_MIGRATED_REVID=81534395
Diffstat (limited to 'src/core/transport/chttp2')
-rw-r--r--src/core/transport/chttp2/frame_settings.c8
-rw-r--r--src/core/transport/chttp2/frame_settings.h2
2 files changed, 6 insertions, 4 deletions
diff --git a/src/core/transport/chttp2/frame_settings.c b/src/core/transport/chttp2/frame_settings.c
index 488b96a728..d8bc492870 100644
--- a/src/core/transport/chttp2/frame_settings.c
+++ b/src/core/transport/chttp2/frame_settings.c
@@ -71,21 +71,21 @@ static gpr_uint8 *fill_header(gpr_uint8 *out, gpr_uint32 length,
}
gpr_slice grpc_chttp2_settings_create(gpr_uint32 *old, const gpr_uint32 *new,
- size_t count) {
+ gpr_uint32 force_mask, size_t count) {
size_t i;
size_t n = 0;
gpr_slice output;
gpr_uint8 *p;
for (i = 0; i < count; i++) {
- n += (new[i] != old[i]);
+ n += (new[i] != old[i] || (force_mask & (1 << i)) != 0);
}
output = gpr_slice_malloc(9 + 6 * n);
p = fill_header(GPR_SLICE_START_PTR(output), 6 * n, 0);
for (i = 0; i < count; i++) {
- if (new[i] != old[i]) {
+ if (new[i] != old[i] || (force_mask & (1 << i)) != 0) {
GPR_ASSERT(i);
*p++ = i >> 8;
*p++ = i;
@@ -217,6 +217,8 @@ grpc_chttp2_parse_error grpc_chttp2_settings_parser_parse(
}
}
parser->incoming_settings[parser->id] = parser->value;
+ gpr_log(GPR_DEBUG, "CHTTP2: got setting %d = %d", parser->id,
+ parser->value);
} else {
gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
parser->id, parser->value);
diff --git a/src/core/transport/chttp2/frame_settings.h b/src/core/transport/chttp2/frame_settings.h
index 74e2b4fa22..dcb8b00ca1 100644
--- a/src/core/transport/chttp2/frame_settings.h
+++ b/src/core/transport/chttp2/frame_settings.h
@@ -86,7 +86,7 @@ extern const grpc_chttp2_setting_parameters
/* Create a settings frame by diffing old & new, and updating old to be new */
gpr_slice grpc_chttp2_settings_create(gpr_uint32 *old, const gpr_uint32 *new,
- size_t count);
+ gpr_uint32 force_mask, size_t count);
/* Create an ack settings frame */
gpr_slice grpc_chttp2_settings_ack_create();