grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -30,25 +30,36 @@
|
|
30
30
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
31
31
|
|
32
32
|
typedef struct grpc_tcp_client_vtable {
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
33
|
+
int64_t (*connect)(grpc_closure* on_connect, grpc_endpoint** endpoint,
|
34
|
+
grpc_pollset_set* interested_parties,
|
35
|
+
const grpc_channel_args* channel_args,
|
36
|
+
const grpc_resolved_address* addr,
|
37
|
+
grpc_core::Timestamp deadline);
|
38
|
+
bool (*cancel_connect)(int64_t connection_handle);
|
38
39
|
} grpc_tcp_client_vtable;
|
39
40
|
|
40
41
|
/* Asynchronously connect to an address (specified as (addr, len)), and call
|
41
42
|
cb with arg and the completed connection when done (or call cb with arg and
|
42
43
|
NULL on failure).
|
43
44
|
interested_parties points to a set of pollsets that would be interested
|
44
|
-
in this connection being established (in order to continue their work)
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
45
|
+
in this connection being established (in order to continue their work). It
|
46
|
+
returns a handle to the connect operation which can be used to cancel the
|
47
|
+
connection attempt. */
|
48
|
+
int64_t grpc_tcp_client_connect(grpc_closure* on_connect,
|
49
|
+
grpc_endpoint** endpoint,
|
50
|
+
grpc_pollset_set* interested_parties,
|
51
|
+
const grpc_channel_args* channel_args,
|
52
|
+
const grpc_resolved_address* addr,
|
53
|
+
grpc_core::Timestamp deadline);
|
54
|
+
|
55
|
+
// Returns true if a connect attempt corresponding to the provided handle
|
56
|
+
// is successfully cancelled. Otherwise it returns false. If the connect
|
57
|
+
// attempt is successfully cancelled, then the on_connect closure passed to
|
58
|
+
// grpc_tcp_client_connect will not be executed. Its upto the caller to free
|
59
|
+
// up any resources that may have been allocated to create the closure.
|
60
|
+
bool grpc_tcp_client_cancel_connect(int64_t connection_handle);
|
61
|
+
|
62
|
+
extern void grpc_tcp_client_global_init();
|
52
63
|
|
53
64
|
void grpc_set_tcp_client_impl(grpc_tcp_client_vtable* impl);
|
54
65
|
|
@@ -116,7 +116,7 @@ static void OnOpen(void* arg, grpc_error_handle error) {
|
|
116
116
|
gpr_mu_unlock(&connect->mu);
|
117
117
|
CFStreamConnectCleanup(connect);
|
118
118
|
} else {
|
119
|
-
if (error
|
119
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
120
120
|
CFErrorRef stream_error = CFReadStreamCopyError(connect->read_stream);
|
121
121
|
if (stream_error == NULL) {
|
122
122
|
stream_error = CFWriteStreamCopyError(connect->write_stream);
|
@@ -125,7 +125,7 @@ static void OnOpen(void* arg, grpc_error_handle error) {
|
|
125
125
|
error = GRPC_ERROR_CREATE_FROM_CFERROR(stream_error, "connect() error");
|
126
126
|
CFRelease(stream_error);
|
127
127
|
}
|
128
|
-
if (error
|
128
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
129
129
|
*endpoint = grpc_cfstream_endpoint_create(
|
130
130
|
connect->read_stream, connect->write_stream,
|
131
131
|
connect->addr_name.c_str(), connect->stream_handle);
|
@@ -149,17 +149,17 @@ static void ParseResolvedAddress(const grpc_resolved_address* addr,
|
|
149
149
|
*port = grpc_sockaddr_get_port(addr);
|
150
150
|
}
|
151
151
|
|
152
|
-
static
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
152
|
+
static int64_t CFStreamClientConnect(grpc_closure* closure, grpc_endpoint** ep,
|
153
|
+
grpc_pollset_set* interested_parties,
|
154
|
+
const grpc_channel_args* channel_args,
|
155
|
+
const grpc_resolved_address* resolved_addr,
|
156
|
+
grpc_core::Timestamp deadline) {
|
157
157
|
auto addr_uri = grpc_sockaddr_to_uri(resolved_addr);
|
158
158
|
if (!addr_uri.ok()) {
|
159
159
|
grpc_error_handle error =
|
160
160
|
GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_uri.status().ToString());
|
161
161
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
|
162
|
-
return;
|
162
|
+
return 0;
|
163
163
|
}
|
164
164
|
|
165
165
|
CFStreamConnect* connect = new CFStreamConnect();
|
@@ -198,8 +198,14 @@ static void CFStreamClientConnect(grpc_closure* closure, grpc_endpoint** ep,
|
|
198
198
|
CFWriteStreamOpen(write_stream);
|
199
199
|
grpc_timer_init(&connect->alarm, deadline, &connect->on_alarm);
|
200
200
|
gpr_mu_unlock(&connect->mu);
|
201
|
+
return 0;
|
201
202
|
}
|
202
203
|
|
203
|
-
|
204
|
+
static bool CFStreamClientCancelConnect(int64_t /*connection_handle*/) {
|
205
|
+
return false;
|
206
|
+
}
|
207
|
+
|
208
|
+
grpc_tcp_client_vtable grpc_cfstream_client_vtable = {
|
209
|
+
CFStreamClientConnect, CFStreamClientCancelConnect};
|
204
210
|
|
205
211
|
#endif /* GRPC_CFSTREAM_CLIENT */
|
@@ -27,6 +27,7 @@
|
|
27
27
|
#include <string.h>
|
28
28
|
#include <unistd.h>
|
29
29
|
|
30
|
+
#include "absl/container/flat_hash_map.h"
|
30
31
|
#include "absl/strings/str_cat.h"
|
31
32
|
|
32
33
|
#include <grpc/support/alloc.h>
|
@@ -62,8 +63,33 @@ struct async_connect {
|
|
62
63
|
grpc_endpoint** ep;
|
63
64
|
grpc_closure* closure;
|
64
65
|
grpc_channel_args* channel_args;
|
66
|
+
int64_t connection_handle;
|
67
|
+
bool connect_cancelled;
|
65
68
|
};
|
66
69
|
|
70
|
+
struct ConnectionShard {
|
71
|
+
grpc_core::Mutex mu;
|
72
|
+
absl::flat_hash_map<int64_t, async_connect*> pending_connections
|
73
|
+
ABSL_GUARDED_BY(&mu);
|
74
|
+
};
|
75
|
+
|
76
|
+
namespace {
|
77
|
+
|
78
|
+
gpr_once g_tcp_client_posix_init = GPR_ONCE_INIT;
|
79
|
+
std::vector<ConnectionShard>* g_connection_shards = nullptr;
|
80
|
+
std::atomic<int64_t> g_connection_id{1};
|
81
|
+
|
82
|
+
void do_tcp_client_global_init(void) {
|
83
|
+
size_t num_shards = std::max(2 * gpr_cpu_num_cores(), 1u);
|
84
|
+
g_connection_shards = new std::vector<struct ConnectionShard>(num_shards);
|
85
|
+
}
|
86
|
+
|
87
|
+
} // namespace
|
88
|
+
|
89
|
+
void grpc_tcp_client_global_init() {
|
90
|
+
gpr_once_init(&g_tcp_client_posix_init, do_tcp_client_global_init);
|
91
|
+
}
|
92
|
+
|
67
93
|
static grpc_error_handle prepare_socket(const grpc_resolved_address* addr,
|
68
94
|
int fd,
|
69
95
|
const grpc_channel_args* channel_args) {
|
@@ -72,24 +98,24 @@ static grpc_error_handle prepare_socket(const grpc_resolved_address* addr,
|
|
72
98
|
GPR_ASSERT(fd >= 0);
|
73
99
|
|
74
100
|
err = grpc_set_socket_nonblocking(fd, 1);
|
75
|
-
if (err
|
101
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
76
102
|
err = grpc_set_socket_cloexec(fd, 1);
|
77
|
-
if (err
|
103
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
78
104
|
if (!grpc_is_unix_socket(addr)) {
|
79
105
|
err = grpc_set_socket_low_latency(fd, 1);
|
80
|
-
if (err
|
106
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
81
107
|
err = grpc_set_socket_reuse_addr(fd, 1);
|
82
|
-
if (err
|
108
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
83
109
|
err = grpc_set_socket_tcp_user_timeout(fd, channel_args,
|
84
110
|
true /* is_client */);
|
85
|
-
if (err
|
111
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
86
112
|
}
|
87
113
|
err = grpc_set_socket_no_sigpipe_if_possible(fd);
|
88
|
-
if (err
|
114
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
89
115
|
|
90
116
|
err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_CLIENT_CONNECTION_USAGE,
|
91
117
|
channel_args);
|
92
|
-
if (err
|
118
|
+
if (!GRPC_ERROR_IS_NONE(err)) goto error;
|
93
119
|
|
94
120
|
goto done;
|
95
121
|
|
@@ -150,17 +176,24 @@ static void on_writable(void* acp, grpc_error_handle error) {
|
|
150
176
|
GPR_ASSERT(ac->fd);
|
151
177
|
fd = ac->fd;
|
152
178
|
ac->fd = nullptr;
|
179
|
+
bool connect_cancelled = ac->connect_cancelled;
|
153
180
|
gpr_mu_unlock(&ac->mu);
|
154
181
|
|
155
182
|
grpc_timer_cancel(&ac->alarm);
|
156
183
|
|
157
184
|
gpr_mu_lock(&ac->mu);
|
158
|
-
if (error
|
185
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
159
186
|
error =
|
160
187
|
grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, "Timeout occurred");
|
161
188
|
goto finish;
|
162
189
|
}
|
163
190
|
|
191
|
+
if (connect_cancelled) {
|
192
|
+
// The callback should not get scheduled in this case.
|
193
|
+
error = GRPC_ERROR_NONE;
|
194
|
+
goto finish;
|
195
|
+
}
|
196
|
+
|
164
197
|
do {
|
165
198
|
so_error_size = sizeof(so_error);
|
166
199
|
err = getsockopt(grpc_fd_wrapped_fd(fd), SOL_SOCKET, SO_ERROR, &so_error,
|
@@ -208,6 +241,14 @@ static void on_writable(void* acp, grpc_error_handle error) {
|
|
208
241
|
}
|
209
242
|
|
210
243
|
finish:
|
244
|
+
if (!connect_cancelled) {
|
245
|
+
int shard_number = ac->connection_handle % (*g_connection_shards).size();
|
246
|
+
struct ConnectionShard* shard = &(*g_connection_shards)[shard_number];
|
247
|
+
{
|
248
|
+
grpc_core::MutexLock lock(&shard->mu);
|
249
|
+
shard->pending_connections.erase(ac->connection_handle);
|
250
|
+
}
|
251
|
+
}
|
211
252
|
if (fd != nullptr) {
|
212
253
|
grpc_pollset_set_del_fd(ac->interested_parties, fd);
|
213
254
|
grpc_fd_orphan(fd, nullptr, nullptr, "tcp_client_orphan");
|
@@ -215,7 +256,7 @@ finish:
|
|
215
256
|
}
|
216
257
|
done = (--ac->refs == 0);
|
217
258
|
gpr_mu_unlock(&ac->mu);
|
218
|
-
if (error
|
259
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
219
260
|
std::string str;
|
220
261
|
bool ret = grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &str);
|
221
262
|
GPR_ASSERT(ret);
|
@@ -234,7 +275,12 @@ finish:
|
|
234
275
|
// Push async connect closure to the executor since this may actually be
|
235
276
|
// called during the shutdown process, in which case a deadlock could form
|
236
277
|
// between the core shutdown mu and the connector mu (b/188239051)
|
237
|
-
|
278
|
+
if (!connect_cancelled) {
|
279
|
+
grpc_core::Executor::Run(closure, error);
|
280
|
+
} else if (!GRPC_ERROR_IS_NONE(error)) {
|
281
|
+
// Unref the error here because it is not used.
|
282
|
+
(void)GRPC_ERROR_UNREF(error);
|
283
|
+
}
|
238
284
|
}
|
239
285
|
|
240
286
|
grpc_error_handle grpc_tcp_client_prepare_fd(
|
@@ -251,7 +297,7 @@ grpc_error_handle grpc_tcp_client_prepare_fd(
|
|
251
297
|
}
|
252
298
|
error =
|
253
299
|
grpc_create_dualstack_socket(mapped_addr, SOCK_STREAM, 0, &dsmode, fd);
|
254
|
-
if (error
|
300
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
255
301
|
return error;
|
256
302
|
}
|
257
303
|
if (dsmode == GRPC_DSMODE_IPV4) {
|
@@ -267,7 +313,7 @@ grpc_error_handle grpc_tcp_client_prepare_fd(
|
|
267
313
|
return GRPC_ERROR_NONE;
|
268
314
|
}
|
269
315
|
|
270
|
-
|
316
|
+
int64_t grpc_tcp_client_create_from_prepared_fd(
|
271
317
|
grpc_pollset_set* interested_parties, grpc_closure* closure, const int fd,
|
272
318
|
const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
|
273
319
|
grpc_core::Timestamp deadline, grpc_endpoint** ep) {
|
@@ -282,24 +328,33 @@ void grpc_tcp_client_create_from_prepared_fd(
|
|
282
328
|
grpc_error_handle error =
|
283
329
|
GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_uri.status().ToString());
|
284
330
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
|
285
|
-
return;
|
331
|
+
return 0;
|
286
332
|
}
|
287
333
|
|
288
334
|
std::string name = absl::StrCat("tcp-client:", addr_uri.value());
|
289
335
|
grpc_fd* fdobj = grpc_fd_create(fd, name.c_str(), true);
|
336
|
+
int64_t connection_id = 0;
|
337
|
+
if (errno == EWOULDBLOCK || errno == EINPROGRESS) {
|
338
|
+
// Connection is still in progress.
|
339
|
+
connection_id = g_connection_id.fetch_add(1, std::memory_order_acq_rel);
|
340
|
+
}
|
290
341
|
|
291
342
|
if (err >= 0) {
|
343
|
+
// Connection already succeded. Return 0 to discourage any cancellation
|
344
|
+
// attempts.
|
292
345
|
*ep = grpc_tcp_client_create_from_fd(fdobj, channel_args, addr_uri.value());
|
293
346
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
|
294
|
-
return;
|
347
|
+
return 0;
|
295
348
|
}
|
296
349
|
if (errno != EWOULDBLOCK && errno != EINPROGRESS) {
|
350
|
+
// Connection already failed. Return 0 to discourage any cancellation
|
351
|
+
// attempts.
|
297
352
|
grpc_error_handle error = GRPC_OS_ERROR(errno, "connect");
|
298
353
|
error = grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
|
299
354
|
addr_uri.value());
|
300
355
|
grpc_fd_orphan(fdobj, nullptr, nullptr, "tcp_client_connect_error");
|
301
356
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
|
302
|
-
return;
|
357
|
+
return 0;
|
303
358
|
}
|
304
359
|
|
305
360
|
grpc_pollset_set_add_fd(interested_parties, fdobj);
|
@@ -310,6 +365,8 @@ void grpc_tcp_client_create_from_prepared_fd(
|
|
310
365
|
ac->fd = fdobj;
|
311
366
|
ac->interested_parties = interested_parties;
|
312
367
|
ac->addr_str = addr_uri.value();
|
368
|
+
ac->connection_handle = connection_id;
|
369
|
+
ac->connect_cancelled = false;
|
313
370
|
gpr_mu_init(&ac->mu);
|
314
371
|
ac->refs = 2;
|
315
372
|
GRPC_CLOSURE_INIT(&ac->write_closure, on_writable, ac,
|
@@ -321,18 +378,26 @@ void grpc_tcp_client_create_from_prepared_fd(
|
|
321
378
|
ac->addr_str.c_str(), fdobj);
|
322
379
|
}
|
323
380
|
|
381
|
+
int shard_number = connection_id % (*g_connection_shards).size();
|
382
|
+
struct ConnectionShard* shard = &(*g_connection_shards)[shard_number];
|
383
|
+
{
|
384
|
+
grpc_core::MutexLock lock(&shard->mu);
|
385
|
+
shard->pending_connections.insert_or_assign(connection_id, ac);
|
386
|
+
}
|
387
|
+
|
324
388
|
gpr_mu_lock(&ac->mu);
|
325
389
|
GRPC_CLOSURE_INIT(&ac->on_alarm, tc_on_alarm, ac, grpc_schedule_on_exec_ctx);
|
326
390
|
grpc_timer_init(&ac->alarm, deadline, &ac->on_alarm);
|
327
391
|
grpc_fd_notify_on_write(ac->fd, &ac->write_closure);
|
328
392
|
gpr_mu_unlock(&ac->mu);
|
393
|
+
return connection_id;
|
329
394
|
}
|
330
395
|
|
331
|
-
static
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
396
|
+
static int64_t tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
|
397
|
+
grpc_pollset_set* interested_parties,
|
398
|
+
const grpc_channel_args* channel_args,
|
399
|
+
const grpc_resolved_address* addr,
|
400
|
+
grpc_core::Timestamp deadline) {
|
336
401
|
grpc_resolved_address mapped_addr;
|
337
402
|
int fd = -1;
|
338
403
|
grpc_error_handle error;
|
@@ -340,12 +405,65 @@ static void tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
|
|
340
405
|
if ((error = grpc_tcp_client_prepare_fd(channel_args, addr, &mapped_addr,
|
341
406
|
&fd)) != GRPC_ERROR_NONE) {
|
342
407
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
|
343
|
-
return;
|
408
|
+
return 0;
|
409
|
+
}
|
410
|
+
return grpc_tcp_client_create_from_prepared_fd(interested_parties, closure,
|
411
|
+
fd, channel_args, &mapped_addr,
|
412
|
+
deadline, ep);
|
413
|
+
}
|
414
|
+
|
415
|
+
static bool tcp_cancel_connect(int64_t connection_handle) {
|
416
|
+
if (connection_handle <= 0) {
|
417
|
+
return false;
|
418
|
+
}
|
419
|
+
int shard_number = connection_handle % (*g_connection_shards).size();
|
420
|
+
struct ConnectionShard* shard = &(*g_connection_shards)[shard_number];
|
421
|
+
async_connect* ac = nullptr;
|
422
|
+
{
|
423
|
+
grpc_core::MutexLock lock(&shard->mu);
|
424
|
+
auto it = shard->pending_connections.find(connection_handle);
|
425
|
+
if (it != shard->pending_connections.end()) {
|
426
|
+
ac = it->second;
|
427
|
+
GPR_ASSERT(ac != nullptr);
|
428
|
+
// Trying to acquire ac->mu here would could cause a deadlock because
|
429
|
+
// the on_writable method tries to acquire the two mutexes used
|
430
|
+
// here in the reverse order. But we dont need to acquire ac->mu before
|
431
|
+
// incrementing ac->refs here. This is because the on_writable
|
432
|
+
// method decrements ac->refs only after deleting the connection handle
|
433
|
+
// from the corresponding hashmap. If the code enters here, it means that
|
434
|
+
// deletion hasn't happened yet. The deletion can only happen after the
|
435
|
+
// corresponding g_shard_mu is unlocked.
|
436
|
+
++ac->refs;
|
437
|
+
// Remove connection from list of active connections.
|
438
|
+
shard->pending_connections.erase(it);
|
439
|
+
}
|
440
|
+
}
|
441
|
+
if (ac == nullptr) {
|
442
|
+
return false;
|
443
|
+
}
|
444
|
+
gpr_mu_lock(&ac->mu);
|
445
|
+
bool connection_cancel_success = (ac->fd != nullptr);
|
446
|
+
if (connection_cancel_success) {
|
447
|
+
// Connection is still pending. The on_writable callback hasn't executed
|
448
|
+
// yet because ac->fd != nullptr.
|
449
|
+
ac->connect_cancelled = true;
|
450
|
+
// Shutdown the fd. This would cause on_writable to run as soon as possible.
|
451
|
+
// We dont need to pass a custom error here because it wont be used since
|
452
|
+
// the on_connect_closure is not run if connect cancellation is successfull.
|
453
|
+
grpc_fd_shutdown(ac->fd, GRPC_ERROR_NONE);
|
454
|
+
}
|
455
|
+
bool done = (--ac->refs == 0);
|
456
|
+
gpr_mu_unlock(&ac->mu);
|
457
|
+
if (done) {
|
458
|
+
// This is safe even outside the lock, because "done", the sentinel, is
|
459
|
+
// populated *inside* the lock.
|
460
|
+
gpr_mu_destroy(&ac->mu);
|
461
|
+
grpc_channel_args_destroy(ac->channel_args);
|
462
|
+
delete ac;
|
344
463
|
}
|
345
|
-
|
346
|
-
channel_args, &mapped_addr, deadline,
|
347
|
-
ep);
|
464
|
+
return connection_cancel_success;
|
348
465
|
}
|
349
466
|
|
350
|
-
grpc_tcp_client_vtable grpc_posix_tcp_client_vtable = {tcp_connect
|
467
|
+
grpc_tcp_client_vtable grpc_posix_tcp_client_vtable = {tcp_connect,
|
468
|
+
tcp_cancel_connect};
|
351
469
|
#endif
|
@@ -61,7 +61,7 @@ grpc_error_handle grpc_tcp_client_prepare_fd(
|
|
61
61
|
deadline: connection deadline
|
62
62
|
ep: out parameter. Set before closure is called if successful
|
63
63
|
*/
|
64
|
-
|
64
|
+
int64_t grpc_tcp_client_create_from_prepared_fd(
|
65
65
|
grpc_pollset_set* interested_parties, grpc_closure* closure, const int fd,
|
66
66
|
const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
|
67
67
|
grpc_core::Timestamp deadline, grpc_endpoint** ep);
|
@@ -93,7 +93,7 @@ static void on_connect(void* acp, grpc_error_handle error) {
|
|
93
93
|
|
94
94
|
gpr_mu_lock(&ac->mu);
|
95
95
|
|
96
|
-
if (error
|
96
|
+
if (GRPC_ERROR_IS_NONE(error)) {
|
97
97
|
if (socket != NULL) {
|
98
98
|
DWORD transfered_bytes = 0;
|
99
99
|
DWORD flags;
|
@@ -121,11 +121,11 @@ static void on_connect(void* acp, grpc_error_handle error) {
|
|
121
121
|
|
122
122
|
/* Tries to issue one async connection, then schedules both an IOCP
|
123
123
|
notification request for the connection, and one timeout alert. */
|
124
|
-
static
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
124
|
+
static int64_t tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
|
125
|
+
grpc_pollset_set* interested_parties,
|
126
|
+
const grpc_channel_args* channel_args,
|
127
|
+
const grpc_resolved_address* addr,
|
128
|
+
grpc_core::Timestamp deadline) {
|
129
129
|
SOCKET sock = INVALID_SOCKET;
|
130
130
|
BOOL success;
|
131
131
|
int status;
|
@@ -161,7 +161,7 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
|
|
161
161
|
}
|
162
162
|
|
163
163
|
error = grpc_tcp_prepare_socket(sock);
|
164
|
-
if (error
|
164
|
+
if (!GRPC_ERROR_IS_NONE(error)) {
|
165
165
|
goto failure;
|
166
166
|
}
|
167
167
|
|
@@ -216,10 +216,10 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
|
|
216
216
|
grpc_timer_init(&ac->alarm, deadline, &ac->on_alarm);
|
217
217
|
grpc_socket_notify_on_write(socket, &ac->on_connect);
|
218
218
|
gpr_mu_unlock(&ac->mu);
|
219
|
-
return;
|
219
|
+
return 0;
|
220
220
|
|
221
221
|
failure:
|
222
|
-
GPR_ASSERT(error
|
222
|
+
GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
|
223
223
|
grpc_error_handle final_error = grpc_error_set_str(
|
224
224
|
GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Failed to connect",
|
225
225
|
&error, 1),
|
@@ -232,8 +232,12 @@ failure:
|
|
232
232
|
closesocket(sock);
|
233
233
|
}
|
234
234
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, final_error);
|
235
|
+
return 0;
|
235
236
|
}
|
236
237
|
|
237
|
-
|
238
|
+
static bool tcp_cancel_connect(int64_t /*connection_handle*/) { return false; }
|
239
|
+
|
240
|
+
grpc_tcp_client_vtable grpc_windows_tcp_client_vtable = {tcp_connect,
|
241
|
+
tcp_cancel_connect};
|
238
242
|
|
239
243
|
#endif /* GRPC_WINSOCK_SOCKET */
|