grpc 1.3.4 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +581 -450
- data/include/grpc/census.h +49 -49
- data/include/grpc/grpc.h +16 -70
- data/include/grpc/grpc_security.h +59 -59
- data/include/grpc/grpc_security_constants.h +9 -9
- data/include/grpc/impl/codegen/atm.h +1 -1
- data/include/grpc/impl/codegen/atm_windows.h +4 -4
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
- data/include/grpc/impl/codegen/compression_types.h +4 -5
- data/include/grpc/impl/codegen/gpr_slice.h +5 -5
- data/include/grpc/impl/codegen/gpr_types.h +6 -7
- data/include/grpc/impl/codegen/grpc_types.h +128 -59
- data/include/grpc/impl/codegen/port_platform.h +6 -0
- data/include/grpc/impl/codegen/propagation_bits.h +2 -2
- data/include/grpc/impl/codegen/slice.h +13 -12
- data/include/grpc/impl/codegen/status.h +23 -18
- data/include/grpc/impl/codegen/sync.h +1 -1
- data/include/grpc/load_reporting.h +6 -6
- data/include/grpc/slice.h +47 -25
- data/include/grpc/slice_buffer.h +18 -14
- data/include/grpc/support/alloc.h +7 -7
- data/include/grpc/support/cmdline.h +10 -10
- data/include/grpc/support/cpu.h +3 -3
- data/include/grpc/support/histogram.h +1 -1
- data/include/grpc/support/host_port.h +2 -2
- data/include/grpc/support/log.h +9 -9
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/string_util.h +3 -3
- data/include/grpc/support/subprocess.h +3 -3
- data/include/grpc/support/sync.h +31 -31
- data/include/grpc/support/thd.h +11 -11
- data/include/grpc/support/time.h +12 -12
- data/include/grpc/support/tls.h +1 -1
- data/include/grpc/support/tls_gcc.h +2 -2
- data/include/grpc/support/tls_msvc.h +1 -1
- data/include/grpc/support/tls_pthread.h +1 -1
- data/include/grpc/support/useful.h +2 -2
- data/include/grpc/support/workaround_list.h +46 -0
- data/src/core/ext/census/context.c +1 -1
- data/src/core/ext/census/intrusive_hash_map.c +319 -0
- data/src/core/ext/census/intrusive_hash_map.h +167 -0
- data/src/core/ext/census/intrusive_hash_map_internal.h +63 -0
- data/src/core/ext/census/resource.c +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.c +1 -1
- data/src/core/ext/filters/client_channel/client_channel.c +173 -103
- data/src/core/ext/filters/client_channel/client_channel_plugin.c +3 -2
- data/src/core/ext/filters/client_channel/lb_policy.c +2 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +153 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +405 -102
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +133 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +65 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +90 -51
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +19 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +63 -34
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +188 -294
- data/src/core/ext/filters/client_channel/lb_policy_factory.c +28 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +18 -4
- data/src/core/ext/filters/client_channel/parse_address.c +90 -59
- data/src/core/ext/filters/client_channel/parse_address.h +17 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +11 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +59 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +3 -3
- data/src/core/ext/filters/client_channel/subchannel.c +20 -17
- data/src/core/ext/filters/client_channel/subchannel.h +1 -0
- data/src/core/ext/filters/client_channel/subchannel_index.c +11 -1
- data/src/core/ext/filters/client_channel/uri_parser.c +36 -22
- data/src/core/ext/filters/client_channel/uri_parser.h +1 -1
- data/src/core/{lib/channel → ext/filters/deadline}/deadline_filter.c +42 -17
- data/src/core/{lib/channel → ext/filters/deadline}/deadline_filter.h +8 -9
- data/src/core/{lib/channel → ext/filters/http/client}/http_client_filter.c +19 -11
- data/src/core/{lib/channel → ext/filters/http/client}/http_client_filter.h +3 -6
- data/src/core/ext/filters/http/http_filters_plugin.c +104 -0
- data/src/core/{lib/channel/compress_filter.c → ext/filters/http/message_compress/message_compress_filter.c} +124 -23
- data/src/core/{lib/channel/compress_filter.h → ext/filters/http/message_compress/message_compress_filter.h} +5 -6
- data/src/core/{lib/channel → ext/filters/http/server}/http_server_filter.c +4 -6
- data/src/core/{lib/channel → ext/filters/http/server}/http_server_filter.h +3 -3
- data/src/core/ext/filters/load_reporting/load_reporting.c +2 -25
- data/src/core/ext/filters/load_reporting/load_reporting_filter.c +26 -1
- data/src/core/ext/filters/max_age/max_age_filter.c +14 -14
- data/src/core/{lib/channel → ext/filters/message_size}/message_size_filter.c +91 -47
- data/src/core/{lib/channel → ext/filters/message_size}/message_size_filter.h +3 -3
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +223 -0
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +40 -0
- data/src/core/ext/filters/workarounds/workaround_utils.c +65 -0
- data/src/core/ext/filters/workarounds/workaround_utils.h +52 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +3 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +2 -2
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +3 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +319 -175
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.c +203 -164
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -14
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +4 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +2 -4
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +4 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +50 -33
- data/src/core/ext/transport/chttp2/transport/parsing.c +10 -11
- data/src/core/ext/transport/chttp2/transport/writing.c +32 -13
- data/src/core/lib/channel/channel_args.c +30 -9
- data/src/core/lib/channel/channel_args.h +5 -1
- data/src/core/lib/channel/channel_stack.c +1 -1
- data/src/core/lib/channel/channel_stack.h +2 -2
- data/src/core/lib/channel/channel_stack_builder.c +13 -1
- data/src/core/lib/channel/channel_stack_builder.h +5 -1
- data/src/core/lib/channel/connected_channel.c +3 -1
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/compression/message_compress.c +2 -2
- data/src/core/lib/debug/trace.c +13 -6
- data/src/core/lib/debug/trace.h +27 -1
- data/src/core/lib/http/httpcli.c +1 -1
- data/src/core/lib/http/httpcli_security_connector.c +9 -11
- data/src/core/lib/http/parser.c +2 -2
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/combiner.c +6 -6
- data/src/core/lib/iomgr/combiner.h +2 -1
- data/src/core/lib/iomgr/error.c +12 -5
- data/src/core/lib/iomgr/error.h +13 -13
- data/src/core/lib/iomgr/ev_epoll1_linux.c +984 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.h +44 -0
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +2146 -0
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +43 -0
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +1337 -0
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +43 -0
- data/src/core/lib/iomgr/ev_epollex_linux.c +1511 -0
- data/src/core/lib/iomgr/ev_epollex_linux.h +43 -0
- data/src/core/lib/iomgr/{ev_epoll_linux.c → ev_epollsig_linux.c} +41 -33
- data/src/core/lib/iomgr/{ev_epoll_linux.h → ev_epollsig_linux.h} +4 -4
- data/src/core/lib/iomgr/ev_poll_posix.c +12 -27
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.c +22 -8
- data/src/core/lib/iomgr/ev_posix.h +4 -3
- data/src/core/lib/iomgr/ev_windows.c +43 -0
- data/src/core/lib/iomgr/exec_ctx.c +5 -0
- data/src/core/lib/iomgr/exec_ctx.h +2 -0
- data/src/core/lib/iomgr/iomgr.c +4 -0
- data/src/core/lib/iomgr/iomgr.h +3 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.c +116 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.h +41 -0
- data/src/core/lib/iomgr/lockfree_event.c +16 -0
- data/src/core/lib/iomgr/pollset.h +2 -5
- data/src/core/lib/iomgr/pollset_uv.c +1 -1
- data/src/core/lib/iomgr/pollset_windows.c +3 -3
- data/src/core/lib/iomgr/resource_quota.c +9 -8
- data/src/core/lib/iomgr/resource_quota.h +2 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +2 -0
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +43 -0
- data/src/core/lib/iomgr/tcp_client_posix.c +6 -6
- data/src/core/lib/iomgr/tcp_client_uv.c +3 -3
- data/src/core/lib/iomgr/tcp_posix.c +7 -7
- data/src/core/lib/iomgr/tcp_posix.h +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.c +1 -1
- data/src/core/lib/iomgr/tcp_uv.c +6 -6
- data/src/core/lib/iomgr/tcp_uv.h +2 -1
- data/src/core/lib/iomgr/tcp_windows.c +1 -1
- data/src/core/lib/iomgr/timer_generic.c +24 -25
- data/src/core/lib/iomgr/timer_manager.c +276 -0
- data/src/core/lib/iomgr/timer_manager.h +52 -0
- data/src/core/lib/iomgr/timer_uv.c +6 -0
- data/src/core/lib/iomgr/udp_server.c +42 -9
- data/src/core/lib/iomgr/udp_server.h +3 -1
- data/src/core/lib/security/credentials/credentials.c +0 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.c +23 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -9
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +24 -53
- data/src/core/lib/security/transport/client_auth_filter.c +9 -3
- data/src/core/lib/security/transport/secure_endpoint.c +7 -7
- data/src/core/lib/security/transport/secure_endpoint.h +1 -1
- data/src/core/lib/security/transport/security_connector.c +45 -57
- data/src/core/lib/security/transport/security_connector.h +10 -14
- data/src/core/lib/security/transport/security_handshaker.c +123 -97
- data/src/core/lib/slice/b64.c +1 -1
- data/src/core/lib/slice/percent_encoding.c +3 -3
- data/src/core/lib/slice/slice.c +66 -33
- data/src/core/lib/slice/slice_buffer.c +25 -6
- data/src/core/lib/slice/slice_hash_table.c +33 -35
- data/src/core/lib/slice/slice_hash_table.h +7 -12
- data/src/core/lib/support/atomic.h +45 -0
- data/src/core/lib/support/atomic_with_atm.h +70 -0
- data/src/core/lib/support/atomic_with_std.h +48 -0
- data/src/core/lib/support/avl.c +14 -14
- data/src/core/lib/support/cmdline.c +3 -3
- data/src/core/lib/support/histogram.c +2 -2
- data/src/core/lib/support/host_port.c +1 -1
- data/src/core/lib/support/memory.h +74 -0
- data/src/core/lib/support/mpscq.c +36 -2
- data/src/core/lib/support/mpscq.h +28 -1
- data/src/core/lib/support/stack_lockfree.c +3 -36
- data/src/core/lib/support/string.c +12 -12
- data/src/core/lib/support/string_posix.c +1 -1
- data/src/core/lib/support/subprocess_posix.c +2 -2
- data/src/core/lib/support/thd_posix.c +1 -1
- data/src/core/lib/support/time_posix.c +8 -0
- data/src/core/lib/support/tmpfile_posix.c +10 -10
- data/src/core/lib/surface/alarm.c +3 -1
- data/src/core/lib/surface/api_trace.c +2 -1
- data/src/core/lib/surface/api_trace.h +2 -2
- data/src/core/lib/surface/byte_buffer_reader.c +1 -1
- data/src/core/lib/surface/call.c +65 -22
- data/src/core/lib/surface/call.h +4 -2
- data/src/core/lib/surface/channel_init.c +2 -19
- data/src/core/lib/surface/channel_stack_type.c +18 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.c +694 -247
- data/src/core/lib/surface/completion_queue.h +30 -13
- data/src/core/lib/surface/completion_queue_factory.c +24 -9
- data/src/core/lib/surface/init.c +1 -52
- data/src/core/lib/surface/{lame_client.c → lame_client.cc} +37 -26
- data/src/core/lib/surface/server.c +79 -110
- data/src/core/lib/surface/server.h +2 -1
- data/src/core/lib/surface/version.c +2 -2
- data/src/core/lib/transport/bdp_estimator.c +25 -9
- data/src/core/lib/transport/bdp_estimator.h +7 -1
- data/src/core/lib/transport/byte_stream.c +23 -9
- data/src/core/lib/transport/byte_stream.h +15 -6
- data/src/core/lib/transport/connectivity_state.c +6 -6
- data/src/core/lib/transport/connectivity_state.h +2 -1
- data/src/core/lib/transport/service_config.c +6 -13
- data/src/core/lib/transport/service_config.h +2 -2
- data/src/core/lib/transport/static_metadata.c +403 -389
- data/src/core/lib/transport/static_metadata.h +127 -114
- data/src/core/plugin_registry/grpc_plugin_registry.c +16 -0
- data/src/core/tsi/fake_transport_security.c +5 -4
- data/src/core/tsi/ssl_transport_security.c +71 -82
- data/src/core/tsi/ssl_transport_security.h +39 -61
- data/src/core/tsi/transport_security.c +83 -2
- data/src/core/tsi/transport_security.h +27 -2
- data/src/core/tsi/transport_security_adapter.c +236 -0
- data/src/core/tsi/transport_security_adapter.h +62 -0
- data/src/core/tsi/transport_security_interface.h +179 -66
- data/src/ruby/ext/grpc/extconf.rb +2 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -6
- data/src/ruby/ext/grpc/rb_call.c +56 -48
- data/src/ruby/ext/grpc/rb_call.h +3 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +23 -22
- data/src/ruby/ext/grpc/rb_channel.c +2 -3
- data/src/ruby/ext/grpc/rb_channel_args.c +11 -9
- data/src/ruby/ext/grpc/rb_channel_credentials.c +16 -12
- data/src/ruby/ext/grpc/rb_completion_queue.c +7 -9
- data/src/ruby/ext/grpc/rb_compression_options.c +7 -6
- data/src/ruby/ext/grpc/rb_event_thread.c +10 -12
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -2
- data/src/ruby/ext/grpc/rb_grpc.c +11 -15
- data/src/ruby/ext/grpc/rb_grpc.h +2 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -6
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +25 -10
- data/src/ruby/ext/grpc/rb_server.c +26 -28
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/cares/config_linux/ares_config.h +36 -2
- data/third_party/zlib/adler32.c +14 -7
- data/third_party/zlib/compress.c +24 -18
- data/third_party/zlib/crc32.c +29 -12
- data/third_party/zlib/deflate.c +499 -303
- data/third_party/zlib/deflate.h +19 -16
- data/third_party/zlib/gzguts.h +16 -7
- data/third_party/zlib/gzlib.c +17 -14
- data/third_party/zlib/gzread.c +108 -48
- data/third_party/zlib/gzwrite.c +210 -122
- data/third_party/zlib/infback.c +2 -2
- data/third_party/zlib/inffast.c +34 -51
- data/third_party/zlib/inflate.c +86 -37
- data/third_party/zlib/inflate.h +7 -4
- data/third_party/zlib/inftrees.c +12 -14
- data/third_party/zlib/trees.c +38 -61
- data/third_party/zlib/uncompr.c +66 -32
- data/third_party/zlib/zconf.h +32 -9
- data/third_party/zlib/zlib.h +298 -154
- data/third_party/zlib/zutil.c +25 -24
- data/third_party/zlib/zutil.h +35 -17
- metadata +63 -30
@@ -163,7 +163,7 @@ grpc_error *grpc_chttp2_goaway_parser_parse(grpc_exec_ctx *exec_ctx,
|
|
163
163
|
void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code,
|
164
164
|
grpc_slice debug_data,
|
165
165
|
grpc_slice_buffer *slice_buffer) {
|
166
|
-
grpc_slice header =
|
166
|
+
grpc_slice header = GRPC_SLICE_MALLOC(9 + 4 + 4);
|
167
167
|
uint8_t *p = GRPC_SLICE_START_PTR(header);
|
168
168
|
uint32_t frame_length;
|
169
169
|
GPR_ASSERT(GRPC_SLICE_LENGTH(debug_data) < UINT32_MAX - 4 - 4);
|
@@ -43,7 +43,7 @@
|
|
43
43
|
static bool g_disable_ping_ack = false;
|
44
44
|
|
45
45
|
grpc_slice grpc_chttp2_ping_create(uint8_t ack, uint64_t opaque_8bytes) {
|
46
|
-
grpc_slice slice =
|
46
|
+
grpc_slice slice = GRPC_SLICE_MALLOC(9 + 8);
|
47
47
|
uint8_t *p = GRPC_SLICE_START_PTR(slice);
|
48
48
|
|
49
49
|
*p++ = 0;
|
@@ -44,7 +44,7 @@
|
|
44
44
|
grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
|
45
45
|
grpc_transport_one_way_stats *stats) {
|
46
46
|
static const size_t frame_size = 13;
|
47
|
-
grpc_slice slice =
|
47
|
+
grpc_slice slice = GRPC_SLICE_MALLOC(frame_size);
|
48
48
|
stats->framing_bytes += frame_size;
|
49
49
|
uint8_t *p = GRPC_SLICE_START_PTR(slice);
|
50
50
|
|
@@ -70,7 +70,7 @@ grpc_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
|
|
70
70
|
n += (new[i] != old[i] || (force_mask & (1u << i)) != 0);
|
71
71
|
}
|
72
72
|
|
73
|
-
output =
|
73
|
+
output = GRPC_SLICE_MALLOC(9 + 6 * n);
|
74
74
|
p = fill_header(GRPC_SLICE_START_PTR(output), 6 * n, 0);
|
75
75
|
|
76
76
|
for (i = 0; i < count; i++) {
|
@@ -91,7 +91,7 @@ grpc_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
|
|
91
91
|
}
|
92
92
|
|
93
93
|
grpc_slice grpc_chttp2_settings_ack_create(void) {
|
94
|
-
grpc_slice output =
|
94
|
+
grpc_slice output = GRPC_SLICE_MALLOC(9);
|
95
95
|
fill_header(GRPC_SLICE_START_PTR(output), 0, GRPC_CHTTP2_FLAG_ACK);
|
96
96
|
return output;
|
97
97
|
}
|
@@ -218,18 +218,18 @@ grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
|
|
218
218
|
parser->incoming_settings[id] != parser->value) {
|
219
219
|
t->initial_window_update +=
|
220
220
|
(int64_t)parser->value - parser->incoming_settings[id];
|
221
|
-
if (grpc_http_trace) {
|
221
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
222
222
|
gpr_log(GPR_DEBUG, "adding %d for initial_window change",
|
223
223
|
(int)t->initial_window_update);
|
224
224
|
}
|
225
225
|
}
|
226
226
|
parser->incoming_settings[id] = parser->value;
|
227
|
-
if (grpc_http_trace) {
|
227
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
228
228
|
gpr_log(GPR_DEBUG, "CHTTP2:%s:%s: got setting %s = %d",
|
229
229
|
t->is_client ? "CLI" : "SVR", t->peer_string, sp->name,
|
230
230
|
parser->value);
|
231
231
|
}
|
232
|
-
} else if (grpc_http_trace) {
|
232
|
+
} else if (GRPC_TRACER_ON(grpc_http_trace)) {
|
233
233
|
gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
|
234
234
|
parser->id, parser->value);
|
235
235
|
}
|
@@ -41,7 +41,7 @@
|
|
41
41
|
grpc_slice grpc_chttp2_window_update_create(
|
42
42
|
uint32_t id, uint32_t window_update, grpc_transport_one_way_stats *stats) {
|
43
43
|
static const size_t frame_size = 13;
|
44
|
-
grpc_slice slice =
|
44
|
+
grpc_slice slice = GRPC_SLICE_MALLOC(frame_size);
|
45
45
|
stats->header_bytes += frame_size;
|
46
46
|
uint8_t *p = GRPC_SLICE_START_PTR(slice);
|
47
47
|
|
@@ -69,7 +69,7 @@ static grpc_slice_refcount terminal_slice_refcount = {NULL, NULL};
|
|
69
69
|
static const grpc_slice terminal_slice = {&terminal_slice_refcount,
|
70
70
|
.data.refcounted = {0, 0}};
|
71
71
|
|
72
|
-
extern
|
72
|
+
extern grpc_tracer_flag grpc_http_trace;
|
73
73
|
|
74
74
|
typedef struct {
|
75
75
|
int is_first_frame;
|
@@ -123,7 +123,7 @@ static void finish_frame(framer_state *st, int is_header_boundary,
|
|
123
123
|
output before beginning */
|
124
124
|
static void begin_frame(framer_state *st) {
|
125
125
|
st->header_idx =
|
126
|
-
grpc_slice_buffer_add_indexed(st->output,
|
126
|
+
grpc_slice_buffer_add_indexed(st->output, GRPC_SLICE_MALLOC(9));
|
127
127
|
st->output_length_at_start_of_frame = st->output->length;
|
128
128
|
}
|
129
129
|
|
@@ -425,7 +425,7 @@ static void hpack_enc(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
|
|
425
425
|
"Reserved header (colon-prefixed) happening after regular ones.");
|
426
426
|
}
|
427
427
|
|
428
|
-
if (grpc_http_trace && !GRPC_MDELEM_IS_INTERNED(elem)) {
|
428
|
+
if (GRPC_TRACER_ON(grpc_http_trace) && !GRPC_MDELEM_IS_INTERNED(elem)) {
|
429
429
|
char *k = grpc_slice_to_c_string(GRPC_MDKEY(elem));
|
430
430
|
char *v = grpc_slice_to_c_string(GRPC_MDVALUE(elem));
|
431
431
|
gpr_log(
|
@@ -616,7 +616,7 @@ void grpc_chttp2_hpack_compressor_set_max_table_size(
|
|
616
616
|
}
|
617
617
|
}
|
618
618
|
c->advertise_table_size_change = 1;
|
619
|
-
if (grpc_http_trace) {
|
619
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
620
620
|
gpr_log(GPR_DEBUG, "set max table size from encoder to %d", max_table_size);
|
621
621
|
}
|
622
622
|
}
|
@@ -50,8 +50,6 @@
|
|
50
50
|
#include "src/core/lib/support/string.h"
|
51
51
|
#include "src/core/lib/transport/http2_errors.h"
|
52
52
|
|
53
|
-
extern int grpc_http_trace;
|
54
|
-
|
55
53
|
typedef enum {
|
56
54
|
NOT_BINARY,
|
57
55
|
BINARY_BEGIN,
|
@@ -666,7 +664,7 @@ static const uint8_t inverse_base64[256] = {
|
|
666
664
|
/* emission helpers */
|
667
665
|
static grpc_error *on_hdr(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p,
|
668
666
|
grpc_mdelem md, int add_to_table) {
|
669
|
-
if (grpc_http_trace && !GRPC_MDELEM_IS_INTERNED(md)) {
|
667
|
+
if (GRPC_TRACER_ON(grpc_http_trace) && !GRPC_MDELEM_IS_INTERNED(md)) {
|
670
668
|
char *k = grpc_slice_to_c_string(GRPC_MDKEY(md));
|
671
669
|
char *v = grpc_slice_to_c_string(GRPC_MDVALUE(md));
|
672
670
|
gpr_log(
|
@@ -1052,7 +1050,7 @@ static grpc_error *parse_lithdr_nvridx_v(grpc_exec_ctx *exec_ctx,
|
|
1052
1050
|
static grpc_error *finish_max_tbl_size(grpc_exec_ctx *exec_ctx,
|
1053
1051
|
grpc_chttp2_hpack_parser *p,
|
1054
1052
|
const uint8_t *cur, const uint8_t *end) {
|
1055
|
-
if (grpc_http_trace) {
|
1053
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
1056
1054
|
gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
|
1057
1055
|
}
|
1058
1056
|
grpc_error *err =
|
@@ -40,9 +40,10 @@
|
|
40
40
|
#include <grpc/support/log.h>
|
41
41
|
#include <grpc/support/string_util.h>
|
42
42
|
|
43
|
+
#include "src/core/lib/debug/trace.h"
|
43
44
|
#include "src/core/lib/support/murmur_hash.h"
|
44
45
|
|
45
|
-
extern
|
46
|
+
extern grpc_tracer_flag grpc_http_trace;
|
46
47
|
|
47
48
|
static struct {
|
48
49
|
const char *key;
|
@@ -260,7 +261,7 @@ void grpc_chttp2_hptbl_set_max_bytes(grpc_exec_ctx *exec_ctx,
|
|
260
261
|
if (tbl->max_bytes == max_bytes) {
|
261
262
|
return;
|
262
263
|
}
|
263
|
-
if (grpc_http_trace) {
|
264
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
264
265
|
gpr_log(GPR_DEBUG, "Update hpack parser max size to %d", max_bytes);
|
265
266
|
}
|
266
267
|
while (tbl->mem_used > max_bytes) {
|
@@ -284,7 +285,7 @@ grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_exec_ctx *exec_ctx,
|
|
284
285
|
gpr_free(msg);
|
285
286
|
return err;
|
286
287
|
}
|
287
|
-
if (grpc_http_trace) {
|
288
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
288
289
|
gpr_log(GPR_DEBUG, "Update hpack parser table size to %d", bytes);
|
289
290
|
}
|
290
291
|
while (tbl->mem_used > bytes) {
|
@@ -195,22 +195,20 @@ typedef struct grpc_chttp2_write_cb {
|
|
195
195
|
struct grpc_chttp2_incoming_byte_stream {
|
196
196
|
grpc_byte_stream base;
|
197
197
|
gpr_refcount refs;
|
198
|
-
struct grpc_chttp2_incoming_byte_stream *next_message;
|
199
|
-
grpc_error *error;
|
200
198
|
|
201
|
-
grpc_chttp2_transport *transport;
|
202
|
-
grpc_chttp2_stream *stream;
|
203
|
-
bool is_tail;
|
199
|
+
grpc_chttp2_transport *transport; /* immutable */
|
200
|
+
grpc_chttp2_stream *stream; /* immutable */
|
204
201
|
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
grpc_slice *next;
|
202
|
+
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
203
|
+
* Accessed only by application thread when stream->pending_byte_stream ==
|
204
|
+
* true */
|
209
205
|
uint32_t remaining_bytes;
|
210
206
|
|
207
|
+
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
208
|
+
* Accessed only by application thread when stream->pending_byte_stream ==
|
209
|
+
* true */
|
211
210
|
struct {
|
212
211
|
grpc_closure closure;
|
213
|
-
grpc_slice *slice;
|
214
212
|
size_t max_size_hint;
|
215
213
|
grpc_closure *on_complete;
|
216
214
|
} next_action;
|
@@ -222,6 +220,7 @@ typedef enum {
|
|
222
220
|
GRPC_CHTTP2_KEEPALIVE_STATE_WAITING,
|
223
221
|
GRPC_CHTTP2_KEEPALIVE_STATE_PINGING,
|
224
222
|
GRPC_CHTTP2_KEEPALIVE_STATE_DYING,
|
223
|
+
GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED,
|
225
224
|
} grpc_chttp2_keepalive_state;
|
226
225
|
|
227
226
|
struct grpc_chttp2_transport {
|
@@ -445,8 +444,8 @@ struct grpc_chttp2_stream {
|
|
445
444
|
uint32_t id;
|
446
445
|
|
447
446
|
/** window available for us to send to peer, over or under the initial window
|
448
|
-
|
449
|
-
|
447
|
+
* size of the transport... ie:
|
448
|
+
* outgoing_window = outgoing_window_delta + transport.initial_window_size */
|
450
449
|
int64_t outgoing_window_delta;
|
451
450
|
/** things the upper layers would like to send */
|
452
451
|
grpc_metadata_batch *send_initial_metadata;
|
@@ -473,9 +472,6 @@ struct grpc_chttp2_stream {
|
|
473
472
|
grpc_transport_stream_stats *collecting_stats;
|
474
473
|
grpc_transport_stream_stats stats;
|
475
474
|
|
476
|
-
/** number of streams that are currently being read */
|
477
|
-
gpr_refcount active_streams;
|
478
|
-
|
479
475
|
/** Is this stream closed for writing. */
|
480
476
|
bool write_closed;
|
481
477
|
/** Is this stream reading half-closed. */
|
@@ -499,7 +495,17 @@ struct grpc_chttp2_stream {
|
|
499
495
|
|
500
496
|
grpc_chttp2_incoming_metadata_buffer metadata_buffer[2];
|
501
497
|
|
502
|
-
|
498
|
+
grpc_slice_buffer frame_storage; /* protected by t combiner */
|
499
|
+
|
500
|
+
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
501
|
+
* Accessed only by application thread when stream->pending_byte_stream ==
|
502
|
+
* true */
|
503
|
+
grpc_slice_buffer unprocessed_incoming_frames_buffer;
|
504
|
+
grpc_closure *on_next; /* protected by t combiner */
|
505
|
+
bool pending_byte_stream; /* protected by t combiner */
|
506
|
+
grpc_closure reset_byte_stream;
|
507
|
+
grpc_error *byte_stream_error; /* protected by t combiner */
|
508
|
+
bool received_last_frame; /* protected by t combiner */
|
503
509
|
|
504
510
|
gpr_timespec deadline;
|
505
511
|
|
@@ -512,6 +518,9 @@ struct grpc_chttp2_stream {
|
|
512
518
|
* incoming_window = incoming_window_delta + transport.initial_window_size */
|
513
519
|
int64_t incoming_window_delta;
|
514
520
|
/** parsing state for data frames */
|
521
|
+
/* Accessed only by transport thread when stream->pending_byte_stream == false
|
522
|
+
* Accessed only by application thread when stream->pending_byte_stream ==
|
523
|
+
* true */
|
515
524
|
grpc_chttp2_data_parser data_parser;
|
516
525
|
/** number of bytes received - reset at end of parse thread execution */
|
517
526
|
int64_t received_bytes;
|
@@ -543,9 +552,14 @@ void grpc_chttp2_initiate_write(grpc_exec_ctx *exec_ctx,
|
|
543
552
|
grpc_chttp2_transport *t,
|
544
553
|
bool covered_by_poller, const char *reason);
|
545
554
|
|
546
|
-
|
547
|
-
|
548
|
-
|
555
|
+
typedef enum {
|
556
|
+
GRPC_CHTTP2_NOTHING_TO_WRITE,
|
557
|
+
GRPC_CHTTP2_PARTIAL_WRITE,
|
558
|
+
GRPC_CHTTP2_FULL_WRITE,
|
559
|
+
} grpc_chttp2_begin_write_result;
|
560
|
+
|
561
|
+
grpc_chttp2_begin_write_result grpc_chttp2_begin_write(
|
562
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t);
|
549
563
|
void grpc_chttp2_end_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
550
564
|
grpc_error *error);
|
551
565
|
|
@@ -620,13 +634,13 @@ void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx,
|
|
620
634
|
#define GRPC_CHTTP2_CLIENT_CONNECT_STRLEN \
|
621
635
|
(sizeof(GRPC_CHTTP2_CLIENT_CONNECT_STRING) - 1)
|
622
636
|
|
623
|
-
extern
|
624
|
-
extern
|
637
|
+
extern grpc_tracer_flag grpc_http_trace;
|
638
|
+
extern grpc_tracer_flag grpc_flowctl_trace;
|
625
639
|
|
626
|
-
#define GRPC_CHTTP2_IF_TRACING(stmt)
|
627
|
-
if (!(grpc_http_trace))
|
628
|
-
;
|
629
|
-
else
|
640
|
+
#define GRPC_CHTTP2_IF_TRACING(stmt) \
|
641
|
+
if (!(GRPC_TRACER_ON(grpc_http_trace))) \
|
642
|
+
; \
|
643
|
+
else \
|
630
644
|
stmt
|
631
645
|
|
632
646
|
typedef enum {
|
@@ -639,7 +653,7 @@ typedef enum {
|
|
639
653
|
dst_var, src_context, src_var) \
|
640
654
|
do { \
|
641
655
|
assert(id1 == id2); \
|
642
|
-
if (grpc_flowctl_trace) {
|
656
|
+
if (GRPC_TRACER_ON(grpc_flowctl_trace)) { \
|
643
657
|
grpc_chttp2_flowctl_trace( \
|
644
658
|
__FILE__, __LINE__, phase, GRPC_CHTTP2_FLOWCTL_MOVE, #dst_context, \
|
645
659
|
#dst_var, #src_context, #src_var, transport->is_client, id1, \
|
@@ -662,7 +676,7 @@ typedef enum {
|
|
662
676
|
#define GRPC_CHTTP2_FLOW_CREDIT_COMMON(phase, transport, id, dst_context, \
|
663
677
|
dst_var, amount) \
|
664
678
|
do { \
|
665
|
-
if (grpc_flowctl_trace) {
|
679
|
+
if (GRPC_TRACER_ON(grpc_flowctl_trace)) { \
|
666
680
|
grpc_chttp2_flowctl_trace(__FILE__, __LINE__, phase, \
|
667
681
|
GRPC_CHTTP2_FLOWCTL_CREDIT, #dst_context, \
|
668
682
|
#dst_var, NULL, #amount, transport->is_client, \
|
@@ -720,7 +734,7 @@ typedef enum {
|
|
720
734
|
#define GRPC_CHTTP2_FLOW_DEBIT_COMMON(phase, transport, id, dst_context, \
|
721
735
|
dst_var, amount) \
|
722
736
|
do { \
|
723
|
-
if (grpc_flowctl_trace) {
|
737
|
+
if (GRPC_TRACER_ON(grpc_flowctl_trace)) { \
|
724
738
|
grpc_chttp2_flowctl_trace(__FILE__, __LINE__, phase, \
|
725
739
|
GRPC_CHTTP2_FLOWCTL_DEBIT, #dst_context, \
|
726
740
|
#dst_var, NULL, #amount, transport->is_client, \
|
@@ -790,10 +804,13 @@ void grpc_chttp2_ref_transport(grpc_chttp2_transport *t);
|
|
790
804
|
grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create(
|
791
805
|
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s,
|
792
806
|
uint32_t frame_size, uint32_t flags);
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
807
|
+
grpc_error *grpc_chttp2_incoming_byte_stream_push(
|
808
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
|
809
|
+
grpc_slice slice, grpc_slice *slice_out);
|
810
|
+
grpc_error *grpc_chttp2_incoming_byte_stream_finished(
|
811
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
|
812
|
+
grpc_error *error, bool reset_on_error);
|
813
|
+
void grpc_chttp2_incoming_byte_stream_notify(
|
797
814
|
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
|
798
815
|
grpc_error *error);
|
799
816
|
|
@@ -803,7 +820,7 @@ void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
|
803
820
|
/** Add a new ping strike to ping_recv_state.ping_strikes. If
|
804
821
|
ping_recv_state.ping_strikes > ping_policy.max_ping_strikes, it sends GOAWAY
|
805
822
|
with error code ENHANCE_YOUR_CALM and additional debug data resembling
|
806
|
-
|
823
|
+
"too_many_pings" followed by immediately closing the connection. */
|
807
824
|
void grpc_chttp2_add_ping_strike(grpc_exec_ctx *exec_ctx,
|
808
825
|
grpc_chttp2_transport *t);
|
809
826
|
|
@@ -324,7 +324,7 @@ static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx,
|
|
324
324
|
case GRPC_CHTTP2_FRAME_GOAWAY:
|
325
325
|
return init_goaway_parser(exec_ctx, t);
|
326
326
|
default:
|
327
|
-
if (grpc_http_trace) {
|
327
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
328
328
|
gpr_log(GPR_ERROR, "Unknown frame type %02x", t->incoming_frame_type);
|
329
329
|
}
|
330
330
|
return init_skip_frame_parser(exec_ctx, t, 0);
|
@@ -418,11 +418,9 @@ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx,
|
|
418
418
|
|
419
419
|
GRPC_CHTTP2_FLOW_DEBIT_STREAM_INCOMING_WINDOW_DELTA("parse", t, s,
|
420
420
|
incoming_frame_size);
|
421
|
-
if ((int64_t)
|
422
|
-
|
423
|
-
|
424
|
-
(int64_t)t->settings[GRPC_SENT_SETTINGS]
|
425
|
-
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] /
|
421
|
+
if ((int64_t)s->incoming_window_delta - (int64_t)s->announce_window <=
|
422
|
+
-(int64_t)t->settings[GRPC_SENT_SETTINGS]
|
423
|
+
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] /
|
426
424
|
2) {
|
427
425
|
grpc_chttp2_become_writable(exec_ctx, t, s,
|
428
426
|
GRPC_CHTTP2_STREAM_WRITE_INITIATE_UNCOVERED,
|
@@ -458,12 +456,13 @@ static grpc_error *init_data_frame_parser(grpc_exec_ctx *exec_ctx,
|
|
458
456
|
return init_skip_frame_parser(exec_ctx, t, 0);
|
459
457
|
}
|
460
458
|
if (err == GRPC_ERROR_NONE) {
|
461
|
-
err = grpc_chttp2_data_parser_begin_frame(
|
462
|
-
|
459
|
+
err = grpc_chttp2_data_parser_begin_frame(
|
460
|
+
&s->data_parser, t->incoming_frame_flags, s->id, s);
|
463
461
|
}
|
464
462
|
error_handler:
|
465
463
|
if (err == GRPC_ERROR_NONE) {
|
466
464
|
t->incoming_stream = s;
|
465
|
+
/* t->parser = grpc_chttp2_data_parser_parse;*/
|
467
466
|
t->parser = grpc_chttp2_data_parser_parse;
|
468
467
|
t->parser_data = &s->data_parser;
|
469
468
|
return GRPC_ERROR_NONE;
|
@@ -493,7 +492,7 @@ static void on_initial_header(grpc_exec_ctx *exec_ctx, void *tp,
|
|
493
492
|
|
494
493
|
GPR_ASSERT(s != NULL);
|
495
494
|
|
496
|
-
if (grpc_http_trace) {
|
495
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
497
496
|
char *key = grpc_slice_to_c_string(GRPC_MDKEY(md));
|
498
497
|
char *value =
|
499
498
|
grpc_dump_slice(GRPC_MDVALUE(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
@@ -573,7 +572,7 @@ static void on_trailing_header(grpc_exec_ctx *exec_ctx, void *tp,
|
|
573
572
|
|
574
573
|
GPR_ASSERT(s != NULL);
|
575
574
|
|
576
|
-
if (grpc_http_trace) {
|
575
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
577
576
|
char *key = grpc_slice_to_c_string(GRPC_MDKEY(md));
|
578
577
|
char *value =
|
579
578
|
grpc_dump_slice(GRPC_MDVALUE(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
@@ -806,7 +805,7 @@ static grpc_error *parse_frame_slice(grpc_exec_ctx *exec_ctx,
|
|
806
805
|
if (err == GRPC_ERROR_NONE) {
|
807
806
|
return err;
|
808
807
|
} else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, NULL)) {
|
809
|
-
if (grpc_http_trace) {
|
808
|
+
if (GRPC_TRACER_ON(grpc_http_trace)) {
|
810
809
|
const char *msg = grpc_error_string(err);
|
811
810
|
gpr_log(GPR_ERROR, "%s", msg);
|
812
811
|
}
|
@@ -74,7 +74,8 @@ static void maybe_initiate_ping(grpc_exec_ctx *exec_ctx,
|
|
74
74
|
}
|
75
75
|
if (!grpc_closure_list_empty(pq->lists[GRPC_CHTTP2_PCL_INFLIGHT])) {
|
76
76
|
/* ping already in-flight: wait */
|
77
|
-
if (grpc_http_trace ||
|
77
|
+
if (GRPC_TRACER_ON(grpc_http_trace) ||
|
78
|
+
GRPC_TRACER_ON(grpc_bdp_estimator_trace)) {
|
78
79
|
gpr_log(GPR_DEBUG, "Ping delayed [%p]: already pinging", t->peer_string);
|
79
80
|
}
|
80
81
|
return;
|
@@ -82,7 +83,8 @@ static void maybe_initiate_ping(grpc_exec_ctx *exec_ctx,
|
|
82
83
|
if (t->ping_state.pings_before_data_required == 0 &&
|
83
84
|
t->ping_policy.max_pings_without_data != 0) {
|
84
85
|
/* need to send something of substance before sending a ping again */
|
85
|
-
if (grpc_http_trace ||
|
86
|
+
if (GRPC_TRACER_ON(grpc_http_trace) ||
|
87
|
+
GRPC_TRACER_ON(grpc_bdp_estimator_trace)) {
|
86
88
|
gpr_log(GPR_DEBUG, "Ping delayed [%p]: too many recent pings: %d/%d",
|
87
89
|
t->peer_string, t->ping_state.pings_before_data_required,
|
88
90
|
t->ping_policy.max_pings_without_data);
|
@@ -96,7 +98,8 @@ static void maybe_initiate_ping(grpc_exec_ctx *exec_ctx,
|
|
96
98
|
(int)t->ping_policy.min_time_between_pings.tv_nsec);*/
|
97
99
|
if (gpr_time_cmp(elapsed, t->ping_policy.min_time_between_pings) < 0) {
|
98
100
|
/* not enough elapsed time between successive pings */
|
99
|
-
if (grpc_http_trace ||
|
101
|
+
if (GRPC_TRACER_ON(grpc_http_trace) ||
|
102
|
+
GRPC_TRACER_ON(grpc_bdp_estimator_trace)) {
|
100
103
|
gpr_log(GPR_DEBUG,
|
101
104
|
"Ping delayed [%p]: not enough time elapsed since last ping",
|
102
105
|
t->peer_string);
|
@@ -160,19 +163,22 @@ static bool stream_ref_if_not_destroyed(gpr_refcount *r) {
|
|
160
163
|
return true;
|
161
164
|
}
|
162
165
|
|
166
|
+
/* How many bytes of incoming flow control would we like to advertise */
|
163
167
|
uint32_t grpc_chttp2_target_incoming_window(grpc_chttp2_transport *t) {
|
164
|
-
return (uint32_t)
|
168
|
+
return (uint32_t)GPR_MIN(
|
165
169
|
(int64_t)((1u << 31) - 1),
|
166
170
|
t->stream_total_over_incoming_window +
|
167
|
-
|
168
|
-
|
169
|
-
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] -
|
170
|
-
t->stream_total_under_incoming_window,
|
171
|
-
0));
|
171
|
+
t->settings[GRPC_SENT_SETTINGS]
|
172
|
+
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]);
|
172
173
|
}
|
173
174
|
|
174
|
-
|
175
|
-
|
175
|
+
/* How many bytes would we like to put on the wire during a single syscall */
|
176
|
+
static uint32_t target_write_size(grpc_chttp2_transport *t) {
|
177
|
+
return 1024 * 1024;
|
178
|
+
}
|
179
|
+
|
180
|
+
grpc_chttp2_begin_write_result grpc_chttp2_begin_write(
|
181
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) {
|
176
182
|
grpc_chttp2_stream *s;
|
177
183
|
|
178
184
|
GPR_TIMER_BEGIN("grpc_chttp2_begin_write", 0);
|
@@ -206,9 +212,20 @@ bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx,
|
|
206
212
|
}
|
207
213
|
}
|
208
214
|
|
215
|
+
bool partial_write = false;
|
216
|
+
|
209
217
|
/* for each grpc_chttp2_stream that's become writable, frame it's data
|
210
218
|
(according to available window sizes) and add to the output buffer */
|
211
|
-
while (
|
219
|
+
while (true) {
|
220
|
+
if (t->outbuf.length > target_write_size(t)) {
|
221
|
+
partial_write = true;
|
222
|
+
break;
|
223
|
+
}
|
224
|
+
|
225
|
+
if (!grpc_chttp2_list_pop_writable_stream(t, &s)) {
|
226
|
+
break;
|
227
|
+
}
|
228
|
+
|
212
229
|
bool sent_initial_metadata = s->sent_initial_metadata;
|
213
230
|
bool now_writing = false;
|
214
231
|
|
@@ -395,7 +412,9 @@ bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx,
|
|
395
412
|
|
396
413
|
GPR_TIMER_END("grpc_chttp2_begin_write", 0);
|
397
414
|
|
398
|
-
return t->outbuf.count > 0
|
415
|
+
return t->outbuf.count > 0 ? (partial_write ? GRPC_CHTTP2_PARTIAL_WRITE
|
416
|
+
: GRPC_CHTTP2_FULL_WRITE)
|
417
|
+
: GRPC_CHTTP2_NOTHING_TO_WRITE;
|
399
418
|
}
|
400
419
|
|
401
420
|
void grpc_chttp2_end_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|