aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/transport
diff options
context:
space:
mode:
authorGravatar Yang Gao <yangg@google.com>2018-03-23 11:24:40 -0700
committerGravatar GitHub <noreply@github.com>2018-03-23 11:24:40 -0700
commitb8b976f06cad46deb42d8891def790821b8e5813 (patch)
tree400fb7d21f2ca1dc90be0b0067c4b60f824ddbe9 /src/core/ext/transport
parent9e4d954077db20b259ae2edd3ac61f2c3f5c7d61 (diff)
parent69e153209f4a6b1aca0761184af990af63c0722b (diff)
Merge pull request #14787 from yang-g/tooo_many_pings
Properly reset pings_before_data_required
Diffstat (limited to 'src/core/ext/transport')
-rw-r--r--src/core/ext/transport/chttp2/transport/chttp2_transport.cc2
-rw-r--r--src/core/ext/transport/chttp2/transport/parsing.cc4
-rw-r--r--src/core/ext/transport/chttp2/transport/writing.cc14
3 files changed, 9 insertions, 11 deletions
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc
index bd588e3c9b..ab69cecf3a 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc
@@ -68,7 +68,7 @@
#define DEFAULT_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS 300000 /* 5 minutes */
#define DEFAULT_MIN_RECV_PING_INTERVAL_WITHOUT_DATA_MS 300000 /* 5 minutes */
-#define DEFAULT_MAX_PINGS_BETWEEN_DATA 0 /* unlimited */
+#define DEFAULT_MAX_PINGS_BETWEEN_DATA 2
#define DEFAULT_MAX_PING_STRIKES 2
static int g_default_client_keepalive_time_ms =
diff --git a/src/core/ext/transport/chttp2/transport/parsing.cc b/src/core/ext/transport/chttp2/transport/parsing.cc
index 988380b76c..a10c9ada46 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.cc
+++ b/src/core/ext/transport/chttp2/transport/parsing.cc
@@ -373,8 +373,6 @@ error_handler:
/* t->parser = grpc_chttp2_data_parser_parse;*/
t->parser = grpc_chttp2_data_parser_parse;
t->parser_data = &s->data_parser;
- t->ping_state.pings_before_data_required =
- t->ping_policy.max_pings_without_data;
t->ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
return GRPC_ERROR_NONE;
} else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, nullptr)) {
@@ -547,8 +545,6 @@ static grpc_error* init_header_frame_parser(grpc_chttp2_transport* t,
(t->incoming_frame_flags & GRPC_CHTTP2_DATA_FLAG_END_STREAM) != 0;
}
- t->ping_state.pings_before_data_required =
- t->ping_policy.max_pings_without_data;
t->ping_state.last_ping_sent_time = GRPC_MILLIS_INF_PAST;
/* could be a new grpc_chttp2_stream or an existing grpc_chttp2_stream */
diff --git a/src/core/ext/transport/chttp2/transport/writing.cc b/src/core/ext/transport/chttp2/transport/writing.cc
index 7471d88aa1..6f32397a3a 100644
--- a/src/core/ext/transport/chttp2/transport/writing.cc
+++ b/src/core/ext/transport/chttp2/transport/writing.cc
@@ -224,7 +224,7 @@ class WriteContext {
grpc_slice_buffer_add(
&t_->outbuf, grpc_chttp2_window_update_create(0, transport_announce,
&throwaway_stats));
- ResetPingRecvClock();
+ ResetPingClock();
}
}
@@ -269,11 +269,13 @@ class WriteContext {
return s;
}
- void ResetPingRecvClock() {
+ void ResetPingClock() {
if (!t_->is_client) {
t_->ping_recv_state.last_ping_recv_time = GRPC_MILLIS_INF_PAST;
t_->ping_recv_state.ping_strikes = 0;
}
+ t_->ping_state.pings_before_data_required =
+ t_->ping_policy.max_pings_without_data;
}
void IncInitialMetadataWrites() { ++initial_metadata_writes_; }
@@ -435,7 +437,7 @@ class StreamWriteContext {
};
grpc_chttp2_encode_header(&t_->hpack_compressor, nullptr, 0,
s_->send_initial_metadata, &hopt, &t_->outbuf);
- write_context_->ResetPingRecvClock();
+ write_context_->ResetPingClock();
write_context_->IncInitialMetadataWrites();
}
@@ -455,7 +457,7 @@ class StreamWriteContext {
grpc_slice_buffer_add(
&t_->outbuf, grpc_chttp2_window_update_create(s_->id, stream_announce,
&s_->stats.outgoing));
- write_context_->ResetPingRecvClock();
+ write_context_->ResetPingClock();
write_context_->IncWindowUpdateWrites();
}
@@ -489,7 +491,7 @@ class StreamWriteContext {
data_send_context.CompressMoreBytes();
}
}
- write_context_->ResetPingRecvClock();
+ write_context_->ResetPingClock();
if (data_send_context.is_last_frame()) {
SentLastFrame();
}
@@ -530,7 +532,7 @@ class StreamWriteContext {
s_->send_trailing_metadata, &hopt, &t_->outbuf);
}
write_context_->IncTrailingMetadataWrites();
- write_context_->ResetPingRecvClock();
+ write_context_->ResetPingClock();
SentLastFrame();
write_context_->NoteScheduledResults();