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
@@ -0,0 +1,203 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2018 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/gprpp/memory.h"
|
22
|
+
#include "src/core/lib/iomgr/port.h"
|
23
|
+
|
24
|
+
#ifdef GRPC_CFSTREAM
|
25
|
+
#import <CoreFoundation/CoreFoundation.h>
|
26
|
+
#import "src/core/lib/iomgr/cfstream_handle.h"
|
27
|
+
|
28
|
+
#include <grpc/support/atm.h>
|
29
|
+
#include <grpc/support/sync.h>
|
30
|
+
|
31
|
+
#include "src/core/lib/debug/trace.h"
|
32
|
+
#include "src/core/lib/iomgr/closure.h"
|
33
|
+
#include "src/core/lib/iomgr/error_cfstream.h"
|
34
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
35
|
+
|
36
|
+
extern grpc_core::TraceFlag grpc_tcp_trace;
|
37
|
+
|
38
|
+
void* CFStreamHandle::Retain(void* info) {
|
39
|
+
CFStreamHandle* handle = static_cast<CFStreamHandle*>(info);
|
40
|
+
CFSTREAM_HANDLE_REF(handle, "retain");
|
41
|
+
return info;
|
42
|
+
}
|
43
|
+
|
44
|
+
void CFStreamHandle::Release(void* info) {
|
45
|
+
CFStreamHandle* handle = static_cast<CFStreamHandle*>(info);
|
46
|
+
CFSTREAM_HANDLE_UNREF(handle, "release");
|
47
|
+
}
|
48
|
+
|
49
|
+
CFStreamHandle* CFStreamHandle::CreateStreamHandle(
|
50
|
+
CFReadStreamRef read_stream, CFWriteStreamRef write_stream) {
|
51
|
+
return grpc_core::New<CFStreamHandle>(read_stream, write_stream);
|
52
|
+
}
|
53
|
+
|
54
|
+
void CFStreamHandle::ReadCallback(CFReadStreamRef stream,
|
55
|
+
CFStreamEventType type,
|
56
|
+
void* client_callback_info) {
|
57
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
58
|
+
grpc_core::ExecCtx exec_ctx;
|
59
|
+
grpc_error* error;
|
60
|
+
CFErrorRef stream_error;
|
61
|
+
CFStreamHandle* handle = static_cast<CFStreamHandle*>(client_callback_info);
|
62
|
+
if (grpc_tcp_trace.enabled()) {
|
63
|
+
gpr_log(GPR_DEBUG, "CFStream ReadCallback (%p, %p, %lu, %p)", handle,
|
64
|
+
stream, type, client_callback_info);
|
65
|
+
}
|
66
|
+
switch (type) {
|
67
|
+
case kCFStreamEventOpenCompleted:
|
68
|
+
handle->open_event_.SetReady();
|
69
|
+
break;
|
70
|
+
case kCFStreamEventHasBytesAvailable:
|
71
|
+
case kCFStreamEventEndEncountered:
|
72
|
+
handle->read_event_.SetReady();
|
73
|
+
break;
|
74
|
+
case kCFStreamEventErrorOccurred:
|
75
|
+
stream_error = CFReadStreamCopyError(stream);
|
76
|
+
error = grpc_error_set_int(
|
77
|
+
GRPC_ERROR_CREATE_FROM_CFERROR(stream_error, "read error"),
|
78
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
79
|
+
CFRelease(stream_error);
|
80
|
+
handle->open_event_.SetShutdown(GRPC_ERROR_REF(error));
|
81
|
+
handle->write_event_.SetShutdown(GRPC_ERROR_REF(error));
|
82
|
+
handle->read_event_.SetShutdown(GRPC_ERROR_REF(error));
|
83
|
+
GRPC_ERROR_UNREF(error);
|
84
|
+
break;
|
85
|
+
default:
|
86
|
+
GPR_UNREACHABLE_CODE(return );
|
87
|
+
}
|
88
|
+
}
|
89
|
+
void CFStreamHandle::WriteCallback(CFWriteStreamRef stream,
|
90
|
+
CFStreamEventType type,
|
91
|
+
void* clientCallBackInfo) {
|
92
|
+
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
93
|
+
grpc_core::ExecCtx exec_ctx;
|
94
|
+
grpc_error* error;
|
95
|
+
CFErrorRef stream_error;
|
96
|
+
CFStreamHandle* handle = static_cast<CFStreamHandle*>(clientCallBackInfo);
|
97
|
+
if (grpc_tcp_trace.enabled()) {
|
98
|
+
gpr_log(GPR_DEBUG, "CFStream WriteCallback (%p, %p, %lu, %p)", handle,
|
99
|
+
stream, type, clientCallBackInfo);
|
100
|
+
}
|
101
|
+
switch (type) {
|
102
|
+
case kCFStreamEventOpenCompleted:
|
103
|
+
handle->open_event_.SetReady();
|
104
|
+
break;
|
105
|
+
case kCFStreamEventCanAcceptBytes:
|
106
|
+
case kCFStreamEventEndEncountered:
|
107
|
+
handle->write_event_.SetReady();
|
108
|
+
break;
|
109
|
+
case kCFStreamEventErrorOccurred:
|
110
|
+
stream_error = CFWriteStreamCopyError(stream);
|
111
|
+
error = grpc_error_set_int(
|
112
|
+
GRPC_ERROR_CREATE_FROM_CFERROR(stream_error, "write error"),
|
113
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
114
|
+
CFRelease(stream_error);
|
115
|
+
handle->open_event_.SetShutdown(GRPC_ERROR_REF(error));
|
116
|
+
handle->write_event_.SetShutdown(GRPC_ERROR_REF(error));
|
117
|
+
handle->read_event_.SetShutdown(GRPC_ERROR_REF(error));
|
118
|
+
GRPC_ERROR_UNREF(error);
|
119
|
+
break;
|
120
|
+
default:
|
121
|
+
GPR_UNREACHABLE_CODE(return );
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
CFStreamHandle::CFStreamHandle(CFReadStreamRef read_stream,
|
126
|
+
CFWriteStreamRef write_stream) {
|
127
|
+
gpr_ref_init(&refcount_, 1);
|
128
|
+
open_event_.InitEvent();
|
129
|
+
read_event_.InitEvent();
|
130
|
+
write_event_.InitEvent();
|
131
|
+
dispatch_queue_ = dispatch_queue_create(nullptr, DISPATCH_QUEUE_SERIAL);
|
132
|
+
CFStreamClientContext ctx = {0, static_cast<void*>(this),
|
133
|
+
CFStreamHandle::Retain, CFStreamHandle::Release,
|
134
|
+
nil};
|
135
|
+
CFReadStreamSetClient(
|
136
|
+
read_stream,
|
137
|
+
kCFStreamEventOpenCompleted | kCFStreamEventHasBytesAvailable |
|
138
|
+
kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
|
139
|
+
CFStreamHandle::ReadCallback, &ctx);
|
140
|
+
CFWriteStreamSetClient(
|
141
|
+
write_stream,
|
142
|
+
kCFStreamEventOpenCompleted | kCFStreamEventCanAcceptBytes |
|
143
|
+
kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered,
|
144
|
+
CFStreamHandle::WriteCallback, &ctx);
|
145
|
+
CFReadStreamSetDispatchQueue(read_stream, dispatch_queue_);
|
146
|
+
CFWriteStreamSetDispatchQueue(write_stream, dispatch_queue_);
|
147
|
+
}
|
148
|
+
|
149
|
+
CFStreamHandle::~CFStreamHandle() {
|
150
|
+
open_event_.DestroyEvent();
|
151
|
+
read_event_.DestroyEvent();
|
152
|
+
write_event_.DestroyEvent();
|
153
|
+
}
|
154
|
+
|
155
|
+
void CFStreamHandle::NotifyOnOpen(grpc_closure* closure) {
|
156
|
+
open_event_.NotifyOn(closure);
|
157
|
+
}
|
158
|
+
|
159
|
+
void CFStreamHandle::NotifyOnRead(grpc_closure* closure) {
|
160
|
+
read_event_.NotifyOn(closure);
|
161
|
+
}
|
162
|
+
|
163
|
+
void CFStreamHandle::NotifyOnWrite(grpc_closure* closure) {
|
164
|
+
write_event_.NotifyOn(closure);
|
165
|
+
}
|
166
|
+
|
167
|
+
void CFStreamHandle::Shutdown(grpc_error* error) {
|
168
|
+
open_event_.SetShutdown(GRPC_ERROR_REF(error));
|
169
|
+
read_event_.SetShutdown(GRPC_ERROR_REF(error));
|
170
|
+
write_event_.SetShutdown(GRPC_ERROR_REF(error));
|
171
|
+
GRPC_ERROR_UNREF(error);
|
172
|
+
}
|
173
|
+
|
174
|
+
void CFStreamHandle::Ref(const char* file, int line, const char* reason) {
|
175
|
+
if (grpc_tcp_trace.enabled()) {
|
176
|
+
gpr_atm val = gpr_atm_no_barrier_load(&refcount_.count);
|
177
|
+
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
178
|
+
"CFStream Handle ref %p : %s %" PRIdPTR " -> %" PRIdPTR, this,
|
179
|
+
reason, val, val + 1);
|
180
|
+
}
|
181
|
+
gpr_ref(&refcount_);
|
182
|
+
}
|
183
|
+
|
184
|
+
void CFStreamHandle::Unref(const char* file, int line, const char* reason) {
|
185
|
+
if (grpc_tcp_trace.enabled()) {
|
186
|
+
gpr_atm val = gpr_atm_no_barrier_load(&refcount_.count);
|
187
|
+
gpr_log(GPR_ERROR,
|
188
|
+
"CFStream Handle unref %p : %s %" PRIdPTR " -> %" PRIdPTR, this,
|
189
|
+
reason, val, val - 1);
|
190
|
+
}
|
191
|
+
if (gpr_unref(&refcount_)) {
|
192
|
+
grpc_core::Delete<CFStreamHandle>(this);
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
#else
|
197
|
+
|
198
|
+
/* Creating a dummy function so that the grpc_cfstream library will be
|
199
|
+
* non-empty.
|
200
|
+
*/
|
201
|
+
void CFStreamDummy() {}
|
202
|
+
|
203
|
+
#endif
|
@@ -0,0 +1,86 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2018 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
/* The CFStream handle acts as an event synchronization entity for
|
20
|
+
* read/write/open/error/eos events happening on CFStream streams. */
|
21
|
+
|
22
|
+
#ifndef GRPC_CORE_LIB_IOMGR_CFSTREAM_HANDLE_H
|
23
|
+
#define GRPC_CORE_LIB_IOMGR_CFSTREAM_HANDLE_H
|
24
|
+
|
25
|
+
#include <grpc/support/port_platform.h>
|
26
|
+
|
27
|
+
#include "src/core/lib/iomgr/port.h"
|
28
|
+
|
29
|
+
#ifdef GRPC_CFSTREAM
|
30
|
+
#import <CoreFoundation/CoreFoundation.h>
|
31
|
+
|
32
|
+
#include "src/core/lib/gprpp/memory.h"
|
33
|
+
#include "src/core/lib/iomgr/closure.h"
|
34
|
+
#include "src/core/lib/iomgr/lockfree_event.h"
|
35
|
+
|
36
|
+
class CFStreamHandle final {
|
37
|
+
public:
|
38
|
+
static CFStreamHandle* CreateStreamHandle(CFReadStreamRef read_stream,
|
39
|
+
CFWriteStreamRef write_stream);
|
40
|
+
~CFStreamHandle();
|
41
|
+
CFStreamHandle(const CFStreamHandle& ref) = delete;
|
42
|
+
CFStreamHandle(CFStreamHandle&& ref) = delete;
|
43
|
+
CFStreamHandle& operator=(const CFStreamHandle& rhs) = delete;
|
44
|
+
|
45
|
+
void NotifyOnOpen(grpc_closure* closure);
|
46
|
+
void NotifyOnRead(grpc_closure* closure);
|
47
|
+
void NotifyOnWrite(grpc_closure* closure);
|
48
|
+
void Shutdown(grpc_error* error);
|
49
|
+
|
50
|
+
void Ref(const char* file = "", int line = 0, const char* reason = nullptr);
|
51
|
+
void Unref(const char* file = "", int line = 0, const char* reason = nullptr);
|
52
|
+
|
53
|
+
private:
|
54
|
+
CFStreamHandle(CFReadStreamRef read_stream, CFWriteStreamRef write_stream);
|
55
|
+
static void ReadCallback(CFReadStreamRef stream, CFStreamEventType type,
|
56
|
+
void* client_callback_info);
|
57
|
+
static void WriteCallback(CFWriteStreamRef stream, CFStreamEventType type,
|
58
|
+
void* client_callback_info);
|
59
|
+
static void* Retain(void* info);
|
60
|
+
static void Release(void* info);
|
61
|
+
|
62
|
+
grpc_core::LockfreeEvent open_event_;
|
63
|
+
grpc_core::LockfreeEvent read_event_;
|
64
|
+
grpc_core::LockfreeEvent write_event_;
|
65
|
+
|
66
|
+
dispatch_queue_t dispatch_queue_;
|
67
|
+
|
68
|
+
gpr_refcount refcount_;
|
69
|
+
|
70
|
+
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW
|
71
|
+
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
72
|
+
};
|
73
|
+
|
74
|
+
#ifdef DEBUG
|
75
|
+
#define CFSTREAM_HANDLE_REF(handle, reason) \
|
76
|
+
(handle)->Ref(__FILE__, __LINE__, (reason))
|
77
|
+
#define CFSTREAM_HANDLE_UNREF(handle, reason) \
|
78
|
+
(handle)->Unref(__FILE__, __LINE__, (reason))
|
79
|
+
#else
|
80
|
+
#define CFSTREAM_HANDLE_REF(handle, reason) (handle)->Ref()
|
81
|
+
#define CFSTREAM_HANDLE_UNREF(handle, reason) (handle)->Unref()
|
82
|
+
#endif
|
83
|
+
|
84
|
+
#endif
|
85
|
+
|
86
|
+
#endif /* GRPC_CORE_LIB_IOMGR_CFSTREAM_HANDLE_H */
|
@@ -29,6 +29,7 @@
|
|
29
29
|
|
30
30
|
#include "src/core/lib/debug/stats.h"
|
31
31
|
#include "src/core/lib/iomgr/executor.h"
|
32
|
+
#include "src/core/lib/iomgr/iomgr.h"
|
32
33
|
#include "src/core/lib/profiling/timers.h"
|
33
34
|
|
34
35
|
grpc_core::DebugOnlyTraceFlag grpc_combiner_trace(false, "combiner");
|
@@ -82,8 +83,9 @@ grpc_combiner* grpc_combiner_create(void) {
|
|
82
83
|
gpr_atm_no_barrier_store(&lock->state, STATE_UNORPHANED);
|
83
84
|
gpr_mpscq_init(&lock->queue);
|
84
85
|
grpc_closure_list_init(&lock->final_list);
|
85
|
-
GRPC_CLOSURE_INIT(
|
86
|
-
|
86
|
+
GRPC_CLOSURE_INIT(
|
87
|
+
&lock->offload, offload, lock,
|
88
|
+
grpc_core::Executor::Scheduler(grpc_core::ExecutorJobType::SHORT));
|
87
89
|
GRPC_COMBINER_TRACE(gpr_log(GPR_INFO, "C:%p create", lock));
|
88
90
|
return lock;
|
89
91
|
}
|
@@ -228,8 +230,14 @@ bool grpc_combiner_continue_exec_ctx() {
|
|
228
230
|
grpc_core::ExecCtx::Get()->IsReadyToFinish(),
|
229
231
|
lock->time_to_execute_final_list));
|
230
232
|
|
233
|
+
// offload only if all the following conditions are true:
|
234
|
+
// 1. the combiner is contended and has more than one closure to execute
|
235
|
+
// 2. the current execution context needs to finish as soon as possible
|
236
|
+
// 3. the DEFAULT executor is threaded
|
237
|
+
// 4. the current thread is not a worker for any background poller
|
231
238
|
if (contended && grpc_core::ExecCtx::Get()->IsReadyToFinish() &&
|
232
|
-
|
239
|
+
grpc_core::Executor::IsThreadedDefault() &&
|
240
|
+
!grpc_iomgr_is_any_background_poller_thread()) {
|
233
241
|
GPR_TIMER_MARK("offload_from_finished_exec_ctx", 0);
|
234
242
|
// this execution context wants to move on: schedule remaining work to be
|
235
243
|
// picked up on the executor
|
@@ -31,7 +31,7 @@
|
|
31
31
|
// Provides serialized access to some resource.
|
32
32
|
// Each action queued on a combiner is executed serially in a borrowed thread.
|
33
33
|
// The actual thread executing actions may change over time (but there will only
|
34
|
-
//
|
34
|
+
// ever be one at a time).
|
35
35
|
|
36
36
|
// Initialize the lock, with an optional workqueue to shift load to when
|
37
37
|
// necessary
|
@@ -23,8 +23,8 @@
|
|
23
23
|
grpc_core::TraceFlag grpc_tcp_trace(false, "tcp");
|
24
24
|
|
25
25
|
void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
26
|
-
grpc_closure* cb) {
|
27
|
-
ep->vtable->read(ep, slices, cb);
|
26
|
+
grpc_closure* cb, bool urgent) {
|
27
|
+
ep->vtable->read(ep, slices, cb, urgent);
|
28
28
|
}
|
29
29
|
|
30
30
|
void grpc_endpoint_write(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
@@ -36,7 +36,8 @@ typedef struct grpc_endpoint_vtable grpc_endpoint_vtable;
|
|
36
36
|
class Timestamps;
|
37
37
|
|
38
38
|
struct grpc_endpoint_vtable {
|
39
|
-
void (*read)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb
|
39
|
+
void (*read)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
|
40
|
+
bool urgent);
|
40
41
|
void (*write)(grpc_endpoint* ep, grpc_slice_buffer* slices, grpc_closure* cb,
|
41
42
|
void* arg);
|
42
43
|
void (*add_to_pollset)(grpc_endpoint* ep, grpc_pollset* pollset);
|
@@ -56,7 +57,7 @@ struct grpc_endpoint_vtable {
|
|
56
57
|
Valid slices may be placed into \a slices even when the callback is
|
57
58
|
invoked with error != GRPC_ERROR_NONE. */
|
58
59
|
void grpc_endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* slices,
|
59
|
-
grpc_closure* cb);
|
60
|
+
grpc_closure* cb, bool urgent);
|
60
61
|
|
61
62
|
char* grpc_endpoint_get_peer(grpc_endpoint* ep);
|
62
63
|
|