grpc 1.18.0 → 1.22.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 +4731 -7404
- data/etc/roots.pem +146 -0
- data/include/grpc/grpc.h +11 -6
- data/include/grpc/grpc_security.h +297 -4
- data/include/grpc/grpc_security_constants.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +13 -0
- data/include/grpc/impl/codegen/gpr_types.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +30 -7
- data/include/grpc/impl/codegen/port_platform.h +88 -7
- data/include/grpc/impl/codegen/slice.h +2 -22
- data/include/grpc/impl/codegen/status.h +2 -1
- data/include/grpc/impl/codegen/sync_posix.h +18 -0
- data/include/grpc/slice.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +21 -16
- data/src/core/ext/filters/client_channel/backup_poller.h +8 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +3 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +2435 -1557
- data/src/core/ext/filters/client_channel/client_channel.h +2 -10
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -89
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +8 -33
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +22 -34
- data/src/core/ext/filters/client_channel/client_channel_factory.h +19 -38
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +179 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +68 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +59 -55
- data/src/core/ext/filters/client_channel/health/health_check_client.h +20 -9
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +146 -157
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +29 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +844 -859
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +16 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +185 -312
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +143 -375
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +192 -245
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +1554 -955
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +14 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy.cc +115 -22
- data/src/core/ext/filters/client_channel/lb_policy.h +260 -129
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +5 -2
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +107 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -3
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +96 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +56 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +24 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +121 -122
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +84 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +179 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +24 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +111 -47
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +7 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +39 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +0 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -64
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +28 -0
- data/src/core/{lib/iomgr/network_status_tracker.cc → ext/filters/client_channel/resolver/dns/dns_resolver_selection.h} +8 -15
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +36 -82
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +111 -72
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +13 -8
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +28 -63
- data/src/core/ext/filters/client_channel/resolver.cc +54 -1
- data/src/core/ext/filters/client_channel/resolver.h +52 -23
- data/src/core/ext/filters/client_channel/resolver_factory.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_registry.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver_registry.h +5 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +368 -241
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +58 -76
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +543 -0
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +139 -0
- data/src/core/ext/filters/client_channel/server_address.cc +4 -54
- data/src/core/ext/filters/client_channel/server_address.h +1 -13
- data/src/core/ext/filters/client_channel/service_config.cc +329 -0
- data/src/core/ext/filters/client_channel/service_config.h +205 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +803 -838
- data/src/core/ext/filters/client_channel/subchannel.h +295 -128
- data/src/core/ext/filters/client_channel/subchannel_interface.h +113 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +97 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +94 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +7 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +4 -3
- data/src/core/ext/filters/http/server/http_server_filter.cc +18 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +5 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +119 -77
- data/src/core/ext/filters/message_size/message_size_filter.h +33 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +13 -12
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +45 -47
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +134 -143
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -21
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +4 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +156 -94
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -37
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -4
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +74 -55
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -11
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +7 -14
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -1
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +9 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +43 -30
- data/src/core/ext/transport/chttp2/transport/parsing.cc +52 -70
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +70 -33
- data/src/core/ext/transport/inproc/inproc_transport.cc +26 -18
- data/src/core/lib/channel/channel_args.cc +2 -101
- data/src/core/lib/channel/channel_args.h +3 -37
- data/src/core/lib/channel/channel_stack.h +10 -6
- data/src/core/lib/channel/channel_trace.cc +4 -4
- data/src/core/lib/channel/channel_trace.h +4 -4
- data/src/core/lib/channel/channelz.cc +168 -38
- data/src/core/lib/channel/channelz.h +40 -44
- data/src/core/lib/channel/channelz_registry.cc +75 -107
- data/src/core/lib/channel/channelz_registry.h +10 -28
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/handshaker.cc +151 -218
- data/src/core/lib/channel/handshaker.h +110 -101
- data/src/core/lib/channel/handshaker_factory.h +11 -19
- data/src/core/lib/channel/handshaker_registry.cc +67 -51
- data/src/core/lib/channel/handshaker_registry.h +21 -16
- data/src/core/lib/compression/algorithm_metadata.h +3 -3
- data/src/core/lib/compression/compression.cc +14 -9
- data/src/core/lib/compression/compression_args.cc +127 -0
- data/src/core/lib/compression/compression_args.h +55 -0
- data/src/core/lib/compression/compression_internal.cc +16 -12
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/stream_compression.cc +3 -2
- data/src/core/lib/compression/stream_compression.h +2 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
- data/src/core/lib/debug/trace.cc +13 -7
- data/src/core/lib/debug/trace.h +14 -1
- data/src/core/lib/gpr/arena.h +13 -9
- data/src/core/lib/gpr/cpu_posix.cc +5 -3
- data/src/core/lib/gpr/env.h +3 -6
- data/src/core/lib/gpr/env_linux.cc +6 -1
- data/src/core/lib/gpr/env_posix.cc +5 -0
- data/src/core/lib/gpr/env_windows.cc +7 -5
- data/src/core/lib/gpr/log.cc +9 -13
- data/src/core/lib/gpr/log_posix.cc +2 -1
- data/src/core/lib/gpr/string.cc +20 -7
- data/src/core/lib/gpr/string.h +10 -3
- data/src/core/lib/gpr/sync_posix.cc +65 -4
- data/src/core/lib/gpr/time.cc +8 -0
- data/src/core/lib/gpr/time_posix.cc +21 -2
- data/src/core/lib/gprpp/arena.cc +103 -0
- data/src/core/lib/gprpp/arena.h +121 -0
- data/src/core/lib/gprpp/atomic.h +75 -5
- data/src/core/lib/gprpp/fork.cc +13 -32
- data/src/core/lib/gprpp/fork.h +5 -1
- data/src/core/lib/gprpp/global_config.h +96 -0
- data/src/core/lib/gprpp/global_config_custom.h +29 -0
- data/src/core/lib/gprpp/global_config_env.cc +135 -0
- data/src/core/lib/gprpp/global_config_env.h +131 -0
- data/src/core/lib/gprpp/global_config_generic.h +44 -0
- data/src/core/lib/gprpp/inlined_vector.h +8 -0
- data/src/core/lib/gprpp/map.h +436 -0
- data/src/core/lib/gprpp/memory.h +2 -2
- data/src/core/lib/gprpp/optional.h +48 -0
- data/src/core/lib/gprpp/orphanable.h +6 -5
- data/src/core/lib/gprpp/{mutex_lock.h → pair.h} +15 -19
- data/src/core/lib/gprpp/ref_counted.h +36 -17
- data/src/core/lib/gprpp/sync.h +126 -0
- data/src/core/lib/gprpp/thd.h +42 -7
- data/src/core/lib/gprpp/thd_posix.cc +31 -13
- data/src/core/lib/gprpp/thd_windows.cc +47 -34
- data/src/core/lib/http/httpcli.cc +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +13 -15
- data/src/core/lib/http/parser.cc +3 -2
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/buffer_list.cc +182 -24
- data/src/core/lib/iomgr/buffer_list.h +72 -10
- data/src/core/lib/iomgr/call_combiner.cc +84 -90
- data/src/core/lib/iomgr/call_combiner.h +75 -82
- data/src/core/lib/iomgr/cfstream_handle.cc +203 -0
- data/src/core/lib/iomgr/cfstream_handle.h +86 -0
- data/src/core/lib/iomgr/combiner.cc +11 -3
- data/src/core/lib/iomgr/combiner.h +1 -1
- data/src/core/lib/iomgr/endpoint.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +3 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +375 -0
- data/src/core/lib/iomgr/endpoint_cfstream.h +49 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
- data/src/core/lib/iomgr/error.cc +21 -17
- data/src/core/lib/iomgr/error.h +36 -6
- data/src/core/lib/iomgr/error_cfstream.cc +52 -0
- data/src/core/lib/iomgr/error_cfstream.h +31 -0
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +44 -28
- data/src/core/lib/iomgr/ev_epollex_linux.cc +173 -194
- data/src/core/lib/iomgr/ev_poll_posix.cc +16 -487
- data/src/core/lib/iomgr/ev_posix.cc +29 -19
- data/src/core/lib/iomgr/ev_posix.h +19 -3
- data/src/core/lib/iomgr/ev_windows.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -0
- data/src/core/lib/iomgr/exec_ctx.h +137 -8
- data/src/core/lib/iomgr/executor.cc +147 -95
- data/src/core/lib/iomgr/executor.h +55 -49
- data/src/core/lib/iomgr/fork_posix.cc +6 -5
- data/src/core/lib/{gprpp/atomic_with_std.h → iomgr/grpc_if_nametoindex.h} +8 -13
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +42 -0
- data/src/core/lib/iomgr/{network_status_tracker.h → grpc_if_nametoindex_unsupported.cc} +15 -9
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.h +105 -3
- data/src/core/lib/iomgr/iomgr.cc +20 -13
- data/src/core/lib/iomgr/iomgr.h +15 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +17 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +10 -0
- data/src/core/lib/iomgr/iomgr_internal.h +12 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +19 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +93 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +18 -2
- data/src/core/lib/iomgr/lockfree_event.cc +4 -4
- data/src/core/lib/iomgr/port.h +35 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +2 -1
- data/src/core/lib/iomgr/resource_quota.cc +40 -37
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +6 -2
- data/src/core/lib/iomgr/socket_windows.cc +19 -0
- data/src/core/lib/iomgr/socket_windows.h +8 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +216 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
- data/src/core/lib/iomgr/tcp_custom.cc +10 -14
- data/src/core/lib/iomgr/tcp_posix.cc +256 -140
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +14 -12
- data/src/core/lib/iomgr/tcp_server_posix.cc +86 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -11
- data/src/core/lib/iomgr/tcp_uv.cc +5 -7
- data/src/core/lib/iomgr/tcp_windows.cc +8 -14
- data/src/core/lib/iomgr/timer.h +2 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -16
- data/src/core/lib/iomgr/timer_manager.cc +20 -11
- data/src/core/lib/iomgr/udp_server.cc +8 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -19
- data/src/core/lib/json/json.cc +1 -4
- data/src/core/lib/profiling/basic_timers.cc +10 -4
- data/src/core/lib/security/context/security_context.cc +6 -7
- data/src/core/lib/security/context/security_context.h +3 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -0
- data/src/core/lib/security/credentials/credentials.h +9 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +15 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +10 -6
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -8
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +192 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +210 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +129 -0
- data/src/core/lib/security/credentials/tls/spiffe_credentials.h +62 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -12
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +7 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +10 -8
- data/src/core/lib/security/security_connector/security_connector.cc +0 -1
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -38
- data/src/core/lib/security/security_connector/ssl_utils.cc +164 -26
- data/src/core/lib/security/security_connector/ssl_utils.h +70 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +426 -0
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +122 -0
- data/src/core/lib/security/transport/auth_filters.h +5 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +55 -50
- data/src/core/lib/security/transport/secure_endpoint.cc +6 -6
- data/src/core/lib/security/transport/security_handshaker.cc +271 -303
- data/src/core/lib/security/transport/security_handshaker.h +11 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -3
- data/src/core/lib/slice/b64.h +2 -2
- data/src/core/lib/slice/percent_encoding.cc +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +174 -122
- data/src/core/lib/slice/slice_buffer.cc +54 -21
- data/src/core/lib/slice/slice_hash_table.h +4 -4
- data/src/core/lib/slice/slice_intern.cc +49 -107
- data/src/core/lib/slice/slice_internal.h +264 -3
- data/src/core/lib/slice/slice_string_helpers.cc +10 -1
- data/src/core/lib/slice/slice_string_helpers.h +3 -1
- data/src/core/lib/slice/slice_utils.h +50 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +6 -6
- data/src/core/lib/surface/api_trace.h +1 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +17 -0
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +7 -2
- data/src/core/lib/surface/call_details.cc +0 -1
- data/src/core/lib/surface/channel.cc +89 -97
- data/src/core/lib/surface/channel.h +60 -6
- data/src/core/lib/surface/channel_init.h +5 -0
- data/src/core/lib/surface/completion_queue.cc +221 -216
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +82 -33
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +5 -7
- data/src/core/lib/surface/server.cc +42 -47
- data/src/core/lib/surface/validate_metadata.cc +14 -8
- data/src/core/lib/surface/validate_metadata.h +13 -2
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/bdp_estimator.cc +3 -3
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/connectivity_state.cc +10 -40
- data/src/core/lib/transport/connectivity_state.h +0 -8
- data/src/core/lib/transport/error_utils.cc +12 -0
- data/src/core/lib/transport/metadata.cc +258 -267
- data/src/core/lib/transport/metadata.h +227 -16
- data/src/core/lib/transport/metadata_batch.cc +1 -1
- data/src/core/lib/transport/metadata_batch.h +1 -1
- data/src/core/lib/transport/static_metadata.cc +477 -399
- data/src/core/lib/transport/static_metadata.h +273 -182
- data/src/core/lib/transport/status_metadata.cc +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +1 -1
- data/src/core/lib/transport/timeout_encoding.h +1 -1
- data/src/core/lib/transport/transport.cc +39 -72
- data/src/core/lib/transport/transport.h +59 -24
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +1 -1
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +12 -10
- data/src/core/tsi/ssl_transport_security.h +24 -4
- data/src/ruby/bin/math_pb.rb +18 -16
- data/src/ruby/ext/grpc/extconf.rb +12 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_channel.c +14 -10
- data/src/ruby/ext/grpc/rb_channel_credentials.c +8 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +9 -7
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +23 -24
- data/src/ruby/ext/grpc/rb_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -0
- data/src/ruby/ext/grpc/rb_server.c +8 -4
- data/src/ruby/lib/grpc/errors.rb +22 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/README.md +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +13 -10
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +18 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +58 -56
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -0
- data/src/ruby/spec/errors_spec.rb +141 -0
- data/third_party/cares/cares/ares.h +12 -0
- data/third_party/cares/cares/ares_create_query.c +5 -1
- data/third_party/cares/cares/ares_data.c +74 -73
- data/third_party/cares/cares/ares_destroy.c +6 -1
- data/third_party/cares/cares/ares_gethostbyaddr.c +5 -5
- data/third_party/cares/cares/ares_gethostbyname.c +15 -4
- data/third_party/cares/cares/ares_getnameinfo.c +11 -0
- data/third_party/cares/cares/ares_init.c +274 -173
- data/third_party/cares/cares/ares_library_init.c +21 -3
- data/third_party/cares/cares/ares_options.c +6 -2
- data/third_party/cares/cares/ares_parse_naptr_reply.c +7 -6
- data/third_party/cares/cares/ares_parse_ptr_reply.c +4 -2
- data/third_party/cares/cares/ares_platform.c +7 -0
- data/third_party/cares/cares/ares_private.h +19 -11
- data/third_party/cares/cares/ares_process.c +27 -2
- data/third_party/cares/cares/ares_rules.h +1 -1
- data/third_party/cares/cares/ares_search.c +7 -0
- data/third_party/cares/cares/ares_send.c +6 -0
- data/third_party/cares/cares/ares_strsplit.c +174 -0
- data/third_party/cares/cares/ares_strsplit.h +43 -0
- data/third_party/cares/cares/ares_version.h +4 -4
- data/third_party/cares/cares/config-win32.h +1 -1
- data/third_party/cares/cares/inet_ntop.c +2 -3
- data/third_party/cares/config_darwin/ares_config.h +3 -0
- data/third_party/cares/config_freebsd/ares_config.h +3 -0
- data/third_party/cares/config_linux/ares_config.h +3 -0
- data/third_party/cares/config_openbsd/ares_config.h +3 -0
- metadata +83 -48
- data/src/core/ext/filters/client_channel/request_routing.cc +0 -936
- data/src/core/ext/filters/client_channel/request_routing.h +0 -177
- data/src/core/ext/filters/client_channel/subchannel_index.cc +0 -248
- data/src/core/ext/filters/client_channel/subchannel_index.h +0 -76
- data/src/core/lib/channel/handshaker_factory.cc +0 -42
- data/src/core/lib/gpr/arena.cc +0 -192
- data/src/core/lib/gprpp/atomic_with_atm.h +0 -57
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +0 -107
- data/src/core/lib/iomgr/wakeup_fd_cv.h +0 -69
- data/src/core/lib/transport/service_config.cc +0 -106
- data/src/core/lib/transport/service_config.h +0 -249
@@ -43,7 +43,6 @@
|
|
43
43
|
#include "src/core/lib/gprpp/thd.h"
|
44
44
|
#include "src/core/lib/iomgr/block_annotate.h"
|
45
45
|
#include "src/core/lib/iomgr/iomgr_internal.h"
|
46
|
-
#include "src/core/lib/iomgr/wakeup_fd_cv.h"
|
47
46
|
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
48
47
|
#include "src/core/lib/profiling/timers.h"
|
49
48
|
|
@@ -126,7 +125,7 @@ struct grpc_fd {
|
|
126
125
|
grpc_fork_fd_list* fork_fd_list;
|
127
126
|
};
|
128
127
|
|
129
|
-
/* True when GRPC_ENABLE_FORK_SUPPORT=1.
|
128
|
+
/* True when GRPC_ENABLE_FORK_SUPPORT=1. */
|
130
129
|
static bool track_fds_for_fork = false;
|
131
130
|
|
132
131
|
/* Only used when GRPC_ENABLE_FORK_SUPPORT=1 */
|
@@ -256,56 +255,6 @@ struct grpc_pollset_set {
|
|
256
255
|
grpc_fd** fds;
|
257
256
|
};
|
258
257
|
|
259
|
-
/*******************************************************************************
|
260
|
-
* condition variable polling definitions
|
261
|
-
*/
|
262
|
-
|
263
|
-
#define POLLCV_THREAD_GRACE_MS 1000
|
264
|
-
#define CV_POLL_PERIOD_MS 1000
|
265
|
-
#define CV_DEFAULT_TABLE_SIZE 16
|
266
|
-
|
267
|
-
typedef struct poll_result {
|
268
|
-
gpr_refcount refcount;
|
269
|
-
grpc_cv_node* watchers;
|
270
|
-
int watchcount;
|
271
|
-
struct pollfd* fds;
|
272
|
-
nfds_t nfds;
|
273
|
-
int retval;
|
274
|
-
int err;
|
275
|
-
int completed;
|
276
|
-
} poll_result;
|
277
|
-
|
278
|
-
typedef struct poll_args {
|
279
|
-
grpc_core::Thread poller_thd;
|
280
|
-
gpr_cv trigger;
|
281
|
-
int trigger_set;
|
282
|
-
bool harvestable;
|
283
|
-
gpr_cv harvest;
|
284
|
-
bool joinable;
|
285
|
-
gpr_cv join;
|
286
|
-
struct pollfd* fds;
|
287
|
-
nfds_t nfds;
|
288
|
-
poll_result* result;
|
289
|
-
struct poll_args* next;
|
290
|
-
struct poll_args* prev;
|
291
|
-
} poll_args;
|
292
|
-
|
293
|
-
// This is a 2-tiered cache, we mantain a hash table
|
294
|
-
// of active poll calls, so we can wait on the result
|
295
|
-
// of that call. We also maintain freelists of inactive
|
296
|
-
// poll args and of dead poller threads.
|
297
|
-
typedef struct poll_hash_table {
|
298
|
-
poll_args* free_pollers;
|
299
|
-
poll_args** active_pollers;
|
300
|
-
poll_args* dead_pollers;
|
301
|
-
unsigned int size;
|
302
|
-
unsigned int count;
|
303
|
-
} poll_hash_table;
|
304
|
-
|
305
|
-
// TODO(kpayson64): Eliminate use of global non-POD variables
|
306
|
-
poll_hash_table poll_cache;
|
307
|
-
grpc_cv_fd_table g_cvfds;
|
308
|
-
|
309
258
|
/*******************************************************************************
|
310
259
|
* functions to track opened fds. No-ops unless track_fds_for_fork is true.
|
311
260
|
*/
|
@@ -367,7 +316,7 @@ static void fork_fd_list_add_wakeup_fd(grpc_cached_wakeup_fd* fd) {
|
|
367
316
|
#define UNREF_BY(fd, n, reason) unref_by(fd, n, reason, __FILE__, __LINE__)
|
368
317
|
static void ref_by(grpc_fd* fd, int n, const char* reason, const char* file,
|
369
318
|
int line) {
|
370
|
-
if (grpc_trace_fd_refcount
|
319
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_fd_refcount)) {
|
371
320
|
gpr_log(GPR_DEBUG,
|
372
321
|
"FD %d %p ref %d %" PRIdPTR " -> %" PRIdPTR " [%s; %s:%d]",
|
373
322
|
fd->fd, fd, n, gpr_atm_no_barrier_load(&fd->refst),
|
@@ -384,7 +333,7 @@ static void ref_by(grpc_fd* fd, int n) {
|
|
384
333
|
#ifndef NDEBUG
|
385
334
|
static void unref_by(grpc_fd* fd, int n, const char* reason, const char* file,
|
386
335
|
int line) {
|
387
|
-
if (grpc_trace_fd_refcount
|
336
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_fd_refcount)) {
|
388
337
|
gpr_log(GPR_DEBUG,
|
389
338
|
"FD %d %p unref %d %" PRIdPTR " -> %" PRIdPTR " [%s; %s:%d]",
|
390
339
|
fd->fd, fd, n, gpr_atm_no_barrier_load(&fd->refst),
|
@@ -612,7 +561,7 @@ static void fd_notify_on_write(grpc_fd* fd, grpc_closure* closure) {
|
|
612
561
|
}
|
613
562
|
|
614
563
|
static void fd_notify_on_error(grpc_fd* fd, grpc_closure* closure) {
|
615
|
-
if (grpc_polling_trace
|
564
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
|
616
565
|
gpr_log(GPR_ERROR, "Polling engine does not support tracking errors.");
|
617
566
|
}
|
618
567
|
GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_CANCELLED);
|
@@ -631,7 +580,7 @@ static void fd_set_writable(grpc_fd* fd) {
|
|
631
580
|
}
|
632
581
|
|
633
582
|
static void fd_set_error(grpc_fd* fd) {
|
634
|
-
if (grpc_polling_trace
|
583
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
|
635
584
|
gpr_log(GPR_ERROR, "Polling engine does not support tracking errors.");
|
636
585
|
}
|
637
586
|
}
|
@@ -1063,7 +1012,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
|
|
1063
1012
|
r = grpc_poll_function(pfds, pfd_count, timeout);
|
1064
1013
|
GRPC_SCHEDULING_END_BLOCKING_REGION;
|
1065
1014
|
|
1066
|
-
if (grpc_polling_trace
|
1015
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
|
1067
1016
|
gpr_log(GPR_INFO, "%p poll=%d", pollset, r);
|
1068
1017
|
}
|
1069
1018
|
|
@@ -1087,7 +1036,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
|
|
1087
1036
|
}
|
1088
1037
|
} else {
|
1089
1038
|
if (pfds[0].revents & POLLIN_CHECK) {
|
1090
|
-
if (grpc_polling_trace
|
1039
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
|
1091
1040
|
gpr_log(GPR_INFO, "%p: got_wakeup", pollset);
|
1092
1041
|
}
|
1093
1042
|
work_combine_error(
|
@@ -1097,7 +1046,7 @@ static grpc_error* pollset_work(grpc_pollset* pollset,
|
|
1097
1046
|
if (watchers[i].fd == nullptr) {
|
1098
1047
|
fd_end_poll(&watchers[i], 0, 0);
|
1099
1048
|
} else {
|
1100
|
-
if (grpc_polling_trace
|
1049
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
|
1101
1050
|
gpr_log(GPR_INFO, "%p got_event: %d r:%d w:%d [%d]", pollset,
|
1102
1051
|
pfds[i].fd, (pfds[i].revents & POLLIN_CHECK) != 0,
|
1103
1052
|
(pfds[i].revents & POLLOUT_CHECK) != 0, pfds[i].revents);
|
@@ -1364,431 +1313,20 @@ static void pollset_set_del_fd(grpc_pollset_set* pollset_set, grpc_fd* fd) {
|
|
1364
1313
|
}
|
1365
1314
|
|
1366
1315
|
/*******************************************************************************
|
1367
|
-
*
|
1316
|
+
* event engine binding
|
1368
1317
|
*/
|
1369
1318
|
|
1370
|
-
static
|
1371
|
-
static void cache_poller_locked(poll_args* args);
|
1372
|
-
static void cache_harvest_locked();
|
1373
|
-
|
1374
|
-
static void cache_insert_locked(poll_args* args) {
|
1375
|
-
uint32_t key = gpr_murmur_hash3(args->fds, args->nfds * sizeof(struct pollfd),
|
1376
|
-
0xDEADBEEF);
|
1377
|
-
key = key % poll_cache.size;
|
1378
|
-
if (poll_cache.active_pollers[key]) {
|
1379
|
-
poll_cache.active_pollers[key]->prev = args;
|
1380
|
-
}
|
1381
|
-
args->next = poll_cache.active_pollers[key];
|
1382
|
-
args->prev = nullptr;
|
1383
|
-
poll_cache.active_pollers[key] = args;
|
1384
|
-
poll_cache.count++;
|
1385
|
-
}
|
1386
|
-
|
1387
|
-
static void init_result(poll_args* pargs) {
|
1388
|
-
pargs->result = static_cast<poll_result*>(gpr_malloc(sizeof(poll_result)));
|
1389
|
-
gpr_ref_init(&pargs->result->refcount, 1);
|
1390
|
-
pargs->result->watchers = nullptr;
|
1391
|
-
pargs->result->watchcount = 0;
|
1392
|
-
pargs->result->fds = static_cast<struct pollfd*>(
|
1393
|
-
gpr_malloc(sizeof(struct pollfd) * pargs->nfds));
|
1394
|
-
memcpy(pargs->result->fds, pargs->fds, sizeof(struct pollfd) * pargs->nfds);
|
1395
|
-
pargs->result->nfds = pargs->nfds;
|
1396
|
-
pargs->result->retval = 0;
|
1397
|
-
pargs->result->err = 0;
|
1398
|
-
pargs->result->completed = 0;
|
1399
|
-
}
|
1400
|
-
|
1401
|
-
// Creates a poll_args object for a given arguments to poll().
|
1402
|
-
// This object may return a poll_args in the cache.
|
1403
|
-
static poll_args* get_poller_locked(struct pollfd* fds, nfds_t count) {
|
1404
|
-
uint32_t key =
|
1405
|
-
gpr_murmur_hash3(fds, count * sizeof(struct pollfd), 0xDEADBEEF);
|
1406
|
-
key = key % poll_cache.size;
|
1407
|
-
poll_args* curr = poll_cache.active_pollers[key];
|
1408
|
-
while (curr) {
|
1409
|
-
if (curr->nfds == count &&
|
1410
|
-
memcmp(curr->fds, fds, count * sizeof(struct pollfd)) == 0) {
|
1411
|
-
gpr_free(fds);
|
1412
|
-
return curr;
|
1413
|
-
}
|
1414
|
-
curr = curr->next;
|
1415
|
-
}
|
1416
|
-
|
1417
|
-
if (poll_cache.free_pollers) {
|
1418
|
-
poll_args* pargs = poll_cache.free_pollers;
|
1419
|
-
poll_cache.free_pollers = pargs->next;
|
1420
|
-
if (poll_cache.free_pollers) {
|
1421
|
-
poll_cache.free_pollers->prev = nullptr;
|
1422
|
-
}
|
1423
|
-
pargs->fds = fds;
|
1424
|
-
pargs->nfds = count;
|
1425
|
-
pargs->next = nullptr;
|
1426
|
-
pargs->prev = nullptr;
|
1427
|
-
init_result(pargs);
|
1428
|
-
cache_poller_locked(pargs);
|
1429
|
-
return pargs;
|
1430
|
-
}
|
1431
|
-
|
1432
|
-
poll_args* pargs =
|
1433
|
-
static_cast<poll_args*>(gpr_malloc(sizeof(struct poll_args)));
|
1434
|
-
gpr_cv_init(&pargs->trigger);
|
1435
|
-
gpr_cv_init(&pargs->harvest);
|
1436
|
-
gpr_cv_init(&pargs->join);
|
1437
|
-
pargs->harvestable = false;
|
1438
|
-
pargs->joinable = false;
|
1439
|
-
pargs->fds = fds;
|
1440
|
-
pargs->nfds = count;
|
1441
|
-
pargs->next = nullptr;
|
1442
|
-
pargs->prev = nullptr;
|
1443
|
-
pargs->trigger_set = 0;
|
1444
|
-
init_result(pargs);
|
1445
|
-
cache_poller_locked(pargs);
|
1446
|
-
gpr_ref(&g_cvfds.pollcount);
|
1447
|
-
pargs->poller_thd = grpc_core::Thread("grpc_poller", &run_poll, pargs);
|
1448
|
-
pargs->poller_thd.Start();
|
1449
|
-
return pargs;
|
1450
|
-
}
|
1451
|
-
|
1452
|
-
static void cache_delete_locked(poll_args* args) {
|
1453
|
-
if (!args->prev) {
|
1454
|
-
uint32_t key = gpr_murmur_hash3(
|
1455
|
-
args->fds, args->nfds * sizeof(struct pollfd), 0xDEADBEEF);
|
1456
|
-
key = key % poll_cache.size;
|
1457
|
-
GPR_ASSERT(poll_cache.active_pollers[key] == args);
|
1458
|
-
poll_cache.active_pollers[key] = args->next;
|
1459
|
-
} else {
|
1460
|
-
args->prev->next = args->next;
|
1461
|
-
}
|
1462
|
-
|
1463
|
-
if (args->next) {
|
1464
|
-
args->next->prev = args->prev;
|
1465
|
-
}
|
1466
|
-
|
1467
|
-
poll_cache.count--;
|
1468
|
-
if (poll_cache.free_pollers) {
|
1469
|
-
poll_cache.free_pollers->prev = args;
|
1470
|
-
}
|
1471
|
-
args->prev = nullptr;
|
1472
|
-
args->next = poll_cache.free_pollers;
|
1473
|
-
gpr_free(args->fds);
|
1474
|
-
poll_cache.free_pollers = args;
|
1475
|
-
}
|
1476
|
-
|
1477
|
-
static void cache_poller_locked(poll_args* args) {
|
1478
|
-
if (poll_cache.count + 1 > poll_cache.size / 2) {
|
1479
|
-
poll_args** old_active_pollers = poll_cache.active_pollers;
|
1480
|
-
poll_cache.size = poll_cache.size * 2;
|
1481
|
-
poll_cache.count = 0;
|
1482
|
-
poll_cache.active_pollers =
|
1483
|
-
static_cast<poll_args**>(gpr_malloc(sizeof(void*) * poll_cache.size));
|
1484
|
-
for (unsigned int i = 0; i < poll_cache.size; i++) {
|
1485
|
-
poll_cache.active_pollers[i] = nullptr;
|
1486
|
-
}
|
1487
|
-
for (unsigned int i = 0; i < poll_cache.size / 2; i++) {
|
1488
|
-
poll_args* curr = old_active_pollers[i];
|
1489
|
-
poll_args* next = nullptr;
|
1490
|
-
while (curr) {
|
1491
|
-
next = curr->next;
|
1492
|
-
cache_insert_locked(curr);
|
1493
|
-
curr = next;
|
1494
|
-
}
|
1495
|
-
}
|
1496
|
-
gpr_free(old_active_pollers);
|
1497
|
-
}
|
1498
|
-
|
1499
|
-
cache_insert_locked(args);
|
1500
|
-
}
|
1501
|
-
|
1502
|
-
static void cache_destroy_locked(poll_args* args) {
|
1503
|
-
if (args->next) {
|
1504
|
-
args->next->prev = args->prev;
|
1505
|
-
}
|
1506
|
-
|
1507
|
-
if (args->prev) {
|
1508
|
-
args->prev->next = args->next;
|
1509
|
-
} else {
|
1510
|
-
poll_cache.free_pollers = args->next;
|
1511
|
-
}
|
1512
|
-
|
1513
|
-
// Now move this args to the dead poller list for later join
|
1514
|
-
if (poll_cache.dead_pollers != nullptr) {
|
1515
|
-
poll_cache.dead_pollers->prev = args;
|
1516
|
-
}
|
1517
|
-
args->prev = nullptr;
|
1518
|
-
args->next = poll_cache.dead_pollers;
|
1519
|
-
poll_cache.dead_pollers = args;
|
1520
|
-
}
|
1521
|
-
|
1522
|
-
static void cache_harvest_locked() {
|
1523
|
-
while (poll_cache.dead_pollers) {
|
1524
|
-
poll_args* args = poll_cache.dead_pollers;
|
1525
|
-
poll_cache.dead_pollers = poll_cache.dead_pollers->next;
|
1526
|
-
// Keep the list consistent in case new dead pollers get added when we
|
1527
|
-
// release the lock below to wait on joining
|
1528
|
-
if (poll_cache.dead_pollers) {
|
1529
|
-
poll_cache.dead_pollers->prev = nullptr;
|
1530
|
-
}
|
1531
|
-
args->harvestable = true;
|
1532
|
-
gpr_cv_signal(&args->harvest);
|
1533
|
-
while (!args->joinable) {
|
1534
|
-
gpr_cv_wait(&args->join, &g_cvfds.mu,
|
1535
|
-
gpr_inf_future(GPR_CLOCK_MONOTONIC));
|
1536
|
-
}
|
1537
|
-
args->poller_thd.Join();
|
1538
|
-
gpr_free(args);
|
1539
|
-
}
|
1540
|
-
}
|
1541
|
-
|
1542
|
-
static void decref_poll_result(poll_result* res) {
|
1543
|
-
if (gpr_unref(&res->refcount)) {
|
1544
|
-
GPR_ASSERT(!res->watchers);
|
1545
|
-
gpr_free(res->fds);
|
1546
|
-
gpr_free(res);
|
1547
|
-
}
|
1548
|
-
}
|
1549
|
-
|
1550
|
-
void remove_cvn(grpc_cv_node** head, grpc_cv_node* target) {
|
1551
|
-
if (target->next) {
|
1552
|
-
target->next->prev = target->prev;
|
1553
|
-
}
|
1554
|
-
|
1555
|
-
if (target->prev) {
|
1556
|
-
target->prev->next = target->next;
|
1557
|
-
} else {
|
1558
|
-
*head = target->next;
|
1559
|
-
}
|
1560
|
-
}
|
1561
|
-
|
1562
|
-
gpr_timespec thread_grace;
|
1563
|
-
|
1564
|
-
// Poll in a background thread
|
1565
|
-
static void run_poll(void* args) {
|
1566
|
-
poll_args* pargs = static_cast<poll_args*>(args);
|
1567
|
-
while (1) {
|
1568
|
-
poll_result* result = pargs->result;
|
1569
|
-
int retval = g_cvfds.poll(result->fds, result->nfds, CV_POLL_PERIOD_MS);
|
1570
|
-
gpr_mu_lock(&g_cvfds.mu);
|
1571
|
-
cache_harvest_locked();
|
1572
|
-
if (retval != 0) {
|
1573
|
-
result->completed = 1;
|
1574
|
-
result->retval = retval;
|
1575
|
-
result->err = errno;
|
1576
|
-
grpc_cv_node* watcher = result->watchers;
|
1577
|
-
while (watcher) {
|
1578
|
-
gpr_cv_signal(watcher->cv);
|
1579
|
-
watcher = watcher->next;
|
1580
|
-
}
|
1581
|
-
}
|
1582
|
-
if (result->watchcount == 0 || result->completed) {
|
1583
|
-
cache_delete_locked(pargs);
|
1584
|
-
decref_poll_result(result);
|
1585
|
-
// Leave this polling thread alive for a grace period to do another poll()
|
1586
|
-
// op
|
1587
|
-
gpr_timespec deadline = gpr_now(GPR_CLOCK_MONOTONIC);
|
1588
|
-
deadline = gpr_time_add(deadline, thread_grace);
|
1589
|
-
pargs->trigger_set = 0;
|
1590
|
-
gpr_cv_wait(&pargs->trigger, &g_cvfds.mu, deadline);
|
1591
|
-
cache_harvest_locked();
|
1592
|
-
if (!pargs->trigger_set) {
|
1593
|
-
cache_destroy_locked(pargs);
|
1594
|
-
break;
|
1595
|
-
}
|
1596
|
-
}
|
1597
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
1598
|
-
}
|
1599
|
-
|
1600
|
-
if (gpr_unref(&g_cvfds.pollcount)) {
|
1601
|
-
gpr_cv_signal(&g_cvfds.shutdown_cv);
|
1602
|
-
}
|
1603
|
-
while (!pargs->harvestable) {
|
1604
|
-
gpr_cv_wait(&pargs->harvest, &g_cvfds.mu,
|
1605
|
-
gpr_inf_future(GPR_CLOCK_MONOTONIC));
|
1606
|
-
}
|
1607
|
-
pargs->joinable = true;
|
1608
|
-
gpr_cv_signal(&pargs->join);
|
1609
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
1610
|
-
}
|
1611
|
-
|
1612
|
-
// This function overrides poll() to handle condition variable wakeup fds
|
1613
|
-
static int cvfd_poll(struct pollfd* fds, nfds_t nfds, int timeout) {
|
1614
|
-
if (timeout == 0) {
|
1615
|
-
// Don't bother using background threads for polling if timeout is 0,
|
1616
|
-
// poll-cv might not wait for a poll to return otherwise.
|
1617
|
-
// https://github.com/grpc/grpc/issues/13298
|
1618
|
-
return poll(fds, nfds, 0);
|
1619
|
-
}
|
1620
|
-
unsigned int i;
|
1621
|
-
int res, idx;
|
1622
|
-
grpc_cv_node* pollcv;
|
1623
|
-
int skip_poll = 0;
|
1624
|
-
nfds_t nsockfds = 0;
|
1625
|
-
poll_result* result = nullptr;
|
1626
|
-
gpr_mu_lock(&g_cvfds.mu);
|
1627
|
-
cache_harvest_locked();
|
1628
|
-
pollcv = static_cast<grpc_cv_node*>(gpr_malloc(sizeof(grpc_cv_node)));
|
1629
|
-
pollcv->next = nullptr;
|
1630
|
-
gpr_cv pollcv_cv;
|
1631
|
-
gpr_cv_init(&pollcv_cv);
|
1632
|
-
pollcv->cv = &pollcv_cv;
|
1633
|
-
grpc_cv_node* fd_cvs =
|
1634
|
-
static_cast<grpc_cv_node*>(gpr_malloc(nfds * sizeof(grpc_cv_node)));
|
1635
|
-
|
1636
|
-
for (i = 0; i < nfds; i++) {
|
1637
|
-
fds[i].revents = 0;
|
1638
|
-
if (fds[i].fd < 0 && (fds[i].events & POLLIN)) {
|
1639
|
-
idx = GRPC_FD_TO_IDX(fds[i].fd);
|
1640
|
-
fd_cvs[i].cv = &pollcv_cv;
|
1641
|
-
fd_cvs[i].prev = nullptr;
|
1642
|
-
fd_cvs[i].next = g_cvfds.cvfds[idx].cvs;
|
1643
|
-
if (g_cvfds.cvfds[idx].cvs) {
|
1644
|
-
g_cvfds.cvfds[idx].cvs->prev = &(fd_cvs[i]);
|
1645
|
-
}
|
1646
|
-
g_cvfds.cvfds[idx].cvs = &(fd_cvs[i]);
|
1647
|
-
// Don't bother polling if a wakeup fd is ready
|
1648
|
-
if (g_cvfds.cvfds[idx].is_set) {
|
1649
|
-
skip_poll = 1;
|
1650
|
-
}
|
1651
|
-
} else if (fds[i].fd >= 0) {
|
1652
|
-
nsockfds++;
|
1653
|
-
}
|
1654
|
-
}
|
1319
|
+
static bool is_any_background_poller_thread(void) { return false; }
|
1655
1320
|
|
1656
|
-
|
1657
|
-
if (timeout < 0) {
|
1658
|
-
deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
|
1659
|
-
} else {
|
1660
|
-
deadline =
|
1661
|
-
gpr_time_add(deadline, gpr_time_from_millis(timeout, GPR_TIMESPAN));
|
1662
|
-
}
|
1663
|
-
|
1664
|
-
res = 0;
|
1665
|
-
if (!skip_poll && nsockfds > 0) {
|
1666
|
-
struct pollfd* pollfds = static_cast<struct pollfd*>(
|
1667
|
-
gpr_malloc(sizeof(struct pollfd) * nsockfds));
|
1668
|
-
idx = 0;
|
1669
|
-
for (i = 0; i < nfds; i++) {
|
1670
|
-
if (fds[i].fd >= 0) {
|
1671
|
-
pollfds[idx].fd = fds[i].fd;
|
1672
|
-
pollfds[idx].events = fds[i].events;
|
1673
|
-
pollfds[idx].revents = 0;
|
1674
|
-
idx++;
|
1675
|
-
}
|
1676
|
-
}
|
1677
|
-
poll_args* pargs = get_poller_locked(pollfds, nsockfds);
|
1678
|
-
result = pargs->result;
|
1679
|
-
pollcv->next = result->watchers;
|
1680
|
-
pollcv->prev = nullptr;
|
1681
|
-
if (result->watchers) {
|
1682
|
-
result->watchers->prev = pollcv;
|
1683
|
-
}
|
1684
|
-
result->watchers = pollcv;
|
1685
|
-
result->watchcount++;
|
1686
|
-
gpr_ref(&result->refcount);
|
1687
|
-
|
1688
|
-
pargs->trigger_set = 1;
|
1689
|
-
gpr_cv_signal(&pargs->trigger);
|
1690
|
-
gpr_cv_wait(&pollcv_cv, &g_cvfds.mu, deadline);
|
1691
|
-
cache_harvest_locked();
|
1692
|
-
res = result->retval;
|
1693
|
-
errno = result->err;
|
1694
|
-
result->watchcount--;
|
1695
|
-
remove_cvn(&result->watchers, pollcv);
|
1696
|
-
} else if (!skip_poll) {
|
1697
|
-
gpr_cv_wait(&pollcv_cv, &g_cvfds.mu, deadline);
|
1698
|
-
cache_harvest_locked();
|
1699
|
-
}
|
1700
|
-
|
1701
|
-
idx = 0;
|
1702
|
-
for (i = 0; i < nfds; i++) {
|
1703
|
-
if (fds[i].fd < 0 && (fds[i].events & POLLIN)) {
|
1704
|
-
remove_cvn(&g_cvfds.cvfds[GRPC_FD_TO_IDX(fds[i].fd)].cvs, &(fd_cvs[i]));
|
1705
|
-
if (g_cvfds.cvfds[GRPC_FD_TO_IDX(fds[i].fd)].is_set) {
|
1706
|
-
fds[i].revents = POLLIN;
|
1707
|
-
if (res >= 0) res++;
|
1708
|
-
}
|
1709
|
-
} else if (!skip_poll && fds[i].fd >= 0 && result->completed) {
|
1710
|
-
fds[i].revents = result->fds[idx].revents;
|
1711
|
-
idx++;
|
1712
|
-
}
|
1713
|
-
}
|
1714
|
-
|
1715
|
-
gpr_free(fd_cvs);
|
1716
|
-
gpr_free(pollcv);
|
1717
|
-
if (result) {
|
1718
|
-
decref_poll_result(result);
|
1719
|
-
}
|
1720
|
-
|
1721
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
1722
|
-
|
1723
|
-
return res;
|
1724
|
-
}
|
1725
|
-
|
1726
|
-
static void global_cv_fd_table_init() {
|
1727
|
-
gpr_mu_init(&g_cvfds.mu);
|
1728
|
-
gpr_mu_lock(&g_cvfds.mu);
|
1729
|
-
gpr_cv_init(&g_cvfds.shutdown_cv);
|
1730
|
-
gpr_ref_init(&g_cvfds.pollcount, 1);
|
1731
|
-
g_cvfds.size = CV_DEFAULT_TABLE_SIZE;
|
1732
|
-
g_cvfds.cvfds = static_cast<grpc_fd_node*>(
|
1733
|
-
gpr_malloc(sizeof(grpc_fd_node) * CV_DEFAULT_TABLE_SIZE));
|
1734
|
-
g_cvfds.free_fds = nullptr;
|
1735
|
-
thread_grace = gpr_time_from_millis(POLLCV_THREAD_GRACE_MS, GPR_TIMESPAN);
|
1736
|
-
for (int i = 0; i < CV_DEFAULT_TABLE_SIZE; i++) {
|
1737
|
-
g_cvfds.cvfds[i].is_set = 0;
|
1738
|
-
g_cvfds.cvfds[i].cvs = nullptr;
|
1739
|
-
g_cvfds.cvfds[i].next_free = g_cvfds.free_fds;
|
1740
|
-
g_cvfds.free_fds = &g_cvfds.cvfds[i];
|
1741
|
-
}
|
1742
|
-
// Override the poll function with one that supports cvfds
|
1743
|
-
g_cvfds.poll = grpc_poll_function;
|
1744
|
-
grpc_poll_function = &cvfd_poll;
|
1745
|
-
|
1746
|
-
// Initialize the cache
|
1747
|
-
poll_cache.size = 32;
|
1748
|
-
poll_cache.count = 0;
|
1749
|
-
poll_cache.free_pollers = nullptr;
|
1750
|
-
poll_cache.active_pollers =
|
1751
|
-
static_cast<poll_args**>(gpr_malloc(sizeof(void*) * 32));
|
1752
|
-
for (unsigned int i = 0; i < poll_cache.size; i++) {
|
1753
|
-
poll_cache.active_pollers[i] = nullptr;
|
1754
|
-
}
|
1755
|
-
poll_cache.dead_pollers = nullptr;
|
1756
|
-
|
1757
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
1758
|
-
}
|
1321
|
+
static void shutdown_background_closure(void) {}
|
1759
1322
|
|
1760
|
-
static
|
1761
|
-
|
1762
|
-
|
1763
|
-
// Not doing so will result in reported memory leaks
|
1764
|
-
if (!gpr_unref(&g_cvfds.pollcount)) {
|
1765
|
-
int res = gpr_cv_wait(&g_cvfds.shutdown_cv, &g_cvfds.mu,
|
1766
|
-
gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
|
1767
|
-
gpr_time_from_seconds(3, GPR_TIMESPAN)));
|
1768
|
-
GPR_ASSERT(res == 0);
|
1769
|
-
}
|
1770
|
-
gpr_cv_destroy(&g_cvfds.shutdown_cv);
|
1771
|
-
grpc_poll_function = g_cvfds.poll;
|
1772
|
-
gpr_free(g_cvfds.cvfds);
|
1773
|
-
|
1774
|
-
cache_harvest_locked();
|
1775
|
-
gpr_free(poll_cache.active_pollers);
|
1776
|
-
|
1777
|
-
gpr_mu_unlock(&g_cvfds.mu);
|
1778
|
-
gpr_mu_destroy(&g_cvfds.mu);
|
1323
|
+
static bool add_closure_to_background_poller(grpc_closure* closure,
|
1324
|
+
grpc_error* error) {
|
1325
|
+
return false;
|
1779
1326
|
}
|
1780
1327
|
|
1781
|
-
/*******************************************************************************
|
1782
|
-
* event engine binding
|
1783
|
-
*/
|
1784
|
-
|
1785
|
-
static void shutdown_background_closure(void) {}
|
1786
|
-
|
1787
1328
|
static void shutdown_engine(void) {
|
1788
1329
|
pollset_global_shutdown();
|
1789
|
-
if (grpc_cv_wakeup_fds_enabled()) {
|
1790
|
-
global_cv_fd_table_shutdown();
|
1791
|
-
}
|
1792
1330
|
if (track_fds_for_fork) {
|
1793
1331
|
gpr_mu_destroy(&fork_fd_list_mu);
|
1794
1332
|
grpc_core::Fork::SetResetChildPollingEngineFunc(nullptr);
|
@@ -1828,8 +1366,10 @@ static const grpc_event_engine_vtable vtable = {
|
|
1828
1366
|
pollset_set_add_fd,
|
1829
1367
|
pollset_set_del_fd,
|
1830
1368
|
|
1369
|
+
is_any_background_poller_thread,
|
1831
1370
|
shutdown_background_closure,
|
1832
1371
|
shutdown_engine,
|
1372
|
+
add_closure_to_background_poller,
|
1833
1373
|
};
|
1834
1374
|
|
1835
1375
|
/* Called by the child process's post-fork handler to close open fds, including
|
@@ -1869,15 +1409,4 @@ const grpc_event_engine_vtable* grpc_init_poll_posix(bool explicit_request) {
|
|
1869
1409
|
return &vtable;
|
1870
1410
|
}
|
1871
1411
|
|
1872
|
-
const grpc_event_engine_vtable* grpc_init_poll_cv_posix(bool explicit_request) {
|
1873
|
-
global_cv_fd_table_init();
|
1874
|
-
grpc_enable_cv_wakeup_fds(1);
|
1875
|
-
if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
|
1876
|
-
global_cv_fd_table_shutdown();
|
1877
|
-
grpc_enable_cv_wakeup_fds(0);
|
1878
|
-
return nullptr;
|
1879
|
-
}
|
1880
|
-
return &vtable;
|
1881
|
-
}
|
1882
|
-
|
1883
1412
|
#endif /* GRPC_POSIX_SOCKET_EV_POLL */
|
@@ -31,31 +31,36 @@
|
|
31
31
|
#include <grpc/support/string_util.h>
|
32
32
|
|
33
33
|
#include "src/core/lib/debug/trace.h"
|
34
|
-
#include "src/core/lib/gpr/env.h"
|
35
34
|
#include "src/core/lib/gpr/useful.h"
|
35
|
+
#include "src/core/lib/gprpp/global_config.h"
|
36
36
|
#include "src/core/lib/iomgr/ev_epoll1_linux.h"
|
37
37
|
#include "src/core/lib/iomgr/ev_epollex_linux.h"
|
38
38
|
#include "src/core/lib/iomgr/ev_poll_posix.h"
|
39
39
|
#include "src/core/lib/iomgr/internal_errqueue.h"
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
GPR_GLOBAL_CONFIG_DEFINE_STRING(
|
42
|
+
grpc_poll_strategy, "all",
|
43
|
+
"Declares which polling engines to try when starting gRPC. "
|
44
|
+
"This is a comma-separated list of engines, which are tried in priority "
|
45
|
+
"order first -> last.")
|
46
|
+
|
47
|
+
grpc_core::DebugOnlyTraceFlag grpc_polling_trace(
|
48
|
+
false, "polling"); /* Disabled by default */
|
43
49
|
|
44
50
|
/* Traces fd create/close operations */
|
45
|
-
grpc_core::
|
51
|
+
grpc_core::DebugOnlyTraceFlag grpc_fd_trace(false, "fd_trace");
|
46
52
|
grpc_core::DebugOnlyTraceFlag grpc_trace_fd_refcount(false, "fd_refcount");
|
47
53
|
grpc_core::DebugOnlyTraceFlag grpc_polling_api_trace(false, "polling_api");
|
48
54
|
|
49
|
-
#ifndef NDEBUG
|
50
|
-
|
51
55
|
// Polling API trace only enabled in debug builds
|
56
|
+
#ifndef NDEBUG
|
52
57
|
#define GRPC_POLLING_API_TRACE(format, ...) \
|
53
|
-
if (grpc_polling_api_trace
|
58
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_api_trace)) { \
|
54
59
|
gpr_log(GPR_INFO, "(polling-api) " format, __VA_ARGS__); \
|
55
60
|
}
|
56
61
|
#else
|
57
62
|
#define GRPC_POLLING_API_TRACE(...)
|
58
|
-
#endif
|
63
|
+
#endif // NDEBUG
|
59
64
|
|
60
65
|
/** Default poll() function - a pointer so that it can be overridden by some
|
61
66
|
* tests */
|
@@ -66,7 +71,7 @@ int aix_poll(struct pollfd fds[], nfds_t nfds, int timeout) {
|
|
66
71
|
return poll(fds, nfds, timeout);
|
67
72
|
}
|
68
73
|
grpc_poll_function_type grpc_poll_function = aix_poll;
|
69
|
-
#endif
|
74
|
+
#endif // GPR_AIX
|
70
75
|
|
71
76
|
grpc_wakeup_fd grpc_global_wakeup_fd;
|
72
77
|
|
@@ -126,10 +131,9 @@ static event_engine_factory g_factories[] = {
|
|
126
131
|
{ENGINE_HEAD_CUSTOM, nullptr}, {ENGINE_HEAD_CUSTOM, nullptr},
|
127
132
|
{ENGINE_HEAD_CUSTOM, nullptr}, {ENGINE_HEAD_CUSTOM, nullptr},
|
128
133
|
{"epollex", grpc_init_epollex_linux}, {"epoll1", grpc_init_epoll1_linux},
|
129
|
-
{"poll", grpc_init_poll_posix}, {"
|
130
|
-
{
|
134
|
+
{"poll", grpc_init_poll_posix}, {"none", init_non_polling},
|
135
|
+
{ENGINE_TAIL_CUSTOM, nullptr}, {ENGINE_TAIL_CUSTOM, nullptr},
|
131
136
|
{ENGINE_TAIL_CUSTOM, nullptr}, {ENGINE_TAIL_CUSTOM, nullptr},
|
132
|
-
{ENGINE_TAIL_CUSTOM, nullptr},
|
133
137
|
};
|
134
138
|
|
135
139
|
static void add(const char* beg, const char* end, char*** ss, size_t* ns) {
|
@@ -206,14 +210,11 @@ void grpc_register_event_engine_factory(const char* name,
|
|
206
210
|
const char* grpc_get_poll_strategy_name() { return g_poll_strategy_name; }
|
207
211
|
|
208
212
|
void grpc_event_engine_init(void) {
|
209
|
-
char
|
210
|
-
if (s == nullptr) {
|
211
|
-
s = gpr_strdup("all");
|
212
|
-
}
|
213
|
+
grpc_core::UniquePtr<char> value = GPR_GLOBAL_CONFIG_GET(grpc_poll_strategy);
|
213
214
|
|
214
215
|
char** strings = nullptr;
|
215
216
|
size_t nstrings = 0;
|
216
|
-
split(
|
217
|
+
split(value.get(), &strings, &nstrings);
|
217
218
|
|
218
219
|
for (size_t i = 0; g_event_engine == nullptr && i < nstrings; i++) {
|
219
220
|
try_engine(strings[i]);
|
@@ -225,10 +226,10 @@ void grpc_event_engine_init(void) {
|
|
225
226
|
gpr_free(strings);
|
226
227
|
|
227
228
|
if (g_event_engine == nullptr) {
|
228
|
-
gpr_log(GPR_ERROR, "No event engine could be initialized from %s",
|
229
|
+
gpr_log(GPR_ERROR, "No event engine could be initialized from %s",
|
230
|
+
value.get());
|
229
231
|
abort();
|
230
232
|
}
|
231
|
-
gpr_free(s);
|
232
233
|
}
|
233
234
|
|
234
235
|
void grpc_event_engine_shutdown(void) {
|
@@ -399,6 +400,15 @@ void grpc_pollset_set_del_fd(grpc_pollset_set* pollset_set, grpc_fd* fd) {
|
|
399
400
|
g_event_engine->pollset_set_del_fd(pollset_set, fd);
|
400
401
|
}
|
401
402
|
|
403
|
+
bool grpc_is_any_background_poller_thread(void) {
|
404
|
+
return g_event_engine->is_any_background_poller_thread();
|
405
|
+
}
|
406
|
+
|
407
|
+
bool grpc_add_closure_to_background_poller(grpc_closure* closure,
|
408
|
+
grpc_error* error) {
|
409
|
+
return g_event_engine->add_closure_to_background_poller(closure, error);
|
410
|
+
}
|
411
|
+
|
402
412
|
void grpc_shutdown_background_closure(void) {
|
403
413
|
g_event_engine->shutdown_background_closure();
|
404
414
|
}
|