grpc 1.75.0.pre1 → 1.76.0.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +18 -5
- data/include/grpc/credentials.h +21 -5
- data/src/core/call/call_filters.cc +4 -4
- data/src/core/call/call_filters.h +36 -36
- data/src/core/call/call_spine.h +27 -27
- data/src/core/call/client_call.cc +6 -5
- data/src/core/call/filter_fusion.h +5 -5
- data/src/core/call/metadata_batch.h +3 -3
- data/src/core/call/security_context.cc +1 -1
- data/src/core/call/server_call.cc +4 -4
- data/src/core/call/server_call.h +1 -1
- data/src/core/channelz/channelz.cc +12 -18
- data/src/core/channelz/channelz.h +32 -16
- data/src/core/channelz/channelz_registry.h +11 -0
- data/src/core/channelz/property_list.cc +18 -0
- data/src/core/channelz/property_list.h +10 -1
- data/src/core/channelz/text_encode.cc +66 -0
- data/src/core/channelz/text_encode.h +29 -0
- data/src/core/channelz/v2tov1/convert.cc +11 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +15 -8
- data/src/core/channelz/ztrace_collector.h +247 -86
- data/src/core/client_channel/backup_poller.cc +5 -6
- data/src/core/client_channel/client_channel.cc +20 -13
- data/src/core/client_channel/client_channel_filter.cc +53 -45
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +3 -4
- data/src/core/client_channel/config_selector.h +3 -3
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- data/src/core/client_channel/global_subchannel_pool.cc +0 -37
- data/src/core/client_channel/global_subchannel_pool.h +0 -27
- data/src/core/client_channel/load_balanced_call_destination.cc +7 -7
- data/src/core/client_channel/local_subchannel_pool.cc +4 -4
- data/src/core/client_channel/retry_filter.h +3 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/subchannel.cc +8 -8
- data/src/core/client_channel/subchannel_stream_client.cc +4 -4
- data/src/core/config/config_vars.cc +30 -1
- data/src/core/config/config_vars.h +21 -0
- data/src/core/config/core_configuration.cc +5 -5
- data/src/core/config/core_configuration.h +7 -7
- data/src/core/config/load_config.cc +12 -0
- data/src/core/config/load_config.h +2 -0
- data/src/core/credentials/call/call_credentials.h +2 -2
- data/src/core/credentials/call/call_creds_util.cc +4 -3
- data/src/core/credentials/call/composite/composite_call_credentials.cc +4 -4
- data/src/core/credentials/call/external/aws_external_account_credentials.cc +3 -3
- data/src/core/credentials/call/external/external_account_credentials.cc +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +1 -1
- data/src/core/credentials/call/iam/iam_credentials.cc +4 -4
- data/src/core/credentials/call/jwt/json_token.cc +3 -3
- data/src/core/credentials/call/jwt/jwt_credentials.cc +2 -2
- data/src/core/credentials/call/jwt/jwt_verifier.cc +14 -13
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +20 -12
- data/src/core/credentials/call/plugin/plugin_credentials.cc +2 -2
- data/src/core/credentials/transport/alts/alts_credentials.cc +4 -4
- data/src/core/credentials/transport/alts/alts_security_connector.cc +14 -12
- data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +22 -2
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
- data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
- data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
- data/src/core/credentials/transport/composite/composite_channel_credentials.cc +5 -5
- data/src/core/credentials/transport/fake/fake_security_connector.cc +2 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +78 -28
- data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
- data/src/core/credentials/transport/local/local_security_connector.cc +8 -8
- data/src/core/credentials/transport/security_connector.cc +5 -5
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +12 -12
- data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +3 -3
- data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +24 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +5 -5
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +2 -2
- data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +17 -17
- data/src/core/credentials/transport/tls/ssl_utils.cc +14 -9
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -2
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -11
- data/src/core/credentials/transport/transport_credentials.cc +2 -2
- data/src/core/credentials/transport/transport_credentials.h +2 -2
- data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +2 -0
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -7
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -9
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +96 -88
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -7
- data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +60 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +32 -10
- data/src/core/ext/transport/chttp2/transport/frame.h +16 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +28 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -27
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +543 -366
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +198 -277
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +11 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +179 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +51 -23
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +13 -6
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +115 -71
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -14
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +7 -7
- data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -15
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +62 -26
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +58 -22
- data/src/core/ext/transport/chttp2/transport/stream.h +207 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +328 -187
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.h +52 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +181 -79
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +3 -3
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
- data/src/core/filter/auth/server_auth_filter.cc +2 -2
- data/src/core/handshaker/handshaker.cc +3 -3
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +2 -2
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +2 -2
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +31 -8
- data/src/core/handshaker/security/secure_endpoint.cc +16 -6
- data/src/core/handshaker/security/security_handshaker.cc +3 -3
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/channel/channel_stack.cc +8 -5
- data/src/core/lib/channel/channel_stack.h +3 -0
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -0
- data/src/core/lib/channel/connected_channel.cc +2 -2
- data/src/core/lib/channel/promise_based_filter.cc +69 -64
- data/src/core/lib/channel/promise_based_filter.h +16 -15
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/message_compress.cc +7 -7
- data/src/core/lib/event_engine/ares_resolver.cc +22 -20
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -2
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -2
- data/src/core/lib/event_engine/extensions/channelz.h +2 -2
- data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +10 -10
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +23 -22
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +168 -170
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +33 -54
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +3 -3
- data/src/core/lib/event_engine/resolved_address.cc +3 -3
- data/src/core/lib/event_engine/shim.cc +8 -11
- data/src/core/lib/event_engine/shim.h +2 -1
- data/src/core/lib/event_engine/slice.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +11 -11
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +7 -7
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -31
- data/src/core/lib/event_engine/windows/iocp.cc +10 -10
- data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -11
- data/src/core/lib/event_engine/windows/windows_engine.cc +16 -14
- data/src/core/lib/event_engine/windows/windows_listener.cc +7 -7
- data/src/core/lib/experiments/experiments.cc +105 -18
- data/src/core/lib/experiments/experiments.h +43 -11
- data/src/core/lib/iomgr/call_combiner.cc +3 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +6 -6
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -14
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +15 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +11 -11
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -4
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +8 -8
- data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
- data/src/core/lib/iomgr/lockfree_event.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.cc +3 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
- data/src/core/lib/iomgr/tcp_posix.cc +42 -42
- data/src/core/lib/iomgr/tcp_server.cc +5 -0
- data/src/core/lib/iomgr/tcp_server.h +7 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +47 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +68 -29
- data/src/core/lib/iomgr/tcp_windows.cc +7 -7
- data/src/core/lib/iomgr/timer_generic.cc +2 -2
- data/src/core/lib/iomgr/timer_manager.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
- data/src/core/lib/promise/activity.cc +2 -2
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/context.h +2 -2
- data/src/core/lib/promise/detail/join_state.h +9 -9
- data/src/core/lib/promise/detail/seq_state.h +13 -13
- data/src/core/lib/promise/detail/status.h +2 -2
- data/src/core/lib/promise/for_each.h +5 -5
- data/src/core/lib/promise/interceptor_list.h +2 -2
- data/src/core/lib/promise/latch.h +7 -7
- data/src/core/lib/promise/mpsc.cc +26 -26
- data/src/core/lib/promise/mpsc.h +2 -2
- data/src/core/lib/promise/observable.h +4 -4
- data/src/core/lib/promise/party.cc +32 -25
- data/src/core/lib/promise/party.h +16 -19
- data/src/core/lib/promise/pipe.h +15 -15
- data/src/core/lib/promise/poll.h +5 -4
- data/src/core/lib/promise/promise.h +0 -2
- data/src/core/lib/promise/sleep.cc +3 -1
- data/src/core/lib/promise/status_flag.h +7 -7
- data/src/core/lib/promise/try_join.h +2 -2
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resource_quota/arena.h +15 -2
- data/src/core/lib/resource_quota/connection_quota.cc +9 -7
- data/src/core/lib/resource_quota/memory_quota.cc +45 -24
- data/src/core/lib/resource_quota/memory_quota.h +48 -16
- data/src/core/lib/resource_quota/telemetry.h +54 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -2
- data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
- data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
- data/src/core/lib/security/authorization/audit_logging.cc +5 -5
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
- data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
- data/src/core/lib/surface/call.cc +16 -14
- data/src/core/lib/surface/call.h +1 -1
- data/src/core/lib/surface/call_utils.cc +2 -2
- data/src/core/lib/surface/call_utils.h +2 -2
- data/src/core/lib/surface/channel.cc +4 -4
- data/src/core/lib/surface/channel_create.cc +10 -6
- data/src/core/lib/surface/channel_init.cc +80 -23
- data/src/core/lib/surface/channel_init.h +26 -11
- data/src/core/lib/surface/completion_queue.cc +17 -16
- data/src/core/lib/surface/completion_queue_factory.cc +7 -7
- data/src/core/lib/surface/connection_context.h +45 -2
- data/src/core/lib/surface/filter_stack_call.cc +12 -23
- data/src/core/lib/surface/filter_stack_call.h +3 -4
- data/src/core/lib/surface/legacy_channel.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +3 -3
- data/src/core/lib/transport/promise_endpoint.cc +3 -3
- data/src/core/lib/transport/promise_endpoint.h +8 -8
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/load_balancing/child_policy_handler.cc +4 -4
- data/src/core/load_balancing/endpoint_list.cc +2 -2
- data/src/core/load_balancing/grpclb/grpclb.cc +24 -24
- data/src/core/load_balancing/health_check_client.cc +4 -4
- data/src/core/load_balancing/health_check_client_internal.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +2 -2
- data/src/core/load_balancing/oob_backend_metric.cc +4 -4
- data/src/core/load_balancing/oob_backend_metric_internal.h +2 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
- data/src/core/load_balancing/pick_first/pick_first.cc +14 -14
- data/src/core/load_balancing/priority/priority.cc +23 -24
- data/src/core/load_balancing/ring_hash/ring_hash.cc +3 -3
- data/src/core/load_balancing/rls/rls.cc +13 -13
- data/src/core/load_balancing/round_robin/round_robin.cc +9 -9
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -26
- data/src/core/load_balancing/weighted_target/weighted_target.cc +5 -5
- data/src/core/load_balancing/xds/cds.cc +76 -32
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +3 -3
- data/src/core/load_balancing/xds/xds_override_host.cc +4 -4
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +33 -33
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -10
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -3
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +2 -2
- data/src/core/resolver/endpoint_addresses.cc +3 -3
- data/src/core/resolver/endpoint_addresses.h +3 -0
- data/src/core/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +41 -54
- data/src/core/resolver/polling_resolver.cc +3 -3
- data/src/core/resolver/resolver_registry.cc +5 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +5 -5
- data/src/core/resolver/xds/xds_resolver.cc +9 -9
- data/src/core/server/server.cc +38 -38
- data/src/core/server/server_call_tracer_filter.h +4 -4
- data/src/core/server/server_config_selector_filter.cc +2 -2
- data/src/core/server/xds_server_config_fetcher.cc +9 -8
- data/src/core/service_config/service_config_impl.h +2 -2
- data/src/core/telemetry/call_tracer.cc +39 -49
- data/src/core/telemetry/call_tracer.h +199 -22
- data/src/core/telemetry/histogram.h +205 -0
- data/src/core/telemetry/instrument.cc +719 -0
- data/src/core/telemetry/instrument.h +932 -0
- data/src/core/telemetry/metrics.cc +13 -5
- data/src/core/telemetry/metrics.h +3 -1
- data/src/core/telemetry/stats_data.cc +0 -19
- data/src/core/telemetry/stats_data.h +0 -19
- data/src/core/transport/auth_context.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +78 -45
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +39 -31
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +3 -3
- data/src/core/tsi/fake_transport_security.cc +4 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +4 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +9 -9
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -3
- data/src/core/tsi/ssl_transport_security.cc +26 -25
- data/src/core/tsi/ssl_transport_security_utils.cc +9 -9
- data/src/core/util/chunked_vector.h +4 -4
- data/src/core/util/event_log.cc +2 -2
- data/src/core/util/gcp_metadata_query.cc +2 -2
- data/src/core/util/grpc_check.cc +22 -0
- data/src/core/util/grpc_check.h +103 -0
- data/src/core/util/http_client/httpcli.cc +3 -3
- data/src/core/util/http_client/parser.cc +4 -4
- data/src/core/util/latent_see.h +7 -4
- data/src/core/util/lru_cache.h +4 -4
- data/src/core/util/memory_usage.h +16 -0
- data/src/core/util/posix/directory_reader.cc +3 -2
- data/src/core/util/posix/sync.cc +24 -24
- data/src/core/util/postmortem_emit.cc +52 -0
- data/src/core/util/postmortem_emit.h +30 -0
- data/src/core/util/ref_counted_ptr.h +5 -0
- data/src/core/util/trie_lookup.h +170 -0
- data/src/core/util/unique_ptr_with_bitset.h +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +6 -1
- data/src/core/xds/grpc/xds_certificate_provider.cc +3 -3
- data/src/core/xds/grpc/xds_client_grpc.cc +34 -15
- data/src/core/xds/grpc/xds_client_grpc.h +4 -1
- data/src/core/xds/grpc/xds_cluster_parser.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_endpoint_parser.cc +2 -2
- data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
- data/src/core/xds/grpc/xds_listener_parser.cc +3 -3
- data/src/core/xds/grpc/xds_matcher.cc +277 -0
- data/src/core/xds/grpc/xds_matcher.h +432 -0
- data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
- data/src/core/xds/grpc/xds_matcher_action.h +48 -0
- data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
- data/src/core/xds/grpc/xds_matcher_context.h +46 -0
- data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
- data/src/core/xds/grpc/xds_matcher_input.h +105 -0
- data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
- data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
- data/src/core/xds/grpc/xds_metadata.cc +4 -3
- data/src/core/xds/grpc/xds_route_config_parser.cc +6 -6
- data/src/core/xds/grpc/xds_routing.cc +3 -3
- data/src/core/xds/grpc/xds_transport_grpc.cc +10 -10
- data/src/core/xds/xds_client/lrs_client.cc +6 -6
- data/src/core/xds/xds_client/xds_client.cc +9 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
- data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
- metadata +37 -2
@@ -32,7 +32,6 @@
|
|
32
32
|
#include "absl/base/thread_annotations.h"
|
33
33
|
#include "absl/container/flat_hash_map.h"
|
34
34
|
#include "absl/functional/any_invocable.h"
|
35
|
-
#include "absl/log/check.h"
|
36
35
|
#include "absl/log/log.h"
|
37
36
|
#include "absl/status/status.h"
|
38
37
|
#include "absl/status/statusor.h"
|
@@ -44,6 +43,7 @@
|
|
44
43
|
#include "src/core/lib/iomgr/port.h"
|
45
44
|
#include "src/core/lib/resource_quota/memory_quota.h"
|
46
45
|
#include "src/core/util/crash.h"
|
46
|
+
#include "src/core/util/grpc_check.h"
|
47
47
|
#include "src/core/util/ref_counted.h"
|
48
48
|
#include "src/core/util/sync.h"
|
49
49
|
|
@@ -126,7 +126,7 @@ class TcpZerocopySendRecord {
|
|
126
126
|
// sendmsg() failed or when tcp_write() is done.
|
127
127
|
bool Unref() {
|
128
128
|
const intptr_t prior = ref_.fetch_sub(1, std::memory_order_acq_rel);
|
129
|
-
|
129
|
+
GRPC_DCHECK_GT(prior, 0);
|
130
130
|
if (prior == 1) {
|
131
131
|
AllSendsComplete();
|
132
132
|
return true;
|
@@ -141,9 +141,9 @@ class TcpZerocopySendRecord {
|
|
141
141
|
};
|
142
142
|
|
143
143
|
void DebugAssertEmpty() {
|
144
|
-
|
145
|
-
|
146
|
-
|
144
|
+
GRPC_DCHECK_EQ(buf_.Count(), 0u);
|
145
|
+
GRPC_DCHECK_EQ(buf_.Length(), 0u);
|
146
|
+
GRPC_DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
|
147
147
|
}
|
148
148
|
|
149
149
|
// When all sendmsg() calls associated with this tcp_write() have been
|
@@ -151,7 +151,7 @@ class TcpZerocopySendRecord {
|
|
151
151
|
// for each sendmsg()) and all reference counts have been dropped, drop our
|
152
152
|
// reference to the underlying data since we no longer need it.
|
153
153
|
void AllSendsComplete() {
|
154
|
-
|
154
|
+
GRPC_DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
|
155
155
|
buf_.Clear();
|
156
156
|
}
|
157
157
|
|
@@ -232,7 +232,7 @@ class TcpZerocopySendCtx {
|
|
232
232
|
--last_send_;
|
233
233
|
if (ReleaseSendRecord(last_send_)->Unref()) {
|
234
234
|
// We should still be holding the ref taken by tcp_write().
|
235
|
-
|
235
|
+
GRPC_DCHECK(0);
|
236
236
|
}
|
237
237
|
}
|
238
238
|
|
@@ -270,7 +270,7 @@ class TcpZerocopySendCtx {
|
|
270
270
|
// same time.
|
271
271
|
void PutSendRecord(TcpZerocopySendRecord* record) {
|
272
272
|
grpc_core::MutexLock lock(&mu_);
|
273
|
-
|
273
|
+
GRPC_DCHECK(record >= send_records_ && record < send_records_ + max_sends_);
|
274
274
|
PutSendRecordLocked(record);
|
275
275
|
}
|
276
276
|
|
@@ -327,7 +327,7 @@ class TcpZerocopySendCtx {
|
|
327
327
|
zcopy_enobuf_state_ = OptMemState::kCheck;
|
328
328
|
return false;
|
329
329
|
}
|
330
|
-
|
330
|
+
GRPC_DCHECK(zcopy_enobuf_state_ != OptMemState::kCheck);
|
331
331
|
if (zcopy_enobuf_state_ == OptMemState::kFull) {
|
332
332
|
// A previous sendmsg attempt was blocked by ENOBUFS. Return true to
|
333
333
|
// mark the fd as writable so the next write attempt could be made.
|
@@ -418,7 +418,7 @@ class TcpZerocopySendCtx {
|
|
418
418
|
TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq)
|
419
419
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
420
420
|
auto iter = ctx_lookup_.find(seq);
|
421
|
-
|
421
|
+
GRPC_DCHECK(iter != ctx_lookup_.end());
|
422
422
|
TcpZerocopySendRecord* record = iter->second;
|
423
423
|
ctx_lookup_.erase(iter);
|
424
424
|
return record;
|
@@ -438,7 +438,7 @@ class TcpZerocopySendCtx {
|
|
438
438
|
|
439
439
|
void PutSendRecordLocked(TcpZerocopySendRecord* record)
|
440
440
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
|
441
|
-
|
441
|
+
GRPC_DCHECK(free_send_records_size_ < max_sends_);
|
442
442
|
free_send_records_[free_send_records_size_] = record;
|
443
443
|
free_send_records_size_++;
|
444
444
|
}
|
@@ -33,7 +33,6 @@
|
|
33
33
|
#include "absl/cleanup/cleanup.h"
|
34
34
|
#include "absl/container/inlined_vector.h"
|
35
35
|
#include "absl/functional/any_invocable.h"
|
36
|
-
#include "absl/log/check.h"
|
37
36
|
#include "absl/log/log.h"
|
38
37
|
#include "absl/status/status.h"
|
39
38
|
#include "absl/strings/str_cat.h"
|
@@ -49,9 +48,9 @@
|
|
49
48
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
50
49
|
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
51
50
|
#include "src/core/lib/event_engine/utils.h"
|
52
|
-
#include "src/core/lib/experiments/experiments.h"
|
53
51
|
#include "src/core/util/crash.h"
|
54
52
|
#include "src/core/util/fork.h"
|
53
|
+
#include "src/core/util/grpc_check.h"
|
55
54
|
#include "src/core/util/sync.h"
|
56
55
|
#include "src/core/util/useful.h"
|
57
56
|
|
@@ -76,6 +75,14 @@ namespace grpc_event_engine::experimental {
|
|
76
75
|
|
77
76
|
namespace {
|
78
77
|
|
78
|
+
bool ShouldUsePosixPoller() {
|
79
|
+
#if defined(GRPC_PYTHON_BUILD)
|
80
|
+
return grpc_core::IsEventEnginePollerForPythonEnabled();
|
81
|
+
#else
|
82
|
+
return true;
|
83
|
+
#endif
|
84
|
+
}
|
85
|
+
|
79
86
|
#if GRPC_ENABLE_FORK_SUPPORT && GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
80
87
|
|
81
88
|
// Thread pool can outlive EE but we need to ensure the ordering if both
|
@@ -165,7 +172,7 @@ void RegisterEventEngineForFork(
|
|
165
172
|
const std::shared_ptr<PosixEventEngine>& posix_engine,
|
166
173
|
const std::shared_ptr<ThreadPool>& executor,
|
167
174
|
const std::shared_ptr<TimerManager>& timer_manager) {
|
168
|
-
if (!grpc_core::Fork::Enabled()) {
|
175
|
+
if (!(grpc_core::Fork::Enabled())) {
|
169
176
|
return;
|
170
177
|
}
|
171
178
|
grpc_core::MutexLock lock(fork_mu.get());
|
@@ -174,7 +181,8 @@ void RegisterEventEngineForFork(
|
|
174
181
|
std::remove_if(fork_handlers->begin(), fork_handlers->end(),
|
175
182
|
[](const auto& ptr) {
|
176
183
|
return ptr.event_engine.expired() &&
|
177
|
-
ptr.executor.expired()
|
184
|
+
ptr.executor.expired() &&
|
185
|
+
ptr.timer_manager.expired();
|
178
186
|
}),
|
179
187
|
fork_handlers->end());
|
180
188
|
fork_handlers->emplace_back(posix_engine, executor, timer_manager);
|
@@ -198,15 +206,13 @@ void RegisterEventEngineForFork(
|
|
198
206
|
|
199
207
|
#ifdef GRPC_POSIX_SOCKET_TCP
|
200
208
|
|
201
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
202
|
-
|
203
209
|
PosixEventEngine::PollingCycle::PollingCycle(
|
204
210
|
std::shared_ptr<ThreadPool> executor,
|
205
211
|
std::shared_ptr<PosixEventPoller> poller)
|
206
212
|
: executor_(std::move(executor)),
|
207
213
|
poller_(std::move(poller)),
|
208
214
|
is_scheduled_(1) {
|
209
|
-
|
215
|
+
GRPC_CHECK_NE(poller_, nullptr);
|
210
216
|
executor_->Run([this]() { PollerWorkInternal(); });
|
211
217
|
}
|
212
218
|
|
@@ -222,7 +228,7 @@ PosixEventEngine::PollingCycle::~PollingCycle() {
|
|
222
228
|
void PosixEventEngine::PollingCycle::PollerWorkInternal() {
|
223
229
|
grpc_core::MutexLock lock(&mu_);
|
224
230
|
--is_scheduled_;
|
225
|
-
|
231
|
+
GRPC_CHECK_EQ(is_scheduled_, 0);
|
226
232
|
bool again = false;
|
227
233
|
// TODO(vigneshbabu): The timeout specified here is arbitrary. For
|
228
234
|
// instance, this can be improved by setting the timeout to the next
|
@@ -240,8 +246,6 @@ void PosixEventEngine::PollingCycle::PollerWorkInternal() {
|
|
240
246
|
cond_.SignalAll();
|
241
247
|
}
|
242
248
|
|
243
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
244
|
-
|
245
249
|
void AsyncConnect::Start(EventEngine::Duration timeout) {
|
246
250
|
on_writable_ = PosixEngineClosure::ToPermanentClosure(
|
247
251
|
[this](absl::Status status) { OnWritable(std::move(status)); });
|
@@ -276,7 +280,7 @@ void AsyncConnect::OnWritable(absl::Status status)
|
|
276
280
|
absl::StatusOr<std::unique_ptr<EventEngine::Endpoint>> ep;
|
277
281
|
|
278
282
|
mu_.Lock();
|
279
|
-
|
283
|
+
GRPC_CHECK_NE(fd_, nullptr);
|
280
284
|
fd = std::exchange(fd_, nullptr);
|
281
285
|
bool connect_cancelled = connect_cancelled_;
|
282
286
|
if (fd->IsHandleShutdown() && status.ok()) {
|
@@ -390,84 +394,6 @@ void AsyncConnect::OnWritable(absl::Status status)
|
|
390
394
|
}
|
391
395
|
}
|
392
396
|
|
393
|
-
EventEngine::ConnectionHandle
|
394
|
-
PosixEventEngine::CreateEndpointFromUnconnectedFdInternal(
|
395
|
-
const FileDescriptor& fd, EventEngine::OnConnectCallback on_connect,
|
396
|
-
const EventEngine::ResolvedAddress& addr,
|
397
|
-
const PosixTcpOptions& tcp_options, MemoryAllocator memory_allocator,
|
398
|
-
EventEngine::Duration timeout) {
|
399
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
400
|
-
PosixError err;
|
401
|
-
int connect_errno;
|
402
|
-
PosixEventPoller* poller = poller_.get();
|
403
|
-
do {
|
404
|
-
err = poller->posix_interface().Connect(fd, addr.address(), addr.size());
|
405
|
-
} while (err.IsPosixError(EINTR));
|
406
|
-
if (err.IsWrongGenerationError()) {
|
407
|
-
Run([on_connect = std::move(on_connect),
|
408
|
-
ep = absl::FailedPreconditionError(
|
409
|
-
"connect failed: file descriptor was created before "
|
410
|
-
"fork")]() mutable { on_connect(std::move(ep)); });
|
411
|
-
return EventEngine::ConnectionHandle::kInvalid;
|
412
|
-
}
|
413
|
-
|
414
|
-
connect_errno = err.errno_value().value_or(0);
|
415
|
-
|
416
|
-
auto addr_uri = ResolvedAddressToURI(addr);
|
417
|
-
if (!addr_uri.ok()) {
|
418
|
-
Run([on_connect = std::move(on_connect),
|
419
|
-
ep = absl::FailedPreconditionError(absl::StrCat(
|
420
|
-
"connect failed: ", "invalid addr: ",
|
421
|
-
addr_uri.value()))]() mutable { on_connect(std::move(ep)); });
|
422
|
-
return EventEngine::ConnectionHandle::kInvalid;
|
423
|
-
}
|
424
|
-
|
425
|
-
std::string name = absl::StrCat("tcp-client:", addr_uri.value());
|
426
|
-
EventHandle* handle =
|
427
|
-
poller->CreateHandle(fd, name, poller->CanTrackErrors());
|
428
|
-
|
429
|
-
if (connect_errno == 0) {
|
430
|
-
// Connection already succeeded. Return 0 to discourage any cancellation
|
431
|
-
// attempts.
|
432
|
-
Run([on_connect = std::move(on_connect),
|
433
|
-
ep = CreatePosixEndpoint(
|
434
|
-
handle, nullptr, shared_from_this(), std::move(memory_allocator),
|
435
|
-
tcp_options)]() mutable { on_connect(std::move(ep)); });
|
436
|
-
return EventEngine::ConnectionHandle::kInvalid;
|
437
|
-
}
|
438
|
-
if (connect_errno != EWOULDBLOCK && connect_errno != EINPROGRESS) {
|
439
|
-
// Connection already failed. Return 0 to discourage any cancellation
|
440
|
-
// attempts.
|
441
|
-
handle->OrphanHandle(nullptr, nullptr, "tcp_client_connect_error");
|
442
|
-
Run([on_connect = std::move(on_connect),
|
443
|
-
ep = absl::FailedPreconditionError(absl::StrCat(
|
444
|
-
"connect failed: ", "addr: ", addr_uri.value(),
|
445
|
-
" error: ", std::strerror(connect_errno)))]() mutable {
|
446
|
-
on_connect(std::move(ep));
|
447
|
-
});
|
448
|
-
return EventEngine::ConnectionHandle::kInvalid;
|
449
|
-
}
|
450
|
-
// Connection is still in progress.
|
451
|
-
int64_t connection_id =
|
452
|
-
last_connection_id_.fetch_add(1, std::memory_order_acq_rel);
|
453
|
-
AsyncConnect* ac =
|
454
|
-
new AsyncConnect(std::move(on_connect), shared_from_this(),
|
455
|
-
executor_.get(), handle, std::move(memory_allocator),
|
456
|
-
tcp_options, addr_uri.value(), connection_id);
|
457
|
-
int shard_number = connection_id % connection_shards_.size();
|
458
|
-
struct ConnectionShard* shard = &connection_shards_[shard_number];
|
459
|
-
{
|
460
|
-
grpc_core::MutexLock lock(&shard->mu);
|
461
|
-
shard->pending_connections.insert_or_assign(connection_id, ac);
|
462
|
-
}
|
463
|
-
// Start asynchronous connect and return the connection id.
|
464
|
-
ac->Start(timeout);
|
465
|
-
return {static_cast<intptr_t>(connection_id), 0};
|
466
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
467
|
-
grpc_core::Crash("Polling is not available on this platform");
|
468
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
469
|
-
}
|
470
|
-
|
471
397
|
void PosixEventEngine::OnConnectFinishInternal(int connection_handle) {
|
472
398
|
int shard_number = connection_handle % connection_shards_.size();
|
473
399
|
struct ConnectionShard* shard = &connection_shards_[shard_number];
|
@@ -484,12 +410,11 @@ std::shared_ptr<PosixEventEngine> PosixEventEngine::MakePosixEventEngine() {
|
|
484
410
|
return engine;
|
485
411
|
}
|
486
412
|
|
487
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
488
|
-
|
489
413
|
std::shared_ptr<PosixEventEngine>
|
490
414
|
PosixEventEngine::MakeTestOnlyPosixEventEngine(
|
491
415
|
std::shared_ptr<grpc_event_engine::experimental::PosixEventPoller>
|
492
416
|
test_only_poller) {
|
417
|
+
// Calling a private PosixEventEngine constructor - can't do make_shared
|
493
418
|
std::shared_ptr<PosixEventEngine> engine(
|
494
419
|
new PosixEventEngine(std::move(test_only_poller)));
|
495
420
|
RegisterEventEngineForFork(engine, engine->executor_, engine->timer_manager_);
|
@@ -498,36 +423,20 @@ PosixEventEngine::MakeTestOnlyPosixEventEngine(
|
|
498
423
|
|
499
424
|
PosixEventEngine::PosixEventEngine(std::shared_ptr<PosixEventPoller> poller)
|
500
425
|
: connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
|
501
|
-
executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
|
502
426
|
poller_(std::move(poller)),
|
427
|
+
executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
|
503
428
|
timer_manager_(std::make_shared<TimerManager>(executor_)) {}
|
504
429
|
|
505
430
|
PosixEventEngine::PosixEventEngine()
|
506
431
|
: connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
|
507
432
|
executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
|
508
433
|
timer_manager_(std::make_shared<TimerManager>(executor_)) {
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
#else // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
514
|
-
|
515
|
-
std::shared_ptr<PosixEventEngine>
|
516
|
-
PosixEventEngine::MakeTestOnlyPosixEventEngine(
|
517
|
-
std::shared_ptr<grpc_event_engine::experimental::PosixEventPoller>
|
518
|
-
test_only_poller) {
|
519
|
-
grpc_core::Crash(
|
520
|
-
"PosixEventEngine::MakeTestOnlyPosixEventEngine not available on this "
|
521
|
-
"platform");
|
434
|
+
if (ShouldUsePosixPoller()) {
|
435
|
+
poller_ = grpc_event_engine::experimental::MakeDefaultPoller(executor_);
|
436
|
+
SchedulePoller();
|
437
|
+
}
|
522
438
|
}
|
523
439
|
|
524
|
-
PosixEventEngine::PosixEventEngine()
|
525
|
-
: connection_shards_(std::max(2 * gpr_cpu_num_cores(), 1u)),
|
526
|
-
executor_(MakeThreadPool(grpc_core::Clamp(gpr_cpu_num_cores(), 4u, 16u))),
|
527
|
-
timer_manager_(std::make_shared<TimerManager>(executor_)) {}
|
528
|
-
|
529
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
530
|
-
|
531
440
|
#endif // GRPC_POSIX_SOCKET_TCP
|
532
441
|
|
533
442
|
struct PosixEventEngine::ClosureData final : public EventEngine::Closure {
|
@@ -558,11 +467,11 @@ PosixEventEngine::~PosixEventEngine() {
|
|
558
467
|
<< HandleToString(handle);
|
559
468
|
}
|
560
469
|
}
|
561
|
-
|
470
|
+
GRPC_CHECK(GPR_LIKELY(known_handles_.empty()));
|
562
471
|
}
|
563
|
-
#if
|
472
|
+
#if defined(GRPC_POSIX_SOCKET_TCP)
|
564
473
|
polling_cycle_.reset();
|
565
|
-
#endif //
|
474
|
+
#endif // defined(GRPC_POSIX_SOCKET_TCP)
|
566
475
|
timer_manager_->Shutdown();
|
567
476
|
executor_->Quiesce();
|
568
477
|
}
|
@@ -665,7 +574,7 @@ PosixEventEngine::GetDNSResolver(
|
|
665
574
|
<< "PosixEventEngine::" << this << " creating NativePosixDNSResolver";
|
666
575
|
return std::make_unique<NativePosixDNSResolver>(shared_from_this());
|
667
576
|
}
|
668
|
-
#if
|
577
|
+
#if defined(GRPC_POSIX_SOCKET_TCP)
|
669
578
|
GRPC_TRACE_LOG(event_engine_dns, INFO)
|
670
579
|
<< "PosixEventEngine::" << this << " creating AresResolver";
|
671
580
|
auto ares_resolver = AresResolver::CreateAresResolver(
|
@@ -678,9 +587,9 @@ PosixEventEngine::GetDNSResolver(
|
|
678
587
|
RegisterAresResolverForFork(ares_resolver->get());
|
679
588
|
return std::make_unique<PosixEventEngine::PosixDNSResolver>(
|
680
589
|
std::move(*ares_resolver));
|
681
|
-
#else //
|
590
|
+
#else // defined(GRPC_POSIX_SOCKET_TCP)
|
682
591
|
grpc_core::Crash("Can not create CAres resolver with disabled poller");
|
683
|
-
#endif //
|
592
|
+
#endif // defined(GRPC_POSIX_SOCKET_TCP)
|
684
593
|
}
|
685
594
|
|
686
595
|
#else // GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
@@ -706,8 +615,8 @@ PosixEventEngine::GetDNSResolver(
|
|
706
615
|
|
707
616
|
bool PosixEventEngine::IsWorkerThread() { grpc_core::Crash("unimplemented"); }
|
708
617
|
|
709
|
-
std::unique_ptr<EventEngine::Endpoint
|
710
|
-
|
618
|
+
absl::StatusOr<std::unique_ptr<EventEngine::Endpoint>>
|
619
|
+
PosixEventEngine::CreateEndpointFromFd(int fd, const EndpointConfig& config) {
|
711
620
|
auto options = TcpOptionsFromEndpointConfig(config);
|
712
621
|
MemoryAllocator allocator;
|
713
622
|
if (options.memory_allocator_factory != nullptr) {
|
@@ -722,7 +631,7 @@ std::unique_ptr<EventEngine::Endpoint> PosixEventEngine::CreateEndpointFromFd(
|
|
722
631
|
absl::StrCat("allocator:", fd)));
|
723
632
|
}
|
724
633
|
|
725
|
-
#if
|
634
|
+
#if defined(GRPC_POSIX_SOCKET_TCP)
|
726
635
|
|
727
636
|
bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
|
728
637
|
int connection_handle = handle.keys[0];
|
@@ -737,7 +646,7 @@ bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
|
|
737
646
|
auto it = shard->pending_connections.find(connection_handle);
|
738
647
|
if (it != shard->pending_connections.end()) {
|
739
648
|
ac = it->second;
|
740
|
-
|
649
|
+
GRPC_CHECK_NE(ac, nullptr);
|
741
650
|
// Trying to acquire ac->mu here would could cause a deadlock because
|
742
651
|
// the OnWritable method tries to acquire the two mutexes used
|
743
652
|
// here in the reverse order. But we dont need to acquire ac->mu before
|
@@ -780,9 +689,13 @@ EventEngine::ConnectionHandle PosixEventEngine::Connect(
|
|
780
689
|
const EndpointConfig& args, MemoryAllocator memory_allocator,
|
781
690
|
Duration timeout) {
|
782
691
|
PosixTcpOptions options = TcpOptionsFromEndpointConfig(args);
|
783
|
-
absl::StatusOr<EventEnginePosixInterface::PosixSocketCreateResult> socket
|
784
|
-
|
785
|
-
|
692
|
+
absl::StatusOr<EventEnginePosixInterface::PosixSocketCreateResult> socket;
|
693
|
+
if (poller_ != nullptr) {
|
694
|
+
socket = poller_->posix_interface().CreateAndPrepareTcpClientSocket(options,
|
695
|
+
addr);
|
696
|
+
} else {
|
697
|
+
socket = absl::InternalError("Polling is not enabled");
|
698
|
+
}
|
786
699
|
if (!socket.ok()) {
|
787
700
|
Run([on_connect = std::move(on_connect),
|
788
701
|
status = socket.status()]() mutable { on_connect(status); });
|
@@ -797,21 +710,112 @@ EventEngine::ConnectionHandle PosixEventEngine::CreateEndpointFromUnconnectedFd(
|
|
797
710
|
int fd, EventEngine::OnConnectCallback on_connect,
|
798
711
|
const EventEngine::ResolvedAddress& addr, const EndpointConfig& config,
|
799
712
|
MemoryAllocator memory_allocator, EventEngine::Duration timeout) {
|
713
|
+
if (poller_ == nullptr) {
|
714
|
+
Run([on_connect = std::move(on_connect),
|
715
|
+
ep = absl::FailedPreconditionError(
|
716
|
+
"connect failed: polling is not enabled")]() mutable {
|
717
|
+
on_connect(std::move(ep));
|
718
|
+
});
|
719
|
+
return EventEngine::ConnectionHandle::kInvalid;
|
720
|
+
}
|
800
721
|
return CreateEndpointFromUnconnectedFdInternal(
|
801
|
-
|
802
|
-
|
722
|
+
poller_->posix_interface().Adopt(fd), std::move(on_connect), addr,
|
723
|
+
TcpOptionsFromEndpointConfig(config), std::move(memory_allocator),
|
803
724
|
timeout);
|
804
725
|
}
|
805
726
|
|
806
|
-
|
727
|
+
EventEngine::ConnectionHandle
|
728
|
+
PosixEventEngine::CreateEndpointFromUnconnectedFdInternal(
|
729
|
+
const FileDescriptor& fd, EventEngine::OnConnectCallback on_connect,
|
730
|
+
const EventEngine::ResolvedAddress& addr,
|
731
|
+
const PosixTcpOptions& tcp_options, MemoryAllocator memory_allocator,
|
732
|
+
EventEngine::Duration timeout) {
|
733
|
+
PosixError err;
|
734
|
+
int connect_errno;
|
735
|
+
if (poller_ == nullptr) {
|
736
|
+
Run([on_connect = std::move(on_connect),
|
737
|
+
ep = absl::FailedPreconditionError(
|
738
|
+
"connect failed: polling is disabled")]() mutable {
|
739
|
+
on_connect(std::move(ep));
|
740
|
+
});
|
741
|
+
return EventEngine::ConnectionHandle::kInvalid;
|
742
|
+
}
|
743
|
+
do {
|
744
|
+
err = poller_->posix_interface().Connect(fd, addr.address(), addr.size());
|
745
|
+
} while (err.IsPosixError(EINTR));
|
746
|
+
if (err.IsWrongGenerationError()) {
|
747
|
+
Run([on_connect = std::move(on_connect),
|
748
|
+
ep = absl::FailedPreconditionError(
|
749
|
+
"connect failed: file descriptor was created before "
|
750
|
+
"fork")]() mutable { on_connect(std::move(ep)); });
|
751
|
+
return EventEngine::ConnectionHandle::kInvalid;
|
752
|
+
}
|
753
|
+
|
754
|
+
connect_errno = err.errno_value().value_or(0);
|
755
|
+
|
756
|
+
auto addr_uri = ResolvedAddressToURI(addr);
|
757
|
+
if (!addr_uri.ok()) {
|
758
|
+
Run([on_connect = std::move(on_connect),
|
759
|
+
ep = absl::FailedPreconditionError(absl::StrCat(
|
760
|
+
"connect failed: ", "invalid addr: ",
|
761
|
+
addr_uri.value()))]() mutable { on_connect(std::move(ep)); });
|
762
|
+
return EventEngine::ConnectionHandle::kInvalid;
|
763
|
+
}
|
764
|
+
|
765
|
+
std::string name = absl::StrCat("tcp-client:", addr_uri.value());
|
766
|
+
EventHandle* handle =
|
767
|
+
poller_->CreateHandle(fd, name, poller_->CanTrackErrors());
|
768
|
+
|
769
|
+
if (connect_errno == 0) {
|
770
|
+
// Connection already succeeded. Return 0 to discourage any cancellation
|
771
|
+
// attempts.
|
772
|
+
Run([on_connect = std::move(on_connect),
|
773
|
+
ep = CreatePosixEndpoint(
|
774
|
+
handle, nullptr, shared_from_this(), std::move(memory_allocator),
|
775
|
+
tcp_options)]() mutable { on_connect(std::move(ep)); });
|
776
|
+
return EventEngine::ConnectionHandle::kInvalid;
|
777
|
+
}
|
778
|
+
if (connect_errno != EWOULDBLOCK && connect_errno != EINPROGRESS) {
|
779
|
+
// Connection already failed. Return 0 to discourage any cancellation
|
780
|
+
// attempts.
|
781
|
+
handle->OrphanHandle(nullptr, nullptr, "tcp_client_connect_error");
|
782
|
+
Run([on_connect = std::move(on_connect),
|
783
|
+
ep = absl::FailedPreconditionError(absl::StrCat(
|
784
|
+
"connect failed: ", "addr: ", addr_uri.value(),
|
785
|
+
" error: ", std::strerror(connect_errno)))]() mutable {
|
786
|
+
on_connect(std::move(ep));
|
787
|
+
});
|
788
|
+
return EventEngine::ConnectionHandle::kInvalid;
|
789
|
+
}
|
790
|
+
// Connection is still in progress.
|
791
|
+
int64_t connection_id =
|
792
|
+
last_connection_id_.fetch_add(1, std::memory_order_acq_rel);
|
793
|
+
AsyncConnect* ac =
|
794
|
+
new AsyncConnect(std::move(on_connect), shared_from_this(),
|
795
|
+
executor_.get(), handle, std::move(memory_allocator),
|
796
|
+
tcp_options, addr_uri.value(), connection_id);
|
797
|
+
int shard_number = connection_id % connection_shards_.size();
|
798
|
+
struct ConnectionShard* shard = &connection_shards_[shard_number];
|
799
|
+
{
|
800
|
+
grpc_core::MutexLock lock(&shard->mu);
|
801
|
+
shard->pending_connections.insert_or_assign(connection_id, ac);
|
802
|
+
}
|
803
|
+
// Start asynchronous connect and return the connection id.
|
804
|
+
ac->Start(timeout);
|
805
|
+
return {static_cast<intptr_t>(connection_id), 0};
|
806
|
+
}
|
807
|
+
|
808
|
+
absl::StatusOr<std::unique_ptr<EventEngine::Endpoint>>
|
807
809
|
PosixEventEngine::CreatePosixEndpointFromFd(int fd,
|
808
810
|
const EndpointConfig& config,
|
809
811
|
MemoryAllocator memory_allocator) {
|
810
|
-
|
811
|
-
|
812
|
+
GRPC_DCHECK_GT(fd, 0);
|
813
|
+
if (poller_ == nullptr) {
|
814
|
+
return absl::FailedPreconditionError("polling is not enabled");
|
815
|
+
}
|
812
816
|
EventHandle* handle =
|
813
|
-
|
814
|
-
|
817
|
+
poller_->CreateHandle(poller_->posix_interface().Adopt(fd), "tcp-client",
|
818
|
+
poller_->CanTrackErrors());
|
815
819
|
return CreatePosixEndpoint(handle, nullptr, shared_from_this(),
|
816
820
|
std::move(memory_allocator),
|
817
821
|
TcpOptionsFromEndpointConfig(config));
|
@@ -847,11 +851,12 @@ PosixEventEngine::CreatePosixListener(
|
|
847
851
|
}
|
848
852
|
|
849
853
|
void PosixEventEngine::SchedulePoller() {
|
850
|
-
if (poller_
|
851
|
-
|
852
|
-
CHECK(!polling_cycle_.has_value());
|
853
|
-
polling_cycle_.emplace(executor_, poller_);
|
854
|
+
if (poller_ == nullptr) {
|
855
|
+
return;
|
854
856
|
}
|
857
|
+
grpc_core::MutexLock lock(&mu_);
|
858
|
+
GRPC_CHECK(!polling_cycle_.has_value());
|
859
|
+
polling_cycle_.emplace(executor_, poller_);
|
855
860
|
}
|
856
861
|
|
857
862
|
void PosixEventEngine::ResetPollCycle() {
|
@@ -859,7 +864,7 @@ void PosixEventEngine::ResetPollCycle() {
|
|
859
864
|
polling_cycle_.reset();
|
860
865
|
}
|
861
866
|
|
862
|
-
#else //
|
867
|
+
#else // defined(GRPC_POSIX_SOCKET_TCP)
|
863
868
|
|
864
869
|
bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
|
865
870
|
grpc_core::Crash(
|
@@ -882,7 +887,7 @@ EventEngine::ConnectionHandle PosixEventEngine::CreateEndpointFromUnconnectedFd(
|
|
882
887
|
"platform");
|
883
888
|
}
|
884
889
|
|
885
|
-
std::unique_ptr<EventEngine::Endpoint
|
890
|
+
absl::StatusOr<std::unique_ptr<EventEngine::Endpoint>>
|
886
891
|
PosixEventEngine::CreatePosixEndpointFromFd(int fd,
|
887
892
|
const EndpointConfig& config,
|
888
893
|
MemoryAllocator memory_allocator) {
|
@@ -911,54 +916,47 @@ PosixEventEngine::CreatePosixListener(
|
|
911
916
|
"EventEngine::CreateListener is not supported on this platform");
|
912
917
|
}
|
913
918
|
|
914
|
-
#endif //
|
919
|
+
#endif // defined(GRPC_POSIX_SOCKET_TCP)
|
915
920
|
|
916
921
|
#if GRPC_POSIX_SOCKET_TCP && GRPC_ENABLE_FORK_SUPPORT && \
|
917
922
|
GRPC_POSIX_FORK_ALLOW_PTHREAD_ATFORK
|
918
923
|
|
919
924
|
void PosixEventEngine::AfterFork(OnForkRole on_fork_role) {
|
920
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
921
|
-
PosixEventPoller* poller = GetPollerChecked();
|
922
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
923
925
|
if (on_fork_role == OnForkRole::kChild) {
|
924
926
|
if (grpc_core::IsEventEngineForkEnabled()) {
|
925
927
|
AfterForkInChild();
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
928
|
+
if (poller_ != nullptr) {
|
929
|
+
poller_->HandleForkInChild();
|
930
|
+
}
|
930
931
|
}
|
931
932
|
}
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
933
|
+
if (poller_ != nullptr) {
|
934
|
+
poller_->ResetKickState();
|
935
|
+
SchedulePoller();
|
936
|
+
}
|
936
937
|
}
|
937
938
|
|
938
|
-
void PosixEventEngine::BeforeFork() {
|
939
|
-
#if GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
940
|
-
ResetPollCycle();
|
941
|
-
#endif // GRPC_PLATFORM_SUPPORTS_POSIX_POLLING
|
942
|
-
}
|
939
|
+
void PosixEventEngine::BeforeFork() { ResetPollCycle(); }
|
943
940
|
|
944
941
|
void PosixEventEngine::AfterForkInChild() {
|
945
942
|
#if GRPC_ARES == 1 && defined(GRPC_POSIX_SOCKET_ARES_EV_DRIVER)
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
943
|
+
// Resolver restart happens in two stages - first stage before the poller
|
944
|
+
// is reinitialized and second stage is afterwards
|
945
|
+
absl::InlinedVector<std::shared_ptr<AresResolver::ReinitHandle>, 10>
|
946
|
+
ares_resolvers;
|
947
|
+
absl::Cleanup cleanup = [&]() {
|
948
|
+
for (const auto& resolver : ares_resolvers) {
|
949
|
+
resolver->Restart();
|
951
950
|
}
|
952
|
-
}
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
locked->Restart();
|
951
|
+
};
|
952
|
+
{
|
953
|
+
grpc_core::MutexLock lock(&resolver_handles_mu_);
|
954
|
+
for (const auto& cb : resolver_handles_) {
|
955
|
+
auto locked = cb.lock();
|
956
|
+
if (locked != nullptr) {
|
957
|
+
locked->Reset(absl::CancelledError("Reset resolver on fork"));
|
958
|
+
ares_resolvers.emplace_back(std::move(locked));
|
959
|
+
}
|
962
960
|
}
|
963
961
|
}
|
964
962
|
#endif
|