grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -21,9 +21,18 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include
|
24
|
+
#include <stdint.h>
|
25
|
+
#include <stdlib.h>
|
25
26
|
|
26
|
-
#include <
|
27
|
+
#include <atomic>
|
28
|
+
#include <new>
|
29
|
+
#include <type_traits>
|
30
|
+
#include <utility>
|
31
|
+
|
32
|
+
#include "absl/container/inlined_vector.h"
|
33
|
+
#include "absl/meta/type_traits.h"
|
34
|
+
|
35
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
27
36
|
#include <grpc/support/log.h>
|
28
37
|
|
29
38
|
#include "src/core/lib/channel/call_finalization.h"
|
@@ -31,11 +40,21 @@
|
|
31
40
|
#include "src/core/lib/channel/channel_stack.h"
|
32
41
|
#include "src/core/lib/channel/context.h"
|
33
42
|
#include "src/core/lib/gprpp/debug_location.h"
|
43
|
+
#include "src/core/lib/gprpp/time.h"
|
44
|
+
#include "src/core/lib/iomgr/call_combiner.h"
|
45
|
+
#include "src/core/lib/iomgr/closure.h"
|
34
46
|
#include "src/core/lib/iomgr/error.h"
|
47
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
48
|
+
#include "src/core/lib/iomgr/polling_entity.h"
|
49
|
+
#include "src/core/lib/promise/activity.h"
|
35
50
|
#include "src/core/lib/promise/arena_promise.h"
|
36
51
|
#include "src/core/lib/promise/context.h"
|
37
|
-
#include "src/core/lib/promise/
|
52
|
+
#include "src/core/lib/promise/latch.h"
|
53
|
+
#include "src/core/lib/promise/poll.h"
|
54
|
+
#include "src/core/lib/resource_quota/arena.h"
|
38
55
|
#include "src/core/lib/transport/error_utils.h"
|
56
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
57
|
+
#include "src/core/lib/transport/transport.h"
|
39
58
|
|
40
59
|
namespace grpc_core {
|
41
60
|
|
@@ -59,6 +78,9 @@ class ChannelFilter {
|
|
59
78
|
grpc_channel_element* channel_element_;
|
60
79
|
};
|
61
80
|
|
81
|
+
// Perform post-initialization step (if any).
|
82
|
+
virtual void PostInit() {}
|
83
|
+
|
62
84
|
// Construct a promise for one call.
|
63
85
|
virtual ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
64
86
|
CallArgs call_args, NextPromiseFactory next_promise_factory) = 0;
|
@@ -70,12 +92,18 @@ class ChannelFilter {
|
|
70
92
|
// structures going forward.
|
71
93
|
virtual bool StartTransportOp(grpc_transport_op*) { return false; }
|
72
94
|
|
95
|
+
// Perform a legacy get info call
|
96
|
+
// Return true if the op was handled, false if it should be passed to the
|
97
|
+
// next filter.
|
98
|
+
// TODO(ctiller): design a new API for this
|
99
|
+
virtual bool GetChannelInfo(const grpc_channel_info*) { return false; }
|
100
|
+
|
73
101
|
virtual ~ChannelFilter() = default;
|
74
102
|
};
|
75
103
|
|
76
104
|
// Designator for whether a filter is client side or server side.
|
77
|
-
// Please don't use this outside calls to MakePromiseBasedFilter - it's
|
78
|
-
// to be deleted once the promise conversion is complete.
|
105
|
+
// Please don't use this outside calls to MakePromiseBasedFilter - it's
|
106
|
+
// intended to be deleted once the promise conversion is complete.
|
79
107
|
enum class FilterEndpoint {
|
80
108
|
kClient,
|
81
109
|
kServer,
|
@@ -83,9 +111,20 @@ enum class FilterEndpoint {
|
|
83
111
|
|
84
112
|
// Flags for MakePromiseBasedFilter.
|
85
113
|
static constexpr uint8_t kFilterExaminesServerInitialMetadata = 1;
|
114
|
+
static constexpr uint8_t kFilterIsLast = 2;
|
86
115
|
|
87
116
|
namespace promise_filter_detail {
|
88
117
|
|
118
|
+
// Proxy channel filter for initialization failure, since we must leave a
|
119
|
+
// valid filter in place.
|
120
|
+
class InvalidChannelFilter : public ChannelFilter {
|
121
|
+
public:
|
122
|
+
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
123
|
+
CallArgs, NextPromiseFactory) override {
|
124
|
+
abort();
|
125
|
+
}
|
126
|
+
};
|
127
|
+
|
89
128
|
// Call data shared between all implementations of promise-based filters.
|
90
129
|
class BaseCallData : public Activity, private Wakeable {
|
91
130
|
public:
|
@@ -124,6 +163,69 @@ class BaseCallData : public Activity, private Wakeable {
|
|
124
163
|
}
|
125
164
|
};
|
126
165
|
|
166
|
+
class Flusher {
|
167
|
+
public:
|
168
|
+
explicit Flusher(BaseCallData* call);
|
169
|
+
// Calls closures, schedules batches, relinquishes call combiner.
|
170
|
+
~Flusher();
|
171
|
+
|
172
|
+
void Resume(grpc_transport_stream_op_batch* batch) {
|
173
|
+
release_.push_back(batch);
|
174
|
+
}
|
175
|
+
|
176
|
+
void Cancel(grpc_transport_stream_op_batch* batch,
|
177
|
+
grpc_error_handle error) {
|
178
|
+
grpc_transport_stream_op_batch_queue_finish_with_failure(batch, error,
|
179
|
+
&call_closures_);
|
180
|
+
}
|
181
|
+
|
182
|
+
void Complete(grpc_transport_stream_op_batch* batch) {
|
183
|
+
call_closures_.Add(batch->on_complete, GRPC_ERROR_NONE,
|
184
|
+
"Flusher::Complete");
|
185
|
+
}
|
186
|
+
|
187
|
+
void AddClosure(grpc_closure* closure, grpc_error_handle error,
|
188
|
+
const char* reason) {
|
189
|
+
call_closures_.Add(closure, error, reason);
|
190
|
+
}
|
191
|
+
|
192
|
+
private:
|
193
|
+
absl::InlinedVector<grpc_transport_stream_op_batch*, 1> release_;
|
194
|
+
CallCombinerClosureList call_closures_;
|
195
|
+
BaseCallData* const call_;
|
196
|
+
};
|
197
|
+
|
198
|
+
// Smart pointer like wrapper around a batch.
|
199
|
+
// Creation makes a ref count of one capture.
|
200
|
+
// Copying increments.
|
201
|
+
// Must be moved from or resumed or cancelled before destruction.
|
202
|
+
class CapturedBatch final {
|
203
|
+
public:
|
204
|
+
CapturedBatch();
|
205
|
+
explicit CapturedBatch(grpc_transport_stream_op_batch* batch);
|
206
|
+
~CapturedBatch();
|
207
|
+
CapturedBatch(const CapturedBatch&);
|
208
|
+
CapturedBatch& operator=(const CapturedBatch&);
|
209
|
+
CapturedBatch(CapturedBatch&&) noexcept;
|
210
|
+
CapturedBatch& operator=(CapturedBatch&&) noexcept;
|
211
|
+
|
212
|
+
grpc_transport_stream_op_batch* operator->() { return batch_; }
|
213
|
+
bool is_captured() const { return batch_ != nullptr; }
|
214
|
+
|
215
|
+
// Resume processing this batch (releases one ref, passes it down the
|
216
|
+
// stack)
|
217
|
+
void ResumeWith(Flusher* releaser);
|
218
|
+
// Cancel this batch immediately (releases all refs)
|
219
|
+
void CancelWith(grpc_error_handle error, Flusher* releaser);
|
220
|
+
// Complete this batch (pass it up) assuming refs drop to zero
|
221
|
+
void CompleteWith(Flusher* releaser);
|
222
|
+
|
223
|
+
void Swap(CapturedBatch* other) { std::swap(batch_, other->batch_); }
|
224
|
+
|
225
|
+
private:
|
226
|
+
grpc_transport_stream_op_batch* batch_;
|
227
|
+
};
|
228
|
+
|
127
229
|
static MetadataHandle<grpc_metadata_batch> WrapMetadata(
|
128
230
|
grpc_metadata_batch* p) {
|
129
231
|
return MetadataHandle<grpc_metadata_batch>(p);
|
@@ -143,6 +245,11 @@ class BaseCallData : public Activity, private Wakeable {
|
|
143
245
|
return server_initial_metadata_latch_;
|
144
246
|
}
|
145
247
|
|
248
|
+
bool is_last() const {
|
249
|
+
return grpc_call_stack_element(call_stack_, call_stack_->count - 1) ==
|
250
|
+
elem_;
|
251
|
+
}
|
252
|
+
|
146
253
|
private:
|
147
254
|
// Wakeable implementation.
|
148
255
|
void Wakeup() final;
|
@@ -190,7 +297,8 @@ class ClientCallData : public BaseCallData {
|
|
190
297
|
// Start state: no op seen
|
191
298
|
kInitial,
|
192
299
|
// We saw the op, and since it was bundled with send initial metadata, we
|
193
|
-
// queued it until the send initial metadata can be sent to the next
|
300
|
+
// queued it until the send initial metadata can be sent to the next
|
301
|
+
// filter.
|
194
302
|
kQueued,
|
195
303
|
// We've forwarded the op to the next filter.
|
196
304
|
kForwarded,
|
@@ -212,11 +320,11 @@ class ClientCallData : public BaseCallData {
|
|
212
320
|
void Cancel(grpc_error_handle error);
|
213
321
|
// Begin running the promise - which will ultimately take some initial
|
214
322
|
// metadata and return some trailing metadata.
|
215
|
-
void StartPromise();
|
216
|
-
// Interject our callback into the op batch for recv trailing metadata
|
217
|
-
// Stash a pointer to the trailing metadata that will be filled in,
|
218
|
-
// manipulate it later.
|
219
|
-
void HookRecvTrailingMetadata(
|
323
|
+
void StartPromise(Flusher* flusher);
|
324
|
+
// Interject our callback into the op batch for recv trailing metadata
|
325
|
+
// ready. Stash a pointer to the trailing metadata that will be filled in,
|
326
|
+
// so we can manipulate it later.
|
327
|
+
void HookRecvTrailingMetadata(CapturedBatch batch);
|
220
328
|
// Construct a promise that will "call" the next filter.
|
221
329
|
// Effectively:
|
222
330
|
// - put the modified initial metadata into the batch to be sent down.
|
@@ -235,13 +343,13 @@ class ClientCallData : public BaseCallData {
|
|
235
343
|
void SetStatusFromError(grpc_metadata_batch* metadata,
|
236
344
|
grpc_error_handle error);
|
237
345
|
// Wakeup and poll the promise if appropriate.
|
238
|
-
void WakeInsideCombiner();
|
346
|
+
void WakeInsideCombiner(Flusher* flusher);
|
239
347
|
void OnWakeup() override;
|
240
348
|
|
241
349
|
// Contained promise
|
242
350
|
ArenaPromise<ServerMetadataHandle> promise_;
|
243
351
|
// Queued batch containing at least a send_initial_metadata op.
|
244
|
-
|
352
|
+
CapturedBatch send_initial_metadata_batch_;
|
245
353
|
// Pointer to where trailing metadata will be stored.
|
246
354
|
grpc_metadata_batch* recv_trailing_metadata_ = nullptr;
|
247
355
|
// State tracking recv initial metadata for filters that care about it.
|
@@ -298,8 +406,11 @@ class ServerCallData : public BaseCallData {
|
|
298
406
|
kCancelled
|
299
407
|
};
|
300
408
|
|
409
|
+
class PollContext;
|
410
|
+
struct SendInitialMetadata;
|
411
|
+
|
301
412
|
// Handle cancellation.
|
302
|
-
void Cancel(grpc_error_handle error);
|
413
|
+
void Cancel(grpc_error_handle error, Flusher* flusher);
|
303
414
|
// Construct a promise that will "call" the next filter.
|
304
415
|
// Effectively:
|
305
416
|
// - put the modified initial metadata into the batch being sent up.
|
@@ -313,13 +424,15 @@ class ServerCallData : public BaseCallData {
|
|
313
424
|
grpc_error_handle error);
|
314
425
|
void RecvInitialMetadataReady(grpc_error_handle error);
|
315
426
|
// Wakeup and poll the promise if appropriate.
|
316
|
-
void WakeInsideCombiner(
|
427
|
+
void WakeInsideCombiner(Flusher* flusher);
|
317
428
|
void OnWakeup() override;
|
318
429
|
|
319
430
|
// Contained promise
|
320
431
|
ArenaPromise<ServerMetadataHandle> promise_;
|
321
432
|
// Pointer to where initial metadata will be stored.
|
322
433
|
grpc_metadata_batch* recv_initial_metadata_ = nullptr;
|
434
|
+
// State for sending initial metadata.
|
435
|
+
SendInitialMetadata* send_initial_metadata_ = nullptr;
|
323
436
|
// Closure to call when we're done with the trailing metadata.
|
324
437
|
grpc_closure* original_recv_initial_metadata_ready_ = nullptr;
|
325
438
|
// Our closure pointing to RecvInitialMetadataReadyCallback.
|
@@ -327,13 +440,13 @@ class ServerCallData : public BaseCallData {
|
|
327
440
|
// Error received during cancellation.
|
328
441
|
grpc_error_handle cancelled_error_ = GRPC_ERROR_NONE;
|
329
442
|
// Trailing metadata batch
|
330
|
-
|
443
|
+
CapturedBatch send_trailing_metadata_batch_;
|
331
444
|
// State of the send_initial_metadata op.
|
332
445
|
RecvInitialState recv_initial_state_ = RecvInitialState::kInitial;
|
333
446
|
// State of the recv_trailing_metadata op.
|
334
447
|
SendTrailingState send_trailing_state_ = SendTrailingState::kInitial;
|
335
|
-
//
|
336
|
-
|
448
|
+
// Current poll context (or nullptr if not polling).
|
449
|
+
PollContext* poll_ctx_ = nullptr;
|
337
450
|
// Whether to forward the recv_initial_metadata op at the end of promise
|
338
451
|
// wakeup.
|
339
452
|
bool forward_recv_initial_metadata_callback_ = false;
|
@@ -367,8 +480,6 @@ class CallData<ChannelFilter, FilterEndpoint::kServer> : public ServerCallData {
|
|
367
480
|
// static absl::StatusOr<SomeChannelFilter> Create(
|
368
481
|
// ChannelArgs channel_args, ChannelFilter::Args filter_args);
|
369
482
|
// };
|
370
|
-
// TODO(ctiller): allow implementing get_channel_info, start_transport_op in
|
371
|
-
// some way on ChannelFilter.
|
372
483
|
template <typename F, FilterEndpoint kEndpoint, uint8_t kFlags = 0>
|
373
484
|
absl::enable_if_t<std::is_base_of<ChannelFilter, F>::value, grpc_channel_filter>
|
374
485
|
MakePromiseBasedFilter(const char* name) {
|
@@ -382,13 +493,14 @@ MakePromiseBasedFilter(const char* name) {
|
|
382
493
|
// make_call_promise
|
383
494
|
[](grpc_channel_element* elem, CallArgs call_args,
|
384
495
|
NextPromiseFactory next_promise_factory) {
|
385
|
-
return static_cast<
|
496
|
+
return static_cast<ChannelFilter*>(elem->channel_data)
|
386
497
|
->MakeCallPromise(std::move(call_args),
|
387
498
|
std::move(next_promise_factory));
|
388
499
|
},
|
389
500
|
// start_transport_op
|
390
501
|
[](grpc_channel_element* elem, grpc_transport_op* op) {
|
391
|
-
if (!static_cast<
|
502
|
+
if (!static_cast<ChannelFilter*>(elem->channel_data)
|
503
|
+
->StartTransportOp(op)) {
|
392
504
|
grpc_channel_next_op(elem, op);
|
393
505
|
}
|
394
506
|
},
|
@@ -405,28 +517,49 @@ MakePromiseBasedFilter(const char* name) {
|
|
405
517
|
},
|
406
518
|
// destroy_call_elem
|
407
519
|
[](grpc_call_element* elem, const grpc_call_final_info* final_info,
|
408
|
-
grpc_closure*) {
|
520
|
+
grpc_closure* then_schedule_closure) {
|
409
521
|
auto* cd = static_cast<CallData*>(elem->call_data);
|
410
522
|
cd->Finalize(final_info);
|
411
523
|
cd->~CallData();
|
524
|
+
if ((kFlags & kFilterIsLast) != 0) {
|
525
|
+
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
|
526
|
+
} else {
|
527
|
+
GPR_ASSERT(then_schedule_closure == nullptr);
|
528
|
+
}
|
412
529
|
},
|
413
530
|
// sizeof_channel_data
|
414
531
|
sizeof(F),
|
415
532
|
// init_channel_elem
|
416
533
|
[](grpc_channel_element* elem, grpc_channel_element_args* args) {
|
417
|
-
GPR_ASSERT(
|
534
|
+
GPR_ASSERT(args->is_last == ((kFlags & kFilterIsLast) != 0));
|
418
535
|
auto status = F::Create(ChannelArgs::FromC(args->channel_args),
|
419
536
|
ChannelFilter::Args(args->channel_stack, elem));
|
420
|
-
if (!status.ok())
|
537
|
+
if (!status.ok()) {
|
538
|
+
static_assert(
|
539
|
+
sizeof(promise_filter_detail::InvalidChannelFilter) <= sizeof(F),
|
540
|
+
"InvalidChannelFilter must fit in F");
|
541
|
+
new (elem->channel_data)
|
542
|
+
promise_filter_detail::InvalidChannelFilter();
|
543
|
+
return absl_status_to_grpc_error(status.status());
|
544
|
+
}
|
421
545
|
new (elem->channel_data) F(std::move(*status));
|
422
546
|
return GRPC_ERROR_NONE;
|
423
547
|
},
|
548
|
+
// post_init_channel_elem
|
549
|
+
[](grpc_channel_stack*, grpc_channel_element* elem) {
|
550
|
+
static_cast<ChannelFilter*>(elem->channel_data)->PostInit();
|
551
|
+
},
|
424
552
|
// destroy_channel_elem
|
425
553
|
[](grpc_channel_element* elem) {
|
426
|
-
static_cast<
|
554
|
+
static_cast<ChannelFilter*>(elem->channel_data)->~ChannelFilter();
|
427
555
|
},
|
428
556
|
// get_channel_info
|
429
|
-
|
557
|
+
[](grpc_channel_element* elem, const grpc_channel_info* info) {
|
558
|
+
if (!static_cast<ChannelFilter*>(elem->channel_data)
|
559
|
+
->GetChannelInfo(info)) {
|
560
|
+
grpc_channel_next_get_info(elem, info);
|
561
|
+
}
|
562
|
+
},
|
430
563
|
// name
|
431
564
|
name,
|
432
565
|
};
|
@@ -52,6 +52,48 @@ const char* CompressionAlgorithmAsString(grpc_compression_algorithm algorithm) {
|
|
52
52
|
}
|
53
53
|
}
|
54
54
|
|
55
|
+
namespace {
|
56
|
+
class CommaSeparatedLists {
|
57
|
+
public:
|
58
|
+
CommaSeparatedLists() : lists_{}, text_buffer_{} {
|
59
|
+
char* text_buffer = text_buffer_;
|
60
|
+
auto add_char = [&text_buffer, this](char c) {
|
61
|
+
if (text_buffer - text_buffer_ == kTextBufferSize) abort();
|
62
|
+
*text_buffer++ = c;
|
63
|
+
};
|
64
|
+
for (size_t list = 0; list < kNumLists; ++list) {
|
65
|
+
char* start = text_buffer;
|
66
|
+
for (size_t algorithm = 0; algorithm < GRPC_COMPRESS_ALGORITHMS_COUNT;
|
67
|
+
++algorithm) {
|
68
|
+
if ((list & (1 << algorithm)) == 0) continue;
|
69
|
+
if (start != text_buffer) {
|
70
|
+
add_char(',');
|
71
|
+
add_char(' ');
|
72
|
+
}
|
73
|
+
const char* name = CompressionAlgorithmAsString(
|
74
|
+
static_cast<grpc_compression_algorithm>(algorithm));
|
75
|
+
for (const char* p = name; *p != '\0'; ++p) {
|
76
|
+
add_char(*p);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
lists_[list] = absl::string_view(start, text_buffer - start);
|
80
|
+
}
|
81
|
+
if (text_buffer - text_buffer_ != kTextBufferSize) abort();
|
82
|
+
}
|
83
|
+
|
84
|
+
absl::string_view operator[](size_t list) const { return lists_[list]; }
|
85
|
+
|
86
|
+
private:
|
87
|
+
static constexpr size_t kNumLists = 1 << GRPC_COMPRESS_ALGORITHMS_COUNT;
|
88
|
+
// Experimentally determined (tweak things until it runs).
|
89
|
+
static constexpr size_t kTextBufferSize = 86;
|
90
|
+
absl::string_view lists_[kNumLists];
|
91
|
+
char text_buffer_[kTextBufferSize];
|
92
|
+
};
|
93
|
+
|
94
|
+
const CommaSeparatedLists kCommaSeparatedLists;
|
95
|
+
} // namespace
|
96
|
+
|
55
97
|
absl::optional<grpc_compression_algorithm> ParseCompressionAlgorithm(
|
56
98
|
absl::string_view algorithm) {
|
57
99
|
if (algorithm == "identity") {
|
@@ -165,19 +207,12 @@ void CompressionAlgorithmSet::Set(grpc_compression_algorithm algorithm) {
|
|
165
207
|
}
|
166
208
|
}
|
167
209
|
|
168
|
-
|
169
|
-
|
170
|
-
for (size_t i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
|
171
|
-
if (set_.is_set(i)) {
|
172
|
-
segments.push_back(CompressionAlgorithmAsString(
|
173
|
-
static_cast<grpc_compression_algorithm>(i)));
|
174
|
-
}
|
175
|
-
}
|
176
|
-
return absl::StrJoin(segments, ", ");
|
210
|
+
absl::string_view CompressionAlgorithmSet::ToString() const {
|
211
|
+
return kCommaSeparatedLists[ToLegacyBitmask()];
|
177
212
|
}
|
178
213
|
|
179
214
|
Slice CompressionAlgorithmSet::ToSlice() const {
|
180
|
-
return Slice::
|
215
|
+
return Slice::FromStaticString(ToString());
|
181
216
|
}
|
182
217
|
|
183
218
|
CompressionAlgorithmSet CompressionAlgorithmSet::FromString(
|
@@ -73,7 +73,7 @@ class CompressionAlgorithmSet {
|
|
73
73
|
void Set(grpc_compression_algorithm algorithm);
|
74
74
|
|
75
75
|
// Return a comma separated string of the algorithms in this set.
|
76
|
-
|
76
|
+
absl::string_view ToString() const;
|
77
77
|
Slice ToSlice() const;
|
78
78
|
|
79
79
|
// Return a bitmask of the algorithms in this set.
|
@@ -18,13 +18,14 @@
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include <atomic>
|
21
|
+
#include <functional>
|
21
22
|
|
22
23
|
#include "src/core/lib/channel/channel_args_preconditioning.h"
|
23
|
-
#include "src/core/lib/channel/handshaker_registry.h"
|
24
24
|
#include "src/core/lib/resolver/resolver_registry.h"
|
25
25
|
#include "src/core/lib/security/credentials/channel_creds_registry.h"
|
26
26
|
#include "src/core/lib/service_config/service_config_parser.h"
|
27
27
|
#include "src/core/lib/surface/channel_init.h"
|
28
|
+
#include "src/core/lib/transport/handshaker_registry.h"
|
28
29
|
|
29
30
|
namespace grpc_core {
|
30
31
|
|
@@ -15,12 +15,14 @@
|
|
15
15
|
|
16
16
|
#include "src/core/lib/event_engine/channel_args_endpoint_config.h"
|
17
17
|
|
18
|
+
#include <string>
|
19
|
+
|
20
|
+
#include "absl/types/variant.h"
|
21
|
+
|
18
22
|
#include <grpc/event_engine/endpoint_config.h>
|
19
23
|
#include <grpc/impl/codegen/grpc_types.h>
|
20
|
-
#include <grpc/impl/codegen/log.h>
|
21
24
|
|
22
25
|
#include "src/core/lib/channel/channel_args.h"
|
23
|
-
#include "src/core/lib/gpr/useful.h"
|
24
26
|
|
25
27
|
namespace grpc_event_engine {
|
26
28
|
namespace experimental {
|
@@ -16,9 +16,10 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
-
#include
|
19
|
+
#include "absl/strings/string_view.h"
|
20
20
|
|
21
|
-
#include
|
21
|
+
#include <grpc/event_engine/endpoint_config.h>
|
22
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
22
23
|
|
23
24
|
namespace grpc_event_engine {
|
24
25
|
namespace experimental {
|
@@ -13,14 +13,20 @@
|
|
13
13
|
// limitations under the License.
|
14
14
|
#include <grpc/support/port_platform.h>
|
15
15
|
|
16
|
+
#include <memory>
|
17
|
+
|
18
|
+
#include "absl/memory/memory.h"
|
19
|
+
|
20
|
+
#include <grpc/event_engine/event_engine.h>
|
21
|
+
|
16
22
|
#include "src/core/lib/event_engine/event_engine_factory.h"
|
23
|
+
#include "src/core/lib/event_engine/iomgr_engine.h"
|
17
24
|
|
18
25
|
namespace grpc_event_engine {
|
19
26
|
namespace experimental {
|
20
27
|
|
21
28
|
std::unique_ptr<EventEngine> DefaultEventEngineFactory() {
|
22
|
-
|
23
|
-
return nullptr;
|
29
|
+
return absl::make_unique<IomgrEventEngine>();
|
24
30
|
}
|
25
31
|
|
26
32
|
} // namespace experimental
|
@@ -13,11 +13,14 @@
|
|
13
13
|
// limitations under the License.
|
14
14
|
#include <grpc/support/port_platform.h>
|
15
15
|
|
16
|
+
#include <functional>
|
17
|
+
#include <memory>
|
18
|
+
|
16
19
|
#include <grpc/event_engine/event_engine.h>
|
17
|
-
#include <grpc/event_engine/port.h>
|
18
|
-
#include <grpc/support/log.h>
|
19
20
|
|
21
|
+
#include "src/core/lib/debug/trace.h"
|
20
22
|
#include "src/core/lib/event_engine/event_engine_factory.h"
|
23
|
+
#include "src/core/lib/event_engine/trace.h"
|
21
24
|
#include "src/core/lib/gprpp/sync.h"
|
22
25
|
|
23
26
|
namespace grpc_event_engine {
|
@@ -48,5 +51,12 @@ EventEngine* GetDefaultEventEngine() {
|
|
48
51
|
return default_event_engine;
|
49
52
|
}
|
50
53
|
|
54
|
+
void InitializeEventEngine() {
|
55
|
+
GetDefaultEventEngine()->Run([]() {
|
56
|
+
GRPC_EVENT_ENGINE_TRACE("EventEngine:%p initialized",
|
57
|
+
GetDefaultEventEngine());
|
58
|
+
});
|
59
|
+
}
|
60
|
+
|
51
61
|
} // namespace experimental
|
52
62
|
} // namespace grpc_event_engine
|
@@ -16,6 +16,8 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
+
#include <memory>
|
20
|
+
|
19
21
|
#include <grpc/event_engine/event_engine.h>
|
20
22
|
|
21
23
|
namespace grpc_event_engine {
|
@@ -30,6 +32,9 @@ EventEngine* GetDefaultEventEngine();
|
|
30
32
|
/// Create an EventEngine using the default factory provided at link time.
|
31
33
|
std::unique_ptr<EventEngine> DefaultEventEngineFactory();
|
32
34
|
|
35
|
+
// TODO(hork): remove this when any other EE usage is landed
|
36
|
+
void InitializeEventEngine();
|
37
|
+
|
33
38
|
} // namespace experimental
|
34
39
|
} // namespace grpc_event_engine
|
35
40
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
// Copyright 2022 The 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
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_HANDLE_CONTAINERS_H
|
15
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_HANDLE_CONTAINERS_H
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <stddef.h>
|
20
|
+
|
21
|
+
#include <cstdint>
|
22
|
+
#include <utility>
|
23
|
+
|
24
|
+
#include "absl/container/flat_hash_set.h"
|
25
|
+
#include "absl/hash/hash.h"
|
26
|
+
|
27
|
+
#include <grpc/event_engine/event_engine.h>
|
28
|
+
|
29
|
+
namespace grpc_event_engine {
|
30
|
+
namespace experimental {
|
31
|
+
|
32
|
+
// Used for heterogeneous lookup of TaskHandles in abseil containers.
|
33
|
+
template <typename TaskHandle>
|
34
|
+
struct TaskHandleComparator {
|
35
|
+
struct Hash {
|
36
|
+
using HashType = std::pair<const intptr_t, const intptr_t>;
|
37
|
+
using is_transparent = void;
|
38
|
+
size_t operator()(const TaskHandle& handle) const {
|
39
|
+
return absl::Hash<HashType>()({handle.keys[0], handle.keys[1]});
|
40
|
+
}
|
41
|
+
};
|
42
|
+
struct Eq {
|
43
|
+
using is_transparent = void;
|
44
|
+
bool operator()(const TaskHandle& lhs, const TaskHandle& rhs) const {
|
45
|
+
return lhs.keys[0] == rhs.keys[0] && lhs.keys[1] == rhs.keys[1];
|
46
|
+
}
|
47
|
+
};
|
48
|
+
};
|
49
|
+
|
50
|
+
using TaskHandleSet = absl::flat_hash_set<
|
51
|
+
grpc_event_engine::experimental::EventEngine::TaskHandle,
|
52
|
+
TaskHandleComparator<
|
53
|
+
grpc_event_engine::experimental::EventEngine::TaskHandle>::Hash,
|
54
|
+
TaskHandleComparator<
|
55
|
+
grpc_event_engine::experimental::EventEngine::TaskHandle>::Eq>;
|
56
|
+
|
57
|
+
using LookupTaskHandleSet = absl::flat_hash_set<
|
58
|
+
grpc_event_engine::experimental::EventEngine::DNSResolver::LookupTaskHandle,
|
59
|
+
TaskHandleComparator<grpc_event_engine::experimental::EventEngine::
|
60
|
+
DNSResolver::LookupTaskHandle>::Hash,
|
61
|
+
TaskHandleComparator<grpc_event_engine::experimental::EventEngine::
|
62
|
+
DNSResolver::LookupTaskHandle>::Eq>;
|
63
|
+
|
64
|
+
} // namespace experimental
|
65
|
+
} // namespace grpc_event_engine
|
66
|
+
|
67
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_HANDLE_CONTAINERS_H
|