Refine flow control update rules: drastic improvement in trickle failure rates

pull/10720/head
Craig Tiller 8 years ago
parent 40fde140f4
commit 8b0db7f17c
  1. 2
      src/core/ext/transport/chttp2/transport/chttp2_transport.c
  2. 7
      src/core/ext/transport/chttp2/transport/parsing.c

@ -2542,7 +2542,7 @@ static void incoming_byte_stream_update_flow_control(grpc_exec_ctx *exec_ctx,
add_max_recv_bytes); add_max_recv_bytes);
if ((int64_t)s->incoming_window_delta + (int64_t)initial_window_size - if ((int64_t)s->incoming_window_delta + (int64_t)initial_window_size -
(int64_t)s->announce_window > (int64_t)s->announce_window >
(int64_t)initial_window_size / 2) { 2 * (int64_t)initial_window_size) {
write_type = GRPC_CHTTP2_STREAM_WRITE_PIGGYBACK; write_type = GRPC_CHTTP2_STREAM_WRITE_PIGGYBACK;
} }
grpc_chttp2_become_writable(exec_ctx, t, s, write_type, grpc_chttp2_become_writable(exec_ctx, t, s, write_type,

@ -418,12 +418,7 @@ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx,
GRPC_CHTTP2_FLOW_DEBIT_STREAM_INCOMING_WINDOW_DELTA("parse", t, s, GRPC_CHTTP2_FLOW_DEBIT_STREAM_INCOMING_WINDOW_DELTA("parse", t, s,
incoming_frame_size); incoming_frame_size);
if ((int64_t)t->settings[GRPC_SENT_SETTINGS] if ((int64_t)s->incoming_window_delta - (int64_t)s->announce_window <= 0) {
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] +
(int64_t)s->incoming_window_delta - (int64_t)s->announce_window <=
(int64_t)t->settings[GRPC_SENT_SETTINGS]
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] /
2) {
grpc_chttp2_become_writable(exec_ctx, t, s, grpc_chttp2_become_writable(exec_ctx, t, s,
GRPC_CHTTP2_STREAM_WRITE_INITIATE_UNCOVERED, GRPC_CHTTP2_STREAM_WRITE_INITIATE_UNCOVERED,
"window-update-required"); "window-update-required");

Loading…
Cancel
Save