grpc 1.46.3 → 1.47.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 +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -17,16 +17,23 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
+
#include <string.h>
|
21
|
+
|
20
22
|
#include <cstdint>
|
23
|
+
#include <string>
|
21
24
|
#include <type_traits>
|
25
|
+
#include <utility>
|
22
26
|
|
27
|
+
#include "absl/functional/function_ref.h"
|
23
28
|
#include "absl/meta/type_traits.h"
|
24
29
|
#include "absl/strings/match.h"
|
30
|
+
#include "absl/strings/str_cat.h"
|
31
|
+
#include "absl/strings/string_view.h"
|
32
|
+
|
33
|
+
#include <grpc/slice.h>
|
25
34
|
|
26
35
|
#include "src/core/lib/gprpp/time.h"
|
27
|
-
#include "src/core/lib/iomgr/error.h"
|
28
36
|
#include "src/core/lib/slice/slice.h"
|
29
|
-
#include "src/core/lib/surface/validate_metadata.h"
|
30
37
|
|
31
38
|
namespace grpc_core {
|
32
39
|
|
@@ -371,7 +378,7 @@ ParsedMetadata<MetadataContainer>::KeyValueVTable(absl::string_view key) {
|
|
371
378
|
};
|
372
379
|
static const auto set = [](const Buffer& value, MetadataContainer* map) {
|
373
380
|
auto* p = static_cast<KV*>(value.pointer);
|
374
|
-
map->
|
381
|
+
map->unknown_.Append(p->first.as_string_view(), p->second.Ref());
|
375
382
|
};
|
376
383
|
static const auto with_new_value = [](Slice* value, MetadataParseErrorFn,
|
377
384
|
ParsedMetadata* result) {
|
@@ -21,9 +21,9 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <grpc/
|
24
|
+
#include <grpc/status.h>
|
25
25
|
|
26
|
-
#include "src/core/lib/
|
26
|
+
#include "src/core/lib/gprpp/time.h"
|
27
27
|
#include "src/core/lib/transport/http2_errors.h"
|
28
28
|
|
29
29
|
/* Conversion of grpc status codes to http2 error codes (for RST_STREAM) */
|
@@ -0,0 +1,253 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2022 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/transport/tcp_connect_handshaker.h"
|
22
|
+
|
23
|
+
#include <memory>
|
24
|
+
|
25
|
+
#include "absl/base/thread_annotations.h"
|
26
|
+
#include "absl/memory/memory.h"
|
27
|
+
#include "absl/status/statusor.h"
|
28
|
+
|
29
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
30
|
+
#include <grpc/slice.h>
|
31
|
+
#include <grpc/support/alloc.h>
|
32
|
+
#include <grpc/support/log.h>
|
33
|
+
|
34
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
35
|
+
#include "src/core/lib/channel/channel_args.h"
|
36
|
+
#include "src/core/lib/config/core_configuration.h"
|
37
|
+
#include "src/core/lib/gpr/useful.h"
|
38
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
39
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
40
|
+
#include "src/core/lib/gprpp/sync.h"
|
41
|
+
#include "src/core/lib/iomgr/closure.h"
|
42
|
+
#include "src/core/lib/iomgr/endpoint.h"
|
43
|
+
#include "src/core/lib/iomgr/error.h"
|
44
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
45
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
46
|
+
#include "src/core/lib/iomgr/polling_entity.h"
|
47
|
+
#include "src/core/lib/iomgr/pollset_set.h"
|
48
|
+
#include "src/core/lib/iomgr/resolved_address.h"
|
49
|
+
#include "src/core/lib/iomgr/tcp_client.h"
|
50
|
+
#include "src/core/lib/iomgr/tcp_server.h"
|
51
|
+
#include "src/core/lib/slice/slice_internal.h"
|
52
|
+
#include "src/core/lib/transport/handshaker.h"
|
53
|
+
#include "src/core/lib/transport/handshaker_factory.h"
|
54
|
+
#include "src/core/lib/transport/handshaker_registry.h"
|
55
|
+
#include "src/core/lib/uri/uri_parser.h"
|
56
|
+
|
57
|
+
namespace grpc_core {
|
58
|
+
|
59
|
+
namespace {
|
60
|
+
|
61
|
+
class TCPConnectHandshaker : public Handshaker {
|
62
|
+
public:
|
63
|
+
explicit TCPConnectHandshaker(grpc_pollset_set* pollset_set);
|
64
|
+
void Shutdown(grpc_error_handle why) override;
|
65
|
+
void DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
|
66
|
+
grpc_closure* on_handshake_done,
|
67
|
+
HandshakerArgs* args) override;
|
68
|
+
const char* name() const override { return "tcp_connect"; }
|
69
|
+
|
70
|
+
private:
|
71
|
+
~TCPConnectHandshaker() override;
|
72
|
+
void CleanupArgsForFailureLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
73
|
+
void FinishLocked(grpc_error_handle error) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
74
|
+
static void Connected(void* arg, grpc_error_handle error);
|
75
|
+
|
76
|
+
Mutex mu_;
|
77
|
+
bool shutdown_ ABSL_GUARDED_BY(mu_) = false;
|
78
|
+
// Endpoint and read buffer to destroy after a shutdown.
|
79
|
+
grpc_endpoint* endpoint_to_destroy_ ABSL_GUARDED_BY(mu_) = nullptr;
|
80
|
+
grpc_slice_buffer* read_buffer_to_destroy_ ABSL_GUARDED_BY(mu_) = nullptr;
|
81
|
+
grpc_closure* on_handshake_done_ ABSL_GUARDED_BY(mu_) = nullptr;
|
82
|
+
grpc_pollset_set* interested_parties_ = nullptr;
|
83
|
+
grpc_polling_entity pollent_;
|
84
|
+
HandshakerArgs* args_ = nullptr;
|
85
|
+
bool bind_endpoint_to_pollset_ = false;
|
86
|
+
grpc_resolved_address addr_;
|
87
|
+
grpc_closure connected_;
|
88
|
+
};
|
89
|
+
|
90
|
+
TCPConnectHandshaker::TCPConnectHandshaker(grpc_pollset_set* pollset_set)
|
91
|
+
: interested_parties_(grpc_pollset_set_create()),
|
92
|
+
pollent_(grpc_polling_entity_create_from_pollset_set(pollset_set)) {
|
93
|
+
// Interested parties might be null for platforms like Apple.
|
94
|
+
// Explicitly check before adding/deleting from pollset_set to handle this
|
95
|
+
// use case.
|
96
|
+
if (interested_parties_ != nullptr) {
|
97
|
+
grpc_polling_entity_add_to_pollset_set(&pollent_, interested_parties_);
|
98
|
+
}
|
99
|
+
GRPC_CLOSURE_INIT(&connected_, Connected, this, grpc_schedule_on_exec_ctx);
|
100
|
+
}
|
101
|
+
|
102
|
+
void TCPConnectHandshaker::Shutdown(grpc_error_handle why) {
|
103
|
+
// TODO(anramach): After migration to EventEngine, cancel the in-progress
|
104
|
+
// TCP connection attempt.
|
105
|
+
{
|
106
|
+
MutexLock lock(&mu_);
|
107
|
+
if (!shutdown_) {
|
108
|
+
shutdown_ = true;
|
109
|
+
// If we are shutting down while connecting, respond back with
|
110
|
+
// handshake done.
|
111
|
+
// The callback from grpc_tcp_client_connect will perform
|
112
|
+
// the necessary clean up.
|
113
|
+
if (on_handshake_done_ != nullptr) {
|
114
|
+
CleanupArgsForFailureLocked();
|
115
|
+
FinishLocked(
|
116
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown"));
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
120
|
+
GRPC_ERROR_UNREF(why);
|
121
|
+
}
|
122
|
+
|
123
|
+
void TCPConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
|
124
|
+
grpc_closure* on_handshake_done,
|
125
|
+
HandshakerArgs* args) {
|
126
|
+
{
|
127
|
+
MutexLock lock(&mu_);
|
128
|
+
on_handshake_done_ = on_handshake_done;
|
129
|
+
}
|
130
|
+
GPR_ASSERT(args->endpoint == nullptr);
|
131
|
+
args_ = args;
|
132
|
+
char* address = grpc_channel_args_find_string(
|
133
|
+
args->args, GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS);
|
134
|
+
absl::StatusOr<URI> uri = URI::Parse(address);
|
135
|
+
if (!uri.ok() || !grpc_parse_uri(*uri, &addr_)) {
|
136
|
+
MutexLock lock(&mu_);
|
137
|
+
FinishLocked(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
138
|
+
"Resolved address in invalid format"));
|
139
|
+
return;
|
140
|
+
}
|
141
|
+
bind_endpoint_to_pollset_ = grpc_channel_args_find_bool(
|
142
|
+
args->args, GRPC_ARG_TCP_HANDSHAKER_BIND_ENDPOINT_TO_POLLSET, false);
|
143
|
+
const char* args_to_remove[] = {
|
144
|
+
GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS,
|
145
|
+
GRPC_ARG_TCP_HANDSHAKER_BIND_ENDPOINT_TO_POLLSET};
|
146
|
+
// Update args to not contain the args relevant to TCP connect handshaker.
|
147
|
+
grpc_channel_args* channel_args = grpc_channel_args_copy_and_remove(
|
148
|
+
args->args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove));
|
149
|
+
grpc_channel_args_destroy(args->args);
|
150
|
+
args->args = channel_args;
|
151
|
+
// In some implementations, the closure can be flushed before
|
152
|
+
// grpc_tcp_client_connect() returns, and since the closure requires access
|
153
|
+
// to mu_, this can result in a deadlock (see
|
154
|
+
// https://github.com/grpc/grpc/issues/16427 for details).
|
155
|
+
// grpc_tcp_client_connect() will fill endpoint_ with proper contents, and we
|
156
|
+
// make sure that we still exist at that point by taking a ref.
|
157
|
+
Ref().release(); // Ref held by callback.
|
158
|
+
// As we fake the TCP client connection failure when shutdown is called
|
159
|
+
// we don't want to pass args->endpoint directly.
|
160
|
+
// Instead pass endpoint_ and swap this endpoint to
|
161
|
+
// args endpoint on success.
|
162
|
+
grpc_tcp_client_connect(&connected_, &endpoint_to_destroy_,
|
163
|
+
interested_parties_, args->args, &addr_,
|
164
|
+
args->deadline);
|
165
|
+
}
|
166
|
+
|
167
|
+
void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
|
168
|
+
RefCountedPtr<TCPConnectHandshaker> self(
|
169
|
+
static_cast<TCPConnectHandshaker*>(arg));
|
170
|
+
{
|
171
|
+
MutexLock lock(&self->mu_);
|
172
|
+
if (error != GRPC_ERROR_NONE || self->shutdown_) {
|
173
|
+
if (error == GRPC_ERROR_NONE) {
|
174
|
+
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown");
|
175
|
+
} else {
|
176
|
+
error = GRPC_ERROR_REF(error);
|
177
|
+
}
|
178
|
+
if (self->endpoint_to_destroy_ != nullptr) {
|
179
|
+
grpc_endpoint_shutdown(self->endpoint_to_destroy_,
|
180
|
+
GRPC_ERROR_REF(error));
|
181
|
+
}
|
182
|
+
if (!self->shutdown_) {
|
183
|
+
self->CleanupArgsForFailureLocked();
|
184
|
+
self->shutdown_ = true;
|
185
|
+
self->FinishLocked(error);
|
186
|
+
} else {
|
187
|
+
// The on_handshake_done_ is already as part of shutdown when connecting
|
188
|
+
// So nothing to be done here other than unrefing the error.
|
189
|
+
GRPC_ERROR_UNREF(error);
|
190
|
+
}
|
191
|
+
return;
|
192
|
+
}
|
193
|
+
GPR_ASSERT(self->endpoint_to_destroy_ != nullptr);
|
194
|
+
self->args_->endpoint = self->endpoint_to_destroy_;
|
195
|
+
self->endpoint_to_destroy_ = nullptr;
|
196
|
+
if (self->bind_endpoint_to_pollset_) {
|
197
|
+
grpc_endpoint_add_to_pollset_set(self->args_->endpoint,
|
198
|
+
self->interested_parties_);
|
199
|
+
}
|
200
|
+
self->FinishLocked(GRPC_ERROR_NONE);
|
201
|
+
}
|
202
|
+
}
|
203
|
+
|
204
|
+
TCPConnectHandshaker::~TCPConnectHandshaker() {
|
205
|
+
if (endpoint_to_destroy_ != nullptr) {
|
206
|
+
grpc_endpoint_destroy(endpoint_to_destroy_);
|
207
|
+
}
|
208
|
+
if (read_buffer_to_destroy_ != nullptr) {
|
209
|
+
grpc_slice_buffer_destroy_internal(read_buffer_to_destroy_);
|
210
|
+
gpr_free(read_buffer_to_destroy_);
|
211
|
+
}
|
212
|
+
grpc_pollset_set_destroy(interested_parties_);
|
213
|
+
}
|
214
|
+
|
215
|
+
void TCPConnectHandshaker::CleanupArgsForFailureLocked() {
|
216
|
+
read_buffer_to_destroy_ = args_->read_buffer;
|
217
|
+
args_->read_buffer = nullptr;
|
218
|
+
grpc_channel_args_destroy(args_->args);
|
219
|
+
args_->args = nullptr;
|
220
|
+
}
|
221
|
+
|
222
|
+
void TCPConnectHandshaker::FinishLocked(grpc_error_handle error) {
|
223
|
+
if (interested_parties_ != nullptr) {
|
224
|
+
grpc_polling_entity_del_from_pollset_set(&pollent_, interested_parties_);
|
225
|
+
}
|
226
|
+
ExecCtx::Run(DEBUG_LOCATION, on_handshake_done_, error);
|
227
|
+
on_handshake_done_ = nullptr;
|
228
|
+
}
|
229
|
+
|
230
|
+
//
|
231
|
+
// TCPConnectHandshakerFactory
|
232
|
+
//
|
233
|
+
|
234
|
+
class TCPConnectHandshakerFactory : public HandshakerFactory {
|
235
|
+
public:
|
236
|
+
void AddHandshakers(const grpc_channel_args* /*args*/,
|
237
|
+
grpc_pollset_set* interested_parties,
|
238
|
+
HandshakeManager* handshake_mgr) override {
|
239
|
+
handshake_mgr->Add(
|
240
|
+
MakeRefCounted<TCPConnectHandshaker>(interested_parties));
|
241
|
+
}
|
242
|
+
~TCPConnectHandshakerFactory() override = default;
|
243
|
+
};
|
244
|
+
|
245
|
+
} // namespace
|
246
|
+
|
247
|
+
void RegisterTCPConnectHandshaker(CoreConfiguration::Builder* builder) {
|
248
|
+
builder->handshaker_registry()->RegisterHandshakerFactory(
|
249
|
+
true /* at_start */, HANDSHAKER_CLIENT,
|
250
|
+
absl::make_unique<TCPConnectHandshakerFactory>());
|
251
|
+
}
|
252
|
+
|
253
|
+
} // namespace grpc_core
|
@@ -0,0 +1,39 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2022 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_LIB_TRANSPORT_TCP_CONNECT_HANDSHAKER_H
|
18
|
+
#define GRPC_CORE_LIB_TRANSPORT_TCP_CONNECT_HANDSHAKER_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include "src/core/lib/config/core_configuration.h"
|
23
|
+
|
24
|
+
// Indicates the address that the tcp connect handshaker should connect to.
|
25
|
+
#define GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS \
|
26
|
+
"grpc.internal.tcp_handshaker_resolved_address"
|
27
|
+
|
28
|
+
// Whether the TCP connect handshaker should bind the endpoint to the pollset.
|
29
|
+
#define GRPC_ARG_TCP_HANDSHAKER_BIND_ENDPOINT_TO_POLLSET \
|
30
|
+
"grpc.internal.tcp_handshaker_bind_endpoint_to_pollset"
|
31
|
+
|
32
|
+
namespace grpc_core {
|
33
|
+
|
34
|
+
// Register the TCP Connect handshaker into the configuration builder.
|
35
|
+
void RegisterTCPConnectHandshaker(CoreConfiguration::Builder* builder);
|
36
|
+
|
37
|
+
} // namespace grpc_core
|
38
|
+
|
39
|
+
#endif // GRPC_CORE_LIB_TRANSPORT_TCP_CONNECT_HANDSHAKER_H
|
@@ -20,14 +20,10 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/transport/timeout_encoding.h"
|
22
22
|
|
23
|
-
#include
|
24
|
-
#include <string.h>
|
25
|
-
|
26
|
-
#include <cstdint>
|
23
|
+
#include "absl/base/attributes.h"
|
27
24
|
|
28
25
|
#include <grpc/support/log.h>
|
29
|
-
|
30
|
-
#include "src/core/lib/gpr/string.h"
|
26
|
+
#include <grpc/support/time.h>
|
31
27
|
|
32
28
|
namespace grpc_core {
|
33
29
|
|
@@ -21,7 +21,11 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include
|
24
|
+
#include <stdint.h>
|
25
|
+
|
26
|
+
#include "absl/types/optional.h"
|
27
|
+
|
28
|
+
#include "src/core/lib/gprpp/time.h"
|
25
29
|
#include "src/core/lib/slice/slice.h"
|
26
30
|
|
27
31
|
namespace grpc_core {
|
@@ -22,18 +22,12 @@
|
|
22
22
|
|
23
23
|
#include <string.h>
|
24
24
|
|
25
|
-
#include <
|
26
|
-
#include <grpc/support/atm.h>
|
27
|
-
#include <grpc/support/log.h>
|
28
|
-
#include <grpc/support/sync.h>
|
25
|
+
#include <new>
|
29
26
|
|
30
27
|
#include "src/core/lib/gpr/alloc.h"
|
31
|
-
#include "src/core/lib/
|
32
|
-
#include "src/core/lib/gprpp/memory.h"
|
28
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
33
29
|
#include "src/core/lib/iomgr/executor.h"
|
34
30
|
#include "src/core/lib/iomgr/iomgr.h"
|
35
|
-
#include "src/core/lib/slice/slice_internal.h"
|
36
|
-
#include "src/core/lib/slice/slice_string_helpers.h"
|
37
31
|
#include "src/core/lib/transport/transport_impl.h"
|
38
32
|
|
39
33
|
grpc_core::DebugOnlyTraceFlag grpc_trace_stream_refcount(false,
|
@@ -157,6 +151,16 @@ grpc_endpoint* grpc_transport_get_endpoint(grpc_transport* transport) {
|
|
157
151
|
void grpc_transport_stream_op_batch_finish_with_failure(
|
158
152
|
grpc_transport_stream_op_batch* batch, grpc_error_handle error,
|
159
153
|
grpc_core::CallCombiner* call_combiner) {
|
154
|
+
grpc_core::CallCombinerClosureList closures;
|
155
|
+
grpc_transport_stream_op_batch_queue_finish_with_failure(batch, error,
|
156
|
+
&closures);
|
157
|
+
// Execute closures.
|
158
|
+
closures.RunClosures(call_combiner);
|
159
|
+
}
|
160
|
+
|
161
|
+
void grpc_transport_stream_op_batch_queue_finish_with_failure(
|
162
|
+
grpc_transport_stream_op_batch* batch, grpc_error_handle error,
|
163
|
+
grpc_core::CallCombinerClosureList* closures) {
|
160
164
|
if (batch->send_message) {
|
161
165
|
batch->payload->send_message.send_message.reset();
|
162
166
|
}
|
@@ -164,27 +168,24 @@ void grpc_transport_stream_op_batch_finish_with_failure(
|
|
164
168
|
GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
|
165
169
|
}
|
166
170
|
// Construct a list of closures to execute.
|
167
|
-
grpc_core::CallCombinerClosureList closures;
|
168
171
|
if (batch->recv_initial_metadata) {
|
169
|
-
closures
|
172
|
+
closures->Add(
|
170
173
|
batch->payload->recv_initial_metadata.recv_initial_metadata_ready,
|
171
174
|
GRPC_ERROR_REF(error), "failing recv_initial_metadata_ready");
|
172
175
|
}
|
173
176
|
if (batch->recv_message) {
|
174
|
-
closures
|
175
|
-
|
177
|
+
closures->Add(batch->payload->recv_message.recv_message_ready,
|
178
|
+
GRPC_ERROR_REF(error), "failing recv_message_ready");
|
176
179
|
}
|
177
180
|
if (batch->recv_trailing_metadata) {
|
178
|
-
closures
|
181
|
+
closures->Add(
|
179
182
|
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready,
|
180
183
|
GRPC_ERROR_REF(error), "failing recv_trailing_metadata_ready");
|
181
184
|
}
|
182
185
|
if (batch->on_complete != nullptr) {
|
183
|
-
closures
|
184
|
-
|
186
|
+
closures->Add(batch->on_complete, GRPC_ERROR_REF(error),
|
187
|
+
"failing on_complete");
|
185
188
|
}
|
186
|
-
// Execute closures.
|
187
|
-
closures.RunClosures(call_combiner);
|
188
189
|
GRPC_ERROR_UNREF(error);
|
189
190
|
}
|
190
191
|
|
@@ -22,22 +22,45 @@
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
24
|
#include <stddef.h>
|
25
|
+
#include <stdint.h>
|
26
|
+
#include <string.h>
|
27
|
+
|
28
|
+
#include <functional>
|
29
|
+
#include <string>
|
30
|
+
|
31
|
+
#include "absl/status/status.h"
|
32
|
+
#include "absl/strings/string_view.h"
|
33
|
+
#include "absl/types/optional.h"
|
34
|
+
|
35
|
+
#include <grpc/impl/codegen/connectivity_state.h>
|
36
|
+
#include <grpc/slice.h>
|
37
|
+
#include <grpc/status.h>
|
38
|
+
#include <grpc/support/atm.h>
|
39
|
+
#include <grpc/support/log.h>
|
25
40
|
|
26
41
|
#include "src/core/lib/channel/context.h"
|
42
|
+
#include "src/core/lib/debug/trace.h"
|
43
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
27
44
|
#include "src/core/lib/gprpp/orphanable.h"
|
45
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
28
46
|
#include "src/core/lib/iomgr/call_combiner.h"
|
47
|
+
#include "src/core/lib/iomgr/closure.h"
|
29
48
|
#include "src/core/lib/iomgr/endpoint.h"
|
49
|
+
#include "src/core/lib/iomgr/error.h"
|
50
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
30
51
|
#include "src/core/lib/iomgr/polling_entity.h"
|
31
52
|
#include "src/core/lib/iomgr/pollset.h"
|
32
|
-
#include "src/core/lib/iomgr/pollset_set.h"
|
33
53
|
#include "src/core/lib/promise/arena_promise.h"
|
54
|
+
#include "src/core/lib/promise/context.h"
|
34
55
|
#include "src/core/lib/promise/latch.h"
|
35
56
|
#include "src/core/lib/resource_quota/arena.h"
|
36
|
-
#include "src/core/lib/slice/
|
57
|
+
#include "src/core/lib/slice/slice.h"
|
37
58
|
#include "src/core/lib/transport/byte_stream.h"
|
38
59
|
#include "src/core/lib/transport/connectivity_state.h"
|
39
60
|
#include "src/core/lib/transport/metadata_batch.h"
|
40
61
|
|
62
|
+
struct grpc_transport_stream_op_batch_payload;
|
63
|
+
|
41
64
|
/* Minimum and maximum protocol accepted versions. */
|
42
65
|
#define GRPC_PROTOCOL_VERSION_MAX_MAJOR 2
|
43
66
|
#define GRPC_PROTOCOL_VERSION_MAX_MINOR 1
|
@@ -514,6 +537,9 @@ void grpc_transport_destroy_stream(grpc_transport* transport,
|
|
514
537
|
void grpc_transport_stream_op_batch_finish_with_failure(
|
515
538
|
grpc_transport_stream_op_batch* batch, grpc_error_handle error,
|
516
539
|
grpc_core::CallCombiner* call_combiner);
|
540
|
+
void grpc_transport_stream_op_batch_queue_finish_with_failure(
|
541
|
+
grpc_transport_stream_op_batch* batch, grpc_error_handle error,
|
542
|
+
grpc_core::CallCombinerClosureList* closures);
|
517
543
|
|
518
544
|
std::string grpc_transport_stream_op_batch_string(
|
519
545
|
grpc_transport_stream_op_batch* op);
|
@@ -21,6 +21,16 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
+
#include <stddef.h>
|
25
|
+
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
|
28
|
+
#include "src/core/lib/iomgr/closure.h"
|
29
|
+
#include "src/core/lib/iomgr/endpoint.h"
|
30
|
+
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
31
|
+
#include "src/core/lib/iomgr/pollset.h"
|
32
|
+
#include "src/core/lib/promise/arena_promise.h"
|
33
|
+
#include "src/core/lib/resource_quota/arena.h"
|
24
34
|
#include "src/core/lib/transport/transport.h"
|
25
35
|
|
26
36
|
typedef struct grpc_transport_vtable {
|
@@ -18,25 +18,24 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
-
#include <
|
22
|
-
#include <
|
23
|
-
#include <
|
24
|
-
#include <string.h>
|
25
|
-
|
21
|
+
#include <algorithm>
|
22
|
+
#include <memory>
|
23
|
+
#include <string>
|
26
24
|
#include <vector>
|
27
25
|
|
28
|
-
#include "absl/strings/escaping.h"
|
29
26
|
#include "absl/strings/str_cat.h"
|
30
27
|
#include "absl/strings/str_format.h"
|
31
28
|
#include "absl/strings/str_join.h"
|
32
29
|
|
33
|
-
#include <grpc/support/
|
34
|
-
#include <grpc/support/string_util.h>
|
30
|
+
#include <grpc/support/log.h>
|
35
31
|
|
36
32
|
#include "src/core/lib/channel/channel_stack.h"
|
37
|
-
#include "src/core/lib/
|
38
|
-
#include "src/core/lib/
|
33
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
34
|
+
#include "src/core/lib/iomgr/error.h"
|
35
|
+
#include "src/core/lib/transport/byte_stream.h"
|
39
36
|
#include "src/core/lib/transport/connectivity_state.h"
|
37
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
38
|
+
#include "src/core/lib/transport/transport.h"
|
40
39
|
|
41
40
|
/* These routines are here to facilitate debugging - they produce string
|
42
41
|
representations of various transport data structures */
|
@@ -18,19 +18,27 @@
|
|
18
18
|
|
19
19
|
#include "src/core/lib/uri/uri_parser.h"
|
20
20
|
|
21
|
-
#include <
|
21
|
+
#include <ctype.h>
|
22
|
+
#include <stddef.h>
|
22
23
|
|
24
|
+
#include <algorithm>
|
25
|
+
#include <functional>
|
23
26
|
#include <map>
|
24
27
|
#include <string>
|
28
|
+
#include <utility>
|
25
29
|
|
30
|
+
#include "absl/status/status.h"
|
31
|
+
#include "absl/strings/ascii.h"
|
26
32
|
#include "absl/strings/escaping.h"
|
33
|
+
#include "absl/strings/match.h"
|
34
|
+
#include "absl/strings/str_cat.h"
|
27
35
|
#include "absl/strings/str_format.h"
|
36
|
+
#include "absl/strings/str_join.h"
|
28
37
|
#include "absl/strings/str_split.h"
|
38
|
+
#include "absl/strings/strip.h"
|
29
39
|
|
30
40
|
#include <grpc/support/log.h>
|
31
41
|
|
32
|
-
#include "src/core/lib/gpr/string.h"
|
33
|
-
|
34
42
|
namespace grpc_core {
|
35
43
|
|
36
44
|
namespace {
|
@@ -22,6 +22,8 @@
|
|
22
22
|
|
23
23
|
#include "src/core/lib/config/core_configuration.h"
|
24
24
|
#include "src/core/lib/surface/builtins.h"
|
25
|
+
#include "src/core/lib/transport/http_connect_handshaker.h"
|
26
|
+
#include "src/core/lib/transport/tcp_connect_handshaker.h"
|
25
27
|
|
26
28
|
extern void grpc_register_extra_plugins(void);
|
27
29
|
|
@@ -33,6 +35,8 @@ void grpc_lb_policy_grpclb_init(void);
|
|
33
35
|
void grpc_lb_policy_grpclb_shutdown(void);
|
34
36
|
void grpc_lb_policy_priority_init(void);
|
35
37
|
void grpc_lb_policy_priority_shutdown(void);
|
38
|
+
void grpc_lb_policy_outlier_detection_init(void);
|
39
|
+
void grpc_lb_policy_outlier_detection_shutdown(void);
|
36
40
|
void grpc_lb_policy_weighted_target_init(void);
|
37
41
|
void grpc_lb_policy_weighted_target_shutdown(void);
|
38
42
|
void grpc_lb_policy_pick_first_init(void);
|
@@ -58,6 +62,8 @@ void grpc_register_built_in_plugins(void) {
|
|
58
62
|
grpc_register_plugin(grpc_core::RlsLbPluginInit,
|
59
63
|
grpc_core::RlsLbPluginShutdown);
|
60
64
|
#endif // !GRPC_NO_RLS
|
65
|
+
grpc_register_plugin(grpc_lb_policy_outlier_detection_init,
|
66
|
+
grpc_lb_policy_outlier_detection_shutdown);
|
61
67
|
grpc_register_plugin(grpc_lb_policy_priority_init,
|
62
68
|
grpc_lb_policy_priority_shutdown);
|
63
69
|
grpc_register_plugin(grpc_lb_policy_weighted_target_init,
|
@@ -101,6 +107,11 @@ extern void RegisterBinderResolver(CoreConfiguration::Builder* builder);
|
|
101
107
|
#endif
|
102
108
|
|
103
109
|
void BuildCoreConfiguration(CoreConfiguration::Builder* builder) {
|
110
|
+
// The order of the handshaker registration is crucial here.
|
111
|
+
// We want TCP connect handshaker to be registered last so that it is added to
|
112
|
+
// the start of the handshaker list.
|
113
|
+
RegisterHttpConnectHandshaker(builder);
|
114
|
+
RegisterTCPConnectHandshaker(builder);
|
104
115
|
BuildClientChannelConfiguration(builder);
|
105
116
|
SecurityRegisterHandshakerFactories(builder);
|
106
117
|
RegisterClientAuthorityFilter(builder);
|
@@ -22,6 +22,8 @@
|
|
22
22
|
|
23
23
|
#ifdef OPENSSL_IS_BORINGSSL
|
24
24
|
|
25
|
+
#include "absl/memory/memory.h"
|
26
|
+
|
25
27
|
// BoringSSL allows SSL_SESSION to outlive SSL and SSL_CTX objects which are
|
26
28
|
// re-created by gRPC on every certificate rotation or subchannel creation.
|
27
29
|
// BoringSSL guarantees that SSL_SESSION is immutable so it's safe to share
|