grpc 1.8.7 → 1.9.0.pre1
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 +549 -325
- data/include/grpc/impl/codegen/grpc_types.h +1 -2
- data/include/grpc/impl/codegen/port_platform.h +46 -5
- data/include/grpc/impl/codegen/slice.h +1 -2
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice_buffer.h +1 -2
- data/include/grpc/support/log.h +4 -2
- data/include/grpc/support/thd.h +4 -1
- data/include/grpc/support/tls.h +6 -0
- data/include/grpc/support/tls_gcc.h +5 -40
- data/include/grpc/support/tls_msvc.h +9 -0
- data/include/grpc/support/tls_pthread.h +9 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +32 -29
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +26 -32
- data/src/core/ext/filters/client_channel/client_channel.cc +325 -356
- data/src/core/ext/filters/client_channel/client_channel.h +4 -12
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +9 -14
- data/src/core/ext/filters/client_channel/client_channel_factory.h +7 -20
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +7 -10
- data/src/core/ext/filters/client_channel/connector.cc +6 -7
- data/src/core/ext/filters/client_channel/connector.h +6 -16
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +38 -50
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +9 -13
- data/src/core/ext/filters/client_channel/http_proxy.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy.cc +72 -94
- data/src/core/ext/filters/client_channel/lb_policy.h +83 -92
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +474 -591
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +2 -10
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +0 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +9 -12
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +160 -182
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -221
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +24 -35
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -20
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +6 -9
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -15
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -9
- data/src/core/ext/filters/client_channel/parse_address.cc +1 -1
- data/src/core/ext/filters/client_channel/parse_address.h +0 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +6 -8
- data/src/core/ext/filters/client_channel/proxy_mapper.h +6 -16
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +13 -17
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -12
- data/src/core/ext/filters/client_channel/resolver.cc +11 -13
- data/src/core/ext/filters/client_channel/resolver.h +14 -25
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +57 -70
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -31
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +27 -45
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -11
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +53 -66
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +25 -33
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -9
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +26 -35
- data/src/core/ext/filters/client_channel/resolver_factory.cc +2 -3
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -12
- data/src/core/ext/filters/client_channel/resolver_registry.cc +12 -15
- data/src/core/ext/filters/client_channel/resolver_registry.h +3 -12
- data/src/core/ext/filters/client_channel/retry_throttle.h +0 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +289 -301
- data/src/core/ext/filters/client_channel/subchannel.h +57 -84
- data/src/core/ext/filters/client_channel/subchannel_index.cc +30 -33
- data/src/core/ext/filters/client_channel/subchannel_index.h +4 -16
- data/src/core/ext/filters/client_channel/uri_parser.cc +13 -17
- data/src/core/ext/filters/client_channel/uri_parser.h +1 -10
- data/src/core/ext/filters/deadline/deadline_filter.cc +49 -67
- data/src/core/ext/filters/deadline/deadline_filter.h +4 -14
- data/src/core/ext/filters/http/client/http_client_filter.cc +60 -77
- data/src/core/ext/filters/http/client/http_client_filter.h +0 -8
- data/src/core/ext/filters/http/http_filters_plugin.cc +4 -6
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +63 -79
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +57 -71
- data/src/core/ext/filters/http/server/http_server_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +19 -24
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +0 -8
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +3 -3
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -8
- data/src/core/ext/filters/max_age/max_age_filter.cc +49 -62
- data/src/core/ext/filters/max_age/max_age_filter.h +0 -8
- data/src/core/ext/filters/message_size/message_size_filter.cc +23 -29
- data/src/core/ext/filters/message_size/message_size_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -8
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -8
- data/src/core/ext/transport/chttp2/alpn/alpn.h +0 -8
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +33 -40
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -8
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +15 -17
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +8 -8
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +23 -28
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +50 -57
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -10
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -10
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -9
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +10 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +516 -636
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/flow_control.h +196 -53
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +31 -33
- data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -9
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -10
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -11
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +63 -81
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +230 -318
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +14 -20
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -16
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -7
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +0 -8
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +8 -11
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +4 -13
- data/src/core/ext/transport/chttp2/transport/internal.h +51 -75
- data/src/core/ext/transport/chttp2/transport/parsing.cc +83 -109
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -8
- data/src/core/ext/transport/chttp2/transport/varint.h +0 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +61 -65
- data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +177 -188
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -8
- data/src/core/lib/backoff/backoff.cc +39 -44
- data/src/core/lib/backoff/backoff.h +61 -57
- data/src/core/lib/channel/channel_args.cc +8 -10
- data/src/core/lib/channel/channel_args.h +4 -13
- data/src/core/lib/channel/channel_stack.cc +19 -27
- data/src/core/lib/channel/channel_stack.h +27 -47
- data/src/core/lib/channel/channel_stack_builder.cc +11 -14
- data/src/core/lib/channel/channel_stack_builder.h +4 -15
- data/src/core/lib/channel/connected_channel.cc +23 -36
- data/src/core/lib/channel/connected_channel.h +1 -10
- data/src/core/lib/channel/handshaker.cc +31 -40
- data/src/core/lib/channel/handshaker.h +14 -25
- data/src/core/lib/channel/handshaker_factory.cc +6 -6
- data/src/core/lib/channel/handshaker_factory.h +5 -15
- data/src/core/lib/channel/handshaker_registry.cc +9 -13
- data/src/core/lib/channel/handshaker_registry.h +2 -11
- data/src/core/lib/compression/algorithm_metadata.h +0 -8
- data/src/core/lib/compression/message_compress.cc +19 -23
- data/src/core/lib/compression/message_compress.h +2 -12
- data/src/core/lib/compression/stream_compression.cc +1 -1
- data/src/core/lib/compression/stream_compression.h +0 -8
- data/src/core/lib/compression/stream_compression_gzip.cc +12 -11
- data/src/core/lib/compression/stream_compression_gzip.h +0 -8
- data/src/core/lib/compression/stream_compression_identity.h +0 -8
- data/src/core/lib/debug/stats.cc +4 -4
- data/src/core/lib/debug/stats.h +9 -19
- data/src/core/lib/debug/stats_data.cc +85 -116
- data/src/core/lib/debug/stats_data.h +236 -312
- data/src/core/lib/debug/trace.cc +1 -1
- data/src/core/lib/debug/trace.h +0 -12
- data/src/core/lib/{support → gpr++}/abstract.h +8 -3
- data/src/core/lib/{support → gpr++}/atomic.h +5 -5
- data/src/core/lib/{support → gpr++}/atomic_with_atm.h +3 -3
- data/src/core/lib/{support → gpr++}/atomic_with_std.h +3 -3
- data/src/core/lib/gpr++/debug_location.h +52 -0
- data/src/core/lib/gpr++/inlined_vector.h +112 -0
- data/src/core/lib/{support → gpr++}/manual_constructor.h +2 -2
- data/src/core/lib/{support → gpr++}/memory.h +3 -3
- data/src/core/lib/gpr++/orphanable.h +171 -0
- data/src/core/lib/gpr++/ref_counted.h +133 -0
- data/src/core/lib/gpr++/ref_counted_ptr.h +99 -0
- data/src/core/lib/{support → gpr}/alloc.cc +0 -0
- data/src/core/lib/{support → gpr}/arena.cc +1 -1
- data/src/core/lib/{support → gpr}/arena.h +3 -11
- data/src/core/lib/{support → gpr}/atm.cc +0 -0
- data/src/core/lib/{support → gpr}/avl.cc +0 -0
- data/src/core/lib/{support → gpr}/cmdline.cc +1 -1
- data/src/core/lib/{support → gpr}/cpu_iphone.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_linux.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/cpu_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/env.h +3 -11
- data/src/core/lib/{support → gpr}/env_linux.cc +2 -2
- data/src/core/lib/{support → gpr}/env_posix.cc +4 -4
- data/src/core/lib/{support → gpr}/env_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.cc +3 -3
- data/src/core/lib/{support → gpr}/fork.h +3 -3
- data/src/core/lib/{support → gpr}/host_port.cc +1 -1
- data/src/core/lib/{support → gpr}/log.cc +3 -3
- data/src/core/lib/{support → gpr}/log_android.cc +3 -3
- data/src/core/lib/{support → gpr}/log_linux.cc +1 -1
- data/src/core/lib/{support → gpr}/log_posix.cc +5 -5
- data/src/core/lib/{support → gpr}/log_windows.cc +3 -3
- data/src/core/lib/{support → gpr}/mpscq.cc +1 -1
- data/src/core/lib/{support → gpr}/mpscq.h +3 -10
- data/src/core/lib/{support → gpr}/murmur_hash.cc +1 -1
- data/src/core/lib/{support → gpr}/murmur_hash.h +3 -11
- data/src/core/lib/{support → gpr}/spinlock.h +3 -3
- data/src/core/lib/{support → gpr}/string.cc +1 -1
- data/src/core/lib/{support → gpr}/string.h +3 -10
- data/src/core/lib/{support → gpr}/string_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/string_util_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/string_windows.cc +1 -1
- data/src/core/lib/{support → gpr}/string_windows.h +3 -11
- data/src/core/lib/{support → gpr}/subprocess_posix.cc +0 -0
- data/src/core/lib/{support → gpr}/subprocess_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/sync.cc +0 -0
- data/src/core/lib/{support → gpr}/sync_posix.cc +10 -1
- data/src/core/lib/{support → gpr}/sync_windows.cc +0 -0
- data/src/core/lib/{support → gpr}/thd.cc +0 -0
- data/src/core/lib/{support → gpr}/thd_internal.h +3 -3
- data/src/core/lib/{support → gpr}/thd_posix.cc +18 -2
- data/src/core/lib/{support → gpr}/thd_windows.cc +2 -1
- data/src/core/lib/{support → gpr}/time.cc +0 -0
- data/src/core/lib/{support → gpr}/time_posix.cc +2 -4
- data/src/core/lib/{support → gpr}/time_precise.cc +1 -1
- data/src/core/lib/{support → gpr}/time_precise.h +3 -11
- data/src/core/lib/{support → gpr}/time_windows.cc +1 -3
- data/src/core/lib/{support → gpr}/tls_pthread.cc +0 -0
- data/src/core/lib/{support → gpr}/tmpfile.h +3 -11
- data/src/core/lib/{support → gpr}/tmpfile_msys.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_posix.cc +2 -2
- data/src/core/lib/{support → gpr}/tmpfile_windows.cc +2 -2
- data/src/core/lib/{support → gpr}/wrap_memcpy.cc +0 -0
- data/src/core/lib/http/format_request.cc +1 -1
- data/src/core/lib/http/format_request.h +0 -8
- data/src/core/lib/http/httpcli.cc +55 -74
- data/src/core/lib/http/httpcli.h +13 -22
- data/src/core/lib/http/httpcli_security_connector.cc +27 -33
- data/src/core/lib/http/parser.h +0 -8
- data/src/core/lib/iomgr/block_annotate.h +10 -17
- data/src/core/lib/iomgr/call_combiner.cc +14 -17
- data/src/core/lib/iomgr/call_combiner.h +16 -34
- data/src/core/lib/iomgr/closure.h +24 -37
- data/src/core/lib/iomgr/combiner.cc +62 -66
- data/src/core/lib/iomgr/combiner.h +6 -16
- data/src/core/lib/iomgr/endpoint.cc +15 -21
- data/src/core/lib/iomgr/endpoint.h +16 -33
- data/src/core/lib/iomgr/endpoint_pair.h +0 -8
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +4 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +4 -6
- data/src/core/lib/iomgr/error.cc +2 -6
- data/src/core/lib/iomgr/error.h +4 -9
- data/src/core/lib/iomgr/error_internal.h +0 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +110 -117
- data/src/core/lib/iomgr/ev_epoll1_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollex_linux.cc +111 -141
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -8
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +83 -109
- data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -10
- data/src/core/lib/iomgr/ev_poll_posix.cc +103 -125
- data/src/core/lib/iomgr/ev_poll_posix.h +0 -8
- data/src/core/lib/iomgr/ev_posix.cc +35 -50
- data/src/core/lib/iomgr/ev_posix.h +27 -53
- data/src/core/lib/iomgr/exec_ctx.cc +46 -78
- data/src/core/lib/iomgr/exec_ctx.h +127 -60
- data/src/core/lib/iomgr/executor.cc +34 -38
- data/src/core/lib/iomgr/executor.h +3 -11
- data/src/core/lib/iomgr/fork_posix.cc +13 -12
- data/src/core/lib/iomgr/gethostname.h +0 -8
- data/src/core/lib/iomgr/gethostname_sysconf.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +14 -16
- data/src/core/lib/iomgr/iocp_windows.h +1 -10
- data/src/core/lib/iomgr/iomgr.cc +60 -59
- data/src/core/lib/iomgr/iomgr.h +3 -12
- data/src/core/lib/iomgr/iomgr_internal.h +0 -8
- data/src/core/lib/iomgr/iomgr_uv.cc +2 -3
- data/src/core/lib/iomgr/iomgr_uv.h +0 -8
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/load_file.h +0 -8
- data/src/core/lib/iomgr/lockfree_event.cc +7 -8
- data/src/core/lib/iomgr/lockfree_event.h +3 -3
- data/src/core/lib/iomgr/polling_entity.cc +6 -10
- data/src/core/lib/iomgr/polling_entity.h +2 -11
- data/src/core/lib/iomgr/pollset.h +4 -13
- data/src/core/lib/iomgr/pollset_set.h +5 -18
- data/src/core/lib/iomgr/pollset_set_uv.cc +5 -10
- data/src/core/lib/iomgr/pollset_set_windows.cc +5 -10
- data/src/core/lib/iomgr/pollset_uv.cc +8 -9
- data/src/core/lib/iomgr/pollset_uv.h +0 -8
- data/src/core/lib/iomgr/pollset_windows.cc +14 -15
- data/src/core/lib/iomgr/pollset_windows.h +0 -8
- data/src/core/lib/iomgr/port.h +6 -1
- data/src/core/lib/iomgr/resolve_address.h +1 -10
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -12
- data/src/core/lib/iomgr/resolve_address_uv.cc +7 -8
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -9
- data/src/core/lib/iomgr/resource_quota.cc +77 -107
- data/src/core/lib/iomgr/resource_quota.h +8 -25
- data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +0 -8
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.h +0 -8
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.h +1 -9
- data/src/core/lib/iomgr/socket_utils.h +0 -8
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +0 -8
- data/src/core/lib/iomgr/socket_windows.cc +8 -11
- data/src/core/lib/iomgr/socket_windows.h +3 -14
- data/src/core/lib/iomgr/tcp_client.h +1 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +94 -78
- data/src/core/lib/iomgr/tcp_client_posix.h +36 -8
- data/src/core/lib/iomgr/tcp_client_uv.cc +16 -23
- data/src/core/lib/iomgr/tcp_client_windows.cc +22 -25
- data/src/core/lib/iomgr/tcp_posix.cc +131 -153
- data/src/core/lib/iomgr/tcp_posix.h +3 -12
- data/src/core/lib/iomgr/tcp_server.h +6 -17
- data/src/core/lib/iomgr/tcp_server_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -8
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_uv.cc +23 -34
- data/src/core/lib/iomgr/tcp_server_windows.cc +24 -34
- data/src/core/lib/iomgr/tcp_uv.cc +42 -56
- data/src/core/lib/iomgr/tcp_uv.h +0 -8
- data/src/core/lib/iomgr/tcp_windows.cc +43 -50
- data/src/core/lib/iomgr/tcp_windows.h +1 -9
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -8
- data/src/core/lib/iomgr/timer.h +6 -15
- data/src/core/lib/iomgr/timer_generic.cc +22 -27
- data/src/core/lib/iomgr/timer_heap.h +0 -8
- data/src/core/lib/iomgr/timer_manager.cc +17 -19
- data/src/core/lib/iomgr/timer_manager.h +0 -8
- data/src/core/lib/iomgr/timer_uv.cc +12 -14
- data/src/core/lib/iomgr/udp_server.cc +148 -54
- data/src/core/lib/iomgr/udp_server.h +16 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.h +12 -20
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +0 -8
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -8
- data/src/core/lib/json/json.h +0 -8
- data/src/core/lib/json/json_reader.h +0 -8
- data/src/core/lib/json/json_writer.h +0 -8
- data/src/core/lib/profiling/basic_timers.cc +3 -2
- data/src/core/lib/profiling/timers.h +0 -8
- data/src/core/lib/security/context/security_context.cc +9 -10
- data/src/core/lib/security/context/security_context.h +0 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +23 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.h +0 -8
- data/src/core/lib/security/credentials/credentials.cc +33 -42
- data/src/core/lib/security/credentials/credentials.h +24 -43
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +16 -22
- data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -8
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +28 -34
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +0 -8
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -13
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +0 -8
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -20
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -10
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +56 -72
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -17
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +47 -55
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +3 -12
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +23 -28
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -13
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -8
- data/src/core/lib/security/transport/auth_filters.h +0 -8
- data/src/core/lib/security/transport/client_auth_filter.cc +45 -54
- data/src/core/lib/security/transport/lb_targets_info.cc +2 -2
- data/src/core/lib/security/transport/lb_targets_info.h +0 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +54 -68
- data/src/core/lib/security/transport/secure_endpoint.h +0 -8
- data/src/core/lib/security/transport/security_connector.cc +62 -86
- data/src/core/lib/security/transport/security_connector.h +22 -39
- data/src/core/lib/security/transport/security_handshaker.cc +83 -106
- data/src/core/lib/security/transport/security_handshaker.h +1 -10
- data/src/core/lib/security/transport/server_auth_filter.cc +31 -38
- data/src/core/lib/security/transport/tsi_error.h +0 -8
- data/src/core/lib/security/util/json_util.h +0 -8
- data/src/core/lib/slice/b64.cc +5 -6
- data/src/core/lib/slice/b64.h +3 -12
- data/src/core/lib/slice/percent_encoding.h +0 -8
- data/src/core/lib/slice/slice.cc +8 -9
- data/src/core/lib/slice/slice_buffer.cc +11 -16
- data/src/core/lib/slice/slice_hash_table.cc +5 -7
- data/src/core/lib/slice/slice_hash_table.h +2 -12
- data/src/core/lib/slice/slice_intern.cc +4 -5
- data/src/core/lib/slice/slice_internal.h +4 -15
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/slice/slice_string_helpers.h +1 -9
- data/src/core/lib/surface/alarm.cc +11 -14
- data/src/core/lib/surface/alarm_internal.h +0 -8
- data/src/core/lib/surface/byte_buffer.cc +2 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +7 -9
- data/src/core/lib/surface/call.cc +198 -241
- data/src/core/lib/surface/call.h +9 -23
- data/src/core/lib/surface/call_details.cc +3 -4
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- data/src/core/lib/surface/call_test_only.h +0 -8
- data/src/core/lib/surface/channel.cc +53 -64
- data/src/core/lib/surface/channel.h +12 -23
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +2 -12
- data/src/core/lib/surface/channel_ping.cc +7 -9
- data/src/core/lib/surface/channel_stack_type.h +0 -8
- data/src/core/lib/surface/completion_queue.cc +158 -176
- data/src/core/lib/surface/completion_queue.h +9 -20
- data/src/core/lib/surface/completion_queue_factory.h +0 -8
- data/src/core/lib/surface/event_string.cc +1 -1
- data/src/core/lib/surface/event_string.h +0 -8
- data/src/core/lib/surface/init.cc +27 -25
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/init_secure.cc +2 -2
- data/src/core/lib/surface/lame_client.cc +30 -33
- data/src/core/lib/surface/lame_client.h +0 -8
- data/src/core/lib/surface/server.cc +151 -203
- data/src/core/lib/surface/server.h +7 -16
- data/src/core/lib/surface/validate_metadata.h +0 -8
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +1 -1
- data/src/core/lib/transport/byte_stream.cc +24 -38
- data/src/core/lib/transport/byte_stream.h +10 -25
- data/src/core/lib/transport/connectivity_state.cc +9 -13
- data/src/core/lib/transport/connectivity_state.h +4 -14
- data/src/core/lib/transport/error_utils.cc +6 -6
- data/src/core/lib/transport/error_utils.h +2 -11
- data/src/core/lib/transport/metadata.cc +21 -23
- data/src/core/lib/transport/metadata.h +8 -20
- data/src/core/lib/transport/metadata_batch.cc +34 -45
- data/src/core/lib/transport/metadata_batch.h +18 -32
- data/src/core/lib/transport/service_config.cc +11 -15
- data/src/core/lib/transport/service_config.h +3 -13
- data/src/core/lib/transport/static_metadata.cc +1 -1
- data/src/core/lib/transport/static_metadata.h +1 -7
- data/src/core/lib/transport/status_conversion.cc +2 -3
- data/src/core/lib/transport/status_conversion.h +1 -10
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -9
- data/src/core/lib/transport/transport.cc +36 -50
- data/src/core/lib/transport/transport.h +28 -30
- data/src/core/lib/transport/transport_impl.h +12 -23
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -34
- data/src/core/tsi/fake_transport_security.cc +7 -10
- data/src/core/tsi/fake_transport_security.h +0 -8
- data/src/core/tsi/gts_transport_security.cc +2 -2
- data/src/core/tsi/gts_transport_security.h +0 -8
- data/src/core/tsi/ssl_transport_security.cc +3 -0
- data/src/core/tsi/ssl_transport_security.h +0 -8
- data/src/core/tsi/ssl_types.h +0 -8
- data/src/core/tsi/transport_security.h +1 -9
- data/src/core/tsi/transport_security_adapter.h +0 -8
- data/src/core/tsi/transport_security_grpc.cc +11 -18
- data/src/core/tsi/transport_security_grpc.h +9 -21
- data/src/core/tsi/transport_security_interface.h +0 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -30
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -48
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_connection_spec.rb +2 -1
- data/src/ruby/spec/client_auth_spec.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +2 -2
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/interceptor_registry_spec.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +12 -12
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +3 -2
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/src/ruby/spec/server_spec.rb +9 -9
- data/src/ruby/spec/support/helpers.rb +35 -1
- metadata +68 -66
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +0 -26
- data/include/grpc/support/histogram.h +0 -64
- data/src/core/lib/support/histogram.cc +0 -227
@@ -27,24 +27,17 @@ extern grpc_core::TraceFlag grpc_http_trace;
|
|
27
27
|
extern grpc_core::TraceFlag grpc_trace_http2_stream_state;
|
28
28
|
extern grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount;
|
29
29
|
|
30
|
-
|
31
|
-
extern "C" {
|
32
|
-
#endif
|
30
|
+
extern bool g_flow_control_enabled;
|
33
31
|
|
34
32
|
grpc_transport* grpc_create_chttp2_transport(
|
35
|
-
|
36
|
-
grpc_endpoint* ep, bool is_client);
|
33
|
+
const grpc_channel_args* channel_args, grpc_endpoint* ep, bool is_client);
|
37
34
|
|
38
35
|
/// Takes ownership of \a read_buffer, which (if non-NULL) contains
|
39
36
|
/// leftover bytes previously read from the endpoint (e.g., by handshakers).
|
40
37
|
/// If non-null, \a notify_on_receive_settings will be scheduled when
|
41
38
|
/// HTTP/2 settings are received from the peer.
|
42
39
|
void grpc_chttp2_transport_start_reading(
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
#ifdef __cplusplus
|
47
|
-
}
|
48
|
-
#endif
|
40
|
+
grpc_transport* transport, grpc_slice_buffer* read_buffer,
|
41
|
+
grpc_closure* notify_on_receive_settings);
|
49
42
|
|
50
43
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_CHTTP2_TRANSPORT_H */
|
@@ -29,7 +29,7 @@
|
|
29
29
|
#include <grpc/support/useful.h>
|
30
30
|
|
31
31
|
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
32
|
-
#include "src/core/lib/
|
32
|
+
#include "src/core/lib/gpr/string.h"
|
33
33
|
|
34
34
|
grpc_core::TraceFlag grpc_flowctl_trace(false, "flowctl");
|
35
35
|
|
@@ -149,8 +149,26 @@ void FlowControlAction::Trace(grpc_chttp2_transport* t) const {
|
|
149
149
|
gpr_free(mf_str);
|
150
150
|
}
|
151
151
|
|
152
|
-
|
153
|
-
|
152
|
+
TransportFlowControlDisabled::TransportFlowControlDisabled(
|
153
|
+
grpc_chttp2_transport* t) {
|
154
|
+
remote_window_ = kMaxWindow;
|
155
|
+
target_initial_window_size_ = kMaxWindow;
|
156
|
+
announced_window_ = kMaxWindow;
|
157
|
+
t->settings[GRPC_PEER_SETTINGS][GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE] =
|
158
|
+
kFrameSize;
|
159
|
+
t->settings[GRPC_SENT_SETTINGS][GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE] =
|
160
|
+
kFrameSize;
|
161
|
+
t->settings[GRPC_ACKED_SETTINGS][GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE] =
|
162
|
+
kFrameSize;
|
163
|
+
t->settings[GRPC_PEER_SETTINGS][GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] =
|
164
|
+
kMaxWindow;
|
165
|
+
t->settings[GRPC_SENT_SETTINGS][GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] =
|
166
|
+
kMaxWindow;
|
167
|
+
t->settings[GRPC_ACKED_SETTINGS][GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE] =
|
168
|
+
kMaxWindow;
|
169
|
+
}
|
170
|
+
|
171
|
+
TransportFlowControl::TransportFlowControl(const grpc_chttp2_transport* t,
|
154
172
|
bool enable_bdp_probe)
|
155
173
|
: t_(t),
|
156
174
|
enable_bdp_probe_(enable_bdp_probe),
|
@@ -163,7 +181,7 @@ TransportFlowControl::TransportFlowControl(grpc_exec_ctx* exec_ctx,
|
|
163
181
|
.set_min_control_value(-1)
|
164
182
|
.set_max_control_value(25)
|
165
183
|
.set_integral_range(10)),
|
166
|
-
last_pid_update_(
|
184
|
+
last_pid_update_(grpc_core::ExecCtx::Get()->Now()) {}
|
167
185
|
|
168
186
|
uint32_t TransportFlowControl::MaybeSendUpdate(bool writing_anyway) {
|
169
187
|
FlowControlTrace trace("t updt sent", this, nullptr);
|
@@ -308,9 +326,8 @@ double TransportFlowControl::TargetLogBdp() {
|
|
308
326
|
1 + log2(bdp_estimator_.EstimateBdp()));
|
309
327
|
}
|
310
328
|
|
311
|
-
double TransportFlowControl::SmoothLogBdp(
|
312
|
-
|
313
|
-
grpc_millis now = grpc_exec_ctx_now(exec_ctx);
|
329
|
+
double TransportFlowControl::SmoothLogBdp(double value) {
|
330
|
+
grpc_millis now = grpc_core::ExecCtx::Get()->Now();
|
314
331
|
double bdp_error = value - pid_controller_.last_control_value();
|
315
332
|
const double dt = (double)(now - last_pid_update_) * 1e-3;
|
316
333
|
last_pid_update_ = now;
|
@@ -320,7 +337,7 @@ double TransportFlowControl::SmoothLogBdp(grpc_exec_ctx* exec_ctx,
|
|
320
337
|
}
|
321
338
|
|
322
339
|
FlowControlAction::Urgency TransportFlowControl::DeltaUrgency(
|
323
|
-
|
340
|
+
int64_t value, grpc_chttp2_setting_id setting_id) {
|
324
341
|
int64_t delta =
|
325
342
|
(int64_t)value - (int64_t)t_->settings[GRPC_LOCAL_SETTINGS][setting_id];
|
326
343
|
// TODO(ncteisen): tune this
|
@@ -331,15 +348,14 @@ FlowControlAction::Urgency TransportFlowControl::DeltaUrgency(
|
|
331
348
|
}
|
332
349
|
}
|
333
350
|
|
334
|
-
FlowControlAction TransportFlowControl::PeriodicUpdate(
|
335
|
-
grpc_exec_ctx* exec_ctx) {
|
351
|
+
FlowControlAction TransportFlowControl::PeriodicUpdate() {
|
336
352
|
FlowControlAction action;
|
337
353
|
if (enable_bdp_probe_) {
|
338
354
|
// get bdp estimate and update initial_window accordingly.
|
339
355
|
// target might change based on how much memory pressure we are under
|
340
356
|
// TODO(ncteisen): experiment with setting target to be huge under low
|
341
357
|
// memory pressure.
|
342
|
-
const double target = pow(2, SmoothLogBdp(
|
358
|
+
const double target = pow(2, SmoothLogBdp(TargetLogBdp()));
|
343
359
|
|
344
360
|
// Though initial window 'could' drop to 0, we keep the floor at 128
|
345
361
|
target_initial_window_size_ = (int32_t)GPR_CLAMP(target, 128, INT32_MAX);
|
@@ -347,7 +363,7 @@ FlowControlAction TransportFlowControl::PeriodicUpdate(
|
|
347
363
|
action.set_send_initial_window_update(
|
348
364
|
DeltaUrgency(target_initial_window_size_,
|
349
365
|
GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE),
|
350
|
-
target_initial_window_size_);
|
366
|
+
(uint32_t)target_initial_window_size_);
|
351
367
|
|
352
368
|
// get bandwidth estimate and update max_frame accordingly.
|
353
369
|
double bw_dbl = bdp_estimator_.EstimateBandwidth();
|
@@ -357,7 +373,7 @@ FlowControlAction TransportFlowControl::PeriodicUpdate(
|
|
357
373
|
target_initial_window_size_),
|
358
374
|
16384, 16777215);
|
359
375
|
action.set_send_max_frame_size_update(
|
360
|
-
DeltaUrgency(frame_size, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE),
|
376
|
+
DeltaUrgency((int64_t)frame_size, GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE),
|
361
377
|
frame_size);
|
362
378
|
}
|
363
379
|
return UpdateAction(action);
|
@@ -24,7 +24,8 @@
|
|
24
24
|
|
25
25
|
#include <grpc/support/useful.h>
|
26
26
|
#include "src/core/ext/transport/chttp2/transport/http2_settings.h"
|
27
|
-
#include "src/core/lib/
|
27
|
+
#include "src/core/lib/gpr++/abstract.h"
|
28
|
+
#include "src/core/lib/gpr++/manual_constructor.h"
|
28
29
|
#include "src/core/lib/transport/bdp_estimator.h"
|
29
30
|
#include "src/core/lib/transport/pid_controller.h"
|
30
31
|
|
@@ -43,10 +44,16 @@ namespace grpc_core {
|
|
43
44
|
namespace chttp2 {
|
44
45
|
|
45
46
|
static constexpr uint32_t kDefaultWindow = 65535;
|
47
|
+
static constexpr int64_t kMaxWindow = (int64_t)((1u << 31) - 1);
|
48
|
+
// TODO(ncteisen): Tune this
|
49
|
+
static constexpr uint32_t kFrameSize = 1024 * 1024;
|
46
50
|
|
47
51
|
class TransportFlowControl;
|
48
52
|
class StreamFlowControl;
|
49
53
|
|
54
|
+
// Encapsulates a collections of actions the transport needs to take with
|
55
|
+
// regard to flow control. Each action comes with urgencies that tell the
|
56
|
+
// transport how quickly the action must take place.
|
50
57
|
class FlowControlAction {
|
51
58
|
public:
|
52
59
|
enum class Urgency : uint8_t {
|
@@ -132,37 +139,122 @@ class FlowControlTrace {
|
|
132
139
|
int64_t announced_window_delta_;
|
133
140
|
};
|
134
141
|
|
135
|
-
|
142
|
+
// Fat interface with all methods a flow control implementation needs to
|
143
|
+
// support. gRPC C Core does not support pure virtual functions, so instead
|
144
|
+
// we abort in any methods which require implementation in the base class.
|
145
|
+
class TransportFlowControlBase {
|
136
146
|
public:
|
137
|
-
|
138
|
-
|
147
|
+
TransportFlowControlBase() {}
|
148
|
+
virtual ~TransportFlowControlBase() {}
|
149
|
+
|
150
|
+
// Is flow control enabled? This is needed in other codepaths like the checks
|
151
|
+
// in parsing and in writing.
|
152
|
+
virtual bool flow_control_enabled() const { abort(); }
|
153
|
+
|
154
|
+
// Called to check if the transport needs to send a WINDOW_UPDATE frame
|
155
|
+
virtual uint32_t MaybeSendUpdate(bool writing_anyway) { abort(); }
|
156
|
+
|
157
|
+
// Using the protected members, returns and Action to be taken by the
|
158
|
+
// tranport.
|
159
|
+
virtual FlowControlAction MakeAction() { abort(); }
|
160
|
+
|
161
|
+
// Using the protected members, returns and Action to be taken by the
|
162
|
+
// tranport. Also checks for updates to our BDP estimate and acts
|
163
|
+
// accordingly.
|
164
|
+
virtual FlowControlAction PeriodicUpdate() { abort(); }
|
165
|
+
|
166
|
+
// Called to do bookkeeping when a stream owned by this transport sends
|
167
|
+
// data on the wire
|
168
|
+
virtual void StreamSentData(int64_t size) { abort(); }
|
169
|
+
|
170
|
+
// Called to do bookkeeping when a stream owned by this transport receives
|
171
|
+
// data from the wire. Also does error checking for frame size.
|
172
|
+
virtual grpc_error* RecvData(int64_t incoming_frame_size) { abort(); }
|
173
|
+
|
174
|
+
// Called to do bookkeeping when we receive a WINDOW_UPDATE frame.
|
175
|
+
virtual void RecvUpdate(uint32_t size) { abort(); }
|
176
|
+
|
177
|
+
// Returns the BdpEstimator held by this object. Caller is responsible for
|
178
|
+
// checking for nullptr. TODO(ncteisen): consider fully encapsulating all
|
179
|
+
// bdp estimator actions inside TransportFlowControl
|
180
|
+
virtual BdpEstimator* bdp_estimator() { return nullptr; }
|
181
|
+
|
182
|
+
// Getters
|
183
|
+
int64_t remote_window() const { return remote_window_; }
|
184
|
+
virtual int64_t target_window() const { return target_initial_window_size_; }
|
185
|
+
int64_t announced_window() const { return announced_window_; }
|
186
|
+
|
187
|
+
// Used in certain benchmarks in which we don't want FlowControl to be a
|
188
|
+
// factor
|
189
|
+
virtual void TestOnlyForceHugeWindow() {}
|
190
|
+
|
191
|
+
GRPC_ABSTRACT_BASE_CLASS
|
192
|
+
|
193
|
+
protected:
|
194
|
+
friend class ::grpc::testing::TrickledCHTTP2;
|
195
|
+
int64_t remote_window_ = kDefaultWindow;
|
196
|
+
int64_t target_initial_window_size_ = kDefaultWindow;
|
197
|
+
int64_t announced_window_ = kDefaultWindow;
|
198
|
+
};
|
199
|
+
|
200
|
+
// Implementation of flow control that does NOTHING. Always returns maximum
|
201
|
+
// values, never initiates writes, and assumes that the remote peer is doing
|
202
|
+
// the same. To be used to narrow down on flow control as the cause of negative
|
203
|
+
// performance.
|
204
|
+
class TransportFlowControlDisabled final : public TransportFlowControlBase {
|
205
|
+
public:
|
206
|
+
// Maxes out all values
|
207
|
+
TransportFlowControlDisabled(grpc_chttp2_transport* t);
|
208
|
+
|
209
|
+
bool flow_control_enabled() const override { return false; }
|
210
|
+
|
211
|
+
// Never do anything.
|
212
|
+
uint32_t MaybeSendUpdate(bool writing_anyway) override { return 0; }
|
213
|
+
FlowControlAction MakeAction() override { return FlowControlAction(); }
|
214
|
+
FlowControlAction PeriodicUpdate() override { return FlowControlAction(); }
|
215
|
+
void StreamSentData(int64_t size) override {}
|
216
|
+
grpc_error* RecvData(int64_t incoming_frame_size) override {
|
217
|
+
return GRPC_ERROR_NONE;
|
218
|
+
}
|
219
|
+
void RecvUpdate(uint32_t size) override {}
|
220
|
+
};
|
221
|
+
|
222
|
+
// Implementation of flow control that abides to HTTP/2 spec and attempts
|
223
|
+
// to be as performant as possible.
|
224
|
+
class TransportFlowControl final : public TransportFlowControlBase {
|
225
|
+
public:
|
226
|
+
TransportFlowControl(const grpc_chttp2_transport* t, bool enable_bdp_probe);
|
139
227
|
~TransportFlowControl() {}
|
140
228
|
|
229
|
+
bool flow_control_enabled() const override { return true; }
|
230
|
+
|
141
231
|
bool bdp_probe() const { return enable_bdp_probe_; }
|
142
232
|
|
143
233
|
// returns an announce if we should send a transport update to our peer,
|
144
234
|
// else returns zero; writing_anyway indicates if a write would happen
|
145
235
|
// regardless of the send - if it is false and this function returns non-zero,
|
146
236
|
// this announce will cause a write to occur
|
147
|
-
uint32_t MaybeSendUpdate(bool writing_anyway);
|
237
|
+
uint32_t MaybeSendUpdate(bool writing_anyway) override;
|
148
238
|
|
149
239
|
// Reads the flow control data and returns and actionable struct that will
|
150
240
|
// tell chttp2 exactly what it needs to do
|
151
|
-
FlowControlAction MakeAction() {
|
241
|
+
FlowControlAction MakeAction() override {
|
242
|
+
return UpdateAction(FlowControlAction());
|
243
|
+
}
|
152
244
|
|
153
245
|
// Call periodically (at a low-ish rate, 100ms - 10s makes sense)
|
154
246
|
// to perform more complex flow control calculations and return an action
|
155
247
|
// to let chttp2 change its parameters
|
156
|
-
FlowControlAction PeriodicUpdate(
|
248
|
+
FlowControlAction PeriodicUpdate() override;
|
157
249
|
|
158
|
-
void StreamSentData(int64_t size) { remote_window_ -= size; }
|
250
|
+
void StreamSentData(int64_t size) override { remote_window_ -= size; }
|
159
251
|
|
160
252
|
grpc_error* ValidateRecvData(int64_t incoming_frame_size);
|
161
253
|
void CommitRecvData(int64_t incoming_frame_size) {
|
162
254
|
announced_window_ -= incoming_frame_size;
|
163
255
|
}
|
164
256
|
|
165
|
-
grpc_error* RecvData(int64_t incoming_frame_size) {
|
257
|
+
grpc_error* RecvData(int64_t incoming_frame_size) override {
|
166
258
|
FlowControlTrace trace(" data recv", this, nullptr);
|
167
259
|
grpc_error* error = ValidateRecvData(incoming_frame_size);
|
168
260
|
if (error != GRPC_ERROR_NONE) return error;
|
@@ -171,18 +263,18 @@ class TransportFlowControl {
|
|
171
263
|
}
|
172
264
|
|
173
265
|
// we have received a WINDOW_UPDATE frame for a transport
|
174
|
-
void RecvUpdate(uint32_t size) {
|
266
|
+
void RecvUpdate(uint32_t size) override {
|
175
267
|
FlowControlTrace trace("t updt recv", this, nullptr);
|
176
268
|
remote_window_ += size;
|
177
269
|
}
|
178
270
|
|
179
|
-
|
180
|
-
|
271
|
+
// See comment above announced_stream_total_over_incoming_window_ for the
|
272
|
+
// logic behind this decision.
|
273
|
+
int64_t target_window() const override {
|
181
274
|
return (uint32_t)GPR_MIN((int64_t)((1u << 31) - 1),
|
182
275
|
announced_stream_total_over_incoming_window_ +
|
183
276
|
target_initial_window_size_);
|
184
277
|
}
|
185
|
-
int64_t announced_window() const { return announced_window_; }
|
186
278
|
|
187
279
|
const grpc_chttp2_transport* transport() const { return t_; }
|
188
280
|
|
@@ -202,18 +294,17 @@ class TransportFlowControl {
|
|
202
294
|
}
|
203
295
|
}
|
204
296
|
|
205
|
-
BdpEstimator* bdp_estimator() { return &bdp_estimator_; }
|
297
|
+
BdpEstimator* bdp_estimator() override { return &bdp_estimator_; }
|
206
298
|
|
207
|
-
void TestOnlyForceHugeWindow() {
|
299
|
+
void TestOnlyForceHugeWindow() override {
|
208
300
|
announced_window_ = 1024 * 1024 * 1024;
|
209
301
|
remote_window_ = 1024 * 1024 * 1024;
|
210
302
|
}
|
211
303
|
|
212
304
|
private:
|
213
|
-
friend class ::grpc::testing::TrickledCHTTP2;
|
214
305
|
double TargetLogBdp();
|
215
|
-
double SmoothLogBdp(
|
216
|
-
FlowControlAction::Urgency DeltaUrgency(
|
306
|
+
double SmoothLogBdp(double value);
|
307
|
+
FlowControlAction::Urgency DeltaUrgency(int64_t value,
|
217
308
|
grpc_chttp2_setting_id setting_id);
|
218
309
|
|
219
310
|
FlowControlAction UpdateAction(FlowControlAction action) {
|
@@ -226,9 +317,6 @@ class TransportFlowControl {
|
|
226
317
|
|
227
318
|
const grpc_chttp2_transport* const t_;
|
228
319
|
|
229
|
-
/** Our bookkeeping for the remote peer's available window */
|
230
|
-
int64_t remote_window_ = kDefaultWindow;
|
231
|
-
|
232
320
|
/** calculating what we should give for local window:
|
233
321
|
we track the total amount of flow control over initial window size
|
234
322
|
across all streams: this is data that we want to receive right now (it
|
@@ -240,13 +328,6 @@ class TransportFlowControl {
|
|
240
328
|
int64_t announced_stream_total_over_incoming_window_ = 0;
|
241
329
|
int64_t announced_stream_total_under_incoming_window_ = 0;
|
242
330
|
|
243
|
-
/** This is out window according to what we have sent to our remote peer. The
|
244
|
-
* difference between this and target window is what we use to decide when
|
245
|
-
* to send WINDOW_UPDATE frames. */
|
246
|
-
int64_t announced_window_ = kDefaultWindow;
|
247
|
-
|
248
|
-
int32_t target_initial_window_size_ = kDefaultWindow;
|
249
|
-
|
250
331
|
/** should we probe bdp? */
|
251
332
|
const bool enable_bdp_probe_;
|
252
333
|
|
@@ -258,39 +339,117 @@ class TransportFlowControl {
|
|
258
339
|
grpc_millis last_pid_update_ = 0;
|
259
340
|
};
|
260
341
|
|
261
|
-
|
342
|
+
// Fat interface with all methods a stream flow control implementation needs
|
343
|
+
// to support. gRPC C Core does not support pure virtual functions, so instead
|
344
|
+
// we abort in any methods which require implementation in the base class.
|
345
|
+
class StreamFlowControlBase {
|
346
|
+
public:
|
347
|
+
StreamFlowControlBase() {}
|
348
|
+
virtual ~StreamFlowControlBase() {}
|
349
|
+
|
350
|
+
// Updates an action using the protected members.
|
351
|
+
virtual FlowControlAction UpdateAction(FlowControlAction action) { abort(); }
|
352
|
+
|
353
|
+
// Using the protected members, returns an Action for this stream to be
|
354
|
+
// taken by the tranport.
|
355
|
+
virtual FlowControlAction MakeAction() { abort(); }
|
356
|
+
|
357
|
+
// Bookkeeping for when data is sent on this stream.
|
358
|
+
virtual void SentData(int64_t outgoing_frame_size) { abort(); }
|
359
|
+
|
360
|
+
// Bookkeeping and error checking for when data is received by this stream.
|
361
|
+
virtual grpc_error* RecvData(int64_t incoming_frame_size) { abort(); }
|
362
|
+
|
363
|
+
// Called to check if this stream needs to send a WINDOW_UPDATE frame.
|
364
|
+
virtual uint32_t MaybeSendUpdate() { abort(); }
|
365
|
+
|
366
|
+
// Bookkeeping for receiving a WINDOW_UPDATE from for this stream.
|
367
|
+
virtual void RecvUpdate(uint32_t size) { abort(); }
|
368
|
+
|
369
|
+
// Bookkeeping for when a call pulls bytes out of the transport. At this
|
370
|
+
// point we consider the data 'used' and can thus let out peer know we are
|
371
|
+
// ready for more data.
|
372
|
+
virtual void IncomingByteStreamUpdate(size_t max_size_hint,
|
373
|
+
size_t have_already) {
|
374
|
+
abort();
|
375
|
+
}
|
376
|
+
|
377
|
+
// Used in certain benchmarks in which we don't want FlowControl to be a
|
378
|
+
// factor
|
379
|
+
virtual void TestOnlyForceHugeWindow() {}
|
380
|
+
|
381
|
+
// Getters
|
382
|
+
int64_t remote_window_delta() { return remote_window_delta_; }
|
383
|
+
int64_t local_window_delta() { return local_window_delta_; }
|
384
|
+
int64_t announced_window_delta() { return announced_window_delta_; }
|
385
|
+
|
386
|
+
GRPC_ABSTRACT_BASE_CLASS
|
387
|
+
|
388
|
+
protected:
|
389
|
+
friend class ::grpc::testing::TrickledCHTTP2;
|
390
|
+
int64_t remote_window_delta_ = 0;
|
391
|
+
int64_t local_window_delta_ = 0;
|
392
|
+
int64_t announced_window_delta_ = 0;
|
393
|
+
};
|
394
|
+
|
395
|
+
// Implementation of flow control that does NOTHING. Always returns maximum
|
396
|
+
// values, never initiates writes, and assumes that the remote peer is doing
|
397
|
+
// the same. To be used to narrow down on flow control as the cause of negative
|
398
|
+
// performance.
|
399
|
+
class StreamFlowControlDisabled : public StreamFlowControlBase {
|
400
|
+
public:
|
401
|
+
FlowControlAction UpdateAction(FlowControlAction action) override {
|
402
|
+
return action;
|
403
|
+
}
|
404
|
+
FlowControlAction MakeAction() override { return FlowControlAction(); }
|
405
|
+
void SentData(int64_t outgoing_frame_size) override {}
|
406
|
+
grpc_error* RecvData(int64_t incoming_frame_size) override {
|
407
|
+
return GRPC_ERROR_NONE;
|
408
|
+
}
|
409
|
+
uint32_t MaybeSendUpdate() override { return 0; }
|
410
|
+
void RecvUpdate(uint32_t size) override {}
|
411
|
+
void IncomingByteStreamUpdate(size_t max_size_hint,
|
412
|
+
size_t have_already) override {}
|
413
|
+
};
|
414
|
+
|
415
|
+
// Implementation of flow control that abides to HTTP/2 spec and attempts
|
416
|
+
// to be as performant as possible.
|
417
|
+
class StreamFlowControl final : public StreamFlowControlBase {
|
262
418
|
public:
|
263
419
|
StreamFlowControl(TransportFlowControl* tfc, const grpc_chttp2_stream* s);
|
264
420
|
~StreamFlowControl() {
|
265
421
|
tfc_->PreUpdateAnnouncedWindowOverIncomingWindow(announced_window_delta_);
|
266
422
|
}
|
267
423
|
|
268
|
-
FlowControlAction UpdateAction(FlowControlAction action);
|
269
|
-
FlowControlAction MakeAction() {
|
424
|
+
FlowControlAction UpdateAction(FlowControlAction action) override;
|
425
|
+
FlowControlAction MakeAction() override {
|
426
|
+
return UpdateAction(tfc_->MakeAction());
|
427
|
+
}
|
270
428
|
|
271
429
|
// we have sent data on the wire, we must track this in our bookkeeping for
|
272
430
|
// the remote peer's flow control.
|
273
|
-
void SentData(int64_t outgoing_frame_size) {
|
431
|
+
void SentData(int64_t outgoing_frame_size) override {
|
274
432
|
FlowControlTrace tracer(" data sent", tfc_, this);
|
275
433
|
tfc_->StreamSentData(outgoing_frame_size);
|
276
434
|
remote_window_delta_ -= outgoing_frame_size;
|
277
435
|
}
|
278
436
|
|
279
437
|
// we have received data from the wire
|
280
|
-
grpc_error* RecvData(int64_t incoming_frame_size);
|
438
|
+
grpc_error* RecvData(int64_t incoming_frame_size) override;
|
281
439
|
|
282
440
|
// returns an announce if we should send a stream update to our peer, else
|
283
441
|
// returns zero
|
284
|
-
uint32_t MaybeSendUpdate();
|
442
|
+
uint32_t MaybeSendUpdate() override;
|
285
443
|
|
286
444
|
// we have received a WINDOW_UPDATE frame for a stream
|
287
|
-
void RecvUpdate(uint32_t size) {
|
445
|
+
void RecvUpdate(uint32_t size) override {
|
288
446
|
FlowControlTrace trace("s updt recv", tfc_, this);
|
289
447
|
remote_window_delta_ += size;
|
290
448
|
}
|
291
449
|
|
292
450
|
// the application is asking for a certain amount of bytes
|
293
|
-
void IncomingByteStreamUpdate(size_t max_size_hint,
|
451
|
+
void IncomingByteStreamUpdate(size_t max_size_hint,
|
452
|
+
size_t have_already) override;
|
294
453
|
|
295
454
|
int64_t remote_window_delta() const { return remote_window_delta_; }
|
296
455
|
int64_t local_window_delta() const { return local_window_delta_; }
|
@@ -298,14 +457,13 @@ class StreamFlowControl {
|
|
298
457
|
|
299
458
|
const grpc_chttp2_stream* stream() const { return s_; }
|
300
459
|
|
301
|
-
void TestOnlyForceHugeWindow() {
|
460
|
+
void TestOnlyForceHugeWindow() override {
|
302
461
|
announced_window_delta_ = 1024 * 1024 * 1024;
|
303
462
|
local_window_delta_ = 1024 * 1024 * 1024;
|
304
463
|
remote_window_delta_ = 1024 * 1024 * 1024;
|
305
464
|
}
|
306
465
|
|
307
466
|
private:
|
308
|
-
friend class ::grpc::testing::TrickledCHTTP2;
|
309
467
|
TransportFlowControl* const tfc_;
|
310
468
|
const grpc_chttp2_stream* const s_;
|
311
469
|
|
@@ -314,21 +472,6 @@ class StreamFlowControl {
|
|
314
472
|
announced_window_delta_ += change;
|
315
473
|
tfc->PostUpdateAnnouncedWindowOverIncomingWindow(announced_window_delta_);
|
316
474
|
}
|
317
|
-
|
318
|
-
/** window available for us to send to peer, over or under the initial
|
319
|
-
* window
|
320
|
-
* size of the transport... ie:
|
321
|
-
* remote_window = remote_window_delta + transport.initial_window_size */
|
322
|
-
int64_t remote_window_delta_ = 0;
|
323
|
-
|
324
|
-
/** window available for peer to send to us (as a delta on
|
325
|
-
* transport.initial_window_size)
|
326
|
-
* local_window = local_window_delta + transport.initial_window_size */
|
327
|
-
int64_t local_window_delta_ = 0;
|
328
|
-
|
329
|
-
/** window available for peer to send to us over this stream that we have
|
330
|
-
* announced to the peer */
|
331
|
-
int64_t announced_window_delta_ = 0;
|
332
475
|
};
|
333
476
|
|
334
477
|
} // namespace chttp2
|