grpc 1.50.0.pre1 → 1.51.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 +131 -42
- data/include/grpc/event_engine/event_engine.h +10 -3
- data/include/grpc/event_engine/slice_buffer.h +17 -0
- data/include/grpc/grpc.h +0 -10
- data/include/grpc/impl/codegen/grpc_types.h +1 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
- data/src/core/ext/filters/client_channel/client_channel.h +3 -4
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
- data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
- data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
- data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
- data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
- data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
- data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
- data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +15 -68
- data/src/core/ext/xds/xds_api.h +3 -7
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_client.cc +122 -90
- data/src/core/ext/xds/xds_client.h +7 -2
- data/src/core/ext/xds/xds_client_grpc.cc +5 -24
- data/src/core/ext/xds/xds_cluster.cc +291 -183
- data/src/core/ext/xds/xds_cluster.h +11 -15
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
- data/src/core/ext/xds/xds_common_types.cc +208 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +214 -129
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
- data/src/core/ext/xds/xds_http_filters.cc +60 -73
- data/src/core/ext/xds/xds_http_filters.h +67 -19
- data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
- data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +459 -417
- data/src/core/ext/xds/xds_listener.h +43 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
- data/src/core/ext/xds/xds_route_config.cc +94 -80
- data/src/core/ext/xds/xds_route_config.h +10 -10
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
- data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
- data/src/core/lib/address_utils/parse_address.cc +11 -10
- data/src/core/lib/channel/channel_args.h +16 -1
- data/src/core/lib/channel/channel_stack.cc +23 -20
- data/src/core/lib/channel/channel_stack.h +17 -4
- data/src/core/lib/channel/channel_stack_builder.cc +4 -7
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +4 -5
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/channel/connected_channel.cc +695 -35
- data/src/core/lib/channel/connected_channel.h +0 -4
- data/src/core/lib/channel/promise_based_filter.cc +1004 -140
- data/src/core/lib/channel/promise_based_filter.h +364 -87
- data/src/core/lib/compression/message_compress.cc +5 -5
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +22 -119
- data/src/core/lib/debug/stats.h +29 -35
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/thread_pool.cc +106 -25
- data/src/core/lib/event_engine/thread_pool.h +32 -9
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -2
- data/src/core/lib/experiments/experiments.h +8 -1
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
- data/src/core/lib/gprpp/thd_windows.cc +1 -2
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +13 -2
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/http/httpcli.cc +40 -44
- data/src/core/lib/http/httpcli.h +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +4 -6
- data/src/core/lib/http/parser.cc +54 -65
- data/src/core/lib/iomgr/buffer_list.cc +105 -116
- data/src/core/lib/iomgr/buffer_list.h +60 -44
- data/src/core/lib/iomgr/call_combiner.cc +11 -10
- data/src/core/lib/iomgr/call_combiner.h +3 -4
- data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
- data/src/core/lib/iomgr/closure.h +49 -5
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +27 -42
- data/src/core/lib/iomgr/error.h +22 -152
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
- data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +2 -3
- data/src/core/lib/iomgr/executor.cc +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -10
- data/src/core/lib/iomgr/pollset_windows.cc +4 -4
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -4
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
- data/src/core/lib/iomgr/tcp_posix.cc +92 -108
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
- data/src/core/lib/iomgr/tcp_windows.cc +27 -34
- data/src/core/lib/iomgr/timer.h +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +9 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +7 -2
- data/src/core/lib/json/json_object_loader.h +22 -0
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/load_balancing/lb_policy.cc +1 -1
- data/src/core/lib/load_balancing/lb_policy.h +4 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +38 -15
- data/src/core/lib/promise/arena_promise.h +80 -51
- data/src/core/lib/promise/context.h +13 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +58 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map_pipe.h +87 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +13 -0
- data/src/core/lib/promise/seq.h +3 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +10 -13
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +1 -3
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/arena.cc +19 -0
- data/src/core/lib/resource_quota/arena.h +89 -0
- data/src/core/lib/resource_quota/memory_quota.cc +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/context/security_context.h +10 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
- data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
- data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
- data/src/core/lib/security/transport/security_handshaker.cc +53 -53
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +4 -5
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/slice.cc +7 -1
- data/src/core/lib/slice/slice.h +19 -6
- data/src/core/lib/slice/slice_buffer.cc +13 -14
- data/src/core/lib/slice/slice_internal.h +13 -21
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/surface/byte_buffer.cc +3 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1366 -239
- data/src/core/lib/surface/call.h +44 -0
- data/src/core/lib/surface/call_details.cc +3 -3
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +44 -49
- data/src/core/lib/surface/channel.h +9 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/channel_stack_type.cc +4 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.cc +38 -52
- data/src/core/lib/surface/init.cc +8 -39
- data/src/core/lib/surface/init_internally.h +8 -0
- data/src/core/lib/surface/lame_client.cc +10 -8
- data/src/core/lib/surface/server.cc +48 -70
- data/src/core/lib/surface/server.h +3 -4
- data/src/core/lib/surface/validate_metadata.cc +11 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +34 -28
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +14 -14
- data/src/core/lib/transport/handshaker.h +1 -1
- data/src/core/lib/transport/handshaker_factory.h +26 -0
- data/src/core/lib/transport/handshaker_registry.cc +8 -2
- data/src/core/lib/transport/handshaker_registry.h +3 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
- data/src/core/lib/transport/metadata_batch.h +17 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/transport.cc +63 -17
- data/src/core/lib/transport/transport.h +64 -68
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +7 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
- data/src/core/tsi/fake_transport_security.cc +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- 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/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +57 -20
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -50,14 +50,14 @@ absl::Status grpc_error_to_absl_status(grpc_error_handle error);
|
|
50
50
|
|
51
51
|
/// Utility function to convert an absl::Status \a status to grpc_error. Note
|
52
52
|
/// that this method does not return "special case" errors such as
|
53
|
-
///
|
53
|
+
/// absl::CancelledError(), with the exception of absl::OkStatus() returned for
|
54
54
|
/// \a absl::OkStatus().
|
55
55
|
grpc_error_handle absl_status_to_grpc_error(absl::Status status);
|
56
56
|
|
57
57
|
/// A utility function to check whether there is a clear status code that
|
58
58
|
/// doesn't need to be guessed in \a error. This means that \a error or some
|
59
|
-
/// child has
|
60
|
-
///
|
59
|
+
/// child has grpc_core::StatusIntProperty::kRpcStatus set, or that it is
|
60
|
+
/// absl::OkStatus() or absl::CancelledError()
|
61
61
|
bool grpc_error_has_clear_grpc_status(grpc_error_handle error);
|
62
62
|
|
63
63
|
#endif /* GRPC_CORE_LIB_TRANSPORT_ERROR_UTILS_H */
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#include <string>
|
26
26
|
#include <utility>
|
27
27
|
|
28
|
+
#include "absl/status/status.h"
|
28
29
|
#include "absl/strings/str_format.h"
|
29
30
|
|
30
31
|
#include <grpc/impl/codegen/grpc_types.h>
|
@@ -35,9 +36,9 @@
|
|
35
36
|
#include "src/core/lib/channel/channel_args.h"
|
36
37
|
#include "src/core/lib/debug/trace.h"
|
37
38
|
#include "src/core/lib/gprpp/debug_location.h"
|
39
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
38
40
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
39
41
|
#include "src/core/lib/iomgr/timer.h"
|
40
|
-
#include "src/core/lib/slice/slice_internal.h"
|
41
42
|
|
42
43
|
namespace grpc_core {
|
43
44
|
|
@@ -78,10 +79,9 @@ void HandshakeManager::Shutdown(grpc_error_handle why) {
|
|
78
79
|
// Shutdown the handshaker that's currently in progress, if any.
|
79
80
|
if (!is_shutdown_ && index_ > 0) {
|
80
81
|
is_shutdown_ = true;
|
81
|
-
handshakers_[index_ - 1]->Shutdown(
|
82
|
+
handshakers_[index_ - 1]->Shutdown(why);
|
82
83
|
}
|
83
84
|
}
|
84
|
-
GRPC_ERROR_UNREF(why);
|
85
85
|
}
|
86
86
|
|
87
87
|
// Helper function to call either the next handshaker or the
|
@@ -92,17 +92,17 @@ bool HandshakeManager::CallNextHandshakerLocked(grpc_error_handle error) {
|
|
92
92
|
gpr_log(GPR_INFO,
|
93
93
|
"handshake_manager %p: error=%s shutdown=%d index=%" PRIuPTR
|
94
94
|
", args=%s",
|
95
|
-
this,
|
95
|
+
this, StatusToString(error).c_str(), is_shutdown_, index_,
|
96
96
|
HandshakerArgsString(&args_).c_str());
|
97
97
|
}
|
98
98
|
GPR_ASSERT(index_ <= handshakers_.size());
|
99
99
|
// If we got an error or we've been shut down or we're exiting early or
|
100
100
|
// we've finished the last handshaker, invoke the on_handshake_done
|
101
101
|
// callback. Otherwise, call the next handshaker.
|
102
|
-
if (!
|
102
|
+
if (!error.ok() || is_shutdown_ || args_.exit_early ||
|
103
103
|
index_ == handshakers_.size()) {
|
104
|
-
if (
|
105
|
-
error =
|
104
|
+
if (error.ok() && is_shutdown_) {
|
105
|
+
error = GRPC_ERROR_CREATE("handshaker shutdown");
|
106
106
|
// It is possible that the endpoint has already been destroyed by
|
107
107
|
// a shutdown call while this callback was sitting on the ExecCtx
|
108
108
|
// with no error.
|
@@ -111,11 +111,11 @@ bool HandshakeManager::CallNextHandshakerLocked(grpc_error_handle error) {
|
|
111
111
|
// before destroying then, even when we know that there are no
|
112
112
|
// pending read/write callbacks. This should be fixed, at which
|
113
113
|
// point this can be removed.
|
114
|
-
grpc_endpoint_shutdown(args_.endpoint,
|
114
|
+
grpc_endpoint_shutdown(args_.endpoint, error);
|
115
115
|
grpc_endpoint_destroy(args_.endpoint);
|
116
116
|
args_.endpoint = nullptr;
|
117
117
|
args_.args = ChannelArgs();
|
118
|
-
|
118
|
+
grpc_slice_buffer_destroy(args_.read_buffer);
|
119
119
|
gpr_free(args_.read_buffer);
|
120
120
|
args_.read_buffer = nullptr;
|
121
121
|
}
|
@@ -124,7 +124,7 @@ bool HandshakeManager::CallNextHandshakerLocked(grpc_error_handle error) {
|
|
124
124
|
gpr_log(GPR_INFO,
|
125
125
|
"handshake_manager %p: handshaking complete -- scheduling "
|
126
126
|
"on_handshake_done with error=%s",
|
127
|
-
this,
|
127
|
+
this, StatusToString(error).c_str());
|
128
128
|
}
|
129
129
|
// Cancel deadline timer, since we're invoking the on_handshake_done
|
130
130
|
// callback now.
|
@@ -151,7 +151,7 @@ void HandshakeManager::CallNextHandshakerFn(void* arg,
|
|
151
151
|
bool done;
|
152
152
|
{
|
153
153
|
MutexLock lock(&mgr->mu_);
|
154
|
-
done = mgr->CallNextHandshakerLocked(
|
154
|
+
done = mgr->CallNextHandshakerLocked(error);
|
155
155
|
}
|
156
156
|
// If we're invoked the final callback, we won't be coming back
|
157
157
|
// to this function, so we can release our reference to the
|
@@ -163,8 +163,8 @@ void HandshakeManager::CallNextHandshakerFn(void* arg,
|
|
163
163
|
|
164
164
|
void HandshakeManager::OnTimeoutFn(void* arg, grpc_error_handle error) {
|
165
165
|
auto* mgr = static_cast<HandshakeManager*>(arg);
|
166
|
-
if (
|
167
|
-
mgr->Shutdown(
|
166
|
+
if (error.ok()) { // Timer fired, rather than being cancelled
|
167
|
+
mgr->Shutdown(GRPC_ERROR_CREATE("Handshake timed out"));
|
168
168
|
}
|
169
169
|
mgr->Unref();
|
170
170
|
}
|
@@ -207,7 +207,7 @@ void HandshakeManager::DoHandshake(grpc_endpoint* endpoint,
|
|
207
207
|
grpc_timer_init(&deadline_timer_, deadline, &on_timeout_);
|
208
208
|
// Start first handshaker, which also owns a ref.
|
209
209
|
Ref().release();
|
210
|
-
done = CallNextHandshakerLocked(
|
210
|
+
done = CallNextHandshakerLocked(absl::OkStatus());
|
211
211
|
}
|
212
212
|
if (done) {
|
213
213
|
Unref();
|
@@ -117,7 +117,7 @@ class HandshakeManager : public RefCounted<HandshakeManager> {
|
|
117
117
|
///
|
118
118
|
/// When done, invokes \a on_handshake_done with a HandshakerArgs
|
119
119
|
/// object as its argument. If the callback is invoked with error !=
|
120
|
-
///
|
120
|
+
/// absl::OkStatus(), then handshaking failed and the handshaker has done
|
121
121
|
/// the necessary clean-up. Otherwise, the callback takes ownership of
|
122
122
|
/// the arguments.
|
123
123
|
void DoHandshake(grpc_endpoint* endpoint, const ChannelArgs& channel_args,
|
@@ -37,9 +37,35 @@ class HandshakeManager;
|
|
37
37
|
|
38
38
|
class HandshakerFactory {
|
39
39
|
public:
|
40
|
+
// Enum representing the priority of the handshakers.
|
41
|
+
// The order of the handshakers is decided by the priority.
|
42
|
+
// For example kPreTCPConnect handshakers are called before kTCPConnect and so
|
43
|
+
// on.
|
44
|
+
enum class HandshakerPriority : int {
|
45
|
+
// Handshakers that should be called before a TCP connect. Applicable mainly
|
46
|
+
// for Client handshakers.
|
47
|
+
kPreTCPConnectHandshakers,
|
48
|
+
// Handshakers responsible for the actual TCP connect establishment.
|
49
|
+
// Applicable mainly for Client handshakers.
|
50
|
+
kTCPConnectHandshakers,
|
51
|
+
// Handshakers responsible for the actual HTTP connect established.
|
52
|
+
// Applicable
|
53
|
+
// mainly for Client handshakers.
|
54
|
+
kHTTPConnectHandshakers,
|
55
|
+
// Handshakers that should be called before security handshakes but after
|
56
|
+
// connect establishment. Applicable mainly for Server handshakers
|
57
|
+
// currently.
|
58
|
+
kReadAheadSecurityHandshakers,
|
59
|
+
// Handshakers that are responsible for post connect security handshakes.
|
60
|
+
// Applicable for both Client and Server handshakers.
|
61
|
+
kSecurityHandshakers,
|
62
|
+
};
|
63
|
+
|
40
64
|
virtual void AddHandshakers(const ChannelArgs& args,
|
41
65
|
grpc_pollset_set* interested_parties,
|
42
66
|
HandshakeManager* handshake_mgr) = 0;
|
67
|
+
// Return the priority associated with the handshaker.
|
68
|
+
virtual HandshakerPriority Priority() = 0;
|
43
69
|
virtual ~HandshakerFactory() = default;
|
44
70
|
};
|
45
71
|
|
@@ -28,10 +28,16 @@
|
|
28
28
|
namespace grpc_core {
|
29
29
|
|
30
30
|
void HandshakerRegistry::Builder::RegisterHandshakerFactory(
|
31
|
-
|
31
|
+
HandshakerType handshaker_type,
|
32
32
|
std::unique_ptr<HandshakerFactory> factory) {
|
33
33
|
auto& vec = factories_[handshaker_type];
|
34
|
-
auto where =
|
34
|
+
auto where = vec.empty() ? vec.begin() : vec.end();
|
35
|
+
for (auto iter = vec.begin(); iter != vec.end(); ++iter) {
|
36
|
+
if (factory->Priority() < iter->get()->Priority()) {
|
37
|
+
where = iter;
|
38
|
+
break;
|
39
|
+
}
|
40
|
+
}
|
35
41
|
vec.insert(where, std::move(factory));
|
36
42
|
}
|
37
43
|
|
@@ -41,10 +41,9 @@ class HandshakerRegistry {
|
|
41
41
|
class Builder {
|
42
42
|
public:
|
43
43
|
/// Registers a new handshaker factory. Takes ownership.
|
44
|
-
///
|
45
|
-
/// the list.
|
46
|
-
void RegisterHandshakerFactory(
|
47
|
-
HandshakerType handshaker_type,
|
44
|
+
/// The priority of the handshaker will be used to order the handshakers
|
45
|
+
/// in the list.
|
46
|
+
void RegisterHandshakerFactory(HandshakerType handshaker_type,
|
48
47
|
std::unique_ptr<HandshakerFactory> factory);
|
49
48
|
|
50
49
|
HandshakerRegistry Build();
|
@@ -27,7 +27,7 @@
|
|
27
27
|
#include <string>
|
28
28
|
|
29
29
|
#include "absl/base/thread_annotations.h"
|
30
|
-
#include "absl/
|
30
|
+
#include "absl/status/status.h"
|
31
31
|
#include "absl/strings/str_cat.h"
|
32
32
|
#include "absl/strings/string_view.h"
|
33
33
|
#include "absl/types/optional.h"
|
@@ -51,7 +51,6 @@
|
|
51
51
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
52
52
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
53
53
|
#include "src/core/lib/iomgr/tcp_server.h"
|
54
|
-
#include "src/core/lib/slice/slice_internal.h"
|
55
54
|
#include "src/core/lib/transport/handshaker.h"
|
56
55
|
#include "src/core/lib/transport/handshaker_factory.h"
|
57
56
|
#include "src/core/lib/transport/handshaker_registry.h"
|
@@ -103,10 +102,10 @@ HttpConnectHandshaker::~HttpConnectHandshaker() {
|
|
103
102
|
grpc_endpoint_destroy(endpoint_to_destroy_);
|
104
103
|
}
|
105
104
|
if (read_buffer_to_destroy_ != nullptr) {
|
106
|
-
|
105
|
+
grpc_slice_buffer_destroy(read_buffer_to_destroy_);
|
107
106
|
gpr_free(read_buffer_to_destroy_);
|
108
107
|
}
|
109
|
-
|
108
|
+
grpc_slice_buffer_destroy(&write_buffer_);
|
110
109
|
grpc_http_parser_destroy(&http_parser_);
|
111
110
|
grpc_http_response_destroy(&http_response_);
|
112
111
|
}
|
@@ -124,18 +123,18 @@ void HttpConnectHandshaker::CleanupArgsForFailureLocked() {
|
|
124
123
|
// If the handshake failed or we're shutting down, clean up and invoke the
|
125
124
|
// callback with the error.
|
126
125
|
void HttpConnectHandshaker::HandshakeFailedLocked(grpc_error_handle error) {
|
127
|
-
if (
|
126
|
+
if (error.ok()) {
|
128
127
|
// If we were shut down after an endpoint operation succeeded but
|
129
128
|
// before the endpoint callback was invoked, we need to generate our
|
130
129
|
// own error.
|
131
|
-
error =
|
130
|
+
error = GRPC_ERROR_CREATE("Handshaker shutdown");
|
132
131
|
}
|
133
132
|
if (!is_shutdown_) {
|
134
133
|
// TODO(ctiller): It is currently necessary to shutdown endpoints
|
135
134
|
// before destroying them, even if we know that there are no
|
136
135
|
// pending read/write callbacks. This should be fixed, at which
|
137
136
|
// point this can be removed.
|
138
|
-
grpc_endpoint_shutdown(args_->endpoint,
|
137
|
+
grpc_endpoint_shutdown(args_->endpoint, error);
|
139
138
|
// Not shutting down, so the handshake failed. Clean up before
|
140
139
|
// invoking the callback.
|
141
140
|
CleanupArgsForFailureLocked();
|
@@ -156,17 +155,17 @@ void HttpConnectHandshaker::OnWriteDoneScheduler(void* arg,
|
|
156
155
|
GRPC_CLOSURE_INIT(&handshaker->request_done_closure_,
|
157
156
|
&HttpConnectHandshaker::OnWriteDone,
|
158
157
|
handshaker, grpc_schedule_on_exec_ctx),
|
159
|
-
|
158
|
+
error);
|
160
159
|
}
|
161
160
|
|
162
161
|
// Callback invoked when finished writing HTTP CONNECT request.
|
163
162
|
void HttpConnectHandshaker::OnWriteDone(void* arg, grpc_error_handle error) {
|
164
163
|
auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
|
165
164
|
ReleasableMutexLock lock(&handshaker->mu_);
|
166
|
-
if (!
|
165
|
+
if (!error.ok() || handshaker->is_shutdown_) {
|
167
166
|
// If the write failed or we're shutting down, clean up and invoke the
|
168
167
|
// callback with the error.
|
169
|
-
handshaker->HandshakeFailedLocked(
|
168
|
+
handshaker->HandshakeFailedLocked(error);
|
170
169
|
lock.Release();
|
171
170
|
handshaker->Unref();
|
172
171
|
} else {
|
@@ -190,17 +189,17 @@ void HttpConnectHandshaker::OnReadDoneScheduler(void* arg,
|
|
190
189
|
GRPC_CLOSURE_INIT(&handshaker->response_read_closure_,
|
191
190
|
&HttpConnectHandshaker::OnReadDone, handshaker,
|
192
191
|
grpc_schedule_on_exec_ctx),
|
193
|
-
|
192
|
+
error);
|
194
193
|
}
|
195
194
|
|
196
195
|
// Callback invoked for reading HTTP CONNECT response.
|
197
196
|
void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
|
198
197
|
auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
|
199
198
|
ReleasableMutexLock lock(&handshaker->mu_);
|
200
|
-
if (!
|
199
|
+
if (!error.ok() || handshaker->is_shutdown_) {
|
201
200
|
// If the read failed or we're shutting down, clean up and invoke the
|
202
201
|
// callback with the error.
|
203
|
-
handshaker->HandshakeFailedLocked(
|
202
|
+
handshaker->HandshakeFailedLocked(error);
|
204
203
|
goto done;
|
205
204
|
}
|
206
205
|
// Add buffer to parser.
|
@@ -210,7 +209,7 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
|
|
210
209
|
error = grpc_http_parser_parse(&handshaker->http_parser_,
|
211
210
|
handshaker->args_->read_buffer->slices[i],
|
212
211
|
&body_start_offset);
|
213
|
-
if (!
|
212
|
+
if (!error.ok()) {
|
214
213
|
handshaker->HandshakeFailedLocked(error);
|
215
214
|
goto done;
|
216
215
|
}
|
@@ -230,7 +229,7 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
|
|
230
229
|
&handshaker->args_->read_buffer->slices[i + 1],
|
231
230
|
handshaker->args_->read_buffer->count - i - 1);
|
232
231
|
grpc_slice_buffer_swap(handshaker->args_->read_buffer, &tmp_buffer);
|
233
|
-
|
232
|
+
grpc_slice_buffer_destroy(&tmp_buffer);
|
234
233
|
break;
|
235
234
|
}
|
236
235
|
}
|
@@ -247,7 +246,7 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
|
|
247
246
|
// complete (e.g., handling chunked transfer encoding or looking
|
248
247
|
// at the Content-Length: header).
|
249
248
|
if (handshaker->http_parser_.state != GRPC_HTTP_BODY) {
|
250
|
-
|
249
|
+
grpc_slice_buffer_reset_and_unref(handshaker->args_->read_buffer);
|
251
250
|
grpc_endpoint_read(
|
252
251
|
handshaker->args_->endpoint, handshaker->args_->read_buffer,
|
253
252
|
GRPC_CLOSURE_INIT(&handshaker->response_read_closure_,
|
@@ -259,9 +258,8 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
|
|
259
258
|
// Make sure we got a 2xx response.
|
260
259
|
if (handshaker->http_response_.status < 200 ||
|
261
260
|
handshaker->http_response_.status >= 300) {
|
262
|
-
error =
|
263
|
-
|
264
|
-
handshaker->http_response_.status));
|
261
|
+
error = GRPC_ERROR_CREATE(absl::StrCat("HTTP proxy returned response code ",
|
262
|
+
handshaker->http_response_.status));
|
265
263
|
handshaker->HandshakeFailedLocked(error);
|
266
264
|
goto done;
|
267
265
|
}
|
@@ -284,11 +282,10 @@ void HttpConnectHandshaker::Shutdown(grpc_error_handle why) {
|
|
284
282
|
MutexLock lock(&mu_);
|
285
283
|
if (!is_shutdown_) {
|
286
284
|
is_shutdown_ = true;
|
287
|
-
grpc_endpoint_shutdown(args_->endpoint,
|
285
|
+
grpc_endpoint_shutdown(args_->endpoint, why);
|
288
286
|
CleanupArgsForFailureLocked();
|
289
287
|
}
|
290
288
|
}
|
291
|
-
GRPC_ERROR_UNREF(why);
|
292
289
|
}
|
293
290
|
|
294
291
|
void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
|
@@ -305,7 +302,7 @@ void HttpConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
|
|
305
302
|
MutexLock lock(&mu_);
|
306
303
|
is_shutdown_ = true;
|
307
304
|
}
|
308
|
-
ExecCtx::Run(DEBUG_LOCATION, on_handshake_done,
|
305
|
+
ExecCtx::Run(DEBUG_LOCATION, on_handshake_done, absl::OkStatus());
|
309
306
|
return;
|
310
307
|
}
|
311
308
|
// Get headers from channel args.
|
@@ -387,6 +384,9 @@ class HttpConnectHandshakerFactory : public HandshakerFactory {
|
|
387
384
|
HandshakeManager* handshake_mgr) override {
|
388
385
|
handshake_mgr->Add(MakeRefCounted<HttpConnectHandshaker>());
|
389
386
|
}
|
387
|
+
HandshakerPriority Priority() override {
|
388
|
+
return HandshakerPriority::kHTTPConnectHandshakers;
|
389
|
+
}
|
390
390
|
~HttpConnectHandshakerFactory() override = default;
|
391
391
|
};
|
392
392
|
|
@@ -394,8 +394,7 @@ class HttpConnectHandshakerFactory : public HandshakerFactory {
|
|
394
394
|
|
395
395
|
void RegisterHttpConnectHandshaker(CoreConfiguration::Builder* builder) {
|
396
396
|
builder->handshaker_registry()->RegisterHandshakerFactory(
|
397
|
-
|
398
|
-
absl::make_unique<HttpConnectHandshakerFactory>());
|
397
|
+
HANDSHAKER_CLIENT, std::make_unique<HttpConnectHandshakerFactory>());
|
399
398
|
}
|
400
399
|
|
401
400
|
} // namespace grpc_core
|
@@ -387,6 +387,14 @@ struct GrpcStatusContext {
|
|
387
387
|
static const std::string& DisplayValue(const std::string& x);
|
388
388
|
};
|
389
389
|
|
390
|
+
// Annotation added by a transport to note that the status came from the wire.
|
391
|
+
struct GrpcStatusFromWire {
|
392
|
+
static absl::string_view DebugKey() { return "GrpcStatusFromWire"; }
|
393
|
+
static constexpr bool kRepeatable = false;
|
394
|
+
using ValueType = bool;
|
395
|
+
static absl::string_view DisplayValue(bool x) { return x ? "true" : "false"; }
|
396
|
+
};
|
397
|
+
|
390
398
|
// Annotation added by client surface code to denote wait-for-ready state
|
391
399
|
struct WaitForReady {
|
392
400
|
struct ValueType {
|
@@ -645,6 +653,13 @@ struct AdaptDisplayValueToLog<const std::string&> {
|
|
645
653
|
static std::string ToString(const std::string& value) { return value; }
|
646
654
|
};
|
647
655
|
|
656
|
+
template <>
|
657
|
+
struct AdaptDisplayValueToLog<absl::string_view> {
|
658
|
+
static std::string ToString(absl::string_view value) {
|
659
|
+
return std::string(value);
|
660
|
+
}
|
661
|
+
};
|
662
|
+
|
648
663
|
template <>
|
649
664
|
struct AdaptDisplayValueToLog<Slice> {
|
650
665
|
static std::string ToString(Slice value) {
|
@@ -1301,7 +1316,8 @@ using grpc_metadata_batch_base = grpc_core::MetadataMap<
|
|
1301
1316
|
grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata,
|
1302
1317
|
// Non-encodable things
|
1303
1318
|
grpc_core::GrpcStreamNetworkState, grpc_core::PeerString,
|
1304
|
-
grpc_core::GrpcStatusContext, grpc_core::
|
1319
|
+
grpc_core::GrpcStatusContext, grpc_core::GrpcStatusFromWire,
|
1320
|
+
grpc_core::WaitForReady>;
|
1305
1321
|
|
1306
1322
|
struct grpc_metadata_batch : public grpc_metadata_batch_base {
|
1307
1323
|
using grpc_metadata_batch_base::grpc_metadata_batch_base;
|
@@ -16,8 +16,6 @@
|
|
16
16
|
|
17
17
|
#include "src/core/lib/transport/parsed_metadata.h"
|
18
18
|
|
19
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
20
|
-
|
21
19
|
namespace grpc_core {
|
22
20
|
namespace metadata_detail {
|
23
21
|
|
@@ -26,12 +24,10 @@ std::string MakeDebugString(absl::string_view key, absl::string_view value) {
|
|
26
24
|
}
|
27
25
|
|
28
26
|
Slice SliceFromBuffer(const Buffer& buffer) {
|
29
|
-
return Slice(
|
27
|
+
return Slice(CSliceRef(buffer.slice));
|
30
28
|
}
|
31
29
|
|
32
|
-
void DestroySliceValue(const Buffer& value) {
|
33
|
-
grpc_slice_unref_internal(value.slice);
|
34
|
-
}
|
30
|
+
void DestroySliceValue(const Buffer& value) { CSliceUnref(value.slice); }
|
35
31
|
|
36
32
|
void DestroyTrivialMemento(const Buffer&) {}
|
37
33
|
|
@@ -23,12 +23,13 @@
|
|
23
23
|
#include <memory>
|
24
24
|
|
25
25
|
#include "absl/base/thread_annotations.h"
|
26
|
-
#include "absl/
|
26
|
+
#include "absl/status/status.h"
|
27
27
|
#include "absl/status/statusor.h"
|
28
28
|
#include "absl/strings/string_view.h"
|
29
29
|
#include "absl/types/optional.h"
|
30
30
|
|
31
31
|
#include <grpc/slice.h>
|
32
|
+
#include <grpc/slice_buffer.h>
|
32
33
|
#include <grpc/support/alloc.h>
|
33
34
|
#include <grpc/support/log.h>
|
34
35
|
|
@@ -49,7 +50,6 @@
|
|
49
50
|
#include "src/core/lib/iomgr/resolved_address.h"
|
50
51
|
#include "src/core/lib/iomgr/tcp_client.h"
|
51
52
|
#include "src/core/lib/iomgr/tcp_server.h"
|
52
|
-
#include "src/core/lib/slice/slice_internal.h"
|
53
53
|
#include "src/core/lib/transport/handshaker.h"
|
54
54
|
#include "src/core/lib/transport/handshaker_factory.h"
|
55
55
|
#include "src/core/lib/transport/handshaker_registry.h"
|
@@ -100,7 +100,7 @@ TCPConnectHandshaker::TCPConnectHandshaker(grpc_pollset_set* pollset_set)
|
|
100
100
|
GRPC_CLOSURE_INIT(&connected_, Connected, this, grpc_schedule_on_exec_ctx);
|
101
101
|
}
|
102
102
|
|
103
|
-
void TCPConnectHandshaker::Shutdown(grpc_error_handle why) {
|
103
|
+
void TCPConnectHandshaker::Shutdown(grpc_error_handle /*why*/) {
|
104
104
|
// TODO(anramach): After migration to EventEngine, cancel the in-progress
|
105
105
|
// TCP connection attempt.
|
106
106
|
{
|
@@ -113,12 +113,10 @@ void TCPConnectHandshaker::Shutdown(grpc_error_handle why) {
|
|
113
113
|
// the necessary clean up.
|
114
114
|
if (on_handshake_done_ != nullptr) {
|
115
115
|
CleanupArgsForFailureLocked();
|
116
|
-
FinishLocked(
|
117
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown"));
|
116
|
+
FinishLocked(GRPC_ERROR_CREATE("tcp handshaker shutdown"));
|
118
117
|
}
|
119
118
|
}
|
120
119
|
}
|
121
|
-
GRPC_ERROR_UNREF(why);
|
122
120
|
}
|
123
121
|
|
124
122
|
void TCPConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
|
@@ -134,8 +132,7 @@ void TCPConnectHandshaker::DoHandshake(grpc_tcp_server_acceptor* /*acceptor*/,
|
|
134
132
|
args->args.GetString(GRPC_ARG_TCP_HANDSHAKER_RESOLVED_ADDRESS).value());
|
135
133
|
if (!uri.ok() || !grpc_parse_uri(*uri, &addr_)) {
|
136
134
|
MutexLock lock(&mu_);
|
137
|
-
FinishLocked(
|
138
|
-
"Resolved address in invalid format"));
|
135
|
+
FinishLocked(GRPC_ERROR_CREATE("Resolved address in invalid format"));
|
139
136
|
return;
|
140
137
|
}
|
141
138
|
bind_endpoint_to_pollset_ =
|
@@ -167,15 +164,12 @@ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
|
|
167
164
|
static_cast<TCPConnectHandshaker*>(arg));
|
168
165
|
{
|
169
166
|
MutexLock lock(&self->mu_);
|
170
|
-
if (!
|
171
|
-
if (
|
172
|
-
error =
|
173
|
-
} else {
|
174
|
-
error = GRPC_ERROR_REF(error);
|
167
|
+
if (!error.ok() || self->shutdown_) {
|
168
|
+
if (error.ok()) {
|
169
|
+
error = GRPC_ERROR_CREATE("tcp handshaker shutdown");
|
175
170
|
}
|
176
171
|
if (self->endpoint_to_destroy_ != nullptr) {
|
177
|
-
grpc_endpoint_shutdown(self->endpoint_to_destroy_,
|
178
|
-
GRPC_ERROR_REF(error));
|
172
|
+
grpc_endpoint_shutdown(self->endpoint_to_destroy_, error);
|
179
173
|
}
|
180
174
|
if (!self->shutdown_) {
|
181
175
|
self->CleanupArgsForFailureLocked();
|
@@ -185,7 +179,6 @@ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
|
|
185
179
|
// The on_handshake_done_ is already as part of shutdown when
|
186
180
|
// connecting So nothing to be done here other than unrefing the
|
187
181
|
// error.
|
188
|
-
GRPC_ERROR_UNREF(error);
|
189
182
|
}
|
190
183
|
return;
|
191
184
|
}
|
@@ -196,7 +189,7 @@ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
|
|
196
189
|
grpc_endpoint_add_to_pollset_set(self->args_->endpoint,
|
197
190
|
self->interested_parties_);
|
198
191
|
}
|
199
|
-
self->FinishLocked(
|
192
|
+
self->FinishLocked(absl::OkStatus());
|
200
193
|
}
|
201
194
|
}
|
202
195
|
|
@@ -205,7 +198,7 @@ TCPConnectHandshaker::~TCPConnectHandshaker() {
|
|
205
198
|
grpc_endpoint_destroy(endpoint_to_destroy_);
|
206
199
|
}
|
207
200
|
if (read_buffer_to_destroy_ != nullptr) {
|
208
|
-
|
201
|
+
grpc_slice_buffer_destroy(read_buffer_to_destroy_);
|
209
202
|
gpr_free(read_buffer_to_destroy_);
|
210
203
|
}
|
211
204
|
grpc_pollset_set_destroy(interested_parties_);
|
@@ -237,6 +230,9 @@ class TCPConnectHandshakerFactory : public HandshakerFactory {
|
|
237
230
|
handshake_mgr->Add(
|
238
231
|
MakeRefCounted<TCPConnectHandshaker>(interested_parties));
|
239
232
|
}
|
233
|
+
HandshakerPriority Priority() override {
|
234
|
+
return HandshakerPriority::kTCPConnectHandshakers;
|
235
|
+
}
|
240
236
|
~TCPConnectHandshakerFactory() override = default;
|
241
237
|
};
|
242
238
|
|
@@ -244,8 +240,7 @@ class TCPConnectHandshakerFactory : public HandshakerFactory {
|
|
244
240
|
|
245
241
|
void RegisterTCPConnectHandshaker(CoreConfiguration::Builder* builder) {
|
246
242
|
builder->handshaker_registry()->RegisterHandshakerFactory(
|
247
|
-
|
248
|
-
absl::make_unique<TCPConnectHandshakerFactory>());
|
243
|
+
HANDSHAKER_CLIENT, std::make_unique<TCPConnectHandshakerFactory>());
|
249
244
|
}
|
250
245
|
|
251
246
|
} // namespace grpc_core
|