grpc 1.46.3 → 1.47.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -0,0 +1,206 @@
|
|
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
|
+
#include <grpc/support/port_platform.h>
|
15
|
+
|
16
|
+
#include "src/core/lib/event_engine/iomgr_engine.h"
|
17
|
+
|
18
|
+
#include <string>
|
19
|
+
#include <type_traits>
|
20
|
+
#include <utility>
|
21
|
+
|
22
|
+
#include "absl/cleanup/cleanup.h"
|
23
|
+
#include "absl/container/flat_hash_set.h"
|
24
|
+
#include "absl/strings/str_cat.h"
|
25
|
+
#include "absl/time/clock.h"
|
26
|
+
|
27
|
+
#include <grpc/event_engine/event_engine.h>
|
28
|
+
#include <grpc/support/log.h>
|
29
|
+
|
30
|
+
#include "src/core/lib/debug/trace.h"
|
31
|
+
#include "src/core/lib/event_engine/trace.h"
|
32
|
+
#include "src/core/lib/gprpp/match.h"
|
33
|
+
#include "src/core/lib/gprpp/time.h"
|
34
|
+
#include "src/core/lib/iomgr/closure.h"
|
35
|
+
#include "src/core/lib/iomgr/error.h"
|
36
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
37
|
+
#include "src/core/lib/iomgr/executor.h"
|
38
|
+
#include "src/core/lib/iomgr/timer.h"
|
39
|
+
|
40
|
+
namespace grpc_event_engine {
|
41
|
+
namespace experimental {
|
42
|
+
|
43
|
+
namespace {
|
44
|
+
|
45
|
+
struct ClosureData {
|
46
|
+
grpc_timer timer;
|
47
|
+
grpc_closure closure;
|
48
|
+
absl::variant<std::function<void()>, EventEngine::Closure*> cb;
|
49
|
+
IomgrEventEngine* engine;
|
50
|
+
EventEngine::TaskHandle handle;
|
51
|
+
};
|
52
|
+
|
53
|
+
// Timer limits due to quirks in the iomgr implementation.
|
54
|
+
// If deadline <= Now, the callback will be run inline, which can result in lock
|
55
|
+
// issues. And absl::InfiniteFuture yields UB.
|
56
|
+
absl::Time Clamp(absl::Time when) {
|
57
|
+
absl::Time max = absl::Now() + absl::Hours(8766);
|
58
|
+
absl::Time min = absl::Now() + absl::Milliseconds(2);
|
59
|
+
if (when > max) return max;
|
60
|
+
if (when < min) return min;
|
61
|
+
return when;
|
62
|
+
}
|
63
|
+
|
64
|
+
std::string HandleToString(EventEngine::TaskHandle handle) {
|
65
|
+
return absl::StrCat("{", handle.keys[0], ",", handle.keys[1], "}");
|
66
|
+
}
|
67
|
+
|
68
|
+
} // namespace
|
69
|
+
|
70
|
+
IomgrEventEngine::IomgrEventEngine() {}
|
71
|
+
|
72
|
+
IomgrEventEngine::~IomgrEventEngine() {
|
73
|
+
grpc_core::MutexLock lock(&mu_);
|
74
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
|
75
|
+
for (auto handle : known_handles_) {
|
76
|
+
gpr_log(GPR_ERROR,
|
77
|
+
"(event_engine) IomgrEventEngine:%p uncleared TaskHandle at "
|
78
|
+
"shutdown:%s",
|
79
|
+
this, HandleToString(handle).c_str());
|
80
|
+
}
|
81
|
+
}
|
82
|
+
GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
|
83
|
+
}
|
84
|
+
|
85
|
+
bool IomgrEventEngine::Cancel(EventEngine::TaskHandle handle) {
|
86
|
+
grpc_core::ExecCtx ctx;
|
87
|
+
grpc_core::MutexLock lock(&mu_);
|
88
|
+
if (!known_handles_.contains(handle)) return false;
|
89
|
+
auto* cd = reinterpret_cast<ClosureData*>(handle.keys[0]);
|
90
|
+
grpc_timer_cancel(&cd->timer);
|
91
|
+
known_handles_.erase(handle);
|
92
|
+
return true;
|
93
|
+
}
|
94
|
+
|
95
|
+
EventEngine::TaskHandle IomgrEventEngine::RunAt(absl::Time when,
|
96
|
+
std::function<void()> closure) {
|
97
|
+
return RunAtInternal(when, std::move(closure));
|
98
|
+
}
|
99
|
+
|
100
|
+
EventEngine::TaskHandle IomgrEventEngine::RunAt(absl::Time when,
|
101
|
+
EventEngine::Closure* closure) {
|
102
|
+
return RunAtInternal(when, closure);
|
103
|
+
}
|
104
|
+
|
105
|
+
void IomgrEventEngine::Run(std::function<void()> closure) {
|
106
|
+
RunInternal(closure);
|
107
|
+
}
|
108
|
+
|
109
|
+
void IomgrEventEngine::Run(EventEngine::Closure* closure) {
|
110
|
+
RunInternal(closure);
|
111
|
+
}
|
112
|
+
|
113
|
+
EventEngine::TaskHandle IomgrEventEngine::RunAtInternal(
|
114
|
+
absl::Time when,
|
115
|
+
absl::variant<std::function<void()>, EventEngine::Closure*> cb) {
|
116
|
+
when = Clamp(when);
|
117
|
+
grpc_core::ExecCtx ctx;
|
118
|
+
auto* cd = new ClosureData;
|
119
|
+
cd->cb = std::move(cb);
|
120
|
+
cd->engine = this;
|
121
|
+
GRPC_CLOSURE_INIT(
|
122
|
+
&cd->closure,
|
123
|
+
[](void* arg, grpc_error_handle error) {
|
124
|
+
auto* cd = static_cast<ClosureData*>(arg);
|
125
|
+
GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p executing callback:%s",
|
126
|
+
cd->engine, HandleToString(cd->handle).c_str());
|
127
|
+
{
|
128
|
+
grpc_core::MutexLock lock(&cd->engine->mu_);
|
129
|
+
cd->engine->known_handles_.erase(cd->handle);
|
130
|
+
}
|
131
|
+
auto cleaner = absl::MakeCleanup([cd] { delete cd; });
|
132
|
+
if (error == GRPC_ERROR_CANCELLED) return;
|
133
|
+
grpc_core::Match(
|
134
|
+
cd->cb, [](EventEngine::Closure* cb) { cb->Run(); },
|
135
|
+
[](std::function<void()> fn) { fn(); });
|
136
|
+
},
|
137
|
+
cd, nullptr);
|
138
|
+
// kludge to deal with realtime/monotonic clock conversion
|
139
|
+
absl::Time absl_now = absl::Now();
|
140
|
+
grpc_core::Duration duration = grpc_core::Duration::Milliseconds(
|
141
|
+
absl::ToInt64Milliseconds(when - absl_now) + 1);
|
142
|
+
grpc_core::ExecCtx::Get()->InvalidateNow();
|
143
|
+
grpc_core::Timestamp when_internal = grpc_core::ExecCtx::Get()->Now() +
|
144
|
+
duration +
|
145
|
+
grpc_core::Duration::Milliseconds(1);
|
146
|
+
EventEngine::TaskHandle handle{reinterpret_cast<intptr_t>(cd),
|
147
|
+
aba_token_.fetch_add(1)};
|
148
|
+
grpc_core::MutexLock lock(&mu_);
|
149
|
+
known_handles_.insert(handle);
|
150
|
+
cd->handle = handle;
|
151
|
+
GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p scheduling callback:%s", this,
|
152
|
+
HandleToString(handle).c_str());
|
153
|
+
grpc_timer_init(&cd->timer, when_internal, &cd->closure);
|
154
|
+
return handle;
|
155
|
+
}
|
156
|
+
|
157
|
+
void IomgrEventEngine::RunInternal(
|
158
|
+
absl::variant<std::function<void()>, EventEngine::Closure*> cb) {
|
159
|
+
auto* cd = new ClosureData;
|
160
|
+
cd->cb = std::move(cb);
|
161
|
+
cd->engine = this;
|
162
|
+
GRPC_CLOSURE_INIT(
|
163
|
+
&cd->closure,
|
164
|
+
[](void* arg, grpc_error_handle /*error*/) {
|
165
|
+
auto* cd = static_cast<ClosureData*>(arg);
|
166
|
+
auto cleaner = absl::MakeCleanup([cd] { delete cd; });
|
167
|
+
grpc_core::Match(
|
168
|
+
cd->cb, [](EventEngine::Closure* cb) { cb->Run(); },
|
169
|
+
[](std::function<void()> fn) { fn(); });
|
170
|
+
},
|
171
|
+
cd, nullptr);
|
172
|
+
// TODO(hork): have the EE spawn dedicated closure thread(s)
|
173
|
+
grpc_core::Executor::Run(&cd->closure, GRPC_ERROR_NONE);
|
174
|
+
}
|
175
|
+
|
176
|
+
std::unique_ptr<EventEngine::DNSResolver> IomgrEventEngine::GetDNSResolver(
|
177
|
+
EventEngine::DNSResolver::ResolverOptions const& /*options*/) {
|
178
|
+
GPR_ASSERT(false && "unimplemented");
|
179
|
+
}
|
180
|
+
|
181
|
+
bool IomgrEventEngine::IsWorkerThread() {
|
182
|
+
GPR_ASSERT(false && "unimplemented");
|
183
|
+
}
|
184
|
+
|
185
|
+
bool IomgrEventEngine::CancelConnect(EventEngine::ConnectionHandle /*handle*/) {
|
186
|
+
GPR_ASSERT(false && "unimplemented");
|
187
|
+
}
|
188
|
+
|
189
|
+
EventEngine::ConnectionHandle IomgrEventEngine::Connect(
|
190
|
+
OnConnectCallback /*on_connect*/, const ResolvedAddress& /*addr*/,
|
191
|
+
const EndpointConfig& /*args*/, MemoryAllocator /*memory_allocator*/,
|
192
|
+
absl::Time /*deadline*/) {
|
193
|
+
GPR_ASSERT(false && "unimplemented");
|
194
|
+
}
|
195
|
+
|
196
|
+
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
|
197
|
+
IomgrEventEngine::CreateListener(
|
198
|
+
Listener::AcceptCallback /*on_accept*/,
|
199
|
+
std::function<void(absl::Status)> /*on_shutdown*/,
|
200
|
+
const EndpointConfig& /*config*/,
|
201
|
+
std::unique_ptr<MemoryAllocatorFactory> /*memory_allocator_factory*/) {
|
202
|
+
GPR_ASSERT(false && "unimplemented");
|
203
|
+
}
|
204
|
+
|
205
|
+
} // namespace experimental
|
206
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,118 @@
|
|
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_IOMGR_ENGINE_H
|
15
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_H
|
16
|
+
#include <grpc/support/port_platform.h>
|
17
|
+
|
18
|
+
#include <stdint.h>
|
19
|
+
|
20
|
+
#include <atomic>
|
21
|
+
#include <functional>
|
22
|
+
#include <memory>
|
23
|
+
|
24
|
+
#include "absl/base/thread_annotations.h"
|
25
|
+
#include "absl/status/status.h"
|
26
|
+
#include "absl/status/statusor.h"
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
#include "absl/time/time.h"
|
29
|
+
#include "absl/types/variant.h"
|
30
|
+
|
31
|
+
#include <grpc/event_engine/endpoint_config.h>
|
32
|
+
#include <grpc/event_engine/event_engine.h>
|
33
|
+
#include <grpc/event_engine/memory_allocator.h>
|
34
|
+
#include <grpc/event_engine/slice_buffer.h>
|
35
|
+
|
36
|
+
#include "src/core/lib/event_engine/handle_containers.h"
|
37
|
+
#include "src/core/lib/gprpp/sync.h"
|
38
|
+
|
39
|
+
namespace grpc_event_engine {
|
40
|
+
namespace experimental {
|
41
|
+
|
42
|
+
class IomgrEventEngine final : public EventEngine {
|
43
|
+
public:
|
44
|
+
class IomgrEndpoint : public EventEngine::Endpoint {
|
45
|
+
public:
|
46
|
+
~IomgrEndpoint() override;
|
47
|
+
void Read(std::function<void(absl::Status)> on_read, SliceBuffer* buffer,
|
48
|
+
const ReadArgs* args) override;
|
49
|
+
void Write(std::function<void(absl::Status)> on_writable, SliceBuffer* data,
|
50
|
+
const WriteArgs* args) override;
|
51
|
+
const ResolvedAddress& GetPeerAddress() const override;
|
52
|
+
const ResolvedAddress& GetLocalAddress() const override;
|
53
|
+
};
|
54
|
+
class IomgrListener : public EventEngine::Listener {
|
55
|
+
public:
|
56
|
+
~IomgrListener() override;
|
57
|
+
absl::StatusOr<int> Bind(const ResolvedAddress& addr) override;
|
58
|
+
absl::Status Start() override;
|
59
|
+
};
|
60
|
+
class IomgrDNSResolver : public EventEngine::DNSResolver {
|
61
|
+
public:
|
62
|
+
~IomgrDNSResolver() override;
|
63
|
+
LookupTaskHandle LookupHostname(LookupHostnameCallback on_resolve,
|
64
|
+
absl::string_view name,
|
65
|
+
absl::string_view default_port,
|
66
|
+
absl::Time deadline) override;
|
67
|
+
LookupTaskHandle LookupSRV(LookupSRVCallback on_resolve,
|
68
|
+
absl::string_view name,
|
69
|
+
absl::Time deadline) override;
|
70
|
+
LookupTaskHandle LookupTXT(LookupTXTCallback on_resolve,
|
71
|
+
absl::string_view name,
|
72
|
+
absl::Time deadline) override;
|
73
|
+
bool CancelLookup(LookupTaskHandle handle) override;
|
74
|
+
};
|
75
|
+
|
76
|
+
IomgrEventEngine();
|
77
|
+
~IomgrEventEngine() override;
|
78
|
+
|
79
|
+
absl::StatusOr<std::unique_ptr<Listener>> CreateListener(
|
80
|
+
Listener::AcceptCallback on_accept,
|
81
|
+
std::function<void(absl::Status)> on_shutdown,
|
82
|
+
const EndpointConfig& config,
|
83
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory)
|
84
|
+
override;
|
85
|
+
|
86
|
+
ConnectionHandle Connect(OnConnectCallback on_connect,
|
87
|
+
const ResolvedAddress& addr,
|
88
|
+
const EndpointConfig& args,
|
89
|
+
MemoryAllocator memory_allocator,
|
90
|
+
absl::Time deadline) override;
|
91
|
+
|
92
|
+
bool CancelConnect(ConnectionHandle handle) override;
|
93
|
+
bool IsWorkerThread() override;
|
94
|
+
std::unique_ptr<DNSResolver> GetDNSResolver(
|
95
|
+
const DNSResolver::ResolverOptions& options) override;
|
96
|
+
void Run(Closure* closure) override;
|
97
|
+
void Run(std::function<void()> closure) override;
|
98
|
+
TaskHandle RunAt(absl::Time when, Closure* closure) override;
|
99
|
+
TaskHandle RunAt(absl::Time when, std::function<void()> closure) override;
|
100
|
+
bool Cancel(TaskHandle handle) override;
|
101
|
+
|
102
|
+
private:
|
103
|
+
EventEngine::TaskHandle RunAtInternal(
|
104
|
+
absl::Time when,
|
105
|
+
absl::variant<std::function<void()>, EventEngine::Closure*> cb);
|
106
|
+
|
107
|
+
void RunInternal(
|
108
|
+
absl::variant<std::function<void()>, EventEngine::Closure*> cb);
|
109
|
+
|
110
|
+
grpc_core::Mutex mu_;
|
111
|
+
TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
|
112
|
+
std::atomic<intptr_t> aba_token_{0};
|
113
|
+
};
|
114
|
+
|
115
|
+
} // namespace experimental
|
116
|
+
} // namespace grpc_event_engine
|
117
|
+
|
118
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_H
|
@@ -14,10 +14,18 @@
|
|
14
14
|
|
15
15
|
#include <grpc/support/port_platform.h>
|
16
16
|
|
17
|
+
#include <stdint.h>
|
18
|
+
#include <stdlib.h>
|
19
|
+
|
20
|
+
#include <memory>
|
21
|
+
#include <new>
|
22
|
+
#include <utility>
|
23
|
+
|
17
24
|
#include <grpc/event_engine/memory_allocator.h>
|
25
|
+
#include <grpc/event_engine/memory_request.h>
|
26
|
+
#include <grpc/slice.h>
|
18
27
|
|
19
|
-
#include "src/core/lib/
|
20
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
28
|
+
#include "src/core/lib/slice/slice_refcount_base.h"
|
21
29
|
|
22
30
|
namespace grpc_event_engine {
|
23
31
|
namespace experimental {
|
@@ -41,7 +49,7 @@ class SliceRefCount : public grpc_slice_refcount {
|
|
41
49
|
static void Destroy(grpc_slice_refcount* p) {
|
42
50
|
auto* rc = static_cast<SliceRefCount*>(p);
|
43
51
|
rc->~SliceRefCount();
|
44
|
-
|
52
|
+
free(rc);
|
45
53
|
}
|
46
54
|
|
47
55
|
std::shared_ptr<internal::MemoryAllocatorImpl> allocator_;
|
@@ -52,7 +60,7 @@ class SliceRefCount : public grpc_slice_refcount {
|
|
52
60
|
|
53
61
|
grpc_slice MemoryAllocator::MakeSlice(MemoryRequest request) {
|
54
62
|
auto size = Reserve(request.Increase(sizeof(SliceRefCount)));
|
55
|
-
void* p =
|
63
|
+
void* p = malloc(size);
|
56
64
|
new (p) SliceRefCount(allocator_, size);
|
57
65
|
grpc_slice slice;
|
58
66
|
slice.refcount = static_cast<SliceRefCount*>(p);
|
@@ -11,13 +11,15 @@
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
|
+
|
14
15
|
#include <grpc/support/port_platform.h>
|
15
16
|
|
17
|
+
#include <string.h>
|
18
|
+
|
16
19
|
#include <grpc/event_engine/event_engine.h>
|
17
|
-
#include <grpc/event_engine/port.h>
|
18
20
|
#include <grpc/support/log.h>
|
19
21
|
|
20
|
-
|
22
|
+
// IWYU pragma: no_include <sys/socket.h>
|
21
23
|
|
22
24
|
namespace grpc_event_engine {
|
23
25
|
namespace experimental {
|
@@ -0,0 +1,102 @@
|
|
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 <stdint.h>
|
18
|
+
|
19
|
+
#include <string>
|
20
|
+
#include <utility>
|
21
|
+
|
22
|
+
#include <grpc/event_engine/slice.h>
|
23
|
+
#include <grpc/slice.h>
|
24
|
+
#include <grpc/support/log.h>
|
25
|
+
|
26
|
+
#include "src/core/lib/slice/slice_internal.h"
|
27
|
+
#include "src/core/lib/slice/slice_refcount.h"
|
28
|
+
#include "src/core/lib/slice/slice_refcount_base.h"
|
29
|
+
|
30
|
+
namespace grpc_event_engine {
|
31
|
+
namespace experimental {
|
32
|
+
|
33
|
+
namespace slice_detail {
|
34
|
+
|
35
|
+
uint32_t BaseSlice::Hash() const { return grpc_slice_hash_internal(slice_); }
|
36
|
+
|
37
|
+
template <>
|
38
|
+
MutableSlice CopyConstructors<MutableSlice>::FromCopiedString(std::string s) {
|
39
|
+
return MutableSlice(grpc_slice_from_cpp_string(std::move(s)));
|
40
|
+
}
|
41
|
+
|
42
|
+
template <>
|
43
|
+
Slice CopyConstructors<Slice>::FromCopiedString(std::string s) {
|
44
|
+
return Slice(grpc_slice_from_cpp_string(std::move(s)));
|
45
|
+
}
|
46
|
+
|
47
|
+
} // namespace slice_detail
|
48
|
+
|
49
|
+
MutableSlice::MutableSlice(const grpc_slice& slice)
|
50
|
+
: slice_detail::BaseSlice(slice) {
|
51
|
+
GPR_DEBUG_ASSERT(slice.refcount == nullptr || slice.refcount->IsUnique());
|
52
|
+
}
|
53
|
+
|
54
|
+
MutableSlice::~MutableSlice() { grpc_slice_unref_internal(c_slice()); }
|
55
|
+
|
56
|
+
Slice Slice::TakeOwned() {
|
57
|
+
if (c_slice().refcount == nullptr) {
|
58
|
+
return Slice(c_slice());
|
59
|
+
}
|
60
|
+
if (c_slice().refcount == grpc_slice_refcount::NoopRefcount()) {
|
61
|
+
return Slice(grpc_slice_copy(c_slice()));
|
62
|
+
}
|
63
|
+
return Slice(TakeCSlice());
|
64
|
+
}
|
65
|
+
|
66
|
+
Slice Slice::AsOwned() const {
|
67
|
+
if (c_slice().refcount == nullptr) {
|
68
|
+
return Slice(c_slice());
|
69
|
+
}
|
70
|
+
if (c_slice().refcount == grpc_slice_refcount::NoopRefcount()) {
|
71
|
+
return Slice(grpc_slice_copy(c_slice()));
|
72
|
+
}
|
73
|
+
return Slice(grpc_slice_ref_internal(c_slice()));
|
74
|
+
}
|
75
|
+
|
76
|
+
MutableSlice Slice::TakeMutable() {
|
77
|
+
if (c_slice().refcount == nullptr) {
|
78
|
+
return MutableSlice(c_slice());
|
79
|
+
}
|
80
|
+
if (c_slice().refcount != grpc_slice_refcount::NoopRefcount() &&
|
81
|
+
c_slice().refcount->IsUnique()) {
|
82
|
+
return MutableSlice(TakeCSlice());
|
83
|
+
}
|
84
|
+
return MutableSlice(grpc_slice_copy(c_slice()));
|
85
|
+
}
|
86
|
+
|
87
|
+
Slice::~Slice() { grpc_slice_unref_internal(c_slice()); }
|
88
|
+
|
89
|
+
Slice Slice::Ref() const { return Slice(grpc_slice_ref_internal(c_slice())); }
|
90
|
+
|
91
|
+
Slice Slice::FromRefcountAndBytes(grpc_slice_refcount* r, const uint8_t* begin,
|
92
|
+
const uint8_t* end) {
|
93
|
+
grpc_slice out;
|
94
|
+
out.refcount = r;
|
95
|
+
if (r != grpc_slice_refcount::NoopRefcount()) r->Ref();
|
96
|
+
out.data.refcounted.bytes = const_cast<uint8_t*>(begin);
|
97
|
+
out.data.refcounted.length = end - begin;
|
98
|
+
return Slice(out);
|
99
|
+
}
|
100
|
+
|
101
|
+
} // namespace experimental
|
102
|
+
} // namespace grpc_event_engine
|
@@ -0,0 +1,50 @@
|
|
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 <stddef.h>
|
18
|
+
|
19
|
+
#include <grpc/event_engine/slice.h>
|
20
|
+
#include <grpc/event_engine/slice_buffer.h>
|
21
|
+
#include <grpc/slice.h>
|
22
|
+
#include <grpc/slice_buffer.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/slice/slice_refcount.h"
|
25
|
+
|
26
|
+
namespace grpc_event_engine {
|
27
|
+
namespace experimental {
|
28
|
+
|
29
|
+
void SliceBuffer::Append(Slice slice) {
|
30
|
+
grpc_slice_buffer_add(&slice_buffer_, slice.TakeCSlice());
|
31
|
+
}
|
32
|
+
|
33
|
+
size_t SliceBuffer::AppendIndexed(Slice slice) {
|
34
|
+
return grpc_slice_buffer_add_indexed(&slice_buffer_, slice.TakeCSlice());
|
35
|
+
}
|
36
|
+
|
37
|
+
Slice SliceBuffer::TakeFirst() {
|
38
|
+
return Slice(grpc_slice_buffer_take_first(&slice_buffer_));
|
39
|
+
}
|
40
|
+
|
41
|
+
void SliceBuffer::Prepend(Slice slice) {
|
42
|
+
grpc_slice_buffer_undo_take_first(&slice_buffer_, slice.TakeCSlice());
|
43
|
+
}
|
44
|
+
|
45
|
+
Slice SliceBuffer::RefSlice(size_t index) {
|
46
|
+
return Slice(grpc_slice_ref_internal(slice_buffer_.slices[index]));
|
47
|
+
}
|
48
|
+
|
49
|
+
} // namespace experimental
|
50
|
+
} // namespace grpc_event_engine
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2022 The gRPC Authors
|
2
2
|
//
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
// you may not use this file except in compliance with the License.
|
@@ -11,15 +11,8 @@
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
|
-
#ifndef GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_POLLSET_H
|
15
|
-
#define GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_POLLSET_H
|
16
|
-
|
17
14
|
#include <grpc/support/port_platform.h>
|
18
15
|
|
19
|
-
#
|
20
|
-
|
21
|
-
/// Signals pollset_work that some work has been done.
|
22
|
-
void grpc_pollset_ee_broadcast_event();
|
16
|
+
#include "src/core/lib/debug/trace.h"
|
23
17
|
|
24
|
-
|
25
|
-
#endif // GRPC_CORE_LIB_IOMGR_EVENT_ENGINE_POLLSET_H
|
18
|
+
grpc_core::TraceFlag grpc_event_engine_trace(false, "event_engine");
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright
|
1
|
+
// Copyright 2022 The gRPC Authors
|
2
2
|
//
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
// you may not use this file except in compliance with the License.
|
@@ -11,22 +11,20 @@
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
12
|
// See the License for the specific language governing permissions and
|
13
13
|
// limitations under the License.
|
14
|
-
#
|
14
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_TRACE_H
|
15
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_TRACE_H
|
15
16
|
|
16
|
-
#
|
17
|
-
#include <stdlib.h>
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
19
|
#include <grpc/support/log.h>
|
20
20
|
|
21
|
-
#include "src/core/lib/
|
22
|
-
|
21
|
+
#include "src/core/lib/debug/trace.h"
|
22
|
+
|
23
|
+
extern grpc_core::TraceFlag grpc_event_engine_trace;
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
false &&
|
29
|
-
"grpc_iomgr_create_endpoint_pair is not suppoted with event_engine");
|
30
|
-
}
|
25
|
+
#define GRPC_EVENT_ENGINE_TRACE(format, ...) \
|
26
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) { \
|
27
|
+
gpr_log(GPR_DEBUG, "(event_engine) " format, __VA_ARGS__); \
|
28
|
+
}
|
31
29
|
|
32
|
-
#endif //
|
30
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_TRACE_H
|
data/src/core/lib/gpr/log.cc
CHANGED
@@ -47,6 +47,11 @@ static gpr_atm g_log_func = reinterpret_cast<gpr_atm>(gpr_default_log);
|
|
47
47
|
static gpr_atm g_min_severity_to_print = GPR_LOG_SEVERITY_UNSET;
|
48
48
|
static gpr_atm g_min_severity_to_print_stacktrace = GPR_LOG_SEVERITY_UNSET;
|
49
49
|
|
50
|
+
void gpr_unreachable_code(const char* reason, const char* file, int line) {
|
51
|
+
gpr_log(file, line, GPR_LOG_SEVERITY_ERROR, "UNREACHABLE CODE: %s", reason);
|
52
|
+
abort();
|
53
|
+
}
|
54
|
+
|
50
55
|
const char* gpr_log_severity_string(gpr_log_severity severity) {
|
51
56
|
switch (severity) {
|
52
57
|
case GPR_LOG_SEVERITY_DEBUG:
|
data/src/core/lib/gpr/tls.h
CHANGED
@@ -54,8 +54,6 @@ class TlsTypeConstrainer {
|
|
54
54
|
#include <array>
|
55
55
|
#include <cstring>
|
56
56
|
|
57
|
-
#include <grpc/support/log.h> /* for GPR_ASSERT */
|
58
|
-
|
59
57
|
namespace grpc_core {
|
60
58
|
|
61
59
|
template <typename T>
|
@@ -95,14 +93,14 @@ class PthreadTlsImpl : TlsTypeConstrainer<T> {
|
|
95
93
|
typename std::remove_const<decltype(PthreadTlsImpl::keys_)>::type
|
96
94
|
keys;
|
97
95
|
for (pthread_key_t& key : keys) {
|
98
|
-
|
96
|
+
if (0 != pthread_key_create(&key, nullptr)) abort();
|
99
97
|
}
|
100
98
|
return keys;
|
101
99
|
}()) {}
|
102
100
|
PthreadTlsImpl(T t) : PthreadTlsImpl() { *this = t; }
|
103
101
|
~PthreadTlsImpl() {
|
104
102
|
for (pthread_key_t key : keys_) {
|
105
|
-
|
103
|
+
if (0 != pthread_key_delete(key)) abort();
|
106
104
|
}
|
107
105
|
}
|
108
106
|
|
@@ -132,7 +130,7 @@ class PthreadTlsImpl : TlsTypeConstrainer<T> {
|
|
132
130
|
size_t remaining = reinterpret_cast<char*>(&t + 1) - src;
|
133
131
|
size_t step = std::min(sizeof(dst), remaining);
|
134
132
|
memcpy(&dst, src, step);
|
135
|
-
|
133
|
+
if (0 != pthread_setspecific(key, reinterpret_cast<void*>(dst))) abort();
|
136
134
|
src += step;
|
137
135
|
}
|
138
136
|
return t;
|
data/src/core/lib/gprpp/bitset.h
CHANGED
@@ -17,7 +17,10 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
-
#include <
|
20
|
+
#include <stddef.h>
|
21
|
+
#include <stdint.h>
|
22
|
+
|
23
|
+
#include <type_traits>
|
21
24
|
|
22
25
|
#include "src/core/lib/gpr/useful.h"
|
23
26
|
|
@@ -33,6 +36,7 @@ namespace grpc_core {
|
|
33
36
|
// exactly that number of bits. Undefined if that bit count is not available.
|
34
37
|
template <size_t kBits>
|
35
38
|
struct UintSelector;
|
39
|
+
|
36
40
|
template <>
|
37
41
|
struct UintSelector<8> {
|
38
42
|
typedef uint8_t Type;
|
@@ -18,6 +18,10 @@
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
20
|
#include <cstddef>
|
21
|
+
#include <iterator>
|
22
|
+
#include <utility>
|
23
|
+
|
24
|
+
#include <grpc/support/log.h>
|
21
25
|
|
22
26
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
23
27
|
#include "src/core/lib/resource_quota/arena.h"
|