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
data/src/core/lib/surface/call.h
CHANGED
@@ -24,14 +24,17 @@
|
|
24
24
|
#include <stddef.h>
|
25
25
|
#include <stdint.h>
|
26
26
|
|
27
|
+
#include "absl/functional/any_invocable.h"
|
27
28
|
#include "absl/strings/string_view.h"
|
28
29
|
#include "absl/types/optional.h"
|
29
30
|
|
30
31
|
#include <grpc/impl/codegen/compression_types.h>
|
31
32
|
#include <grpc/impl/codegen/grpc_types.h>
|
33
|
+
#include <grpc/support/atm.h>
|
32
34
|
#include <grpc/support/log.h>
|
33
35
|
|
34
36
|
#include "src/core/lib/channel/channel_fwd.h"
|
37
|
+
#include "src/core/lib/channel/channel_stack.h"
|
35
38
|
#include "src/core/lib/channel/context.h"
|
36
39
|
#include "src/core/lib/debug/trace.h"
|
37
40
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -39,6 +42,8 @@
|
|
39
42
|
#include "src/core/lib/iomgr/closure.h"
|
40
43
|
#include "src/core/lib/iomgr/error.h"
|
41
44
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
45
|
+
#include "src/core/lib/iomgr/polling_entity.h"
|
46
|
+
#include "src/core/lib/promise/context.h"
|
42
47
|
#include "src/core/lib/resource_quota/arena.h"
|
43
48
|
#include "src/core/lib/slice/slice.h"
|
44
49
|
#include "src/core/lib/surface/api_trace.h"
|
@@ -67,6 +72,45 @@ typedef struct grpc_call_create_args {
|
|
67
72
|
grpc_core::Timestamp send_deadline;
|
68
73
|
} grpc_call_create_args;
|
69
74
|
|
75
|
+
namespace grpc_core {
|
76
|
+
class PromiseBasedCall;
|
77
|
+
|
78
|
+
// TODO(ctiller): move more call things into this type
|
79
|
+
class CallContext {
|
80
|
+
public:
|
81
|
+
explicit CallContext(PromiseBasedCall* call) : call_(call) {}
|
82
|
+
|
83
|
+
// Run some action in the call activity context. This is needed to adapt some
|
84
|
+
// legacy systems to promises, and will likely disappear once that conversion
|
85
|
+
// is complete.
|
86
|
+
void RunInContext(absl::AnyInvocable<void()> fn);
|
87
|
+
|
88
|
+
// TODO(ctiller): remove this once transport APIs are promise based
|
89
|
+
void IncrementRefCount(const char* reason = "call_context");
|
90
|
+
|
91
|
+
// TODO(ctiller): remove this once transport APIs are promise based
|
92
|
+
void Unref(const char* reason = "call_context");
|
93
|
+
|
94
|
+
grpc_call_stats* call_stats() { return &call_stats_; }
|
95
|
+
gpr_atm* peer_string_atm_ptr();
|
96
|
+
grpc_polling_entity* polling_entity() { return &pollent_; }
|
97
|
+
|
98
|
+
private:
|
99
|
+
friend class PromiseBasedCall;
|
100
|
+
// Call final info.
|
101
|
+
grpc_call_stats call_stats_;
|
102
|
+
// Pollset stuff, can't wait to remove.
|
103
|
+
// TODO(ctiller): bring forth EventEngine.
|
104
|
+
grpc_polling_entity pollent_;
|
105
|
+
// TODO(ctiller): remove this once transport APIs are promise based and we
|
106
|
+
// don't need refcounting here.
|
107
|
+
PromiseBasedCall* const call_;
|
108
|
+
};
|
109
|
+
|
110
|
+
template <>
|
111
|
+
struct ContextType<CallContext> {};
|
112
|
+
} // namespace grpc_core
|
113
|
+
|
70
114
|
/* Create a new call based on \a args.
|
71
115
|
Regardless of success or failure, always returns a valid new call into *call
|
72
116
|
*/
|
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
#include "src/core/lib/debug/trace.h"
|
26
26
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
27
|
-
#include "src/core/lib/slice/
|
27
|
+
#include "src/core/lib/slice/slice.h"
|
28
28
|
#include "src/core/lib/surface/api_trace.h"
|
29
29
|
|
30
30
|
void grpc_call_details_init(grpc_call_details* details) {
|
@@ -36,6 +36,6 @@ void grpc_call_details_init(grpc_call_details* details) {
|
|
36
36
|
void grpc_call_details_destroy(grpc_call_details* details) {
|
37
37
|
GRPC_API_TRACE("grpc_call_details_destroy(details=%p)", 1, (details));
|
38
38
|
grpc_core::ExecCtx exec_ctx;
|
39
|
-
|
40
|
-
|
39
|
+
grpc_core::CSliceUnref(details->method);
|
40
|
+
grpc_core::CSliceUnref(details->host);
|
41
41
|
}
|
@@ -0,0 +1,113 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/surface/call_trace.h"
|
18
|
+
|
19
|
+
#include <functional>
|
20
|
+
#include <memory>
|
21
|
+
#include <string>
|
22
|
+
#include <utility>
|
23
|
+
|
24
|
+
#include "absl/base/thread_annotations.h"
|
25
|
+
#include "absl/container/flat_hash_map.h"
|
26
|
+
#include "absl/meta/type_traits.h"
|
27
|
+
#include "absl/status/status.h"
|
28
|
+
#include "absl/types/variant.h"
|
29
|
+
|
30
|
+
#include <grpc/support/log.h>
|
31
|
+
|
32
|
+
#include "src/core/lib/channel/channel_stack.h"
|
33
|
+
#include "src/core/lib/gprpp/no_destruct.h"
|
34
|
+
#include "src/core/lib/gprpp/sync.h"
|
35
|
+
#include "src/core/lib/iomgr/closure.h"
|
36
|
+
#include "src/core/lib/promise/activity.h"
|
37
|
+
#include "src/core/lib/promise/arena_promise.h"
|
38
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
39
|
+
#include "src/core/lib/transport/transport.h"
|
40
|
+
|
41
|
+
namespace grpc_core {
|
42
|
+
|
43
|
+
const grpc_channel_filter* PromiseTracingFilterFor(
|
44
|
+
const grpc_channel_filter* filter) {
|
45
|
+
struct DerivedFilter : public grpc_channel_filter {
|
46
|
+
explicit DerivedFilter(const grpc_channel_filter* filter)
|
47
|
+
: grpc_channel_filter{
|
48
|
+
/* start_transport_stream_op_batch: */ grpc_call_next_op,
|
49
|
+
/* make_call_promise: */
|
50
|
+
[](grpc_channel_element* elem, CallArgs call_args,
|
51
|
+
NextPromiseFactory next_promise_factory)
|
52
|
+
-> ArenaPromise<ServerMetadataHandle> {
|
53
|
+
auto* source_filter =
|
54
|
+
static_cast<const DerivedFilter*>(elem->filter)->filter;
|
55
|
+
gpr_log(
|
56
|
+
GPR_DEBUG,
|
57
|
+
"%sCreateCallPromise[%s]: client_initial_metadata=%s",
|
58
|
+
Activity::current()->DebugTag().c_str(),
|
59
|
+
source_filter->name,
|
60
|
+
call_args.client_initial_metadata->DebugString().c_str());
|
61
|
+
return [source_filter, child = next_promise_factory(
|
62
|
+
std::move(call_args))]() mutable {
|
63
|
+
gpr_log(GPR_DEBUG, "%sPollCallPromise[%s]: begin",
|
64
|
+
Activity::current()->DebugTag().c_str(),
|
65
|
+
source_filter->name);
|
66
|
+
auto r = child();
|
67
|
+
if (auto* p = absl::get_if<ServerMetadataHandle>(&r)) {
|
68
|
+
gpr_log(GPR_DEBUG, "%sPollCallPromise[%s]: done: %s",
|
69
|
+
Activity::current()->DebugTag().c_str(),
|
70
|
+
source_filter->name, (*p)->DebugString().c_str());
|
71
|
+
} else {
|
72
|
+
gpr_log(GPR_DEBUG, "%sPollCallPromise[%s]: <<pending>",
|
73
|
+
Activity::current()->DebugTag().c_str(),
|
74
|
+
source_filter->name);
|
75
|
+
}
|
76
|
+
return r;
|
77
|
+
};
|
78
|
+
},
|
79
|
+
grpc_channel_next_op, /* sizeof_call_data: */ 0,
|
80
|
+
/* init_call_elem: */
|
81
|
+
[](grpc_call_element*, const grpc_call_element_args*) {
|
82
|
+
return absl::OkStatus();
|
83
|
+
},
|
84
|
+
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
85
|
+
/* destroy_call_elem: */
|
86
|
+
[](grpc_call_element*, const grpc_call_final_info*,
|
87
|
+
grpc_closure*) {},
|
88
|
+
/* sizeof_channel_data: */ 0, /* init_channel_elem: */
|
89
|
+
[](grpc_channel_element*, grpc_channel_element_args*) {
|
90
|
+
return absl::OkStatus();
|
91
|
+
},
|
92
|
+
/* post_init_channel_elem: */
|
93
|
+
[](grpc_channel_stack*, grpc_channel_element*) {},
|
94
|
+
/* destroy_channel_elem: */ [](grpc_channel_element*) {},
|
95
|
+
grpc_channel_next_get_info, filter->name},
|
96
|
+
filter(filter) {}
|
97
|
+
const grpc_channel_filter* const filter;
|
98
|
+
};
|
99
|
+
struct Globals {
|
100
|
+
Mutex mu;
|
101
|
+
absl::flat_hash_map<const grpc_channel_filter*,
|
102
|
+
std::unique_ptr<DerivedFilter>>
|
103
|
+
map ABSL_GUARDED_BY(mu);
|
104
|
+
};
|
105
|
+
auto* globals = NoDestructSingleton<Globals>::Get();
|
106
|
+
MutexLock lock(&globals->mu);
|
107
|
+
auto it = globals->map.find(filter);
|
108
|
+
if (it != globals->map.end()) return it->second.get();
|
109
|
+
return globals->map.emplace(filter, std::make_unique<DerivedFilter>(filter))
|
110
|
+
.first->second.get();
|
111
|
+
}
|
112
|
+
|
113
|
+
} // namespace grpc_core
|
@@ -0,0 +1,30 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_SURFACE_CALL_TRACE_H
|
16
|
+
#define GRPC_CORE_LIB_SURFACE_CALL_TRACE_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/lib/channel/channel_fwd.h"
|
21
|
+
#include "src/core/lib/debug/trace.h"
|
22
|
+
|
23
|
+
extern grpc_core::TraceFlag grpc_call_trace;
|
24
|
+
|
25
|
+
namespace grpc_core {
|
26
|
+
const grpc_channel_filter* PromiseTracingFilterFor(
|
27
|
+
const grpc_channel_filter* filter);
|
28
|
+
}
|
29
|
+
|
30
|
+
#endif // GRPC_CORE_LIB_SURFACE_CALL_TRACE_H
|
@@ -43,6 +43,7 @@
|
|
43
43
|
#include "src/core/lib/channel/channelz.h"
|
44
44
|
#include "src/core/lib/config/core_configuration.h"
|
45
45
|
#include "src/core/lib/debug/stats.h"
|
46
|
+
#include "src/core/lib/debug/stats_data.h"
|
46
47
|
#include "src/core/lib/debug/trace.h"
|
47
48
|
#include "src/core/lib/gpr/useful.h"
|
48
49
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
@@ -51,7 +52,6 @@
|
|
51
52
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
52
53
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
53
54
|
#include "src/core/lib/resource_quota/resource_quota.h"
|
54
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
55
55
|
#include "src/core/lib/surface/api_trace.h"
|
56
56
|
#include "src/core/lib/surface/call.h"
|
57
57
|
#include "src/core/lib/surface/channel_init.h"
|
@@ -63,11 +63,12 @@
|
|
63
63
|
|
64
64
|
namespace grpc_core {
|
65
65
|
|
66
|
-
Channel::Channel(bool is_client, std::string target,
|
66
|
+
Channel::Channel(bool is_client, bool is_promising, std::string target,
|
67
67
|
const ChannelArgs& channel_args,
|
68
68
|
grpc_compression_options compression_options,
|
69
69
|
RefCountedPtr<grpc_channel_stack> channel_stack)
|
70
70
|
: is_client_(is_client),
|
71
|
+
is_promising_(is_promising),
|
71
72
|
compression_options_(compression_options),
|
72
73
|
call_size_estimate_(channel_stack->call_stack_size +
|
73
74
|
grpc_call_get_initial_size_estimate()),
|
@@ -109,9 +110,9 @@ absl::StatusOr<RefCountedPtr<Channel>> Channel::CreateWithBuilder(
|
|
109
110
|
ChannelStackBuilder* builder) {
|
110
111
|
auto channel_args = builder->channel_args();
|
111
112
|
if (builder->channel_stack_type() == GRPC_SERVER_CHANNEL) {
|
112
|
-
|
113
|
+
global_stats().IncrementServerChannelsCreated();
|
113
114
|
} else {
|
114
|
-
|
115
|
+
global_stats().IncrementClientChannelsCreated();
|
115
116
|
}
|
116
117
|
absl::StatusOr<RefCountedPtr<grpc_channel_stack>> r = builder->Build();
|
117
118
|
if (!r.ok()) {
|
@@ -151,8 +152,8 @@ absl::StatusOr<RefCountedPtr<Channel>> Channel::CreateWithBuilder(
|
|
151
152
|
|
152
153
|
return RefCountedPtr<Channel>(new Channel(
|
153
154
|
grpc_channel_stack_type_is_client(builder->channel_stack_type()),
|
154
|
-
std::string(builder->target()), channel_args,
|
155
|
-
std::move(*r)));
|
155
|
+
builder->IsPromising(), std::string(builder->target()), channel_args,
|
156
|
+
compression_options, std::move(*r)));
|
156
157
|
}
|
157
158
|
|
158
159
|
namespace {
|
@@ -169,44 +170,12 @@ void channelz_node_destroy(void* p) {
|
|
169
170
|
int channelz_node_cmp(void* p1, void* p2) { return QsortCompare(p1, p2); }
|
170
171
|
const grpc_arg_pointer_vtable channelz_node_arg_vtable = {
|
171
172
|
channelz_node_copy, channelz_node_destroy, channelz_node_cmp};
|
172
|
-
|
173
|
-
void CreateChannelzNode(ChannelStackBuilder* builder) {
|
174
|
-
auto args = builder->channel_args();
|
175
|
-
// Check whether channelz is enabled.
|
176
|
-
const bool channelz_enabled = args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
177
|
-
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT);
|
178
|
-
if (!channelz_enabled) return;
|
179
|
-
// Get parameters needed to create the channelz node.
|
180
|
-
const size_t channel_tracer_max_memory = std::max(
|
181
|
-
0, args.GetInt(GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)
|
182
|
-
.value_or(GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT));
|
183
|
-
const bool is_internal_channel =
|
184
|
-
args.GetBool(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL).value_or(false);
|
185
|
-
// Create the channelz node.
|
186
|
-
std::string target(builder->target());
|
187
|
-
RefCountedPtr<channelz::ChannelNode> channelz_node =
|
188
|
-
MakeRefCounted<channelz::ChannelNode>(
|
189
|
-
target.c_str(), channel_tracer_max_memory, is_internal_channel);
|
190
|
-
channelz_node->AddTraceEvent(
|
191
|
-
channelz::ChannelTrace::Severity::Info,
|
192
|
-
grpc_slice_from_static_string("Channel created"));
|
193
|
-
// Add channelz node to channel args.
|
194
|
-
// We remove the is_internal_channel arg, since we no longer need it.
|
195
|
-
builder->SetChannelArgs(
|
196
|
-
args.Remove(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL)
|
197
|
-
.Set(GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
198
|
-
ChannelArgs::Pointer(channelz_node.release(),
|
199
|
-
&channelz_node_arg_vtable)));
|
200
|
-
}
|
201
|
-
|
202
173
|
} // namespace
|
203
174
|
|
204
175
|
absl::StatusOr<RefCountedPtr<Channel>> Channel::Create(
|
205
176
|
const char* target, ChannelArgs args,
|
206
177
|
grpc_channel_stack_type channel_stack_type,
|
207
178
|
grpc_transport* optional_transport) {
|
208
|
-
ChannelStackBuilderImpl builder(
|
209
|
-
grpc_channel_stack_type_string(channel_stack_type), channel_stack_type);
|
210
179
|
if (!args.GetString(GRPC_ARG_DEFAULT_AUTHORITY).has_value()) {
|
211
180
|
auto ssl_override = args.GetString(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG);
|
212
181
|
if (ssl_override.has_value()) {
|
@@ -221,15 +190,42 @@ absl::StatusOr<RefCountedPtr<Channel>> Channel::Create(
|
|
221
190
|
args = channel_args_mutator(target, args, channel_stack_type);
|
222
191
|
}
|
223
192
|
}
|
224
|
-
builder.SetChannelArgs(args).SetTarget(target).SetTransport(
|
225
|
-
optional_transport);
|
226
|
-
if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
|
227
|
-
return nullptr;
|
228
|
-
}
|
229
193
|
// We only need to do this for clients here. For servers, this will be
|
230
194
|
// done in src/core/lib/surface/server.cc.
|
231
195
|
if (grpc_channel_stack_type_is_client(channel_stack_type)) {
|
232
|
-
|
196
|
+
// Check whether channelz is enabled.
|
197
|
+
if (args.GetBool(GRPC_ARG_ENABLE_CHANNELZ)
|
198
|
+
.value_or(GRPC_ENABLE_CHANNELZ_DEFAULT)) {
|
199
|
+
// Get parameters needed to create the channelz node.
|
200
|
+
const size_t channel_tracer_max_memory = std::max(
|
201
|
+
0,
|
202
|
+
args.GetInt(GRPC_ARG_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE)
|
203
|
+
.value_or(GRPC_MAX_CHANNEL_TRACE_EVENT_MEMORY_PER_NODE_DEFAULT));
|
204
|
+
const bool is_internal_channel =
|
205
|
+
args.GetBool(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL).value_or(false);
|
206
|
+
// Create the channelz node.
|
207
|
+
std::string channelz_node_target{target == nullptr ? "unknown" : target};
|
208
|
+
RefCountedPtr<channelz::ChannelNode> channelz_node =
|
209
|
+
MakeRefCounted<channelz::ChannelNode>(channelz_node_target,
|
210
|
+
channel_tracer_max_memory,
|
211
|
+
is_internal_channel);
|
212
|
+
channelz_node->AddTraceEvent(
|
213
|
+
channelz::ChannelTrace::Severity::Info,
|
214
|
+
grpc_slice_from_static_string("Channel created"));
|
215
|
+
// Add channelz node to channel args.
|
216
|
+
// We remove the is_internal_channel arg, since we no longer need it.
|
217
|
+
args = args.Remove(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL)
|
218
|
+
.Set(GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
219
|
+
ChannelArgs::Pointer(channelz_node.release(),
|
220
|
+
&channelz_node_arg_vtable));
|
221
|
+
}
|
222
|
+
}
|
223
|
+
ChannelStackBuilderImpl builder(
|
224
|
+
grpc_channel_stack_type_string(channel_stack_type), channel_stack_type,
|
225
|
+
args);
|
226
|
+
builder.SetTarget(target).SetTransport(optional_transport);
|
227
|
+
if (!CoreConfiguration::Get().channel_init().CreateStack(&builder)) {
|
228
|
+
return nullptr;
|
233
229
|
}
|
234
230
|
return CreateWithBuilder(&builder);
|
235
231
|
}
|
@@ -320,9 +316,9 @@ grpc_call* grpc_channel_create_call(grpc_channel* channel,
|
|
320
316
|
grpc_core::ExecCtx exec_ctx;
|
321
317
|
grpc_call* call = grpc_channel_create_call_internal(
|
322
318
|
channel, parent_call, propagation_mask, completion_queue, nullptr,
|
323
|
-
grpc_core::Slice(
|
319
|
+
grpc_core::Slice(grpc_core::CSliceRef(method)),
|
324
320
|
host != nullptr
|
325
|
-
? absl::optional<grpc_core::Slice>(
|
321
|
+
? absl::optional<grpc_core::Slice>(grpc_core::CSliceRef(*host))
|
326
322
|
: absl::nullopt,
|
327
323
|
grpc_core::Timestamp::FromTimespecRoundUp(deadline));
|
328
324
|
|
@@ -338,7 +334,7 @@ grpc_call* grpc_channel_create_pollset_set_call(
|
|
338
334
|
channel, parent_call, propagation_mask, nullptr, pollset_set,
|
339
335
|
grpc_core::Slice(method),
|
340
336
|
host != nullptr
|
341
|
-
? absl::optional<grpc_core::Slice>(
|
337
|
+
? absl::optional<grpc_core::Slice>(grpc_core::CSliceRef(*host))
|
342
338
|
: absl::nullopt,
|
343
339
|
deadline);
|
344
340
|
}
|
@@ -429,8 +425,7 @@ void grpc_channel_destroy_internal(grpc_channel* c_channel) {
|
|
429
425
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
430
426
|
grpc_channel_element* elem;
|
431
427
|
GRPC_API_TRACE("grpc_channel_destroy(channel=%p)", 1, (c_channel));
|
432
|
-
op->disconnect_with_error =
|
433
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Destroyed");
|
428
|
+
op->disconnect_with_error = GRPC_ERROR_CREATE("Channel Destroyed");
|
434
429
|
elem = grpc_channel_stack_element(channel->channel_stack(), 0);
|
435
430
|
elem->filter->start_transport_op(elem, op);
|
436
431
|
}
|
@@ -34,6 +34,7 @@
|
|
34
34
|
#include "absl/strings/string_view.h"
|
35
35
|
#include "absl/types/optional.h"
|
36
36
|
|
37
|
+
#include <grpc/event_engine/event_engine.h>
|
37
38
|
#include <grpc/event_engine/memory_allocator.h>
|
38
39
|
#include <grpc/impl/codegen/compression_types.h>
|
39
40
|
#include <grpc/impl/codegen/grpc_types.h>
|
@@ -141,6 +142,7 @@ class Channel : public RefCounted<Channel>,
|
|
141
142
|
absl::string_view target() const { return target_; }
|
142
143
|
MemoryAllocator* allocator() { return &allocator_; }
|
143
144
|
bool is_client() const { return is_client_; }
|
145
|
+
bool is_promising() const { return is_promising_; }
|
144
146
|
RegisteredCall* RegisterCall(const char* method, const char* host);
|
145
147
|
|
146
148
|
int TestOnlyRegisteredCalls() {
|
@@ -153,12 +155,18 @@ class Channel : public RefCounted<Channel>,
|
|
153
155
|
return registration_table_.method_registration_attempts;
|
154
156
|
}
|
155
157
|
|
158
|
+
grpc_event_engine::experimental::EventEngine* event_engine() const {
|
159
|
+
return channel_stack_->EventEngine();
|
160
|
+
}
|
161
|
+
|
156
162
|
private:
|
157
|
-
Channel(bool is_client, std::string target,
|
163
|
+
Channel(bool is_client, bool is_promising, std::string target,
|
164
|
+
const ChannelArgs& channel_args,
|
158
165
|
grpc_compression_options compression_options,
|
159
166
|
RefCountedPtr<grpc_channel_stack> channel_stack);
|
160
167
|
|
161
168
|
const bool is_client_;
|
169
|
+
const bool is_promising_;
|
162
170
|
const grpc_compression_options compression_options_;
|
163
171
|
std::atomic<size_t> call_size_estimate_;
|
164
172
|
CallRegistrationTable registration_table_;
|
@@ -45,7 +45,7 @@ static void ping_destroy(void* arg, grpc_cq_completion* /*storage*/) {
|
|
45
45
|
|
46
46
|
static void ping_done(void* arg, grpc_error_handle error) {
|
47
47
|
ping_result* pr = static_cast<ping_result*>(arg);
|
48
|
-
grpc_cq_end_op(pr->cq, pr->tag,
|
48
|
+
grpc_cq_end_op(pr->cq, pr->tag, error, ping_destroy, pr,
|
49
49
|
&pr->completion_storage);
|
50
50
|
}
|
51
51
|
|
@@ -30,6 +30,8 @@ bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type) {
|
|
30
30
|
return true;
|
31
31
|
case GRPC_CLIENT_DIRECT_CHANNEL:
|
32
32
|
return true;
|
33
|
+
case GRPC_CLIENT_DYNAMIC:
|
34
|
+
return true;
|
33
35
|
case GRPC_SERVER_CHANNEL:
|
34
36
|
return false;
|
35
37
|
case GRPC_NUM_CHANNEL_STACK_TYPES:
|
@@ -50,6 +52,8 @@ const char* grpc_channel_stack_type_string(grpc_channel_stack_type type) {
|
|
50
52
|
return "CLIENT_LAME_CHANNEL";
|
51
53
|
case GRPC_CLIENT_DIRECT_CHANNEL:
|
52
54
|
return "CLIENT_DIRECT_CHANNEL";
|
55
|
+
case GRPC_CLIENT_DYNAMIC:
|
56
|
+
return "CLIENT_DYNAMIC_CHANNEL";
|
53
57
|
case GRPC_NUM_CHANNEL_STACK_TYPES:
|
54
58
|
break;
|
55
59
|
}
|
@@ -27,6 +27,8 @@ typedef enum {
|
|
27
27
|
// bottom-half of a client channel: everything that happens post-load
|
28
28
|
// balancing (bound to a specific transport)
|
29
29
|
GRPC_CLIENT_SUBCHANNEL,
|
30
|
+
// dynamic part of a client channel
|
31
|
+
GRPC_CLIENT_DYNAMIC,
|
30
32
|
// a permanently broken client channel
|
31
33
|
GRPC_CLIENT_LAME_CHANNEL,
|
32
34
|
// a directly connected client channel (without load-balancing, directly talks
|