grpc 1.7.3 → 1.8.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 +2106 -2116
- data/include/grpc/census.h +1 -432
- data/include/grpc/compression.h +9 -9
- data/include/grpc/grpc.h +115 -98
- data/include/grpc/grpc_cronet.h +3 -3
- data/include/grpc/grpc_posix.h +4 -4
- data/include/grpc/grpc_security.h +160 -88
- data/include/grpc/grpc_security_constants.h +7 -0
- data/include/grpc/impl/codegen/atm.h +9 -1
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
- data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
- data/include/grpc/impl/codegen/atm_windows.h +23 -22
- data/include/grpc/impl/codegen/byte_buffer.h +14 -14
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
- data/include/grpc/impl/codegen/connectivity_state.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +32 -28
- data/include/grpc/impl/codegen/port_platform.h +48 -0
- data/include/grpc/impl/codegen/slice.h +10 -10
- data/include/grpc/impl/codegen/sync_generic.h +9 -3
- data/include/grpc/slice.h +16 -17
- data/include/grpc/slice_buffer.h +22 -22
- data/include/grpc/support/alloc.h +11 -11
- data/include/grpc/support/avl.h +28 -20
- data/include/grpc/support/cmdline.h +13 -13
- data/include/grpc/support/histogram.h +17 -17
- 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 +2 -2
- data/include/grpc/support/subprocess.h +5 -5
- data/include/grpc/support/sync.h +43 -27
- data/include/grpc/support/thd.h +6 -6
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_pthread.h +1 -1
- data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
- data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
- data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
- data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
- data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
- data/src/core/ext/filters/client_channel/client_channel.h +16 -8
- data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
- data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
- data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
- data/src/core/ext/filters/client_channel/connector.h +29 -21
- data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
- data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
- data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
- data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
- data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
- data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
- data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
- data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
- data/src/core/ext/filters/client_channel/parse_address.h +14 -6
- data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
- data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
- data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
- data/src/core/ext/filters/client_channel/resolver.h +33 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
- data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
- data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
- data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
- data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
- data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
- data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
- data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
- data/src/core/ext/filters/client_channel/subchannel.h +68 -60
- data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
- data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
- data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
- data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
- data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
- data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
- data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
- data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
- data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
- data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
- data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
- data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
- data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
- data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
- data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
- data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
- data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
- data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
- data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
- data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
- data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
- data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
- data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
- data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
- data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
- data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
- data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
- data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
- data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
- data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
- data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
- data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
- data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
- data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
- data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
- data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
- data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
- data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
- data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
- data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
- data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
- data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
- data/src/core/lib/backoff/backoff.cc +80 -0
- data/src/core/lib/backoff/backoff.h +83 -0
- data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
- data/src/core/lib/channel/channel_args.h +45 -37
- data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
- data/src/core/lib/channel/channel_stack.h +76 -75
- data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
- data/src/core/lib/channel/channel_stack_builder.h +45 -45
- data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
- data/src/core/lib/channel/connected_channel.h +12 -4
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
- data/src/core/lib/channel/handshaker.h +9 -1
- data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
- data/src/core/lib/channel/handshaker_factory.h +18 -10
- data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
- data/src/core/lib/channel/handshaker_registry.h +8 -0
- data/src/core/lib/compression/algorithm_metadata.h +8 -0
- data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
- data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
- data/src/core/lib/compression/message_compress.h +8 -0
- data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
- data/src/core/lib/compression/stream_compression.h +27 -19
- data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
- data/src/core/lib/compression/stream_compression_gzip.h +8 -0
- data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
- data/src/core/lib/compression/stream_compression_identity.h +8 -0
- data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
- data/src/core/lib/debug/stats.h +17 -9
- data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
- data/src/core/lib/debug/stats_data.h +58 -19
- data/src/core/lib/debug/trace.cc +142 -0
- data/src/core/lib/debug/trace.h +74 -14
- data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
- data/src/core/lib/http/format_request.h +12 -4
- data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
- data/src/core/lib/http/httpcli.h +41 -33
- data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
- data/src/core/lib/http/{parser.c → parser.cc} +42 -42
- data/src/core/lib/http/parser.h +28 -20
- data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
- data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
- data/src/core/lib/iomgr/call_combiner.h +9 -1
- data/src/core/lib/iomgr/closure.h +220 -62
- data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
- data/src/core/lib/iomgr/combiner.h +16 -8
- data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
- data/src/core/lib/iomgr/endpoint.h +47 -32
- data/src/core/lib/iomgr/endpoint_pair.h +12 -4
- data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
- data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
- data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
- data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
- data/src/core/lib/iomgr/error.h +32 -27
- data/src/core/lib/iomgr/error_internal.h +11 -2
- data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
- data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
- data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
- data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
- data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
- data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
- data/src/core/lib/iomgr/ev_posix.cc +288 -0
- data/src/core/lib/iomgr/ev_posix.h +75 -67
- data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +177 -0
- data/src/core/lib/iomgr/exec_ctx.h +35 -13
- data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
- data/src/core/lib/iomgr/executor.h +12 -4
- data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
- data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
- data/src/core/lib/iomgr/gethostname.h +9 -1
- data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
- data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
- data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
- data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
- data/src/core/lib/iomgr/iocp_windows.h +17 -3
- data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
- data/src/core/lib/iomgr/iomgr.h +11 -3
- data/src/core/lib/iomgr/iomgr_internal.h +13 -5
- data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
- data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
- data/src/core/lib/iomgr/iomgr_uv.h +8 -0
- data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
- data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
- data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
- data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
- data/src/core/lib/iomgr/lockfree_event.h +30 -11
- data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
- data/src/core/lib/iomgr/network_status_tracker.h +2 -2
- data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
- data/src/core/lib/iomgr/polling_entity.h +21 -13
- data/src/core/lib/iomgr/pollset.h +17 -11
- data/src/core/lib/iomgr/pollset_set.h +23 -15
- data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
- data/src/core/lib/iomgr/pollset_uv.h +8 -0
- data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
- data/src/core/lib/iomgr/pollset_windows.h +17 -4
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.h +18 -10
- data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
- data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
- data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
- data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
- data/src/core/lib/iomgr/resource_quota.h +45 -37
- data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
- data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
- data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
- data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
- data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
- data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
- data/src/core/lib/iomgr/socket_mutator.h +11 -11
- data/src/core/lib/iomgr/socket_utils.h +9 -1
- data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
- data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
- data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
- data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
- data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
- data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
- data/src/core/lib/iomgr/socket_windows.h +26 -13
- data/src/core/lib/iomgr/tcp_client.h +14 -6
- data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
- data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
- data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
- data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
- data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
- data/src/core/lib/iomgr/tcp_posix.h +15 -7
- data/src/core/lib/iomgr/tcp_server.h +31 -23
- data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
- data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
- data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
- data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
- data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
- data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
- data/src/core/lib/iomgr/tcp_uv.cc +420 -0
- data/src/core/lib/iomgr/tcp_uv.h +18 -4
- data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
- data/src/core/lib/iomgr/tcp_windows.h +17 -4
- data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
- data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
- data/src/core/lib/iomgr/timer.h +16 -9
- data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
- data/src/core/lib/iomgr/timer_generic.h +4 -4
- data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
- data/src/core/lib/iomgr/timer_heap.h +16 -8
- data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
- data/src/core/lib/iomgr/timer_manager.h +8 -0
- data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
- data/src/core/lib/iomgr/timer_uv.h +2 -2
- data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
- data/src/core/lib/iomgr/udp_server.h +25 -17
- data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
- data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
- data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
- data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
- data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
- data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
- data/src/core/lib/json/{json.c → json.cc} +0 -0
- data/src/core/lib/json/json.h +8 -0
- data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
- data/src/core/lib/json/json_reader.h +26 -18
- data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
- data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
- data/src/core/lib/json/json_writer.h +23 -15
- data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
- data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
- data/src/core/lib/profiling/timers.h +6 -6
- data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
- data/src/core/lib/security/context/security_context.h +27 -29
- data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
- data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
- data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
- data/src/core/lib/security/credentials/credentials.h +83 -75
- data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
- data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
- data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
- data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
- data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
- data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
- data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
- data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
- data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
- data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
- data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
- data/src/core/lib/security/transport/auth_filters.h +16 -0
- data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
- data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
- data/src/core/lib/security/transport/lb_targets_info.h +11 -3
- data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
- data/src/core/lib/security/transport/secure_endpoint.h +13 -5
- data/src/core/lib/security/transport/security_connector.cc +1121 -0
- data/src/core/lib/security/transport/security_connector.h +97 -79
- data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
- data/src/core/lib/security/transport/security_handshaker.h +11 -3
- data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
- data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
- data/src/core/lib/security/transport/tsi_error.h +9 -1
- data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
- data/src/core/lib/security/util/json_util.h +12 -4
- data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
- data/src/core/lib/slice/b64.h +12 -4
- data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
- data/src/core/lib/slice/percent_encoding.h +11 -3
- data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
- data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
- data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
- data/src/core/lib/slice/slice_hash_table.h +19 -11
- data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
- data/src/core/lib/slice/slice_internal.h +17 -6
- data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
- data/src/core/lib/slice/slice_string_helpers.h +3 -3
- data/src/core/lib/support/abstract.h +29 -0
- data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
- data/src/core/lib/support/{arena.c → arena.cc} +12 -12
- data/src/core/lib/support/arena.h +11 -3
- data/src/core/lib/support/{atm.c → atm.cc} +1 -1
- data/src/core/lib/support/{avl.c → avl.cc} +71 -70
- data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
- data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
- data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
- data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
- data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
- data/src/core/lib/support/env.h +3 -3
- data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
- data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
- data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
- data/src/core/lib/support/{fork.c → fork.cc} +2 -2
- data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
- data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
- data/src/core/lib/support/{log.c → log.cc} +8 -8
- data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
- data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
- data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
- data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
- data/src/core/lib/support/manual_constructor.h +211 -0
- data/src/core/lib/support/memory.h +41 -0
- data/src/core/lib/support/mpscq.cc +114 -0
- data/src/core/lib/support/mpscq.h +45 -7
- data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
- data/src/core/lib/support/murmur_hash.h +9 -1
- data/src/core/lib/support/spinlock.h +8 -1
- data/src/core/lib/support/{string.c → string.cc} +56 -55
- data/src/core/lib/support/string.h +21 -21
- data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
- data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
- data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
- data/src/core/lib/support/string_windows.h +8 -0
- data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
- data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
- data/src/core/lib/support/{sync.c → sync.cc} +22 -22
- data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
- data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
- data/src/core/lib/support/{thd.c → thd.cc} +0 -0
- data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
- data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
- data/src/core/lib/support/{time.c → time.cc} +0 -0
- data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
- data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
- data/src/core/lib/support/time_precise.h +9 -1
- data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
- data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
- data/src/core/lib/support/tmpfile.h +1 -1
- data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
- data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
- data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
- data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
- data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
- data/src/core/lib/surface/alarm_internal.h +10 -2
- data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
- data/src/core/lib/surface/api_trace.h +2 -2
- data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
- data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
- data/src/core/lib/surface/{call.c → call.cc} +379 -372
- data/src/core/lib/surface/call.h +37 -38
- data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
- data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
- data/src/core/lib/surface/call_test_only.h +5 -5
- data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
- data/src/core/lib/surface/channel.h +29 -21
- data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
- data/src/core/lib/surface/channel_init.h +6 -6
- data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
- data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
- data/src/core/lib/surface/channel_stack_type.h +9 -1
- data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
- data/src/core/lib/surface/completion_queue.h +29 -29
- data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
- data/src/core/lib/surface/completion_queue_factory.h +8 -0
- data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
- data/src/core/lib/surface/event_string.h +9 -1
- data/src/core/lib/surface/{init.c → init.cc} +16 -39
- data/src/core/lib/surface/init.h +8 -0
- data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
- data/src/core/lib/surface/lame_client.cc +38 -40
- data/src/core/lib/surface/lame_client.h +8 -0
- data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
- data/src/core/lib/surface/{server.c → server.cc} +340 -404
- data/src/core/lib/surface/server.h +22 -14
- data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
- data/src/core/lib/surface/validate_metadata.h +10 -2
- data/src/core/lib/surface/{version.c → version.cc} +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +84 -0
- data/src/core/lib/transport/bdp_estimator.h +67 -42
- data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
- data/src/core/lib/transport/byte_stream.h +41 -33
- data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
- data/src/core/lib/transport/connectivity_state.h +29 -21
- data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
- data/src/core/lib/transport/error_utils.h +18 -6
- data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
- data/src/core/lib/transport/metadata.h +22 -20
- data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
- data/src/core/lib/transport/metadata_batch.h +46 -45
- data/src/core/lib/transport/pid_controller.cc +48 -0
- data/src/core/lib/transport/pid_controller.h +84 -32
- data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
- data/src/core/lib/transport/service_config.h +11 -2
- data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
- data/src/core/lib/transport/static_metadata.h +30 -23
- data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
- data/src/core/lib/transport/status_conversion.h +12 -2
- data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
- data/src/core/lib/transport/timeout_encoding.h +11 -2
- data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
- data/src/core/lib/transport/transport.h +78 -80
- data/src/core/lib/transport/transport_impl.h +27 -19
- data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
- data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
- data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
- data/src/core/tsi/fake_transport_security.h +5 -5
- data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
- data/src/core/tsi/gts_transport_security.h +11 -3
- data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
- data/src/core/tsi/ssl_transport_security.h +25 -25
- data/src/core/tsi/ssl_types.h +8 -0
- data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
- data/src/core/tsi/transport_security.h +55 -55
- data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
- data/src/core/tsi/transport_security_adapter.h +2 -2
- data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
- data/src/core/tsi/transport_security_grpc.h +19 -19
- data/src/core/tsi/transport_security_interface.h +41 -41
- data/src/ruby/ext/grpc/extconf.rb +4 -2
- data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
- data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
- data/src/ruby/ext/grpc/rb_call.c +41 -42
- data/src/ruby/ext/grpc/rb_call.h +6 -6
- data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
- data/src/ruby/ext/grpc/rb_channel.c +87 -87
- data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
- data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
- data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
- data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
- data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +8 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
- data/src/ruby/ext/grpc/rb_server.c +23 -23
- data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +14 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
- data/third_party/cares/config_freebsd/ares_config.h +502 -0
- data/third_party/cares/config_openbsd/ares_config.h +502 -0
- metadata +302 -328
- data/src/core/ext/census/aggregation.h +0 -51
- data/src/core/ext/census/base_resources.c +0 -56
- data/src/core/ext/census/base_resources.h +0 -24
- data/src/core/ext/census/census_interface.h +0 -61
- data/src/core/ext/census/census_rpc_stats.h +0 -86
- data/src/core/ext/census/context.c +0 -496
- data/src/core/ext/census/gen/census.pb.c +0 -161
- data/src/core/ext/census/gen/census.pb.h +0 -280
- data/src/core/ext/census/gen/trace_context.pb.c +0 -39
- data/src/core/ext/census/gen/trace_context.pb.h +0 -78
- data/src/core/ext/census/grpc_filter.c +0 -196
- data/src/core/ext/census/grpc_plugin.c +0 -70
- data/src/core/ext/census/initialize.c +0 -51
- data/src/core/ext/census/intrusive_hash_map.c +0 -305
- data/src/core/ext/census/intrusive_hash_map.h +0 -152
- data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
- data/src/core/ext/census/mlog.c +0 -586
- data/src/core/ext/census/mlog.h +0 -80
- data/src/core/ext/census/operation.c +0 -48
- data/src/core/ext/census/placeholders.c +0 -49
- data/src/core/ext/census/resource.c +0 -303
- data/src/core/ext/census/resource.h +0 -48
- data/src/core/ext/census/rpc_metric_id.h +0 -36
- data/src/core/ext/census/trace_context.c +0 -71
- data/src/core/ext/census/trace_context.h +0 -56
- data/src/core/ext/census/trace_label.h +0 -46
- data/src/core/ext/census/trace_propagation.h +0 -48
- data/src/core/ext/census/trace_status.h +0 -30
- data/src/core/ext/census/trace_string.h +0 -35
- data/src/core/ext/census/tracing.c +0 -55
- data/src/core/ext/census/tracing.h +0 -109
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
- data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
- data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
- data/src/core/lib/debug/trace.c +0 -146
- data/src/core/lib/iomgr/closure.c +0 -219
- data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
- data/src/core/lib/iomgr/ev_posix.c +0 -266
- data/src/core/lib/iomgr/exec_ctx.c +0 -113
- data/src/core/lib/iomgr/tcp_uv.c +0 -381
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
- data/src/core/lib/security/transport/security_connector.c +0 -914
- data/src/core/lib/support/backoff.c +0 -72
- data/src/core/lib/support/backoff.h +0 -56
- data/src/core/lib/support/mpscq.c +0 -79
- data/src/core/lib/support/stack_lockfree.c +0 -137
- data/src/core/lib/support/stack_lockfree.h +0 -38
- data/src/core/lib/transport/bdp_estimator.c +0 -110
- data/src/core/lib/transport/pid_controller.c +0 -63
@@ -23,8 +23,16 @@
|
|
23
23
|
#include "src/core/lib/iomgr/ev_posix.h"
|
24
24
|
#include "src/core/lib/iomgr/tcp_client.h"
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
#ifdef __cplusplus
|
27
|
+
extern "C" {
|
28
|
+
#endif
|
29
|
+
|
30
|
+
grpc_endpoint* grpc_tcp_client_create_from_fd(
|
31
|
+
grpc_exec_ctx* exec_ctx, grpc_fd* fd, const grpc_channel_args* channel_args,
|
32
|
+
const char* addr_str);
|
33
|
+
|
34
|
+
#ifdef __cplusplus
|
35
|
+
}
|
36
|
+
#endif
|
29
37
|
|
30
38
|
#endif /* GRPC_CORE_LIB_IOMGR_TCP_CLIENT_POSIX_H */
|
@@ -32,35 +32,35 @@
|
|
32
32
|
#include "src/core/lib/iomgr/tcp_uv.h"
|
33
33
|
#include "src/core/lib/iomgr/timer.h"
|
34
34
|
|
35
|
-
extern
|
35
|
+
extern grpc_core::TraceFlag grpc_tcp_trace;
|
36
36
|
|
37
37
|
typedef struct grpc_uv_tcp_connect {
|
38
38
|
uv_connect_t connect_req;
|
39
39
|
grpc_timer alarm;
|
40
40
|
grpc_closure on_alarm;
|
41
|
-
uv_tcp_t
|
42
|
-
grpc_closure
|
43
|
-
grpc_endpoint
|
41
|
+
uv_tcp_t* tcp_handle;
|
42
|
+
grpc_closure* closure;
|
43
|
+
grpc_endpoint** endpoint;
|
44
44
|
int refs;
|
45
|
-
char
|
46
|
-
grpc_resource_quota
|
45
|
+
char* addr_name;
|
46
|
+
grpc_resource_quota* resource_quota;
|
47
47
|
} grpc_uv_tcp_connect;
|
48
48
|
|
49
|
-
static void uv_tcp_connect_cleanup(grpc_exec_ctx
|
50
|
-
grpc_uv_tcp_connect
|
49
|
+
static void uv_tcp_connect_cleanup(grpc_exec_ctx* exec_ctx,
|
50
|
+
grpc_uv_tcp_connect* connect) {
|
51
51
|
grpc_resource_quota_unref_internal(exec_ctx, connect->resource_quota);
|
52
52
|
gpr_free(connect->addr_name);
|
53
53
|
gpr_free(connect);
|
54
54
|
}
|
55
55
|
|
56
|
-
static void tcp_close_callback(uv_handle_t
|
56
|
+
static void tcp_close_callback(uv_handle_t* handle) { gpr_free(handle); }
|
57
57
|
|
58
|
-
static void uv_tc_on_alarm(grpc_exec_ctx
|
59
|
-
grpc_error
|
58
|
+
static void uv_tc_on_alarm(grpc_exec_ctx* exec_ctx, void* acp,
|
59
|
+
grpc_error* error) {
|
60
60
|
int done;
|
61
|
-
grpc_uv_tcp_connect
|
62
|
-
if (
|
63
|
-
const char
|
61
|
+
grpc_uv_tcp_connect* connect = (grpc_uv_tcp_connect*)acp;
|
62
|
+
if (grpc_tcp_trace.enabled()) {
|
63
|
+
const char* str = grpc_error_string(error);
|
64
64
|
gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_alarm: error=%s",
|
65
65
|
connect->addr_name, str);
|
66
66
|
}
|
@@ -68,7 +68,7 @@ static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
|
|
68
68
|
/* error == NONE implies that the timer ran out, and wasn't cancelled. If
|
69
69
|
it was cancelled, then the handler that cancelled it also should close
|
70
70
|
the handle, if applicable */
|
71
|
-
uv_close((uv_handle_t
|
71
|
+
uv_close((uv_handle_t*)connect->tcp_handle, tcp_close_callback);
|
72
72
|
}
|
73
73
|
done = (--connect->refs == 0);
|
74
74
|
if (done) {
|
@@ -76,12 +76,12 @@ static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
|
|
76
76
|
}
|
77
77
|
}
|
78
78
|
|
79
|
-
static void uv_tc_on_connect(uv_connect_t
|
80
|
-
grpc_uv_tcp_connect
|
79
|
+
static void uv_tc_on_connect(uv_connect_t* req, int status) {
|
80
|
+
grpc_uv_tcp_connect* connect = (grpc_uv_tcp_connect*)req->data;
|
81
81
|
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
82
|
-
grpc_error
|
82
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
83
83
|
int done;
|
84
|
-
grpc_closure
|
84
|
+
grpc_closure* closure = connect->closure;
|
85
85
|
grpc_timer_cancel(&exec_ctx, &connect->alarm);
|
86
86
|
if (status == 0) {
|
87
87
|
*connect->endpoint = grpc_tcp_create(
|
@@ -102,7 +102,7 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) {
|
|
102
102
|
error = grpc_error_set_str(
|
103
103
|
error, GRPC_ERROR_STR_OS_ERROR,
|
104
104
|
grpc_slice_from_static_string(uv_strerror(status)));
|
105
|
-
uv_close((uv_handle_t
|
105
|
+
uv_close((uv_handle_t*)connect->tcp_handle, tcp_close_callback);
|
106
106
|
}
|
107
107
|
}
|
108
108
|
done = (--connect->refs == 0);
|
@@ -114,14 +114,14 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) {
|
|
114
114
|
grpc_exec_ctx_finish(&exec_ctx);
|
115
115
|
}
|
116
116
|
|
117
|
-
static void tcp_client_connect_impl(grpc_exec_ctx
|
118
|
-
grpc_closure
|
119
|
-
grpc_pollset_set
|
120
|
-
const grpc_channel_args
|
121
|
-
const grpc_resolved_address
|
122
|
-
|
123
|
-
grpc_uv_tcp_connect
|
124
|
-
grpc_resource_quota
|
117
|
+
static void tcp_client_connect_impl(grpc_exec_ctx* exec_ctx,
|
118
|
+
grpc_closure* closure, grpc_endpoint** ep,
|
119
|
+
grpc_pollset_set* interested_parties,
|
120
|
+
const grpc_channel_args* channel_args,
|
121
|
+
const grpc_resolved_address* resolved_addr,
|
122
|
+
grpc_millis deadline) {
|
123
|
+
grpc_uv_tcp_connect* connect;
|
124
|
+
grpc_resource_quota* resource_quota = grpc_resource_quota_create(NULL);
|
125
125
|
(void)channel_args;
|
126
126
|
(void)interested_parties;
|
127
127
|
|
@@ -132,50 +132,49 @@ static void tcp_client_connect_impl(grpc_exec_ctx *exec_ctx,
|
|
132
132
|
if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) {
|
133
133
|
grpc_resource_quota_unref_internal(exec_ctx, resource_quota);
|
134
134
|
resource_quota = grpc_resource_quota_ref_internal(
|
135
|
-
channel_args->args[i].value.pointer.p);
|
135
|
+
(grpc_resource_quota*)channel_args->args[i].value.pointer.p);
|
136
136
|
}
|
137
137
|
}
|
138
138
|
}
|
139
139
|
|
140
|
-
connect = gpr_zalloc(sizeof(grpc_uv_tcp_connect));
|
140
|
+
connect = (grpc_uv_tcp_connect*)gpr_zalloc(sizeof(grpc_uv_tcp_connect));
|
141
141
|
connect->closure = closure;
|
142
142
|
connect->endpoint = ep;
|
143
|
-
connect->tcp_handle = gpr_malloc(sizeof(uv_tcp_t));
|
143
|
+
connect->tcp_handle = (uv_tcp_t*)gpr_malloc(sizeof(uv_tcp_t));
|
144
144
|
connect->addr_name = grpc_sockaddr_to_uri(resolved_addr);
|
145
145
|
connect->resource_quota = resource_quota;
|
146
146
|
uv_tcp_init(uv_default_loop(), connect->tcp_handle);
|
147
147
|
connect->connect_req.data = connect;
|
148
148
|
connect->refs = 2; // One for the connect operation, one for the timer.
|
149
149
|
|
150
|
-
if (
|
150
|
+
if (grpc_tcp_trace.enabled()) {
|
151
151
|
gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: asynchronously connecting",
|
152
152
|
connect->addr_name);
|
153
153
|
}
|
154
154
|
|
155
155
|
// TODO(murgatroid99): figure out what the return value here means
|
156
156
|
uv_tcp_connect(&connect->connect_req, connect->tcp_handle,
|
157
|
-
(const struct sockaddr
|
158
|
-
uv_tc_on_connect);
|
157
|
+
(const struct sockaddr*)resolved_addr->addr, uv_tc_on_connect);
|
159
158
|
GRPC_CLOSURE_INIT(&connect->on_alarm, uv_tc_on_alarm, connect,
|
160
159
|
grpc_schedule_on_exec_ctx);
|
161
|
-
grpc_timer_init(exec_ctx, &connect->alarm,
|
162
|
-
gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC),
|
163
|
-
&connect->on_alarm, gpr_now(GPR_CLOCK_MONOTONIC));
|
160
|
+
grpc_timer_init(exec_ctx, &connect->alarm, deadline, &connect->on_alarm);
|
164
161
|
}
|
165
162
|
|
166
163
|
// overridden by api_fuzzer.c
|
164
|
+
extern "C" {
|
167
165
|
void (*grpc_tcp_client_connect_impl)(
|
168
|
-
grpc_exec_ctx
|
169
|
-
grpc_pollset_set
|
170
|
-
const grpc_resolved_address
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
const
|
178
|
-
|
166
|
+
grpc_exec_ctx* exec_ctx, grpc_closure* closure, grpc_endpoint** ep,
|
167
|
+
grpc_pollset_set* interested_parties, const grpc_channel_args* channel_args,
|
168
|
+
const grpc_resolved_address* addr,
|
169
|
+
grpc_millis deadline) = tcp_client_connect_impl;
|
170
|
+
}
|
171
|
+
|
172
|
+
void grpc_tcp_client_connect(grpc_exec_ctx* exec_ctx, grpc_closure* closure,
|
173
|
+
grpc_endpoint** ep,
|
174
|
+
grpc_pollset_set* interested_parties,
|
175
|
+
const grpc_channel_args* channel_args,
|
176
|
+
const grpc_resolved_address* addr,
|
177
|
+
grpc_millis deadline) {
|
179
178
|
grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties,
|
180
179
|
channel_args, addr, deadline);
|
181
180
|
}
|
@@ -18,6 +18,8 @@
|
|
18
18
|
|
19
19
|
#include "src/core/lib/iomgr/port.h"
|
20
20
|
|
21
|
+
#include <inttypes.h>
|
22
|
+
|
21
23
|
#ifdef GRPC_WINSOCK_SOCKET
|
22
24
|
|
23
25
|
#include "src/core/lib/iomgr/sockaddr_windows.h"
|
@@ -38,22 +40,21 @@
|
|
38
40
|
#include "src/core/lib/iomgr/timer.h"
|
39
41
|
|
40
42
|
typedef struct {
|
41
|
-
grpc_closure
|
43
|
+
grpc_closure* on_done;
|
42
44
|
gpr_mu mu;
|
43
|
-
grpc_winsocket
|
44
|
-
gpr_timespec deadline;
|
45
|
+
grpc_winsocket* socket;
|
45
46
|
grpc_timer alarm;
|
46
47
|
grpc_closure on_alarm;
|
47
|
-
char
|
48
|
+
char* addr_name;
|
48
49
|
int refs;
|
49
50
|
grpc_closure on_connect;
|
50
|
-
grpc_endpoint
|
51
|
-
grpc_channel_args
|
51
|
+
grpc_endpoint** endpoint;
|
52
|
+
grpc_channel_args* channel_args;
|
52
53
|
} async_connect;
|
53
54
|
|
54
|
-
static void async_connect_unlock_and_cleanup(grpc_exec_ctx
|
55
|
-
async_connect
|
56
|
-
grpc_winsocket
|
55
|
+
static void async_connect_unlock_and_cleanup(grpc_exec_ctx* exec_ctx,
|
56
|
+
async_connect* ac,
|
57
|
+
grpc_winsocket* socket) {
|
57
58
|
int done = (--ac->refs == 0);
|
58
59
|
gpr_mu_unlock(&ac->mu);
|
59
60
|
if (done) {
|
@@ -65,10 +66,10 @@ static void async_connect_unlock_and_cleanup(grpc_exec_ctx *exec_ctx,
|
|
65
66
|
if (socket != NULL) grpc_winsocket_destroy(socket);
|
66
67
|
}
|
67
68
|
|
68
|
-
static void on_alarm(grpc_exec_ctx
|
69
|
-
async_connect
|
69
|
+
static void on_alarm(grpc_exec_ctx* exec_ctx, void* acp, grpc_error* error) {
|
70
|
+
async_connect* ac = (async_connect*)acp;
|
70
71
|
gpr_mu_lock(&ac->mu);
|
71
|
-
grpc_winsocket
|
72
|
+
grpc_winsocket* socket = ac->socket;
|
72
73
|
ac->socket = NULL;
|
73
74
|
if (socket != NULL) {
|
74
75
|
grpc_winsocket_shutdown(socket);
|
@@ -76,16 +77,16 @@ static void on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) {
|
|
76
77
|
async_connect_unlock_and_cleanup(exec_ctx, ac, socket);
|
77
78
|
}
|
78
79
|
|
79
|
-
static void on_connect(grpc_exec_ctx
|
80
|
-
async_connect
|
81
|
-
grpc_endpoint
|
80
|
+
static void on_connect(grpc_exec_ctx* exec_ctx, void* acp, grpc_error* error) {
|
81
|
+
async_connect* ac = (async_connect*)acp;
|
82
|
+
grpc_endpoint** ep = ac->endpoint;
|
82
83
|
GPR_ASSERT(*ep == NULL);
|
83
|
-
grpc_closure
|
84
|
+
grpc_closure* on_done = ac->on_done;
|
84
85
|
|
85
86
|
GRPC_ERROR_REF(error);
|
86
87
|
|
87
88
|
gpr_mu_lock(&ac->mu);
|
88
|
-
grpc_winsocket
|
89
|
+
grpc_winsocket* socket = ac->socket;
|
89
90
|
ac->socket = NULL;
|
90
91
|
gpr_mu_unlock(&ac->mu);
|
91
92
|
|
@@ -122,21 +123,21 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) {
|
|
122
123
|
/* Tries to issue one async connection, then schedules both an IOCP
|
123
124
|
notification request for the connection, and one timeout alert. */
|
124
125
|
static void tcp_client_connect_impl(
|
125
|
-
grpc_exec_ctx
|
126
|
-
grpc_pollset_set
|
127
|
-
const grpc_resolved_address
|
126
|
+
grpc_exec_ctx* exec_ctx, grpc_closure* on_done, grpc_endpoint** endpoint,
|
127
|
+
grpc_pollset_set* interested_parties, const grpc_channel_args* channel_args,
|
128
|
+
const grpc_resolved_address* addr, grpc_millis deadline) {
|
128
129
|
SOCKET sock = INVALID_SOCKET;
|
129
130
|
BOOL success;
|
130
131
|
int status;
|
131
132
|
grpc_resolved_address addr6_v4mapped;
|
132
133
|
grpc_resolved_address local_address;
|
133
|
-
async_connect
|
134
|
-
grpc_winsocket
|
134
|
+
async_connect* ac;
|
135
|
+
grpc_winsocket* socket = NULL;
|
135
136
|
LPFN_CONNECTEX ConnectEx;
|
136
137
|
GUID guid = WSAID_CONNECTEX;
|
137
138
|
DWORD ioctl_num_bytes;
|
138
|
-
grpc_winsocket_callback_info
|
139
|
-
grpc_error
|
139
|
+
grpc_winsocket_callback_info* info;
|
140
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
140
141
|
|
141
142
|
*endpoint = NULL;
|
142
143
|
|
@@ -171,8 +172,8 @@ static void tcp_client_connect_impl(
|
|
171
172
|
|
172
173
|
grpc_sockaddr_make_wildcard6(0, &local_address);
|
173
174
|
|
174
|
-
status =
|
175
|
-
|
175
|
+
status =
|
176
|
+
bind(sock, (struct sockaddr*)&local_address.addr, (int)local_address.len);
|
176
177
|
if (status != 0) {
|
177
178
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "bind");
|
178
179
|
goto failure;
|
@@ -180,8 +181,8 @@ static void tcp_client_connect_impl(
|
|
180
181
|
|
181
182
|
socket = grpc_winsocket_create(sock, "client");
|
182
183
|
info = &socket->write_info;
|
183
|
-
success = ConnectEx(sock, (struct sockaddr
|
184
|
-
|
184
|
+
success = ConnectEx(sock, (struct sockaddr*)&addr->addr, (int)addr->len, NULL,
|
185
|
+
0, NULL, &info->overlapped);
|
185
186
|
|
186
187
|
/* It wouldn't be unusual to get a success immediately. But we'll still get
|
187
188
|
an IOCP notification, so let's ignore it. */
|
@@ -193,7 +194,7 @@ static void tcp_client_connect_impl(
|
|
193
194
|
}
|
194
195
|
}
|
195
196
|
|
196
|
-
ac = gpr_malloc(sizeof(async_connect));
|
197
|
+
ac = (async_connect*)gpr_malloc(sizeof(async_connect));
|
197
198
|
ac->on_done = on_done;
|
198
199
|
ac->socket = socket;
|
199
200
|
gpr_mu_init(&ac->mu);
|
@@ -204,15 +205,14 @@ static void tcp_client_connect_impl(
|
|
204
205
|
GRPC_CLOSURE_INIT(&ac->on_connect, on_connect, ac, grpc_schedule_on_exec_ctx);
|
205
206
|
|
206
207
|
GRPC_CLOSURE_INIT(&ac->on_alarm, on_alarm, ac, grpc_schedule_on_exec_ctx);
|
207
|
-
grpc_timer_init(exec_ctx, &ac->alarm, deadline, &ac->on_alarm
|
208
|
-
gpr_now(GPR_CLOCK_MONOTONIC));
|
208
|
+
grpc_timer_init(exec_ctx, &ac->alarm, deadline, &ac->on_alarm);
|
209
209
|
grpc_socket_notify_on_write(exec_ctx, socket, &ac->on_connect);
|
210
210
|
return;
|
211
211
|
|
212
212
|
failure:
|
213
213
|
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
214
|
-
char
|
215
|
-
grpc_error
|
214
|
+
char* target_uri = grpc_sockaddr_to_uri(addr);
|
215
|
+
grpc_error* final_error = grpc_error_set_str(
|
216
216
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Failed to connect",
|
217
217
|
&error, 1),
|
218
218
|
GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(target_uri));
|
@@ -226,18 +226,20 @@ failure:
|
|
226
226
|
}
|
227
227
|
|
228
228
|
// overridden by api_fuzzer.c
|
229
|
+
extern "C" {
|
229
230
|
void (*grpc_tcp_client_connect_impl)(
|
230
|
-
grpc_exec_ctx
|
231
|
-
grpc_pollset_set
|
232
|
-
const grpc_resolved_address
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
const
|
240
|
-
|
231
|
+
grpc_exec_ctx* exec_ctx, grpc_closure* closure, grpc_endpoint** ep,
|
232
|
+
grpc_pollset_set* interested_parties, const grpc_channel_args* channel_args,
|
233
|
+
const grpc_resolved_address* addr,
|
234
|
+
grpc_millis deadline) = tcp_client_connect_impl;
|
235
|
+
}
|
236
|
+
|
237
|
+
void grpc_tcp_client_connect(grpc_exec_ctx* exec_ctx, grpc_closure* closure,
|
238
|
+
grpc_endpoint** ep,
|
239
|
+
grpc_pollset_set* interested_parties,
|
240
|
+
const grpc_channel_args* channel_args,
|
241
|
+
const grpc_resolved_address* addr,
|
242
|
+
grpc_millis deadline) {
|
241
243
|
grpc_tcp_client_connect_impl(exec_ctx, closure, ep, interested_parties,
|
242
244
|
channel_args, addr, deadline);
|
243
245
|
}
|
@@ -61,11 +61,11 @@ typedef GRPC_MSG_IOVLEN_TYPE msg_iovlen_type;
|
|
61
61
|
typedef size_t msg_iovlen_type;
|
62
62
|
#endif
|
63
63
|
|
64
|
-
|
64
|
+
grpc_core::TraceFlag grpc_tcp_trace(false, "tcp");
|
65
65
|
|
66
66
|
typedef struct {
|
67
67
|
grpc_endpoint base;
|
68
|
-
grpc_fd
|
68
|
+
grpc_fd* em_fd;
|
69
69
|
int fd;
|
70
70
|
bool finished_edge;
|
71
71
|
double target_length;
|
@@ -79,69 +79,65 @@ typedef struct {
|
|
79
79
|
/* garbage after the last read */
|
80
80
|
grpc_slice_buffer last_read_buffer;
|
81
81
|
|
82
|
-
grpc_slice_buffer
|
83
|
-
grpc_slice_buffer
|
84
|
-
/**
|
85
|
-
size_t outgoing_slice_idx;
|
86
|
-
/** byte within outgoing_buffer->slices[outgoing_slice_idx] to write next */
|
82
|
+
grpc_slice_buffer* incoming_buffer;
|
83
|
+
grpc_slice_buffer* outgoing_buffer;
|
84
|
+
/** byte within outgoing_buffer->slices[0] to write next */
|
87
85
|
size_t outgoing_byte_idx;
|
88
86
|
|
89
|
-
grpc_closure
|
90
|
-
grpc_closure
|
91
|
-
grpc_closure
|
92
|
-
int
|
87
|
+
grpc_closure* read_cb;
|
88
|
+
grpc_closure* write_cb;
|
89
|
+
grpc_closure* release_fd_cb;
|
90
|
+
int* release_fd;
|
93
91
|
|
94
92
|
grpc_closure read_done_closure;
|
95
93
|
grpc_closure write_done_closure;
|
96
94
|
|
97
|
-
char
|
95
|
+
char* peer_string;
|
98
96
|
|
99
|
-
grpc_resource_user
|
97
|
+
grpc_resource_user* resource_user;
|
100
98
|
grpc_resource_user_slice_allocator slice_allocator;
|
101
99
|
} grpc_tcp;
|
102
100
|
|
103
101
|
typedef struct backup_poller {
|
104
|
-
gpr_mu
|
102
|
+
gpr_mu* pollset_mu;
|
105
103
|
grpc_closure run_poller;
|
106
104
|
} backup_poller;
|
107
105
|
|
108
|
-
#define BACKUP_POLLER_POLLSET(b) ((grpc_pollset
|
106
|
+
#define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
|
109
107
|
|
110
108
|
static gpr_atm g_uncovered_notifications_pending;
|
111
109
|
static gpr_atm g_backup_poller; /* backup_poller* */
|
112
110
|
|
113
|
-
static void tcp_handle_read(grpc_exec_ctx
|
114
|
-
grpc_error
|
115
|
-
static void tcp_handle_write(grpc_exec_ctx
|
116
|
-
grpc_error
|
117
|
-
static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx
|
118
|
-
void
|
119
|
-
grpc_error
|
120
|
-
|
121
|
-
static void done_poller(grpc_exec_ctx
|
122
|
-
grpc_error
|
123
|
-
backup_poller
|
124
|
-
if (
|
111
|
+
static void tcp_handle_read(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
|
112
|
+
grpc_error* error);
|
113
|
+
static void tcp_handle_write(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
|
114
|
+
grpc_error* error);
|
115
|
+
static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx* exec_ctx,
|
116
|
+
void* arg /* grpc_tcp */,
|
117
|
+
grpc_error* error);
|
118
|
+
|
119
|
+
static void done_poller(grpc_exec_ctx* exec_ctx, void* bp,
|
120
|
+
grpc_error* error_ignored) {
|
121
|
+
backup_poller* p = (backup_poller*)bp;
|
122
|
+
if (grpc_tcp_trace.enabled()) {
|
125
123
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p destroy", p);
|
126
124
|
}
|
127
125
|
grpc_pollset_destroy(exec_ctx, BACKUP_POLLER_POLLSET(p));
|
128
126
|
gpr_free(p);
|
129
127
|
}
|
130
128
|
|
131
|
-
static void run_poller(grpc_exec_ctx
|
132
|
-
grpc_error
|
133
|
-
backup_poller
|
134
|
-
if (
|
129
|
+
static void run_poller(grpc_exec_ctx* exec_ctx, void* bp,
|
130
|
+
grpc_error* error_ignored) {
|
131
|
+
backup_poller* p = (backup_poller*)bp;
|
132
|
+
if (grpc_tcp_trace.enabled()) {
|
135
133
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p run", p);
|
136
134
|
}
|
137
135
|
gpr_mu_lock(p->pollset_mu);
|
138
|
-
|
139
|
-
gpr_timespec deadline =
|
140
|
-
gpr_time_add(now, gpr_time_from_seconds(10, GPR_TIMESPAN));
|
136
|
+
grpc_millis deadline = grpc_exec_ctx_now(exec_ctx) + 13 * GPR_MS_PER_SEC;
|
141
137
|
GRPC_STATS_INC_TCP_BACKUP_POLLER_POLLS(exec_ctx);
|
142
|
-
GRPC_LOG_IF_ERROR(
|
143
|
-
|
144
|
-
|
138
|
+
GRPC_LOG_IF_ERROR(
|
139
|
+
"backup_poller:pollset_work",
|
140
|
+
grpc_pollset_work(exec_ctx, BACKUP_POLLER_POLLSET(p), nullptr, deadline));
|
145
141
|
gpr_mu_unlock(p->pollset_mu);
|
146
142
|
/* last "uncovered" notification is the ref that keeps us polling, if we get
|
147
143
|
* there try a cas to release it */
|
@@ -149,47 +145,47 @@ static void run_poller(grpc_exec_ctx *exec_ctx, void *bp,
|
|
149
145
|
gpr_atm_full_cas(&g_uncovered_notifications_pending, 1, 0)) {
|
150
146
|
gpr_mu_lock(p->pollset_mu);
|
151
147
|
bool cas_ok = gpr_atm_full_cas(&g_backup_poller, (gpr_atm)p, 0);
|
152
|
-
if (
|
148
|
+
if (grpc_tcp_trace.enabled()) {
|
153
149
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p done cas_ok=%d", p, cas_ok);
|
154
150
|
}
|
155
151
|
gpr_mu_unlock(p->pollset_mu);
|
156
|
-
if (
|
152
|
+
if (grpc_tcp_trace.enabled()) {
|
157
153
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p shutdown", p);
|
158
154
|
}
|
159
155
|
grpc_pollset_shutdown(exec_ctx, BACKUP_POLLER_POLLSET(p),
|
160
156
|
GRPC_CLOSURE_INIT(&p->run_poller, done_poller, p,
|
161
157
|
grpc_schedule_on_exec_ctx));
|
162
158
|
} else {
|
163
|
-
if (
|
159
|
+
if (grpc_tcp_trace.enabled()) {
|
164
160
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p reschedule", p);
|
165
161
|
}
|
166
162
|
GRPC_CLOSURE_SCHED(exec_ctx, &p->run_poller, GRPC_ERROR_NONE);
|
167
163
|
}
|
168
164
|
}
|
169
165
|
|
170
|
-
static void drop_uncovered(grpc_exec_ctx
|
171
|
-
backup_poller
|
166
|
+
static void drop_uncovered(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
167
|
+
backup_poller* p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller);
|
172
168
|
gpr_atm old_count =
|
173
169
|
gpr_atm_no_barrier_fetch_add(&g_uncovered_notifications_pending, -1);
|
174
|
-
if (
|
170
|
+
if (grpc_tcp_trace.enabled()) {
|
175
171
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p uncover cnt %d->%d", p, (int)old_count,
|
176
172
|
(int)old_count - 1);
|
177
173
|
}
|
178
174
|
GPR_ASSERT(old_count != 1);
|
179
175
|
}
|
180
176
|
|
181
|
-
static void cover_self(grpc_exec_ctx
|
182
|
-
backup_poller
|
177
|
+
static void cover_self(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
178
|
+
backup_poller* p;
|
183
179
|
gpr_atm old_count =
|
184
180
|
gpr_atm_no_barrier_fetch_add(&g_uncovered_notifications_pending, 2);
|
185
|
-
if (
|
181
|
+
if (grpc_tcp_trace.enabled()) {
|
186
182
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER: cover cnt %d->%d", (int)old_count,
|
187
183
|
2 + (int)old_count);
|
188
184
|
}
|
189
185
|
if (old_count == 0) {
|
190
186
|
GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED(exec_ctx);
|
191
|
-
p = (backup_poller
|
192
|
-
if (
|
187
|
+
p = (backup_poller*)gpr_zalloc(sizeof(*p) + grpc_pollset_size());
|
188
|
+
if (grpc_tcp_trace.enabled()) {
|
193
189
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p create", p);
|
194
190
|
}
|
195
191
|
grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
|
@@ -200,11 +196,12 @@ static void cover_self(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
|
200
196
|
grpc_executor_scheduler(GRPC_EXECUTOR_LONG)),
|
201
197
|
GRPC_ERROR_NONE);
|
202
198
|
} else {
|
203
|
-
while ((p = (backup_poller
|
199
|
+
while ((p = (backup_poller*)gpr_atm_acq_load(&g_backup_poller)) ==
|
200
|
+
nullptr) {
|
204
201
|
// spin waiting for backup poller
|
205
202
|
}
|
206
203
|
}
|
207
|
-
if (
|
204
|
+
if (grpc_tcp_trace.enabled()) {
|
208
205
|
gpr_log(GPR_DEBUG, "BACKUP_POLLER:%p add %p", p, tcp);
|
209
206
|
}
|
210
207
|
grpc_pollset_add_fd(exec_ctx, BACKUP_POLLER_POLLSET(p), tcp->em_fd);
|
@@ -213,8 +210,8 @@ static void cover_self(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
|
213
210
|
}
|
214
211
|
}
|
215
212
|
|
216
|
-
static void notify_on_read(grpc_exec_ctx
|
217
|
-
if (
|
213
|
+
static void notify_on_read(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
214
|
+
if (grpc_tcp_trace.enabled()) {
|
218
215
|
gpr_log(GPR_DEBUG, "TCP:%p notify_on_read", tcp);
|
219
216
|
}
|
220
217
|
GRPC_CLOSURE_INIT(&tcp->read_done_closure, tcp_handle_read, tcp,
|
@@ -222,8 +219,8 @@ static void notify_on_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
|
222
219
|
grpc_fd_notify_on_read(exec_ctx, tcp->em_fd, &tcp->read_done_closure);
|
223
220
|
}
|
224
221
|
|
225
|
-
static void notify_on_write(grpc_exec_ctx
|
226
|
-
if (
|
222
|
+
static void notify_on_write(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
223
|
+
if (grpc_tcp_trace.enabled()) {
|
227
224
|
gpr_log(GPR_DEBUG, "TCP:%p notify_on_write", tcp);
|
228
225
|
}
|
229
226
|
cover_self(exec_ctx, tcp);
|
@@ -233,20 +230,20 @@ static void notify_on_write(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
|
233
230
|
grpc_fd_notify_on_write(exec_ctx, tcp->em_fd, &tcp->write_done_closure);
|
234
231
|
}
|
235
232
|
|
236
|
-
static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx
|
237
|
-
void
|
238
|
-
if (
|
233
|
+
static void tcp_drop_uncovered_then_handle_write(grpc_exec_ctx* exec_ctx,
|
234
|
+
void* arg, grpc_error* error) {
|
235
|
+
if (grpc_tcp_trace.enabled()) {
|
239
236
|
gpr_log(GPR_DEBUG, "TCP:%p got_write: %s", arg, grpc_error_string(error));
|
240
237
|
}
|
241
|
-
drop_uncovered(exec_ctx, (grpc_tcp
|
238
|
+
drop_uncovered(exec_ctx, (grpc_tcp*)arg);
|
242
239
|
tcp_handle_write(exec_ctx, arg, error);
|
243
240
|
}
|
244
241
|
|
245
|
-
static void add_to_estimate(grpc_tcp
|
242
|
+
static void add_to_estimate(grpc_tcp* tcp, size_t bytes) {
|
246
243
|
tcp->bytes_read_this_round += (double)bytes;
|
247
244
|
}
|
248
245
|
|
249
|
-
static void finish_estimate(grpc_tcp
|
246
|
+
static void finish_estimate(grpc_tcp* tcp) {
|
250
247
|
/* If we read >80% of the target buffer in one read loop, increase the size
|
251
248
|
of the target buffer to either the amount read, or twice its previous
|
252
249
|
value */
|
@@ -260,8 +257,8 @@ static void finish_estimate(grpc_tcp *tcp) {
|
|
260
257
|
tcp->bytes_read_this_round = 0;
|
261
258
|
}
|
262
259
|
|
263
|
-
static size_t get_target_read_size(grpc_tcp
|
264
|
-
grpc_resource_quota
|
260
|
+
static size_t get_target_read_size(grpc_tcp* tcp) {
|
261
|
+
grpc_resource_quota* rq = grpc_resource_user_quota(tcp->resource_user);
|
265
262
|
double pressure = grpc_resource_quota_get_memory_pressure(rq);
|
266
263
|
double target =
|
267
264
|
tcp->target_length * (pressure > 0.8 ? (1.0 - pressure) / 0.2 : 1.0);
|
@@ -278,26 +275,26 @@ static size_t get_target_read_size(grpc_tcp *tcp) {
|
|
278
275
|
return sz;
|
279
276
|
}
|
280
277
|
|
281
|
-
static grpc_error
|
278
|
+
static grpc_error* tcp_annotate_error(grpc_error* src_error, grpc_tcp* tcp) {
|
282
279
|
return grpc_error_set_str(
|
283
280
|
grpc_error_set_int(src_error, GRPC_ERROR_INT_FD, tcp->fd),
|
284
281
|
GRPC_ERROR_STR_TARGET_ADDRESS,
|
285
282
|
grpc_slice_from_copied_string(tcp->peer_string));
|
286
283
|
}
|
287
284
|
|
288
|
-
static void tcp_handle_read(grpc_exec_ctx
|
289
|
-
grpc_error
|
290
|
-
static void tcp_handle_write(grpc_exec_ctx
|
291
|
-
grpc_error
|
285
|
+
static void tcp_handle_read(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
|
286
|
+
grpc_error* error);
|
287
|
+
static void tcp_handle_write(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
|
288
|
+
grpc_error* error);
|
292
289
|
|
293
|
-
static void tcp_shutdown(grpc_exec_ctx
|
294
|
-
grpc_error
|
295
|
-
grpc_tcp
|
290
|
+
static void tcp_shutdown(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
|
291
|
+
grpc_error* why) {
|
292
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
296
293
|
grpc_fd_shutdown(exec_ctx, tcp->em_fd, why);
|
297
294
|
grpc_resource_user_shutdown(exec_ctx, tcp->resource_user);
|
298
295
|
}
|
299
296
|
|
300
|
-
static void tcp_free(grpc_exec_ctx
|
297
|
+
static void tcp_free(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
301
298
|
grpc_fd_orphan(exec_ctx, tcp->em_fd, tcp->release_fd_cb, tcp->release_fd,
|
302
299
|
false /* already_closed */, "tcp_unref_orphan");
|
303
300
|
grpc_slice_buffer_destroy_internal(exec_ctx, &tcp->last_read_buffer);
|
@@ -310,9 +307,9 @@ static void tcp_free(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
|
310
307
|
#define TCP_UNREF(cl, tcp, reason) \
|
311
308
|
tcp_unref((cl), (tcp), (reason), __FILE__, __LINE__)
|
312
309
|
#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
|
313
|
-
static void tcp_unref(grpc_exec_ctx
|
314
|
-
const char
|
315
|
-
if (
|
310
|
+
static void tcp_unref(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp,
|
311
|
+
const char* reason, const char* file, int line) {
|
312
|
+
if (grpc_tcp_trace.enabled()) {
|
316
313
|
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
317
314
|
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
318
315
|
"TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
|
@@ -323,9 +320,9 @@ static void tcp_unref(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
|
|
323
320
|
}
|
324
321
|
}
|
325
322
|
|
326
|
-
static void tcp_ref(grpc_tcp
|
323
|
+
static void tcp_ref(grpc_tcp* tcp, const char* reason, const char* file,
|
327
324
|
int line) {
|
328
|
-
if (
|
325
|
+
if (grpc_tcp_trace.enabled()) {
|
329
326
|
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
330
327
|
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
331
328
|
"TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
|
@@ -336,47 +333,47 @@ static void tcp_ref(grpc_tcp *tcp, const char *reason, const char *file,
|
|
336
333
|
#else
|
337
334
|
#define TCP_UNREF(cl, tcp, reason) tcp_unref((cl), (tcp))
|
338
335
|
#define TCP_REF(tcp, reason) tcp_ref((tcp))
|
339
|
-
static void tcp_unref(grpc_exec_ctx
|
336
|
+
static void tcp_unref(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
340
337
|
if (gpr_unref(&tcp->refcount)) {
|
341
338
|
tcp_free(exec_ctx, tcp);
|
342
339
|
}
|
343
340
|
}
|
344
341
|
|
345
|
-
static void tcp_ref(grpc_tcp
|
342
|
+
static void tcp_ref(grpc_tcp* tcp) { gpr_ref(&tcp->refcount); }
|
346
343
|
#endif
|
347
344
|
|
348
|
-
static void tcp_destroy(grpc_exec_ctx
|
345
|
+
static void tcp_destroy(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep) {
|
349
346
|
grpc_network_status_unregister_endpoint(ep);
|
350
|
-
grpc_tcp
|
347
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
351
348
|
grpc_slice_buffer_reset_and_unref_internal(exec_ctx, &tcp->last_read_buffer);
|
352
349
|
TCP_UNREF(exec_ctx, tcp, "destroy");
|
353
350
|
}
|
354
351
|
|
355
|
-
static void call_read_cb(grpc_exec_ctx
|
356
|
-
grpc_error
|
357
|
-
grpc_closure
|
352
|
+
static void call_read_cb(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp,
|
353
|
+
grpc_error* error) {
|
354
|
+
grpc_closure* cb = tcp->read_cb;
|
358
355
|
|
359
|
-
if (
|
356
|
+
if (grpc_tcp_trace.enabled()) {
|
360
357
|
gpr_log(GPR_DEBUG, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
|
361
358
|
size_t i;
|
362
|
-
const char
|
359
|
+
const char* str = grpc_error_string(error);
|
363
360
|
gpr_log(GPR_DEBUG, "read: error=%s", str);
|
364
361
|
|
365
362
|
for (i = 0; i < tcp->incoming_buffer->count; i++) {
|
366
|
-
char
|
363
|
+
char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
|
367
364
|
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
368
365
|
gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump);
|
369
366
|
gpr_free(dump);
|
370
367
|
}
|
371
368
|
}
|
372
369
|
|
373
|
-
tcp->read_cb =
|
374
|
-
tcp->incoming_buffer =
|
370
|
+
tcp->read_cb = nullptr;
|
371
|
+
tcp->incoming_buffer = nullptr;
|
375
372
|
GRPC_CLOSURE_RUN(exec_ctx, cb, error);
|
376
373
|
}
|
377
374
|
|
378
375
|
#define MAX_READ_IOVEC 4
|
379
|
-
static void tcp_do_read(grpc_exec_ctx
|
376
|
+
static void tcp_do_read(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
380
377
|
struct msghdr msg;
|
381
378
|
struct iovec iov[MAX_READ_IOVEC];
|
382
379
|
ssize_t read_bytes;
|
@@ -391,11 +388,11 @@ static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
|
391
388
|
iov[i].iov_len = GRPC_SLICE_LENGTH(tcp->incoming_buffer->slices[i]);
|
392
389
|
}
|
393
390
|
|
394
|
-
msg.msg_name =
|
391
|
+
msg.msg_name = nullptr;
|
395
392
|
msg.msg_namelen = 0;
|
396
393
|
msg.msg_iov = iov;
|
397
394
|
msg.msg_iovlen = (msg_iovlen_type)tcp->incoming_buffer->count;
|
398
|
-
msg.msg_control =
|
395
|
+
msg.msg_control = nullptr;
|
399
396
|
msg.msg_controllen = 0;
|
400
397
|
msg.msg_flags = 0;
|
401
398
|
|
@@ -449,10 +446,10 @@ static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) {
|
|
449
446
|
GPR_TIMER_END("tcp_continue_read", 0);
|
450
447
|
}
|
451
448
|
|
452
|
-
static void tcp_read_allocation_done(grpc_exec_ctx
|
453
|
-
grpc_error
|
454
|
-
grpc_tcp
|
455
|
-
if (
|
449
|
+
static void tcp_read_allocation_done(grpc_exec_ctx* exec_ctx, void* tcpp,
|
450
|
+
grpc_error* error) {
|
451
|
+
grpc_tcp* tcp = (grpc_tcp*)tcpp;
|
452
|
+
if (grpc_tcp_trace.enabled()) {
|
456
453
|
gpr_log(GPR_DEBUG, "TCP:%p read_allocation_done: %s", tcp,
|
457
454
|
grpc_error_string(error));
|
458
455
|
}
|
@@ -467,28 +464,28 @@ static void tcp_read_allocation_done(grpc_exec_ctx *exec_ctx, void *tcpp,
|
|
467
464
|
}
|
468
465
|
}
|
469
466
|
|
470
|
-
static void tcp_continue_read(grpc_exec_ctx
|
467
|
+
static void tcp_continue_read(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp) {
|
471
468
|
size_t target_read_size = get_target_read_size(tcp);
|
472
469
|
if (tcp->incoming_buffer->length < target_read_size &&
|
473
470
|
tcp->incoming_buffer->count < MAX_READ_IOVEC) {
|
474
|
-
if (
|
471
|
+
if (grpc_tcp_trace.enabled()) {
|
475
472
|
gpr_log(GPR_DEBUG, "TCP:%p alloc_slices", tcp);
|
476
473
|
}
|
477
474
|
grpc_resource_user_alloc_slices(exec_ctx, &tcp->slice_allocator,
|
478
475
|
target_read_size, 1, tcp->incoming_buffer);
|
479
476
|
} else {
|
480
|
-
if (
|
477
|
+
if (grpc_tcp_trace.enabled()) {
|
481
478
|
gpr_log(GPR_DEBUG, "TCP:%p do_read", tcp);
|
482
479
|
}
|
483
480
|
tcp_do_read(exec_ctx, tcp);
|
484
481
|
}
|
485
482
|
}
|
486
483
|
|
487
|
-
static void tcp_handle_read(grpc_exec_ctx
|
488
|
-
grpc_error
|
489
|
-
grpc_tcp
|
484
|
+
static void tcp_handle_read(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
|
485
|
+
grpc_error* error) {
|
486
|
+
grpc_tcp* tcp = (grpc_tcp*)arg;
|
490
487
|
GPR_ASSERT(!tcp->finished_edge);
|
491
|
-
if (
|
488
|
+
if (grpc_tcp_trace.enabled()) {
|
492
489
|
gpr_log(GPR_DEBUG, "TCP:%p got_read: %s", tcp, grpc_error_string(error));
|
493
490
|
}
|
494
491
|
|
@@ -503,10 +500,10 @@ static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
|
|
503
500
|
}
|
504
501
|
}
|
505
502
|
|
506
|
-
static void tcp_read(grpc_exec_ctx
|
507
|
-
grpc_slice_buffer
|
508
|
-
grpc_tcp
|
509
|
-
GPR_ASSERT(tcp->read_cb ==
|
503
|
+
static void tcp_read(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
|
504
|
+
grpc_slice_buffer* incoming_buffer, grpc_closure* cb) {
|
505
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
506
|
+
GPR_ASSERT(tcp->read_cb == nullptr);
|
510
507
|
tcp->read_cb = cb;
|
511
508
|
tcp->incoming_buffer = incoming_buffer;
|
512
509
|
grpc_slice_buffer_reset_and_unref_internal(exec_ctx, incoming_buffer);
|
@@ -522,8 +519,8 @@ static void tcp_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
522
519
|
|
523
520
|
/* returns true if done, false if pending; if returning true, *error is set */
|
524
521
|
#define MAX_WRITE_IOVEC 1000
|
525
|
-
static bool tcp_flush(grpc_exec_ctx
|
526
|
-
grpc_error
|
522
|
+
static bool tcp_flush(grpc_exec_ctx* exec_ctx, grpc_tcp* tcp,
|
523
|
+
grpc_error** error) {
|
527
524
|
struct msghdr msg;
|
528
525
|
struct iovec iov[MAX_WRITE_IOVEC];
|
529
526
|
msg_iovlen_type iov_size;
|
@@ -533,32 +530,35 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
|
|
533
530
|
size_t unwind_slice_idx;
|
534
531
|
size_t unwind_byte_idx;
|
535
532
|
|
533
|
+
// We always start at zero, because we eagerly unref and trim the slice
|
534
|
+
// buffer as we write
|
535
|
+
size_t outgoing_slice_idx = 0;
|
536
|
+
|
536
537
|
for (;;) {
|
537
538
|
sending_length = 0;
|
538
|
-
unwind_slice_idx =
|
539
|
+
unwind_slice_idx = outgoing_slice_idx;
|
539
540
|
unwind_byte_idx = tcp->outgoing_byte_idx;
|
540
|
-
for (iov_size = 0;
|
541
|
+
for (iov_size = 0; outgoing_slice_idx != tcp->outgoing_buffer->count &&
|
541
542
|
iov_size != MAX_WRITE_IOVEC;
|
542
543
|
iov_size++) {
|
543
544
|
iov[iov_size].iov_base =
|
544
545
|
GRPC_SLICE_START_PTR(
|
545
|
-
tcp->outgoing_buffer->slices[
|
546
|
+
tcp->outgoing_buffer->slices[outgoing_slice_idx]) +
|
546
547
|
tcp->outgoing_byte_idx;
|
547
548
|
iov[iov_size].iov_len =
|
548
|
-
GRPC_SLICE_LENGTH(
|
549
|
-
tcp->outgoing_buffer->slices[tcp->outgoing_slice_idx]) -
|
549
|
+
GRPC_SLICE_LENGTH(tcp->outgoing_buffer->slices[outgoing_slice_idx]) -
|
550
550
|
tcp->outgoing_byte_idx;
|
551
551
|
sending_length += iov[iov_size].iov_len;
|
552
|
-
|
552
|
+
outgoing_slice_idx++;
|
553
553
|
tcp->outgoing_byte_idx = 0;
|
554
554
|
}
|
555
555
|
GPR_ASSERT(iov_size > 0);
|
556
556
|
|
557
|
-
msg.msg_name =
|
557
|
+
msg.msg_name = nullptr;
|
558
558
|
msg.msg_namelen = 0;
|
559
559
|
msg.msg_iov = iov;
|
560
560
|
msg.msg_iovlen = iov_size;
|
561
|
-
msg.msg_control =
|
561
|
+
msg.msg_control = nullptr;
|
562
562
|
msg.msg_controllen = 0;
|
563
563
|
msg.msg_flags = 0;
|
564
564
|
|
@@ -575,16 +575,25 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
|
|
575
575
|
|
576
576
|
if (sent_length < 0) {
|
577
577
|
if (errno == EAGAIN) {
|
578
|
-
tcp->outgoing_slice_idx = unwind_slice_idx;
|
579
578
|
tcp->outgoing_byte_idx = unwind_byte_idx;
|
579
|
+
// unref all and forget about all slices that have been written to this
|
580
|
+
// point
|
581
|
+
for (size_t idx = 0; idx < unwind_slice_idx; ++idx) {
|
582
|
+
grpc_slice_unref_internal(
|
583
|
+
exec_ctx, grpc_slice_buffer_take_first(tcp->outgoing_buffer));
|
584
|
+
}
|
580
585
|
return false;
|
581
586
|
} else if (errno == EPIPE) {
|
582
587
|
*error = grpc_error_set_int(GRPC_OS_ERROR(errno, "sendmsg"),
|
583
588
|
GRPC_ERROR_INT_GRPC_STATUS,
|
584
589
|
GRPC_STATUS_UNAVAILABLE);
|
590
|
+
grpc_slice_buffer_reset_and_unref_internal(exec_ctx,
|
591
|
+
tcp->outgoing_buffer);
|
585
592
|
return true;
|
586
593
|
} else {
|
587
594
|
*error = tcp_annotate_error(GRPC_OS_ERROR(errno, "sendmsg"), tcp);
|
595
|
+
grpc_slice_buffer_reset_and_unref_internal(exec_ctx,
|
596
|
+
tcp->outgoing_buffer);
|
588
597
|
return true;
|
589
598
|
}
|
590
599
|
}
|
@@ -594,9 +603,9 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
|
|
594
603
|
while (trailing > 0) {
|
595
604
|
size_t slice_length;
|
596
605
|
|
597
|
-
|
598
|
-
slice_length =
|
599
|
-
tcp->outgoing_buffer->slices[
|
606
|
+
outgoing_slice_idx--;
|
607
|
+
slice_length =
|
608
|
+
GRPC_SLICE_LENGTH(tcp->outgoing_buffer->slices[outgoing_slice_idx]);
|
600
609
|
if (slice_length > trailing) {
|
601
610
|
tcp->outgoing_byte_idx = slice_length - trailing;
|
602
611
|
break;
|
@@ -605,36 +614,38 @@ static bool tcp_flush(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp,
|
|
605
614
|
}
|
606
615
|
}
|
607
616
|
|
608
|
-
if (
|
617
|
+
if (outgoing_slice_idx == tcp->outgoing_buffer->count) {
|
609
618
|
*error = GRPC_ERROR_NONE;
|
619
|
+
grpc_slice_buffer_reset_and_unref_internal(exec_ctx,
|
620
|
+
tcp->outgoing_buffer);
|
610
621
|
return true;
|
611
622
|
}
|
612
|
-
}
|
623
|
+
}
|
613
624
|
}
|
614
625
|
|
615
|
-
static void tcp_handle_write(grpc_exec_ctx
|
616
|
-
grpc_error
|
617
|
-
grpc_tcp
|
618
|
-
grpc_closure
|
626
|
+
static void tcp_handle_write(grpc_exec_ctx* exec_ctx, void* arg /* grpc_tcp */,
|
627
|
+
grpc_error* error) {
|
628
|
+
grpc_tcp* tcp = (grpc_tcp*)arg;
|
629
|
+
grpc_closure* cb;
|
619
630
|
|
620
631
|
if (error != GRPC_ERROR_NONE) {
|
621
632
|
cb = tcp->write_cb;
|
622
|
-
tcp->write_cb =
|
633
|
+
tcp->write_cb = nullptr;
|
623
634
|
cb->cb(exec_ctx, cb->cb_arg, error);
|
624
635
|
TCP_UNREF(exec_ctx, tcp, "write");
|
625
636
|
return;
|
626
637
|
}
|
627
638
|
|
628
639
|
if (!tcp_flush(exec_ctx, tcp, &error)) {
|
629
|
-
if (
|
640
|
+
if (grpc_tcp_trace.enabled()) {
|
630
641
|
gpr_log(GPR_DEBUG, "write: delayed");
|
631
642
|
}
|
632
643
|
notify_on_write(exec_ctx, tcp);
|
633
644
|
} else {
|
634
645
|
cb = tcp->write_cb;
|
635
|
-
tcp->write_cb =
|
636
|
-
if (
|
637
|
-
const char
|
646
|
+
tcp->write_cb = nullptr;
|
647
|
+
if (grpc_tcp_trace.enabled()) {
|
648
|
+
const char* str = grpc_error_string(error);
|
638
649
|
gpr_log(GPR_DEBUG, "write: %s", str);
|
639
650
|
}
|
640
651
|
|
@@ -643,16 +654,16 @@ static void tcp_handle_write(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */,
|
|
643
654
|
}
|
644
655
|
}
|
645
656
|
|
646
|
-
static void tcp_write(grpc_exec_ctx
|
647
|
-
grpc_slice_buffer
|
648
|
-
grpc_tcp
|
649
|
-
grpc_error
|
657
|
+
static void tcp_write(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
|
658
|
+
grpc_slice_buffer* buf, grpc_closure* cb) {
|
659
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
660
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
650
661
|
|
651
|
-
if (
|
662
|
+
if (grpc_tcp_trace.enabled()) {
|
652
663
|
size_t i;
|
653
664
|
|
654
665
|
for (i = 0; i < buf->count; i++) {
|
655
|
-
char
|
666
|
+
char* data =
|
656
667
|
grpc_dump_slice(buf->slices[i], GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
657
668
|
gpr_log(GPR_DEBUG, "WRITE %p (peer=%s): %s", tcp, tcp->peer_string, data);
|
658
669
|
gpr_free(data);
|
@@ -660,7 +671,7 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
660
671
|
}
|
661
672
|
|
662
673
|
GPR_TIMER_BEGIN("tcp_write", 0);
|
663
|
-
GPR_ASSERT(tcp->write_cb ==
|
674
|
+
GPR_ASSERT(tcp->write_cb == nullptr);
|
664
675
|
|
665
676
|
if (buf->length == 0) {
|
666
677
|
GPR_TIMER_END("tcp_write", 0);
|
@@ -673,19 +684,18 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
673
684
|
return;
|
674
685
|
}
|
675
686
|
tcp->outgoing_buffer = buf;
|
676
|
-
tcp->outgoing_slice_idx = 0;
|
677
687
|
tcp->outgoing_byte_idx = 0;
|
678
688
|
|
679
689
|
if (!tcp_flush(exec_ctx, tcp, &error)) {
|
680
690
|
TCP_REF(tcp, "write");
|
681
691
|
tcp->write_cb = cb;
|
682
|
-
if (
|
692
|
+
if (grpc_tcp_trace.enabled()) {
|
683
693
|
gpr_log(GPR_DEBUG, "write: delayed");
|
684
694
|
}
|
685
695
|
notify_on_write(exec_ctx, tcp);
|
686
696
|
} else {
|
687
|
-
if (
|
688
|
-
const char
|
697
|
+
if (grpc_tcp_trace.enabled()) {
|
698
|
+
const char* str = grpc_error_string(error);
|
689
699
|
gpr_log(GPR_DEBUG, "write: %s", str);
|
690
700
|
}
|
691
701
|
GRPC_CLOSURE_SCHED(exec_ctx, cb, error);
|
@@ -694,48 +704,61 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep,
|
|
694
704
|
GPR_TIMER_END("tcp_write", 0);
|
695
705
|
}
|
696
706
|
|
697
|
-
static void tcp_add_to_pollset(grpc_exec_ctx
|
698
|
-
grpc_pollset
|
699
|
-
grpc_tcp
|
707
|
+
static void tcp_add_to_pollset(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
|
708
|
+
grpc_pollset* pollset) {
|
709
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
700
710
|
grpc_pollset_add_fd(exec_ctx, pollset, tcp->em_fd);
|
701
711
|
}
|
702
712
|
|
703
|
-
static void tcp_add_to_pollset_set(grpc_exec_ctx
|
704
|
-
grpc_pollset_set
|
705
|
-
grpc_tcp
|
713
|
+
static void tcp_add_to_pollset_set(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
|
714
|
+
grpc_pollset_set* pollset_set) {
|
715
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
706
716
|
grpc_pollset_set_add_fd(exec_ctx, pollset_set, tcp->em_fd);
|
707
717
|
}
|
708
718
|
|
709
|
-
static
|
710
|
-
|
719
|
+
static void tcp_delete_from_pollset_set(grpc_exec_ctx* exec_ctx,
|
720
|
+
grpc_endpoint* ep,
|
721
|
+
grpc_pollset_set* pollset_set) {
|
722
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
723
|
+
grpc_pollset_set_del_fd(exec_ctx, pollset_set, tcp->em_fd);
|
724
|
+
}
|
725
|
+
|
726
|
+
static char* tcp_get_peer(grpc_endpoint* ep) {
|
727
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
711
728
|
return gpr_strdup(tcp->peer_string);
|
712
729
|
}
|
713
730
|
|
714
|
-
static int tcp_get_fd(grpc_endpoint
|
715
|
-
grpc_tcp
|
731
|
+
static int tcp_get_fd(grpc_endpoint* ep) {
|
732
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
716
733
|
return tcp->fd;
|
717
734
|
}
|
718
735
|
|
719
|
-
static grpc_resource_user
|
720
|
-
grpc_tcp
|
736
|
+
static grpc_resource_user* tcp_get_resource_user(grpc_endpoint* ep) {
|
737
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
721
738
|
return tcp->resource_user;
|
722
739
|
}
|
723
740
|
|
724
|
-
static const grpc_endpoint_vtable vtable = {
|
725
|
-
|
726
|
-
|
727
|
-
|
741
|
+
static const grpc_endpoint_vtable vtable = {tcp_read,
|
742
|
+
tcp_write,
|
743
|
+
tcp_add_to_pollset,
|
744
|
+
tcp_add_to_pollset_set,
|
745
|
+
tcp_delete_from_pollset_set,
|
746
|
+
tcp_shutdown,
|
747
|
+
tcp_destroy,
|
748
|
+
tcp_get_resource_user,
|
749
|
+
tcp_get_peer,
|
750
|
+
tcp_get_fd};
|
728
751
|
|
729
752
|
#define MAX_CHUNK_SIZE 32 * 1024 * 1024
|
730
753
|
|
731
|
-
grpc_endpoint
|
732
|
-
const grpc_channel_args
|
733
|
-
const char
|
754
|
+
grpc_endpoint* grpc_tcp_create(grpc_exec_ctx* exec_ctx, grpc_fd* em_fd,
|
755
|
+
const grpc_channel_args* channel_args,
|
756
|
+
const char* peer_string) {
|
734
757
|
int tcp_read_chunk_size = GRPC_TCP_DEFAULT_READ_SLICE_SIZE;
|
735
758
|
int tcp_max_read_chunk_size = 4 * 1024 * 1024;
|
736
759
|
int tcp_min_read_chunk_size = 256;
|
737
|
-
grpc_resource_quota
|
738
|
-
if (channel_args !=
|
760
|
+
grpc_resource_quota* resource_quota = grpc_resource_quota_create(nullptr);
|
761
|
+
if (channel_args != nullptr) {
|
739
762
|
for (size_t i = 0; i < channel_args->num_args; i++) {
|
740
763
|
if (0 ==
|
741
764
|
strcmp(channel_args->args[i].key, GRPC_ARG_TCP_READ_CHUNK_SIZE)) {
|
@@ -759,7 +782,7 @@ grpc_endpoint *grpc_tcp_create(grpc_exec_ctx *exec_ctx, grpc_fd *em_fd,
|
|
759
782
|
strcmp(channel_args->args[i].key, GRPC_ARG_RESOURCE_QUOTA)) {
|
760
783
|
grpc_resource_quota_unref_internal(exec_ctx, resource_quota);
|
761
784
|
resource_quota = grpc_resource_quota_ref_internal(
|
762
|
-
(grpc_resource_quota
|
785
|
+
(grpc_resource_quota*)channel_args->args[i].value.pointer.p);
|
763
786
|
}
|
764
787
|
}
|
765
788
|
}
|
@@ -770,15 +793,15 @@ grpc_endpoint *grpc_tcp_create(grpc_exec_ctx *exec_ctx, grpc_fd *em_fd,
|
|
770
793
|
tcp_read_chunk_size = GPR_CLAMP(tcp_read_chunk_size, tcp_min_read_chunk_size,
|
771
794
|
tcp_max_read_chunk_size);
|
772
795
|
|
773
|
-
grpc_tcp
|
796
|
+
grpc_tcp* tcp = (grpc_tcp*)gpr_malloc(sizeof(grpc_tcp));
|
774
797
|
tcp->base.vtable = &vtable;
|
775
798
|
tcp->peer_string = gpr_strdup(peer_string);
|
776
799
|
tcp->fd = grpc_fd_wrapped_fd(em_fd);
|
777
|
-
tcp->read_cb =
|
778
|
-
tcp->write_cb =
|
779
|
-
tcp->release_fd_cb =
|
780
|
-
tcp->release_fd =
|
781
|
-
tcp->incoming_buffer =
|
800
|
+
tcp->read_cb = nullptr;
|
801
|
+
tcp->write_cb = nullptr;
|
802
|
+
tcp->release_fd_cb = nullptr;
|
803
|
+
tcp->release_fd = nullptr;
|
804
|
+
tcp->incoming_buffer = nullptr;
|
782
805
|
tcp->target_length = (double)tcp_read_chunk_size;
|
783
806
|
tcp->min_read_chunk_size = tcp_min_read_chunk_size;
|
784
807
|
tcp->max_read_chunk_size = tcp_max_read_chunk_size;
|
@@ -799,16 +822,16 @@ grpc_endpoint *grpc_tcp_create(grpc_exec_ctx *exec_ctx, grpc_fd *em_fd,
|
|
799
822
|
return &tcp->base;
|
800
823
|
}
|
801
824
|
|
802
|
-
int grpc_tcp_fd(grpc_endpoint
|
803
|
-
grpc_tcp
|
825
|
+
int grpc_tcp_fd(grpc_endpoint* ep) {
|
826
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
804
827
|
GPR_ASSERT(ep->vtable == &vtable);
|
805
828
|
return grpc_fd_wrapped_fd(tcp->em_fd);
|
806
829
|
}
|
807
830
|
|
808
|
-
void grpc_tcp_destroy_and_release_fd(grpc_exec_ctx
|
809
|
-
int
|
831
|
+
void grpc_tcp_destroy_and_release_fd(grpc_exec_ctx* exec_ctx, grpc_endpoint* ep,
|
832
|
+
int* fd, grpc_closure* done) {
|
810
833
|
grpc_network_status_unregister_endpoint(ep);
|
811
|
-
grpc_tcp
|
834
|
+
grpc_tcp* tcp = (grpc_tcp*)ep;
|
812
835
|
GPR_ASSERT(ep->vtable == &vtable);
|
813
836
|
tcp->release_fd = fd;
|
814
837
|
tcp->release_fd_cb = done;
|