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
@@ -46,7 +46,6 @@
|
|
46
46
|
#include <unordered_map>
|
47
47
|
|
48
48
|
#include "absl/base/thread_annotations.h"
|
49
|
-
#include "absl/log/check.h"
|
50
49
|
#include "absl/log/log.h"
|
51
50
|
#include "absl/status/status.h"
|
52
51
|
#include "absl/strings/str_cat.h"
|
@@ -70,6 +69,7 @@
|
|
70
69
|
#include "src/core/telemetry/stats_data.h"
|
71
70
|
#include "src/core/util/crash.h"
|
72
71
|
#include "src/core/util/event_log.h"
|
72
|
+
#include "src/core/util/grpc_check.h"
|
73
73
|
#include "src/core/util/strerror.h"
|
74
74
|
#include "src/core/util/string.h"
|
75
75
|
#include "src/core/util/sync.h"
|
@@ -155,7 +155,7 @@ class TcpZerocopySendRecord {
|
|
155
155
|
// sendmsg() failed or when tcp_write() is done.
|
156
156
|
bool Unref() {
|
157
157
|
const intptr_t prior = ref_.fetch_sub(1, std::memory_order_acq_rel);
|
158
|
-
|
158
|
+
GRPC_DCHECK_GT(prior, 0);
|
159
159
|
if (prior == 1) {
|
160
160
|
AllSendsComplete();
|
161
161
|
return true;
|
@@ -170,9 +170,9 @@ class TcpZerocopySendRecord {
|
|
170
170
|
};
|
171
171
|
|
172
172
|
void AssertEmpty() {
|
173
|
-
|
174
|
-
|
175
|
-
|
173
|
+
GRPC_DCHECK_EQ(buf_.count, 0u);
|
174
|
+
GRPC_DCHECK_EQ(buf_.length, 0u);
|
175
|
+
GRPC_DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
|
176
176
|
}
|
177
177
|
|
178
178
|
// When all sendmsg() calls associated with this tcp_write() have been
|
@@ -180,7 +180,7 @@ class TcpZerocopySendRecord {
|
|
180
180
|
// for each sendmsg()) and all reference counts have been dropped, drop our
|
181
181
|
// reference to the underlying data since we no longer need it.
|
182
182
|
void AllSendsComplete() {
|
183
|
-
|
183
|
+
GRPC_DCHECK_EQ(ref_.load(std::memory_order_relaxed), 0);
|
184
184
|
grpc_slice_buffer_reset_and_unref(&buf_);
|
185
185
|
}
|
186
186
|
|
@@ -260,7 +260,7 @@ class TcpZerocopySendCtx {
|
|
260
260
|
--last_send_;
|
261
261
|
if (ReleaseSendRecord(last_send_)->Unref()) {
|
262
262
|
// We should still be holding the ref taken by tcp_write().
|
263
|
-
|
263
|
+
GRPC_DCHECK(0);
|
264
264
|
}
|
265
265
|
}
|
266
266
|
|
@@ -296,8 +296,8 @@ class TcpZerocopySendCtx {
|
|
296
296
|
// max_sends_ tcp_write() instances with zerocopy enabled in flight at the
|
297
297
|
// same time.
|
298
298
|
void PutSendRecord(TcpZerocopySendRecord* record) {
|
299
|
-
|
300
|
-
|
299
|
+
GRPC_DCHECK(record >= send_records_);
|
300
|
+
GRPC_DCHECK(record < send_records_ + max_sends_);
|
301
301
|
MutexLock guard(&lock_);
|
302
302
|
PutSendRecordLocked(record);
|
303
303
|
}
|
@@ -316,7 +316,7 @@ class TcpZerocopySendCtx {
|
|
316
316
|
bool enabled() const { return enabled_; }
|
317
317
|
|
318
318
|
void set_enabled(bool enabled) {
|
319
|
-
|
319
|
+
GRPC_DCHECK(!enabled || !memory_limited());
|
320
320
|
enabled_ = enabled;
|
321
321
|
}
|
322
322
|
|
@@ -354,7 +354,7 @@ class TcpZerocopySendCtx {
|
|
354
354
|
zcopy_enobuf_state_ = OMemState::CHECK;
|
355
355
|
return false;
|
356
356
|
}
|
357
|
-
|
357
|
+
GRPC_DCHECK(zcopy_enobuf_state_ != OMemState::CHECK);
|
358
358
|
if (zcopy_enobuf_state_ == OMemState::FULL) {
|
359
359
|
// A previous sendmsg attempt was blocked by ENOBUFS. Return true to
|
360
360
|
// mark the fd as writable so the next write attempt could be made.
|
@@ -428,7 +428,7 @@ class TcpZerocopySendCtx {
|
|
428
428
|
|
429
429
|
TcpZerocopySendRecord* ReleaseSendRecordLocked(uint32_t seq) {
|
430
430
|
auto iter = ctx_lookup_.find(seq);
|
431
|
-
|
431
|
+
GRPC_DCHECK(iter != ctx_lookup_.end());
|
432
432
|
TcpZerocopySendRecord* record = iter->second;
|
433
433
|
ctx_lookup_.erase(iter);
|
434
434
|
return record;
|
@@ -446,7 +446,7 @@ class TcpZerocopySendCtx {
|
|
446
446
|
}
|
447
447
|
|
448
448
|
void PutSendRecordLocked(TcpZerocopySendRecord* record) {
|
449
|
-
|
449
|
+
GRPC_DCHECK(free_send_records_size_ < max_sends_);
|
450
450
|
free_send_records_[free_send_records_size_] = record;
|
451
451
|
free_send_records_size_++;
|
452
452
|
}
|
@@ -635,7 +635,7 @@ static void run_poller(backup_poller* p) {
|
|
635
635
|
g_backup_poller_mu->Lock();
|
636
636
|
// last "uncovered" notification is the ref that keeps us polling
|
637
637
|
if (g_uncovered_notifications_pending == 1) {
|
638
|
-
|
638
|
+
GRPC_CHECK(g_backup_poller == p);
|
639
639
|
g_backup_poller = nullptr;
|
640
640
|
g_uncovered_notifications_pending = 0;
|
641
641
|
g_backup_poller_mu->Unlock();
|
@@ -660,7 +660,7 @@ static void drop_uncovered(grpc_tcp* /*tcp*/) {
|
|
660
660
|
p = g_backup_poller;
|
661
661
|
old_count = g_uncovered_notifications_pending--;
|
662
662
|
g_backup_poller_mu->Unlock();
|
663
|
-
|
663
|
+
GRPC_CHECK_GT(old_count, 1);
|
664
664
|
GRPC_TRACE_LOG(tcp, INFO) << "BACKUP_POLLER:" << p << " uncover cnt "
|
665
665
|
<< old_count << "->" << old_count - 1;
|
666
666
|
}
|
@@ -914,8 +914,8 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
914
914
|
iov[i].iov_len = GRPC_SLICE_LENGTH(tcp->incoming_buffer->slices[i]);
|
915
915
|
}
|
916
916
|
|
917
|
-
|
918
|
-
|
917
|
+
GRPC_CHECK_NE(tcp->incoming_buffer->length, 0u);
|
918
|
+
GRPC_DCHECK_GT(tcp->min_progress_size, 0);
|
919
919
|
|
920
920
|
do {
|
921
921
|
// Assume there is something on the queue. If we receive TCP_INQ from
|
@@ -981,12 +981,12 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
981
981
|
|
982
982
|
grpc_core::global_stats().IncrementTcpReadSize(read_bytes);
|
983
983
|
add_to_estimate(tcp, static_cast<size_t>(read_bytes));
|
984
|
-
|
985
|
-
|
984
|
+
GRPC_DCHECK((size_t)read_bytes <=
|
985
|
+
tcp->incoming_buffer->length - total_read_bytes);
|
986
986
|
|
987
987
|
#ifdef GRPC_HAVE_TCP_INQ
|
988
988
|
if (tcp->inq_capable) {
|
989
|
-
|
989
|
+
GRPC_DCHECK(!(msg.msg_flags & MSG_CTRUNC));
|
990
990
|
struct cmsghdr* cmsg = CMSG_FIRSTHDR(&msg);
|
991
991
|
for (; cmsg != nullptr; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
|
992
992
|
if (cmsg->cmsg_level == SOL_TCP && cmsg->cmsg_type == TCP_CM_INQ &&
|
@@ -1029,7 +1029,7 @@ static bool tcp_do_read(grpc_tcp* tcp, grpc_error_handle* error)
|
|
1029
1029
|
finish_estimate(tcp);
|
1030
1030
|
}
|
1031
1031
|
|
1032
|
-
|
1032
|
+
GRPC_DCHECK_GT(total_read_bytes, 0u);
|
1033
1033
|
*error = absl::OkStatus();
|
1034
1034
|
if (grpc_core::IsTcpFrameSizeTuningEnabled()) {
|
1035
1035
|
// Update min progress size based on the total number of bytes read in
|
@@ -1146,7 +1146,7 @@ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
|
|
1146
1146
|
static void tcp_read(grpc_endpoint* ep, grpc_slice_buffer* incoming_buffer,
|
1147
1147
|
grpc_closure* cb, bool urgent, int min_progress_size) {
|
1148
1148
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
1149
|
-
|
1149
|
+
GRPC_CHECK_EQ(tcp->read_cb, nullptr);
|
1150
1150
|
tcp->read_cb = cb;
|
1151
1151
|
tcp->read_mu.Lock();
|
1152
1152
|
tcp->incoming_buffer = incoming_buffer;
|
@@ -1228,8 +1228,8 @@ static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
|
|
1228
1228
|
}
|
1229
1229
|
if (zerocopy_send_record != nullptr) {
|
1230
1230
|
zerocopy_send_record->PrepareForSends(buf);
|
1231
|
-
|
1232
|
-
|
1231
|
+
GRPC_DCHECK_EQ(buf->count, 0u);
|
1232
|
+
GRPC_DCHECK_EQ(buf->length, 0u);
|
1233
1233
|
tcp->outgoing_byte_idx = 0;
|
1234
1234
|
tcp->outgoing_buffer = nullptr;
|
1235
1235
|
}
|
@@ -1290,10 +1290,10 @@ static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
|
|
1290
1290
|
uint32_t seq, const char* tag);
|
1291
1291
|
// Reads \a cmsg to process zerocopy control messages.
|
1292
1292
|
static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
|
1293
|
-
|
1293
|
+
GRPC_DCHECK(cmsg);
|
1294
1294
|
auto serr = reinterpret_cast<struct sock_extended_err*>(CMSG_DATA(cmsg));
|
1295
|
-
|
1296
|
-
|
1295
|
+
GRPC_DCHECK_EQ(serr->ee_errno, 0u);
|
1296
|
+
GRPC_DCHECK(serr->ee_origin == SO_EE_ORIGIN_ZEROCOPY);
|
1297
1297
|
const uint32_t lo = serr->ee_info;
|
1298
1298
|
const uint32_t hi = serr->ee_data;
|
1299
1299
|
for (uint32_t seq = lo; seq <= hi; ++seq) {
|
@@ -1303,7 +1303,7 @@ static void process_zerocopy(grpc_tcp* tcp, struct cmsghdr* cmsg) {
|
|
1303
1303
|
// both; if so, batch the unref/put.
|
1304
1304
|
TcpZerocopySendRecord* record =
|
1305
1305
|
tcp->tcp_zerocopy_send_ctx.ReleaseSendRecord(seq);
|
1306
|
-
|
1306
|
+
GRPC_DCHECK(record);
|
1307
1307
|
UnrefMaybePutZerocopySendRecord(tcp, record, seq, "CALLBACK RCVD");
|
1308
1308
|
}
|
1309
1309
|
if (tcp->tcp_zerocopy_send_ctx.UpdateZeroCopyOMemStateAfterFree()) {
|
@@ -1488,14 +1488,14 @@ static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
|
|
1488
1488
|
int* /* saved_errno */,
|
1489
1489
|
int /*additional_flags*/) {
|
1490
1490
|
LOG(ERROR) << "Write with timestamps not supported for this platform";
|
1491
|
-
|
1491
|
+
GRPC_CHECK(0);
|
1492
1492
|
return false;
|
1493
1493
|
}
|
1494
1494
|
|
1495
1495
|
static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
|
1496
1496
|
grpc_error_handle /*error*/) {
|
1497
1497
|
LOG(ERROR) << "Error handling is not supported for this platform";
|
1498
|
-
|
1498
|
+
GRPC_CHECK(0);
|
1499
1499
|
}
|
1500
1500
|
#endif // GRPC_LINUX_ERRQUEUE
|
1501
1501
|
|
@@ -1534,7 +1534,7 @@ msg_iovlen_type TcpZerocopySendRecord::PopulateIovs(size_t* unwind_slice_idx,
|
|
1534
1534
|
++(out_offset_.slice_idx);
|
1535
1535
|
out_offset_.byte_idx = 0;
|
1536
1536
|
}
|
1537
|
-
|
1537
|
+
GRPC_DCHECK_GT(iov_size, 0u);
|
1538
1538
|
return iov_size;
|
1539
1539
|
}
|
1540
1540
|
|
@@ -1685,7 +1685,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1685
1685
|
outgoing_slice_idx++;
|
1686
1686
|
tcp->outgoing_byte_idx = 0;
|
1687
1687
|
}
|
1688
|
-
|
1688
|
+
GRPC_CHECK_GT(iov_size, 0u);
|
1689
1689
|
|
1690
1690
|
msg.msg_name = nullptr;
|
1691
1691
|
msg.msg_namelen = 0;
|
@@ -1733,7 +1733,7 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
|
|
1733
1733
|
}
|
1734
1734
|
}
|
1735
1735
|
|
1736
|
-
|
1736
|
+
GRPC_CHECK_EQ(tcp->outgoing_byte_idx, 0u);
|
1737
1737
|
grpc_core::EventLog::Append("tcp-write-outstanding", -sent_length);
|
1738
1738
|
tcp->bytes_counter += sent_length;
|
1739
1739
|
trailing = sending_length - static_cast<size_t>(sent_length);
|
@@ -1783,7 +1783,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */,
|
|
1783
1783
|
GRPC_TRACE_LOG(tcp, INFO) << "write: delayed";
|
1784
1784
|
notify_on_write(tcp);
|
1785
1785
|
// tcp_flush does not populate error if it has returned false.
|
1786
|
-
|
1786
|
+
GRPC_DCHECK(error.ok());
|
1787
1787
|
} else {
|
1788
1788
|
cb = tcp->write_cb;
|
1789
1789
|
tcp->write_cb = nullptr;
|
@@ -1818,8 +1818,8 @@ static void tcp_write(
|
|
1818
1818
|
}
|
1819
1819
|
}
|
1820
1820
|
|
1821
|
-
|
1822
|
-
|
1821
|
+
GRPC_CHECK_EQ(tcp->write_cb, nullptr);
|
1822
|
+
GRPC_DCHECK_EQ(tcp->current_zerocopy_send, nullptr);
|
1823
1823
|
|
1824
1824
|
if (buf->length == 0) {
|
1825
1825
|
grpc_core::Closure::Run(DEBUG_LOCATION, cb,
|
@@ -1839,7 +1839,7 @@ static void tcp_write(
|
|
1839
1839
|
tcp->outgoing_buffer_arg =
|
1840
1840
|
args.TakeDeprecatedAndDiscouragedGoogleSpecificPointer();
|
1841
1841
|
if (tcp->outgoing_buffer_arg) {
|
1842
|
-
|
1842
|
+
GRPC_CHECK(grpc_event_engine_can_track_errors());
|
1843
1843
|
}
|
1844
1844
|
|
1845
1845
|
bool flush_result =
|
@@ -1944,10 +1944,10 @@ grpc_endpoint* grpc_tcp_create(
|
|
1944
1944
|
grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
1945
1945
|
const grpc_core::PosixTcpOptions& options,
|
1946
1946
|
absl::string_view peer_string) {
|
1947
|
-
|
1947
|
+
GRPC_CHECK(!grpc_event_engine::experimental::UsePollsetAlternative())
|
1948
1948
|
<< "This function must not be called when the pollset_alternative "
|
1949
1949
|
"experiment is enabled. This is a bug.";
|
1950
|
-
|
1950
|
+
GRPC_CHECK(
|
1951
1951
|
!grpc_core::IsEventEngineForAllOtherEndpointsEnabled() ||
|
1952
1952
|
grpc_event_engine::experimental::EventEngineExperimentDisabledForPython())
|
1953
1953
|
<< "The event_engine_for_all_other_endpoints experiment should prevent "
|
@@ -1956,7 +1956,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
1956
1956
|
tcp->base.vtable = &vtable;
|
1957
1957
|
tcp->peer_string = std::string(peer_string);
|
1958
1958
|
tcp->fd = grpc_fd_wrapped_fd(em_fd);
|
1959
|
-
|
1959
|
+
GRPC_CHECK(options.resource_quota != nullptr);
|
1960
1960
|
tcp->memory_owner =
|
1961
1961
|
options.resource_quota->memory_quota()->CreateMemoryOwner();
|
1962
1962
|
tcp->self_reservation = tcp->memory_owner.MakeReservation(sizeof(grpc_tcp));
|
@@ -2047,7 +2047,7 @@ grpc_endpoint* grpc_tcp_create(grpc_fd* em_fd,
|
|
2047
2047
|
|
2048
2048
|
int grpc_tcp_fd(grpc_endpoint* ep) {
|
2049
2049
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
2050
|
-
|
2050
|
+
GRPC_CHECK(ep->vtable == &vtable);
|
2051
2051
|
return grpc_fd_wrapped_fd(tcp->em_fd);
|
2052
2052
|
}
|
2053
2053
|
|
@@ -2058,7 +2058,7 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
|
|
2058
2058
|
grpc_event_engine_endpoint_destroy_and_release_fd(ep, fd, done);
|
2059
2059
|
}
|
2060
2060
|
grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
|
2061
|
-
|
2061
|
+
GRPC_CHECK(ep->vtable == &vtable);
|
2062
2062
|
tcp->release_fd = fd;
|
2063
2063
|
tcp->release_fd_cb = done;
|
2064
2064
|
grpc_slice_buffer_reset_and_unref(&tcp->last_read_buffer);
|
@@ -65,6 +65,11 @@ void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server* s,
|
|
65
65
|
grpc_tcp_server_impl->shutdown_starting_add(s, shutdown_starting);
|
66
66
|
}
|
67
67
|
|
68
|
+
void grpc_tcp_server_shutdown_ending_add(grpc_tcp_server* s,
|
69
|
+
grpc_closure* shutdown_ending) {
|
70
|
+
grpc_tcp_server_impl->shutdown_ending_add(s, shutdown_ending);
|
71
|
+
}
|
72
|
+
|
68
73
|
void grpc_tcp_server_unref(grpc_tcp_server* s) {
|
69
74
|
grpc_tcp_server_impl->unref(s);
|
70
75
|
}
|
@@ -78,6 +78,8 @@ typedef struct grpc_tcp_server_vtable {
|
|
78
78
|
grpc_tcp_server* (*ref)(grpc_tcp_server* s);
|
79
79
|
void (*shutdown_starting_add)(grpc_tcp_server* s,
|
80
80
|
grpc_closure* shutdown_starting);
|
81
|
+
void (*shutdown_ending_add)(grpc_tcp_server* s,
|
82
|
+
grpc_closure* shutdown_ending);
|
81
83
|
void (*unref)(grpc_tcp_server* s);
|
82
84
|
void (*shutdown_listeners)(grpc_tcp_server* s);
|
83
85
|
int (*pre_allocated_fd)(grpc_tcp_server* s);
|
@@ -135,6 +137,11 @@ grpc_tcp_server* grpc_tcp_server_ref(grpc_tcp_server* s);
|
|
135
137
|
void grpc_tcp_server_shutdown_starting_add(grpc_tcp_server* s,
|
136
138
|
grpc_closure* shutdown_starting);
|
137
139
|
|
140
|
+
// shutdown_ending is called when ref count has reached zero and the server
|
141
|
+
// has just been destroyed. Calling grpc_tcp_server_ref() from it has no effect.
|
142
|
+
void grpc_tcp_server_shutdown_ending_add(grpc_tcp_server* s,
|
143
|
+
grpc_closure* shutdown_ending);
|
144
|
+
|
138
145
|
// If the refcount drops to zero, enqueue calls on exec_ctx to
|
139
146
|
// shutdown_listeners and delete s.
|
140
147
|
void grpc_tcp_server_unref(grpc_tcp_server* s);
|
@@ -50,12 +50,12 @@
|
|
50
50
|
|
51
51
|
#include <string>
|
52
52
|
|
53
|
-
#include "absl/log/check.h"
|
54
53
|
#include "absl/log/log.h"
|
55
54
|
#include "absl/strings/str_cat.h"
|
56
55
|
#include "absl/strings/str_format.h"
|
57
56
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
58
57
|
#include "src/core/lib/event_engine/default_event_engine.h"
|
58
|
+
#include "src/core/lib/event_engine/extensions/supports_fd.h"
|
59
59
|
#include "src/core/lib/event_engine/memory_allocator_factory.h"
|
60
60
|
#include "src/core/lib/event_engine/posix_engine/posix_endpoint.h"
|
61
61
|
#include "src/core/lib/event_engine/query_extensions.h"
|
@@ -74,6 +74,7 @@
|
|
74
74
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
75
75
|
#include "src/core/lib/iomgr/vsock.h"
|
76
76
|
#include "src/core/lib/transport/error_utils.h"
|
77
|
+
#include "src/core/util/grpc_check.h"
|
77
78
|
#include "src/core/util/strerror.h"
|
78
79
|
|
79
80
|
static std::atomic<int64_t> num_dropped_connections{0};
|
@@ -89,7 +90,8 @@ using ::grpc_event_engine::experimental::SliceBuffer;
|
|
89
90
|
|
90
91
|
static void finish_shutdown(grpc_tcp_server* s) {
|
91
92
|
gpr_mu_lock(&s->mu);
|
92
|
-
|
93
|
+
GRPC_CHECK(s->shutdown);
|
94
|
+
grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &s->shutdown_ending);
|
93
95
|
gpr_mu_unlock(&s->mu);
|
94
96
|
if (s->shutdown_complete != nullptr) {
|
95
97
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, s->shutdown_complete,
|
@@ -157,10 +159,17 @@ static grpc_error_handle CreateEventEngineListener(
|
|
157
159
|
addr.len =
|
158
160
|
static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
159
161
|
// Get the fd of the socket connected to peer.
|
160
|
-
|
161
|
-
|
162
|
-
grpc_event_engine::experimental::
|
163
|
-
|
162
|
+
auto* supports_fd =
|
163
|
+
grpc_event_engine::experimental::QueryExtension<
|
164
|
+
grpc_event_engine::experimental::
|
165
|
+
EndpointSupportsFdExtension>(ep.get());
|
166
|
+
if (supports_fd == nullptr) {
|
167
|
+
LOG(ERROR)
|
168
|
+
<< "SERVER_CONNECT ERROR: unsupported endpoint created. "
|
169
|
+
"Endpoint doesn't support file descriptor extension. ";
|
170
|
+
return;
|
171
|
+
}
|
172
|
+
int fd = supports_fd->GetWrappedFd();
|
164
173
|
if (getpeername(fd, reinterpret_cast<struct sockaddr*>(addr.addr),
|
165
174
|
&(addr.len)) < 0) {
|
166
175
|
LOG(ERROR) << "Failed getpeername: "
|
@@ -230,7 +239,7 @@ static grpc_error_handle CreateEventEngineListener(
|
|
230
239
|
listener = engine->CreateListener(
|
231
240
|
std::move(accept_cb),
|
232
241
|
[s, ee = keeper, shutdown_complete](absl::Status status) {
|
233
|
-
|
242
|
+
GRPC_CHECK_EQ(gpr_atm_no_barrier_load(&s->refs.count), 0);
|
234
243
|
grpc_event_engine::experimental::RunEventEngineClosure(
|
235
244
|
shutdown_complete, absl_status_to_grpc_error(status));
|
236
245
|
finish_shutdown(s);
|
@@ -283,8 +292,8 @@ static grpc_error_handle tcp_server_create(grpc_closure* shutdown_complete,
|
|
283
292
|
s->nports = 0;
|
284
293
|
s->options = ::TcpOptionsFromEndpointConfig(config);
|
285
294
|
s->fd_handler = nullptr;
|
286
|
-
|
287
|
-
|
295
|
+
GRPC_CHECK(s->options.resource_quota != nullptr);
|
296
|
+
GRPC_CHECK(s->on_accept_cb);
|
288
297
|
s->memory_quota = s->options.resource_quota->memory_quota();
|
289
298
|
s->pre_allocated_fd = -1;
|
290
299
|
gpr_atm_no_barrier_store(&s->next_pollset_to_assign, 0);
|
@@ -306,7 +315,7 @@ static void destroyed_port(void* server, grpc_error_handle /*error*/) {
|
|
306
315
|
gpr_mu_unlock(&s->mu);
|
307
316
|
finish_shutdown(s);
|
308
317
|
} else {
|
309
|
-
|
318
|
+
GRPC_CHECK(s->destroyed_ports < s->nports);
|
310
319
|
gpr_mu_unlock(&s->mu);
|
311
320
|
}
|
312
321
|
}
|
@@ -318,7 +327,7 @@ static void deactivated_all_ports(grpc_tcp_server* s) {
|
|
318
327
|
// delete ALL the things
|
319
328
|
gpr_mu_lock(&s->mu);
|
320
329
|
|
321
|
-
|
330
|
+
GRPC_CHECK(s->shutdown);
|
322
331
|
|
323
332
|
if (s->head) {
|
324
333
|
grpc_tcp_listener* sp;
|
@@ -347,7 +356,7 @@ static void deactivated_all_ports(grpc_tcp_server* s) {
|
|
347
356
|
|
348
357
|
static void tcp_server_destroy(grpc_tcp_server* s) {
|
349
358
|
gpr_mu_lock(&s->mu);
|
350
|
-
|
359
|
+
GRPC_CHECK(!s->shutdown);
|
351
360
|
s->shutdown = true;
|
352
361
|
// shutdown all fd's
|
353
362
|
if (s->active_ports) {
|
@@ -413,7 +422,8 @@ static void on_read(void* arg, grpc_error_handle err) {
|
|
413
422
|
goto error;
|
414
423
|
}
|
415
424
|
|
416
|
-
if (sp->server->memory_quota
|
425
|
+
if (sp->server->memory_quota
|
426
|
+
->RejectNewConnectionsUnderHighMemoryPressure()) {
|
417
427
|
int64_t dropped_connections_count =
|
418
428
|
num_dropped_connections.fetch_add(1, std::memory_order_relaxed) + 1;
|
419
429
|
if (dropped_connections_count % 1000 == 1) {
|
@@ -550,8 +560,8 @@ static grpc_error_handle add_wildcard_addrs_to_server(grpc_tcp_server* s,
|
|
550
560
|
} else {
|
551
561
|
grpc_error_handle root_err =
|
552
562
|
GRPC_ERROR_CREATE("Failed to add any wildcard listeners");
|
553
|
-
|
554
|
-
|
563
|
+
GRPC_CHECK(!v6_err.ok());
|
564
|
+
GRPC_CHECK(!v4_err.ok());
|
555
565
|
root_err = grpc_error_add_child(root_err, v6_err);
|
556
566
|
root_err = grpc_error_add_child(root_err, v4_err);
|
557
567
|
return root_err;
|
@@ -602,7 +612,7 @@ static grpc_error_handle clone_port(grpc_tcp_listener* listener,
|
|
602
612
|
sp->port = port;
|
603
613
|
sp->port_index = listener->port_index;
|
604
614
|
sp->fd_index = listener->fd_index + count - i;
|
605
|
-
|
615
|
+
GRPC_CHECK(sp->emfd);
|
606
616
|
grpc_tcp_server_listener_initialize_retry_timer(sp);
|
607
617
|
while (listener->server->tail->next != nullptr) {
|
608
618
|
listener->server->tail = listener->server->tail->next;
|
@@ -634,7 +644,7 @@ static grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
|
|
634
644
|
if (!listen_fd.ok()) {
|
635
645
|
return;
|
636
646
|
}
|
637
|
-
|
647
|
+
GRPC_DCHECK_GT(*listen_fd, 0);
|
638
648
|
s->listen_fd_to_index_map.insert_or_assign(
|
639
649
|
*listen_fd, std::tuple(s->n_bind_ports, fd_index++));
|
640
650
|
});
|
@@ -649,7 +659,7 @@ static grpc_error_handle tcp_server_add_port(grpc_tcp_server* s,
|
|
649
659
|
gpr_mu_unlock(&s->mu);
|
650
660
|
return port.status();
|
651
661
|
}
|
652
|
-
|
662
|
+
GRPC_CHECK(addr->len <= GRPC_MAX_SOCKADDR_SIZE);
|
653
663
|
grpc_tcp_listener* sp;
|
654
664
|
grpc_resolved_address sockname_temp;
|
655
665
|
grpc_resolved_address addr6_v4mapped;
|
@@ -777,12 +787,12 @@ static void tcp_server_start(grpc_tcp_server* s,
|
|
777
787
|
size_t i;
|
778
788
|
grpc_tcp_listener* sp;
|
779
789
|
gpr_mu_lock(&s->mu);
|
780
|
-
|
781
|
-
|
790
|
+
GRPC_CHECK(s->on_accept_cb);
|
791
|
+
GRPC_CHECK_EQ(s->active_ports, 0u);
|
782
792
|
s->pollsets = pollsets;
|
783
793
|
if (grpc_event_engine::experimental::UseEventEngineListener()) {
|
784
|
-
|
785
|
-
|
794
|
+
GRPC_CHECK(!s->shutdown_listeners);
|
795
|
+
GRPC_CHECK(GRPC_LOG_IF_ERROR("listener_start", s->ee_listener->Start()));
|
786
796
|
gpr_mu_unlock(&s->mu);
|
787
797
|
return;
|
788
798
|
}
|
@@ -790,7 +800,7 @@ static void tcp_server_start(grpc_tcp_server* s,
|
|
790
800
|
while (sp != nullptr) {
|
791
801
|
if (s->so_reuseport && !grpc_is_unix_socket(&sp->addr) &&
|
792
802
|
!grpc_is_vsock(&sp->addr) && pollsets->size() > 1) {
|
793
|
-
|
803
|
+
GRPC_CHECK(GRPC_LOG_IF_ERROR(
|
794
804
|
"clone_port", clone_port(sp, (unsigned)(pollsets->size() - 1))));
|
795
805
|
for (i = 0; i < pollsets->size(); i++) {
|
796
806
|
grpc_pollset_add_fd((*pollsets)[i], sp->emfd);
|
@@ -827,6 +837,14 @@ static void tcp_server_shutdown_starting_add(grpc_tcp_server* s,
|
|
827
837
|
gpr_mu_unlock(&s->mu);
|
828
838
|
}
|
829
839
|
|
840
|
+
static void tcp_server_shutdown_ending_add(grpc_tcp_server* s,
|
841
|
+
grpc_closure* shutdown_ending) {
|
842
|
+
gpr_mu_lock(&s->mu);
|
843
|
+
grpc_closure_list_append(&s->shutdown_ending, shutdown_ending,
|
844
|
+
absl::OkStatus());
|
845
|
+
gpr_mu_unlock(&s->mu);
|
846
|
+
}
|
847
|
+
|
830
848
|
static void tcp_server_unref(grpc_tcp_server* s) {
|
831
849
|
if (gpr_unref(&s->refs)) {
|
832
850
|
grpc_tcp_server_shutdown_listeners(s);
|
@@ -882,16 +900,17 @@ class ExternalConnectionHandler : public grpc_core::TcpServerFdHandler {
|
|
882
900
|
grpc_event_engine::experimental::QueryExtension<
|
883
901
|
grpc_event_engine::experimental::ListenerSupportsFdExtension>(
|
884
902
|
s_->ee_listener.get());
|
885
|
-
|
903
|
+
GRPC_CHECK_NE(listener_supports_fd, nullptr);
|
886
904
|
grpc_event_engine::experimental::SliceBuffer pending_data;
|
887
905
|
if (buf != nullptr) {
|
888
906
|
pending_data =
|
889
907
|
grpc_event_engine::experimental::SliceBuffer::TakeCSliceBuffer(
|
890
908
|
buf->data.raw.slice_buffer);
|
891
909
|
}
|
892
|
-
|
893
|
-
|
894
|
-
|
910
|
+
GRPC_CHECK(
|
911
|
+
GRPC_LOG_IF_ERROR("listener_handle_external_connection",
|
912
|
+
listener_supports_fd->HandleExternalConnection(
|
913
|
+
listener_fd, fd, &pending_data)));
|
895
914
|
return;
|
896
915
|
}
|
897
916
|
grpc_pollset* read_notifier_pollset;
|
@@ -960,6 +979,7 @@ grpc_tcp_server_vtable grpc_posix_tcp_server_vtable = {
|
|
960
979
|
tcp_server_port_fd,
|
961
980
|
tcp_server_ref,
|
962
981
|
tcp_server_shutdown_starting_add,
|
982
|
+
tcp_server_shutdown_ending_add,
|
963
983
|
tcp_server_unref,
|
964
984
|
tcp_server_shutdown_listeners,
|
965
985
|
tcp_server_pre_allocated_fd,
|
@@ -90,6 +90,9 @@ struct grpc_tcp_server {
|
|
90
90
|
// List of closures passed to shutdown_starting_add().
|
91
91
|
grpc_closure_list shutdown_starting{nullptr, nullptr};
|
92
92
|
|
93
|
+
// List of closures passed to shutdown_ending_add().
|
94
|
+
grpc_closure_list shutdown_ending{nullptr, nullptr};
|
95
|
+
|
93
96
|
// shutdown callback
|
94
97
|
grpc_closure* shutdown_complete = nullptr;
|
95
98
|
|
@@ -33,7 +33,6 @@
|
|
33
33
|
|
34
34
|
#include <string>
|
35
35
|
|
36
|
-
#include "absl/log/check.h"
|
37
36
|
#include "absl/log/log.h"
|
38
37
|
#include "absl/strings/str_cat.h"
|
39
38
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
@@ -43,6 +42,7 @@
|
|
43
42
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
44
43
|
#include "src/core/lib/iomgr/vsock.h"
|
45
44
|
#include "src/core/util/crash.h"
|
45
|
+
#include "src/core/util/grpc_check.h"
|
46
46
|
|
47
47
|
#define MIN_SAFE_ACCEPT_QUEUE_SIZE 100
|
48
48
|
|
@@ -109,7 +109,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
|
|
109
109
|
grpc_error_handle err =
|
110
110
|
grpc_tcp_server_prepare_socket(s, fd, addr, s->so_reuseport, &port);
|
111
111
|
if (!err.ok()) return err;
|
112
|
-
|
112
|
+
GRPC_CHECK_GT(port, 0);
|
113
113
|
absl::StatusOr<std::string> addr_str = grpc_sockaddr_to_string(addr, true);
|
114
114
|
if (!addr_str.ok()) {
|
115
115
|
return GRPC_ERROR_CREATE(addr_str.status().ToString());
|
@@ -142,7 +142,7 @@ static grpc_error_handle add_socket_to_server(grpc_tcp_server* s, int fd,
|
|
142
142
|
sp->fd_index = fd_index;
|
143
143
|
sp->is_sibling = 0;
|
144
144
|
sp->sibling = nullptr;
|
145
|
-
|
145
|
+
GRPC_CHECK(sp->emfd);
|
146
146
|
gpr_mu_unlock(&s->mu);
|
147
147
|
|
148
148
|
*listener = sp;
|
@@ -206,7 +206,7 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
|
|
206
206
|
grpc_resolved_address sockname_temp;
|
207
207
|
grpc_error_handle err;
|
208
208
|
|
209
|
-
|
209
|
+
GRPC_CHECK_GE(fd, 0);
|
210
210
|
|
211
211
|
if (so_reuseport && !grpc_is_unix_socket(addr) && !grpc_is_vsock(addr)) {
|
212
212
|
err = grpc_set_socket_reuse_port(fd, 1);
|
@@ -269,7 +269,7 @@ grpc_error_handle grpc_tcp_server_prepare_socket(
|
|
269
269
|
return absl::OkStatus();
|
270
270
|
|
271
271
|
error:
|
272
|
-
|
272
|
+
GRPC_CHECK(!err.ok());
|
273
273
|
if (fd >= 0) {
|
274
274
|
close(fd);
|
275
275
|
}
|
@@ -31,7 +31,6 @@
|
|
31
31
|
|
32
32
|
#include <string>
|
33
33
|
|
34
|
-
#include "absl/log/check.h"
|
35
34
|
#include "absl/log/log.h"
|
36
35
|
#include "absl/strings/str_cat.h"
|
37
36
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
@@ -39,6 +38,7 @@
|
|
39
38
|
#include "src/core/lib/iomgr/sockaddr.h"
|
40
39
|
#include "src/core/lib/iomgr/tcp_server_utils_posix.h"
|
41
40
|
#include "src/core/util/crash.h"
|
41
|
+
#include "src/core/util/grpc_check.h"
|
42
42
|
|
43
43
|
// Return the listener in s with address addr or NULL.
|
44
44
|
static grpc_tcp_listener* find_listener_with_addr(grpc_tcp_server* s,
|
@@ -165,7 +165,7 @@ grpc_error_handle grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s,
|
|
165
165
|
err = grpc_error_add_child(root_err, err);
|
166
166
|
break;
|
167
167
|
} else {
|
168
|
-
|
168
|
+
GRPC_CHECK(requested_port == new_sp->port);
|
169
169
|
++fd_index;
|
170
170
|
if (sp != nullptr) {
|
171
171
|
new_sp->is_sibling = 1;
|