grpc 1.83.1 → 1.84.0
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 +21 -17
- data/include/grpc/credentials.h +10 -0
- data/include/grpc/grpc_security_constants.h +2 -0
- data/include/grpc/impl/channel_arg_names.h +9 -0
- data/src/core/call/call_filters.h +4 -2
- data/src/core/call/client_call.cc +20 -8
- data/src/core/call/client_call.h +4 -0
- data/src/core/call/interception_chain.cc +2 -0
- data/src/core/call/interception_chain.h +14 -1
- data/src/core/call/metadata.cc +1 -3
- data/src/core/call/metadata_batch.h +13 -5
- data/src/core/call/server_call.cc +31 -14
- data/src/core/call/server_call.h +4 -0
- data/src/core/channelz/text_encode.cc +9 -4
- data/src/core/channelz/v2tov1/convert.cc +2 -2
- data/src/core/client_channel/backup_poller.cc +1 -2
- data/src/core/client_channel/client_channel.cc +6 -33
- data/src/core/client_channel/client_channel_filter.cc +22 -55
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_service_config.cc +3 -19
- data/src/core/client_channel/direct_channel.cc +7 -1
- data/src/core/client_channel/direct_channel.h +2 -2
- data/src/core/client_channel/load_balanced_call_destination.cc +5 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -12
- data/src/core/client_channel/subchannel.cc +310 -1058
- data/src/core/client_channel/subchannel.h +44 -329
- data/src/core/client_channel/subchannel_metrics.cc +48 -0
- data/src/core/client_channel/subchannel_metrics.h +60 -0
- data/src/core/credentials/call/external/file_external_account_credentials.cc +1 -1
- data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -3
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +8 -24
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +3 -6
- data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.cc +525 -0
- data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.h +138 -0
- data/src/core/credentials/call/json_util.h +1 -0
- data/src/core/credentials/call/jwt/json_token.cc +10 -2
- data/src/core/credentials/call/jwt/jwt_verifier.cc +15 -1
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +1 -1
- data/src/core/credentials/call/oauth2/oauth2_credentials.cc +42 -79
- data/src/core/credentials/call/oauth2/oauth2_credentials.h +2 -5
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +52 -31
- data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +21 -8
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +59 -72
- data/src/core/credentials/transport/ssl/ssl_credentials.h +9 -8
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +12 -6
- data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -4
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -18
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +9 -6
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +45 -56
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -4
- data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +26 -0
- data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +1 -1
- data/src/core/credentials/transport/tls/load_system_roots.h +2 -6
- data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +2 -4
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +13 -15
- data/src/core/credentials/transport/tls/load_system_roots_supported.h +3 -2
- data/src/core/credentials/transport/tls/load_system_roots_windows.cc +5 -8
- data/src/core/credentials/transport/tls/spiffe_utils.cc +1 -1
- data/src/core/credentials/transport/tls/ssl_utils.cc +39 -28
- data/src/core/credentials/transport/tls/ssl_utils.h +12 -49
- data/src/core/credentials/transport/tls/tls_security_connector.cc +48 -33
- data/src/core/credentials/transport/tls/tls_security_connector.h +31 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +15 -11
- data/src/core/ext/filters/http/http_filters_plugin.cc +20 -9
- data/src/core/ext/filters/rbac/rbac_filter.cc +43 -21
- data/src/core/ext/filters/rbac/rbac_filter.h +21 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +32 -67
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/goaway.h +7 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +5 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +141 -130
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +22 -22
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +402 -269
- data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +80 -49
- data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +1 -2
- data/src/core/ext/transport/chttp2/transport/http2_status.h +38 -37
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +178 -5
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +345 -5
- data/src/core/ext/transport/chttp2/transport/parsing.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +25 -5
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/read_context.h +30 -3
- data/src/core/ext/transport/chttp2/transport/stream.h +65 -23
- data/src/core/ext/transport/chttp2/transport/writing.cc +0 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +1 -5
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +4 -17
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb.h +1912 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.c +300 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.h +37 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb.h +187 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.c +64 -0
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.h +31 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb.h +2362 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.c +556 -0
- data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.h +47 -0
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb.h +5 -5
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb_minitable.h +5 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.c +453 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.h +67 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.h +37 -0
- data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +715 -0
- data/src/core/ext/upbdefs-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upbdefs.h +44 -44
- data/src/core/filter/auth/server_auth_filter.cc +2 -3
- data/src/core/filter/composite/composite_filter.cc +45 -33
- data/src/core/filter/composite/composite_filter.h +5 -4
- data/src/core/filter/ext_proc/ext_proc_filter.cc +224 -0
- data/src/core/filter/ext_proc/ext_proc_filter.h +155 -0
- data/src/core/filter/ext_proc/ext_proc_messages.cc +701 -0
- data/src/core/filter/ext_proc/ext_proc_messages.h +297 -0
- data/src/core/filter/filter_args.h +13 -2
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -3
- data/src/core/handshaker/security/security_handshaker.cc +9 -6
- data/src/core/lib/channel/channel_stack.cc +3 -0
- data/src/core/lib/channel/channel_stack.h +2 -0
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -2
- data/src/core/lib/channel/promise_based_filter.cc +132 -20
- data/src/core/lib/channel/promise_based_filter.h +42 -12
- data/src/core/lib/compression/compression_internal.cc +4 -5
- data/src/core/lib/debug/trace_flags.cc +8 -0
- data/src/core/lib/debug/trace_flags.h +3 -0
- data/src/core/lib/event_engine/ares_resolver.cc +54 -50
- data/src/core/lib/event_engine/ares_resolver.h +3 -2
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +4 -10
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +74 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +4 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +1 -3
- data/src/core/lib/experiments/experiments.cc +60 -96
- data/src/core/lib/experiments/experiments.h +34 -50
- data/src/core/lib/iomgr/cfstream_handle.cc +2 -6
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -10
- data/src/core/lib/iomgr/error.cc +2 -6
- data/src/core/lib/iomgr/error_cfstream.cc +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +5 -9
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -1
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -2
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
- data/src/core/lib/iomgr/iomgr_posix.cc +0 -4
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -4
- data/src/core/lib/iomgr/iomgr_windows.cc +0 -4
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
- data/src/core/lib/iomgr/systemd_utils.cc +0 -1
- data/src/core/lib/iomgr/tcp_client.h +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +23 -15
- data/src/core/lib/iomgr/tcp_server.h +1 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +2 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_windows.cc +5 -10
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/vsock.h +3 -1
- data/src/core/lib/resource_quota/memory_quota.cc +1 -1
- data/src/core/lib/security/authorization/rbac_policy.cc +139 -56
- data/src/core/lib/security/authorization/rbac_policy.h +21 -3
- data/src/core/lib/surface/call.cc +3 -9
- data/src/core/lib/surface/call_utils.h +113 -0
- data/src/core/lib/surface/channel_create.cc +1 -1
- data/src/core/lib/surface/channel_create.h +0 -2
- data/src/core/lib/surface/channel_init.cc +77 -38
- data/src/core/lib/surface/channel_init.h +30 -16
- data/src/core/lib/surface/filter_stack_call.cc +5 -10
- data/src/core/lib/surface/init.cc +13 -27
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +0 -27
- data/src/core/lib/transport/error_utils.h +0 -16
- data/src/core/lib/transport/transport.h +7 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +2 -0
- data/src/core/load_balancing/rls/rls.cc +28 -11
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +33 -42
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +0 -2
- data/src/core/load_balancing/xds/cds.cc +3 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +0 -1
- data/src/core/mitigation_engine/mitigation.h +14 -5
- data/src/core/mitigation_engine/mitigation_engine.h +7 -3
- data/src/core/mitigation_engine/mitigation_provider.h +2 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +39 -8
- data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc} +42 -41
- data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h} +8 -5
- data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc} +1 -1
- data/src/core/resolver/dns/{event_engine/service_config_helper.h → service_config_helper.h} +3 -3
- data/src/core/resolver/endpoint_addresses.h +3 -0
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +35 -9
- data/src/core/server/server.cc +2 -6
- data/src/core/server/server_config_selector.h +18 -3
- data/src/core/server/server_config_selector_filter.cc +178 -91
- data/src/core/server/server_config_selector_filter.h +58 -3
- data/src/core/server/xds_server_config_fetcher.cc +196 -129
- data/src/core/server/xds_server_config_fetcher.h +49 -0
- data/src/core/server/xds_server_config_fetcher_legacy.cc +41 -37
- data/src/core/telemetry/histogram.h +94 -14
- data/src/core/telemetry/instrument.cc +179 -74
- data/src/core/telemetry/instrument.h +78 -30
- data/src/core/telemetry/metrics.h +5 -0
- data/src/core/{resolver/dns/dns_resolver_plugin.h → telemetry/telemetry_label.h} +12 -8
- data/src/core/tsi/alts/crypt/aes_gcm.cc +10 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -1
- data/src/core/tsi/ssl_telemetry_utils.cc +216 -259
- data/src/core/tsi/ssl_telemetry_utils.h +12 -2
- data/src/core/tsi/ssl_transport_security.cc +238 -80
- data/src/core/tsi/ssl_transport_security.h +63 -33
- data/src/core/tsi/tls_telemetry.cc +31 -0
- data/src/core/tsi/tls_telemetry.h +47 -0
- data/src/core/tsi/transport_security.cc +2 -2
- data/src/core/tsi/transport_security.h +1 -1
- data/src/core/tsi/transport_security_interface.h +1 -1
- data/src/core/{resolver/dns/native/dns_resolver.h → util/address_sorting_init.cc} +21 -8
- data/src/core/{resolver/dns/c_ares/grpc_ares_wrapper_posix.cc → util/address_sorting_init.h} +7 -8
- data/src/core/util/http_client/httpcli.cc +16 -53
- data/src/core/util/http_client/httpcli.h +0 -7
- data/src/core/util/http_client/httpcli_security_connector.cc +13 -8
- data/src/core/util/linux/cpu.cc +1 -1
- data/src/core/util/load_file.cc +3 -9
- data/src/core/util/load_file.h +3 -4
- data/src/core/util/matchers.h +8 -0
- data/src/core/util/posix/cpu.cc +1 -1
- data/src/core/util/status_helper.cc +0 -20
- data/src/core/util/status_helper.h +3 -14
- data/src/core/xds/grpc/xds_audit_logger_registry.cc +51 -31
- data/src/core/xds/grpc/xds_audit_logger_registry.h +17 -3
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -10
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -6
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +488 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc_builder.h +97 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +7 -7
- data/src/core/xds/grpc/xds_client_grpc.cc +4 -8
- data/src/core/xds/grpc/xds_client_grpc.h +0 -4
- data/src/core/xds/grpc/xds_cluster.h +1 -0
- data/src/core/xds/grpc/xds_cluster_parser.cc +1 -5
- data/src/core/xds/grpc/xds_cluster_parser.h +0 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +0 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +0 -2
- data/src/core/xds/grpc/xds_common_types.cc +0 -91
- data/src/core/xds/grpc/xds_common_types.h +1 -47
- data/src/core/xds/grpc/xds_common_types_parser.cc +84 -378
- data/src/core/xds/grpc/xds_common_types_parser.h +9 -11
- data/src/core/xds/grpc/xds_endpoint_parser.cc +0 -2
- data/src/core/xds/grpc/xds_grpc_service_parser.cc +177 -0
- data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → xds/grpc/xds_grpc_service_parser.h} +14 -9
- data/src/core/xds/grpc/xds_http_composite_filter.cc +26 -21
- data/src/core/xds/grpc/xds_http_composite_filter.h +4 -3
- data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +418 -0
- data/src/core/xds/grpc/xds_http_ext_proc_filter.h +89 -0
- data/src/core/xds/grpc/xds_http_fault_filter.cc +9 -12
- data/src/core/xds/grpc/xds_http_fault_filter.h +1 -4
- data/src/core/xds/grpc/xds_http_filter.cc +2 -1
- data/src/core/xds/grpc/xds_http_filter.h +6 -5
- data/src/core/xds/grpc/xds_http_filter_registry.cc +10 -127
- data/src/core/xds/grpc/xds_http_filter_registry.h +7 -59
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +13 -14
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +403 -25
- data/src/core/xds/grpc/xds_http_rbac_filter.h +1 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +8 -13
- data/src/core/xds/grpc/xds_http_stateful_session_filter.h +1 -4
- data/src/core/xds/grpc/xds_lb_policy_registry.cc +0 -292
- data/src/core/xds/grpc/xds_lb_policy_registry.h +7 -3
- data/src/core/xds/grpc/xds_listener.cc +2 -0
- data/src/core/xds/grpc/xds_listener.h +5 -0
- data/src/core/xds/grpc/xds_listener_parser.cc +16 -11
- data/src/core/xds/grpc/xds_matcher_parse.h +3 -1
- data/src/core/xds/grpc/xds_metadata_parser.cc +6 -1
- data/src/core/xds/grpc/xds_metadata_parser.h +2 -0
- data/src/core/xds/grpc/xds_route_config.cc +2 -0
- data/src/core/xds/grpc/xds_route_config.h +3 -1
- data/src/core/xds/grpc/xds_route_config_parser.cc +13 -79
- data/src/core/xds/grpc/xds_route_config_parser.h +0 -3
- data/src/core/xds/grpc/xds_routing.cc +116 -69
- data/src/core/xds/grpc/xds_routing.h +19 -8
- data/src/core/xds/grpc/xds_tls_context.cc +117 -0
- data/src/core/xds/grpc/xds_tls_context.h +76 -0
- data/src/core/xds/grpc/xds_tls_context_parser.cc +275 -0
- data/src/core/xds/grpc/xds_tls_context_parser.h +35 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +41 -38
- data/src/core/xds/grpc/xds_transport_grpc.h +4 -2
- data/src/ruby/ext/grpc/rb_call.c +26 -15
- data/src/ruby/ext/grpc/rb_completion_queue.c +6 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +5 -4
- data/src/ruby/spec/call_spec.rb +14 -0
- data/src/ruby/spec/generic/server_interceptors_spec.rb +3 -6
- metadata +50 -35
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +0 -716
- data/src/core/lib/iomgr/resolve_address.cc +0 -59
- data/src/core/lib/iomgr/resolve_address.h +0 -125
- data/src/core/lib/iomgr/resolve_address_impl.h +0 -58
- data/src/core/lib/iomgr/resolve_address_posix.cc +0 -184
- data/src/core/lib/iomgr/resolve_address_posix.h +0 -78
- data/src/core/lib/iomgr/resolve_address_windows.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_windows.h +0 -76
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +0 -781
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +0 -93
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +0 -203
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -838
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1237
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +0 -130
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +0 -35
- data/src/core/resolver/dns/dns_resolver_plugin.cc +0 -64
- data/src/core/resolver/dns/native/dns_resolver.cc +0 -173
- data/src/core/util/json/json_util.cc +0 -101
- data/src/core/util/json/json_util.h +0 -163
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
#include <algorithm>
|
|
21
21
|
#include <memory>
|
|
22
|
+
#include <optional>
|
|
22
23
|
#include <string>
|
|
23
24
|
#include <utility>
|
|
24
25
|
#include <vector>
|
|
@@ -74,10 +75,8 @@ absl::Status StatusFromMetadata(const ServerMetadata& md) {
|
|
|
74
75
|
return absl::OkStatus();
|
|
75
76
|
}
|
|
76
77
|
const auto* message = md.get_pointer(GrpcMessageMetadata());
|
|
77
|
-
return
|
|
78
|
-
|
|
79
|
-
message == nullptr ? "" : message->as_string_view()),
|
|
80
|
-
StatusIntProperty::kRpcStatus, status_code);
|
|
78
|
+
return absl::Status(static_cast<absl::StatusCode>(status_code),
|
|
79
|
+
message == nullptr ? "" : message->as_string_view());
|
|
81
80
|
}
|
|
82
81
|
} // namespace
|
|
83
82
|
|
|
@@ -831,7 +830,8 @@ void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
|
|
|
831
830
|
}
|
|
832
831
|
|
|
833
832
|
void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
|
|
834
|
-
Flusher* flusher
|
|
833
|
+
Flusher* flusher,
|
|
834
|
+
bool discard_buffered_message) {
|
|
835
835
|
GRPC_TRACE_LOG(channel, INFO)
|
|
836
836
|
<< base_->LogTag() << " ReceiveMessage.Done st=" << StateString(state_)
|
|
837
837
|
<< " md=" << metadata.DebugString();
|
|
@@ -849,16 +849,36 @@ void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
|
|
|
849
849
|
state_ = State::kCancelledWhilstForwardingNoPipe;
|
|
850
850
|
break;
|
|
851
851
|
case State::kCompletedWhileBatchCompleted:
|
|
852
|
-
case State::kBatchCompleted:
|
|
853
|
-
|
|
854
|
-
|
|
852
|
+
case State::kBatchCompleted: {
|
|
853
|
+
if (IsRecvMessageFilterBypassFixEnabled() && discard_buffered_message) {
|
|
854
|
+
state_ = State::kBatchCompletedButCancelled;
|
|
855
|
+
// Store the cancellation status so that WakeInsideCombiner() can
|
|
856
|
+
// propagate it to the application's message ready callback instead of
|
|
857
|
+
// defaulting to OK.
|
|
858
|
+
completed_status_ = StatusFromMetadata(metadata);
|
|
859
|
+
// Drop the buffered message here so it cannot bypass the trailing
|
|
860
|
+
// metadata; WakeInsideCombiner() just fires the completion.
|
|
861
|
+
if (intercepted_slice_buffer_ != nullptr) {
|
|
862
|
+
*intercepted_slice_buffer_ = std::nullopt;
|
|
863
|
+
}
|
|
864
|
+
} else {
|
|
865
|
+
state_ = State::kCompletedWhileBatchCompleted;
|
|
866
|
+
}
|
|
867
|
+
} break;
|
|
855
868
|
case State::kCompletedWhilePulledFromPipe:
|
|
856
869
|
case State::kCompletedWhilePushedToPipe:
|
|
857
870
|
case State::kPulledFromPipe:
|
|
858
871
|
case State::kPushedToPipe: {
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
872
|
+
// Discard the buffered message only when the call is being torn down
|
|
873
|
+
// (short-circuit / cancellation / server-initiated non-OK);
|
|
874
|
+
// With the feature disabled, fall back to keying the discard off a
|
|
875
|
+
// non-OK trailing status.
|
|
876
|
+
bool discard =
|
|
877
|
+
IsRecvMessageFilterBypassFixEnabled()
|
|
878
|
+
? discard_buffered_message
|
|
879
|
+
: metadata.get(GrpcStatusMetadata())
|
|
880
|
+
.value_or(GRPC_STATUS_UNKNOWN) != GRPC_STATUS_OK;
|
|
881
|
+
if (!discard) {
|
|
862
882
|
if (state_ == State::kCompletedWhilePulledFromPipe ||
|
|
863
883
|
state_ == State::kPulledFromPipe) {
|
|
864
884
|
state_ = State::kCompletedWhilePulledFromPipe;
|
|
@@ -868,12 +888,31 @@ void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
|
|
|
868
888
|
} else {
|
|
869
889
|
push_.reset();
|
|
870
890
|
next_.reset();
|
|
871
|
-
|
|
872
|
-
|
|
891
|
+
if (IsRecvMessageFilterBypassFixEnabled()) {
|
|
892
|
+
completed_status_ = StatusFromMetadata(metadata);
|
|
893
|
+
if (intercepted_slice_buffer_ != nullptr) {
|
|
894
|
+
*intercepted_slice_buffer_ = std::nullopt;
|
|
895
|
+
}
|
|
896
|
+
} else {
|
|
897
|
+
completed_status_ = StatusFromMetadata(metadata);
|
|
898
|
+
}
|
|
899
|
+
flusher->AddClosure(intercepted_on_complete_, completed_status_,
|
|
900
|
+
"recv_message_done");
|
|
873
901
|
state_ = State::kCancelled;
|
|
874
902
|
}
|
|
875
903
|
} break;
|
|
876
904
|
case State::kBatchCompletedNoPipe:
|
|
905
|
+
if (IsRecvMessageFilterBypassFixEnabled() && discard_buffered_message) {
|
|
906
|
+
// Store the cancellation status so that WakeInsideCombiner() can
|
|
907
|
+
// propagate it to the application's message ready callback instead of
|
|
908
|
+
// defaulting to OK.
|
|
909
|
+
completed_status_ = StatusFromMetadata(metadata);
|
|
910
|
+
// Drop the buffered message here so it cannot bypass the trailing
|
|
911
|
+
// metadata; WakeInsideCombiner() just fires the completion.
|
|
912
|
+
if (intercepted_slice_buffer_ != nullptr) {
|
|
913
|
+
*intercepted_slice_buffer_ = std::nullopt;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
877
916
|
state_ = State::kBatchCompletedButCancelledNoPipe;
|
|
878
917
|
break;
|
|
879
918
|
case State::kBatchCompletedButCancelled:
|
|
@@ -887,6 +926,18 @@ void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
|
|
|
887
926
|
}
|
|
888
927
|
}
|
|
889
928
|
|
|
929
|
+
bool BaseCallData::ReceiveMessage::IsIdle() const {
|
|
930
|
+
switch (state_) {
|
|
931
|
+
case State::kInitial:
|
|
932
|
+
case State::kIdle:
|
|
933
|
+
case State::kCancelled:
|
|
934
|
+
case State::kCancelledWhilstIdle:
|
|
935
|
+
return true;
|
|
936
|
+
default:
|
|
937
|
+
return false;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
|
|
890
941
|
void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher,
|
|
891
942
|
bool allow_push_to_pipe) {
|
|
892
943
|
GRPC_TRACE_LOG(channel, INFO)
|
|
@@ -910,7 +961,6 @@ void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher,
|
|
|
910
961
|
state_ = State::kCancelled;
|
|
911
962
|
break;
|
|
912
963
|
case State::kBatchCompletedButCancelled:
|
|
913
|
-
case State::kCompletedWhileBatchCompleted:
|
|
914
964
|
interceptor()->Push()->Close();
|
|
915
965
|
state_ = State::kCancelled;
|
|
916
966
|
flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
|
|
@@ -921,6 +971,16 @@ void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher,
|
|
|
921
971
|
flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
|
|
922
972
|
completed_status_, "recv_message");
|
|
923
973
|
break;
|
|
974
|
+
case State::kCompletedWhileBatchCompleted:
|
|
975
|
+
if (!IsRecvMessageFilterBypassFixEnabled()) {
|
|
976
|
+
// existing behavior
|
|
977
|
+
interceptor()->Push()->Close();
|
|
978
|
+
state_ = State::kCancelled;
|
|
979
|
+
flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
|
|
980
|
+
completed_status_, "recv_message");
|
|
981
|
+
break;
|
|
982
|
+
}
|
|
983
|
+
[[fallthrough]];
|
|
924
984
|
case State::kBatchCompleted:
|
|
925
985
|
if (completed_status_.ok() && intercepted_slice_buffer_->has_value()) {
|
|
926
986
|
if (!allow_push_to_pipe) break;
|
|
@@ -1122,6 +1182,14 @@ class ClientCallData::PollContext {
|
|
|
1122
1182
|
flusher_, self_->recv_initial_metadata_ == nullptr
|
|
1123
1183
|
? true
|
|
1124
1184
|
: self_->recv_initial_metadata_->AllowRecvMessage());
|
|
1185
|
+
if (self_->recv_trailing_state_ ==
|
|
1186
|
+
RecvTrailingState::kCompletedQueuedBehindReceiveMessage &&
|
|
1187
|
+
self_->receive_message()->IsIdle()) {
|
|
1188
|
+
// Now that the receive message pump is idle (finished processing all
|
|
1189
|
+
// in-flight messages), we can finally release the trailing metadata.
|
|
1190
|
+
self_->recv_trailing_state_ = RecvTrailingState::kComplete;
|
|
1191
|
+
repoll_ = true;
|
|
1192
|
+
}
|
|
1125
1193
|
}
|
|
1126
1194
|
if (self_->server_initial_metadata_pipe() != nullptr) {
|
|
1127
1195
|
if (self_->recv_initial_metadata_->metadata_push_.has_value()) {
|
|
@@ -1208,7 +1276,34 @@ class ClientCallData::PollContext {
|
|
|
1208
1276
|
self_->send_message()->Done(*md, flusher_);
|
|
1209
1277
|
}
|
|
1210
1278
|
if (self_->receive_message() != nullptr) {
|
|
1211
|
-
|
|
1279
|
+
if (IsRecvMessageFilterBypassFixEnabled()) {
|
|
1280
|
+
// The promise produced its own terminal metadata while a
|
|
1281
|
+
// message was still in flight: the call is being
|
|
1282
|
+
// short-circuited, so that message is discarded rather than
|
|
1283
|
+
// delivered.
|
|
1284
|
+
self_->receive_message()->Done(*md, flusher_,
|
|
1285
|
+
/*discard_buffered_message=*/true);
|
|
1286
|
+
// Done() defers the completion closure to WakeInsideCombiner,
|
|
1287
|
+
// which already ran this poll. If the pump isn't idle, repoll to
|
|
1288
|
+
// drain it, else the call stalls.
|
|
1289
|
+
if (!self_->receive_message()->IsIdle()) {
|
|
1290
|
+
repoll_ = true;
|
|
1291
|
+
}
|
|
1292
|
+
// The promise terminated with its own (error) metadata while the
|
|
1293
|
+
// transport's trailing metadata was queued behind the receive
|
|
1294
|
+
// message pump. The buffered message was discarded above; since
|
|
1295
|
+
// receive_message()->IsIdle() will not become true until the
|
|
1296
|
+
// pending message completion callbacks execute, immediately
|
|
1297
|
+
// promote the queued trailing metadata to kComplete so the
|
|
1298
|
+
// synchronous handling below picks it up within this polling
|
|
1299
|
+
// pass.
|
|
1300
|
+
if (self_->recv_trailing_state_ ==
|
|
1301
|
+
RecvTrailingState::kCompletedQueuedBehindReceiveMessage) {
|
|
1302
|
+
self_->recv_trailing_state_ = RecvTrailingState::kComplete;
|
|
1303
|
+
}
|
|
1304
|
+
} else {
|
|
1305
|
+
self_->receive_message()->Done(*md, flusher_);
|
|
1306
|
+
}
|
|
1212
1307
|
}
|
|
1213
1308
|
if (self_->recv_trailing_state_ == RecvTrailingState::kComplete) {
|
|
1214
1309
|
if (self_->recv_trailing_metadata_ != md.get()) {
|
|
@@ -1438,6 +1533,8 @@ const char* ClientCallData::StateString(RecvTrailingState state) {
|
|
|
1438
1533
|
return "INITIAL";
|
|
1439
1534
|
case RecvTrailingState::kQueued:
|
|
1440
1535
|
return "QUEUED";
|
|
1536
|
+
case RecvTrailingState::kCompletedQueuedBehindReceiveMessage:
|
|
1537
|
+
return "QUEUED_BEHIND_RECEIVE_MESSAGE";
|
|
1441
1538
|
case RecvTrailingState::kComplete:
|
|
1442
1539
|
return "COMPLETE";
|
|
1443
1540
|
case RecvTrailingState::kForwarded:
|
|
@@ -1645,7 +1742,8 @@ void ClientCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
|
|
|
1645
1742
|
send_message()->Done(*ServerMetadataFromStatus(error), flusher);
|
|
1646
1743
|
}
|
|
1647
1744
|
if (receive_message() != nullptr) {
|
|
1648
|
-
receive_message()->Done(*ServerMetadataFromStatus(error), flusher
|
|
1745
|
+
receive_message()->Done(*ServerMetadataFromStatus(error), flusher,
|
|
1746
|
+
/*discard_buffered_message=*/true);
|
|
1649
1747
|
}
|
|
1650
1748
|
}
|
|
1651
1749
|
|
|
@@ -1838,6 +1936,7 @@ Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
|
|
|
1838
1936
|
case RecvTrailingState::kInitial:
|
|
1839
1937
|
case RecvTrailingState::kQueued:
|
|
1840
1938
|
case RecvTrailingState::kForwarded:
|
|
1939
|
+
case RecvTrailingState::kCompletedQueuedBehindReceiveMessage:
|
|
1841
1940
|
// No trailing metadata yet: we are pending.
|
|
1842
1941
|
// We return that and expect the promise to be repolled later (if it's
|
|
1843
1942
|
// not cancelled).
|
|
@@ -1892,9 +1991,19 @@ void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
|
|
|
1892
1991
|
}
|
|
1893
1992
|
// Record that we've got the callback.
|
|
1894
1993
|
GRPC_CHECK(recv_trailing_state_ == RecvTrailingState::kForwarded);
|
|
1895
|
-
|
|
1994
|
+
if (IsRecvMessageFilterBypassFixEnabled() && receive_message() != nullptr &&
|
|
1995
|
+
!receive_message()->IsIdle()) {
|
|
1996
|
+
// If the receive message pump is still active processing a message,
|
|
1997
|
+
// queue the trailing metadata until the pump goes idle to avoid bypassing
|
|
1998
|
+
// the message interceptors of filters higher in the stack.
|
|
1999
|
+
recv_trailing_state_ =
|
|
2000
|
+
RecvTrailingState::kCompletedQueuedBehindReceiveMessage;
|
|
2001
|
+
} else {
|
|
2002
|
+
recv_trailing_state_ = RecvTrailingState::kComplete;
|
|
2003
|
+
}
|
|
1896
2004
|
if (receive_message() != nullptr) {
|
|
1897
|
-
receive_message()->Done(*recv_trailing_metadata_, &flusher
|
|
2005
|
+
receive_message()->Done(*recv_trailing_metadata_, &flusher,
|
|
2006
|
+
/*discard_buffered_message=*/!error.ok());
|
|
1898
2007
|
}
|
|
1899
2008
|
if (send_message() != nullptr) {
|
|
1900
2009
|
send_message()->Done(*recv_trailing_metadata_, &flusher);
|
|
@@ -2208,13 +2317,15 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
|
|
|
2208
2317
|
switch (send_trailing_state_) {
|
|
2209
2318
|
case SendTrailingState::kInitial:
|
|
2210
2319
|
send_trailing_metadata_batch_ = batch;
|
|
2320
|
+
// Server ends the RPC non-OK, so the app is done reading: any buffered
|
|
2321
|
+
// inbound (client->server) message has no consumer. Drop it.
|
|
2211
2322
|
if (receive_message() != nullptr &&
|
|
2212
2323
|
batch->payload->send_trailing_metadata.send_trailing_metadata
|
|
2213
2324
|
->get(GrpcStatusMetadata())
|
|
2214
2325
|
.value_or(GRPC_STATUS_UNKNOWN) != GRPC_STATUS_OK) {
|
|
2215
2326
|
receive_message()->Done(
|
|
2216
2327
|
*batch->payload->send_trailing_metadata.send_trailing_metadata,
|
|
2217
|
-
&flusher);
|
|
2328
|
+
&flusher, /* discard_buffered_message */ true);
|
|
2218
2329
|
}
|
|
2219
2330
|
if (send_message() != nullptr && !send_message()->IsIdle()) {
|
|
2220
2331
|
send_trailing_state_ = SendTrailingState::kQueuedBehindSendMessage;
|
|
@@ -2317,7 +2428,8 @@ void ServerCallData::Completed(grpc_error_handle error,
|
|
|
2317
2428
|
send_message()->Done(*ServerMetadataFromStatus(error), flusher);
|
|
2318
2429
|
}
|
|
2319
2430
|
if (receive_message() != nullptr) {
|
|
2320
|
-
receive_message()->Done(*ServerMetadataFromStatus(error), flusher
|
|
2431
|
+
receive_message()->Done(*ServerMetadataFromStatus(error), flusher,
|
|
2432
|
+
/* discard_buffered_message */ true);
|
|
2321
2433
|
}
|
|
2322
2434
|
}
|
|
2323
2435
|
|
|
@@ -1175,7 +1175,8 @@ MakeFilterCall(Derived* derived) {
|
|
|
1175
1175
|
// failure (in which case the call will be aborted).
|
|
1176
1176
|
// useful for cases where the exact metadata returned needs to be customized.
|
|
1177
1177
|
// It's also acceptable to return a promise that resolves to the
|
|
1178
|
-
// relevant return type listed above
|
|
1178
|
+
// relevant return type listed above (except for OnClientToServerHalfClose
|
|
1179
|
+
// and OnServerTrailingMetadata, which must be synchronous).
|
|
1179
1180
|
// Finally, OnFinalize can be added to intercept call finalization.
|
|
1180
1181
|
// It must have one of the signatures:
|
|
1181
1182
|
// - static inline const NoInterceptor OnFinalize:
|
|
@@ -1239,10 +1240,18 @@ struct ArenaContextType<V3InterceptorToV2State> {
|
|
|
1239
1240
|
// Note that this bridge does not support the full functionality of the
|
|
1240
1241
|
// v3 interceptor API. In particular, it assumes that the interceptor
|
|
1241
1242
|
// will create exactly one child call.
|
|
1243
|
+
//
|
|
1244
|
+
// When not running in a v3 stack, the interceptor's Init() method will
|
|
1245
|
+
// not be called, but the wrapped destination will be set before the
|
|
1246
|
+
// ctor runs, so implementations must perform any necessary initialization
|
|
1247
|
+
// in their ctor instead.
|
|
1242
1248
|
template <typename Derived>
|
|
1243
1249
|
class V3InterceptorToV2Bridge : public ChannelFilter, public Interceptor {
|
|
1244
1250
|
public:
|
|
1245
|
-
V3InterceptorToV2Bridge() {
|
|
1251
|
+
explicit V3InterceptorToV2Bridge(ChannelArgs args) {
|
|
1252
|
+
// If running in a v3 stack, disable the bridge. The interceptor
|
|
1253
|
+
// will be used normally.
|
|
1254
|
+
if (args.GetBool(GRPC_ARG_USE_V3_STACK).value_or(false)) return;
|
|
1246
1255
|
// Insert CallDestinationToNextV2Filter as the wrapped destination in
|
|
1247
1256
|
// Interceptor, so that we can route the server side of the
|
|
1248
1257
|
// interceptor back into the v2 filter chain.
|
|
@@ -1486,12 +1495,28 @@ class V3InterceptorToV2Bridge : public ChannelFilter, public Interceptor {
|
|
|
1486
1495
|
call_args.client_initial_metadata = std::move(metadata);
|
|
1487
1496
|
return Seq(
|
|
1488
1497
|
next_promise_factory(std::move(call_args)),
|
|
1489
|
-
[handler](ServerMetadataHandle metadata) mutable
|
|
1490
|
-
-> Poll<ServerMetadataHandle> {
|
|
1498
|
+
[handler](ServerMetadataHandle metadata) mutable {
|
|
1491
1499
|
handler.SpawnPushServerTrailingMetadata(
|
|
1492
1500
|
std::move(metadata));
|
|
1501
|
+
// We return a lambda (promise) here instead of
|
|
1502
|
+
// returning `Pending{}` directly to make this
|
|
1503
|
+
// step safe for subsequent polls. During V2 call
|
|
1504
|
+
// teardown, cancellation of active streams
|
|
1505
|
+
// propagates through the V2 filter stack, which
|
|
1506
|
+
// wakes up this activity and triggers re-polls of
|
|
1507
|
+
// the bridge promise. If we returned `Pending{}`
|
|
1508
|
+
// directly, this factory lambda would be
|
|
1509
|
+
// re-evaluated on every poll, causing duplicate
|
|
1510
|
+
// calls to `SpawnPushServerTrailingMetadata` and
|
|
1511
|
+
// attempting to move from the already-moved
|
|
1512
|
+
// `metadata` parameter (leading to
|
|
1513
|
+
// crashes/undefined behavior). Returning the
|
|
1514
|
+
// inner lambda ensures that the side-effects in
|
|
1515
|
+
// this factory run exactly once, and subsequent
|
|
1516
|
+
// polls only execute the trivial,
|
|
1517
|
+
// side-effect-free inner lambda.
|
|
1493
1518
|
// We always lose the race.
|
|
1494
|
-
return
|
|
1519
|
+
return Never<ServerMetadataHandle>();
|
|
1495
1520
|
});
|
|
1496
1521
|
});
|
|
1497
1522
|
})),
|
|
@@ -1512,11 +1537,6 @@ class V3InterceptorToV2Bridge : public ChannelFilter, public Interceptor {
|
|
|
1512
1537
|
});
|
|
1513
1538
|
}
|
|
1514
1539
|
|
|
1515
|
-
protected:
|
|
1516
|
-
RefCountedPtr<UnstartedCallDestination> wrapped_destination() const {
|
|
1517
|
-
return wrapped_destination_; // From Interceptor class.
|
|
1518
|
-
}
|
|
1519
|
-
|
|
1520
1540
|
private:
|
|
1521
1541
|
// A custom UnstartedCallDestination that starts the call and returns
|
|
1522
1542
|
// the resulting handler via a latch obtained from call context.
|
|
@@ -1867,7 +1887,14 @@ class BaseCallData : public Activity,
|
|
|
1867
1887
|
// work.
|
|
1868
1888
|
void WakeInsideCombiner(Flusher* flusher, bool allow_push_to_pipe);
|
|
1869
1889
|
// Call is completed, we have trailing metadata. Close things out.
|
|
1870
|
-
|
|
1890
|
+
// discard_buffered_message: the call is being torn down (the promise
|
|
1891
|
+
// produced its own terminal metadata, an out-of-band cancellation, or a
|
|
1892
|
+
// server-initiated non-OK termination) and the receiver has stopped
|
|
1893
|
+
// reading, so drop any message buffered here instead of delivering it up
|
|
1894
|
+
// the stack.
|
|
1895
|
+
void Done(const ServerMetadata& metadata, Flusher* flusher,
|
|
1896
|
+
bool discard_buffered_message = false);
|
|
1897
|
+
bool IsIdle() const;
|
|
1871
1898
|
|
|
1872
1899
|
channelz::PropertyList ChannelzProperties() {
|
|
1873
1900
|
return channelz::PropertyList().Set("state", StateString(state_));
|
|
@@ -2026,6 +2053,9 @@ class ClientCallData : public BaseCallData {
|
|
|
2026
2053
|
kQueued,
|
|
2027
2054
|
// We've forwarded the op to the next filter.
|
|
2028
2055
|
kForwarded,
|
|
2056
|
+
// Trailing metadata is received, but we queue it until the in-progress
|
|
2057
|
+
// receive message operation finishes.
|
|
2058
|
+
kCompletedQueuedBehindReceiveMessage,
|
|
2029
2059
|
// The op has completed from below, but we haven't yet forwarded it up
|
|
2030
2060
|
// (the promise gets to interject and mutate it).
|
|
2031
2061
|
kComplete,
|
|
@@ -2324,7 +2354,7 @@ struct ChannelFilterWithFlagsMethods {
|
|
|
2324
2354
|
args->config));
|
|
2325
2355
|
if (!status.ok()) {
|
|
2326
2356
|
new (elem->channel_data) F*(nullptr);
|
|
2327
|
-
return
|
|
2357
|
+
return status.status();
|
|
2328
2358
|
}
|
|
2329
2359
|
new (elem->channel_data) F*(status->release());
|
|
2330
2360
|
return absl::OkStatus();
|
|
@@ -250,15 +250,14 @@ grpc_compression_options CompressionOptionsFromChannelArgs(
|
|
|
250
250
|
Clamp(*default_level, static_cast<int>(GRPC_COMPRESS_LEVEL_NONE),
|
|
251
251
|
static_cast<int>(GRPC_COMPRESS_LEVEL_COUNT - 1)));
|
|
252
252
|
}
|
|
253
|
-
|
|
253
|
+
std::optional<int> default_algorithm =
|
|
254
254
|
args.GetInt(GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM);
|
|
255
255
|
if (default_algorithm.has_value()) {
|
|
256
256
|
compression_options.default_algorithm.is_set = true;
|
|
257
257
|
compression_options.default_algorithm.algorithm =
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
GRPC_COMPRESS_ALGORITHMS_COUNT - 1));
|
|
258
|
+
static_cast<grpc_compression_algorithm>(
|
|
259
|
+
Clamp(*default_algorithm, static_cast<int>(GRPC_COMPRESS_NONE),
|
|
260
|
+
static_cast<int>(GRPC_COMPRESS_ALGORITHMS_COUNT - 1)));
|
|
262
261
|
}
|
|
263
262
|
auto enabled_algorithms_bitset =
|
|
264
263
|
args.GetInt(GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET);
|
|
@@ -68,6 +68,7 @@ TraceFlag client_channel_trace(false, "client_channel");
|
|
|
68
68
|
TraceFlag client_channel_call_trace(false, "client_channel_call");
|
|
69
69
|
TraceFlag client_channel_lb_call_trace(false, "client_channel_lb_call");
|
|
70
70
|
TraceFlag client_idle_filter_trace(false, "client_idle_filter");
|
|
71
|
+
TraceFlag composite_filter_trace(false, "composite_filter");
|
|
71
72
|
TraceFlag compression_trace(false, "compression");
|
|
72
73
|
TraceFlag connectivity_state_trace(false, "connectivity_state");
|
|
73
74
|
TraceFlag dns_resolver_trace(false, "dns_resolver");
|
|
@@ -79,6 +80,7 @@ TraceFlag event_engine_dns_trace(false, "event_engine_dns");
|
|
|
79
80
|
TraceFlag event_engine_endpoint_trace(false, "event_engine_endpoint");
|
|
80
81
|
TraceFlag event_engine_endpoint_data_trace(false, "event_engine_endpoint_data");
|
|
81
82
|
TraceFlag event_engine_poller_trace(false, "event_engine_poller");
|
|
83
|
+
TraceFlag ext_proc_filter_trace(false, "ext_proc_filter");
|
|
82
84
|
TraceFlag fault_injection_filter_trace(false, "fault_injection_filter");
|
|
83
85
|
TraceFlag flowctl_trace(false, "flowctl");
|
|
84
86
|
TraceFlag fork_trace(false, "fork");
|
|
@@ -109,6 +111,8 @@ TraceFlag rls_lb_trace(false, "rls_lb");
|
|
|
109
111
|
TraceFlag round_robin_trace(false, "round_robin");
|
|
110
112
|
TraceFlag secure_endpoint_trace(false, "secure_endpoint");
|
|
111
113
|
TraceFlag server_channel_trace(false, "server_channel");
|
|
114
|
+
TraceFlag server_config_selector_interceptor_trace(
|
|
115
|
+
false, "server_config_selector_interceptor");
|
|
112
116
|
TraceFlag stateful_session_filter_trace(false, "stateful_session_filter");
|
|
113
117
|
TraceFlag subchannel_trace(false, "subchannel");
|
|
114
118
|
TraceFlag subchannel_call_trace(false, "subchannel_call");
|
|
@@ -151,6 +155,7 @@ const absl::flat_hash_map<std::string, TraceFlag*>& GetAllTraceFlags() {
|
|
|
151
155
|
{"client_channel_call", &client_channel_call_trace},
|
|
152
156
|
{"client_channel_lb_call", &client_channel_lb_call_trace},
|
|
153
157
|
{"client_idle_filter", &client_idle_filter_trace},
|
|
158
|
+
{"composite_filter", &composite_filter_trace},
|
|
154
159
|
{"compression", &compression_trace},
|
|
155
160
|
{"connectivity_state", &connectivity_state_trace},
|
|
156
161
|
{"dns_resolver", &dns_resolver_trace},
|
|
@@ -162,6 +167,7 @@ const absl::flat_hash_map<std::string, TraceFlag*>& GetAllTraceFlags() {
|
|
|
162
167
|
{"event_engine_endpoint", &event_engine_endpoint_trace},
|
|
163
168
|
{"event_engine_endpoint_data", &event_engine_endpoint_data_trace},
|
|
164
169
|
{"event_engine_poller", &event_engine_poller_trace},
|
|
170
|
+
{"ext_proc_filter", &ext_proc_filter_trace},
|
|
165
171
|
{"fault_injection_filter", &fault_injection_filter_trace},
|
|
166
172
|
{"flowctl", &flowctl_trace},
|
|
167
173
|
{"fork", &fork_trace},
|
|
@@ -192,6 +198,8 @@ const absl::flat_hash_map<std::string, TraceFlag*>& GetAllTraceFlags() {
|
|
|
192
198
|
{"round_robin", &round_robin_trace},
|
|
193
199
|
{"secure_endpoint", &secure_endpoint_trace},
|
|
194
200
|
{"server_channel", &server_channel_trace},
|
|
201
|
+
{"server_config_selector_interceptor",
|
|
202
|
+
&server_config_selector_interceptor_trace},
|
|
195
203
|
{"stateful_session_filter", &stateful_session_filter_trace},
|
|
196
204
|
{"subchannel", &subchannel_trace},
|
|
197
205
|
{"subchannel_call", &subchannel_call_trace},
|
|
@@ -67,6 +67,7 @@ extern TraceFlag client_channel_trace;
|
|
|
67
67
|
extern TraceFlag client_channel_call_trace;
|
|
68
68
|
extern TraceFlag client_channel_lb_call_trace;
|
|
69
69
|
extern TraceFlag client_idle_filter_trace;
|
|
70
|
+
extern TraceFlag composite_filter_trace;
|
|
70
71
|
extern TraceFlag compression_trace;
|
|
71
72
|
extern TraceFlag connectivity_state_trace;
|
|
72
73
|
extern TraceFlag dns_resolver_trace;
|
|
@@ -77,6 +78,7 @@ extern TraceFlag event_engine_dns_trace;
|
|
|
77
78
|
extern TraceFlag event_engine_endpoint_trace;
|
|
78
79
|
extern TraceFlag event_engine_endpoint_data_trace;
|
|
79
80
|
extern TraceFlag event_engine_poller_trace;
|
|
81
|
+
extern TraceFlag ext_proc_filter_trace;
|
|
80
82
|
extern TraceFlag fault_injection_filter_trace;
|
|
81
83
|
extern TraceFlag flowctl_trace;
|
|
82
84
|
extern TraceFlag fork_trace;
|
|
@@ -107,6 +109,7 @@ extern TraceFlag rls_lb_trace;
|
|
|
107
109
|
extern TraceFlag round_robin_trace;
|
|
108
110
|
extern TraceFlag secure_endpoint_trace;
|
|
109
111
|
extern TraceFlag server_channel_trace;
|
|
112
|
+
extern TraceFlag server_config_selector_interceptor_trace;
|
|
110
113
|
extern TraceFlag stateful_session_filter_trace;
|
|
111
114
|
extern TraceFlag subchannel_trace;
|
|
112
115
|
extern TraceFlag subchannel_call_trace;
|
|
@@ -60,11 +60,13 @@
|
|
|
60
60
|
#include "src/core/lib/event_engine/grpc_polled_fd.h"
|
|
61
61
|
#include "src/core/lib/event_engine/time_util.h"
|
|
62
62
|
#include "src/core/lib/iomgr/resolved_address.h"
|
|
63
|
+
#include "src/core/util/address_sorting_init.h"
|
|
63
64
|
#include "src/core/util/debug_location.h"
|
|
64
65
|
#include "src/core/util/grpc_check.h"
|
|
65
66
|
#include "src/core/util/host_port.h"
|
|
66
67
|
#include "src/core/util/orphanable.h"
|
|
67
68
|
#include "src/core/util/ref_counted_ptr.h"
|
|
69
|
+
#include "absl/base/call_once.h"
|
|
68
70
|
#include "absl/functional/any_invocable.h"
|
|
69
71
|
#include "absl/log/log.h"
|
|
70
72
|
#include "absl/strings/match.h"
|
|
@@ -79,8 +81,58 @@
|
|
|
79
81
|
|
|
80
82
|
namespace grpc_event_engine::experimental {
|
|
81
83
|
|
|
84
|
+
std::vector<EventEngine::ResolvedAddress> SortAddresses(
|
|
85
|
+
const std::vector<EventEngine::ResolvedAddress>& addresses) {
|
|
86
|
+
address_sorting_sortable* sortables = static_cast<address_sorting_sortable*>(
|
|
87
|
+
gpr_zalloc(sizeof(address_sorting_sortable) * addresses.size()));
|
|
88
|
+
for (size_t i = 0; i < addresses.size(); i++) {
|
|
89
|
+
sortables[i].user_data =
|
|
90
|
+
const_cast<EventEngine::ResolvedAddress*>(&addresses[i]);
|
|
91
|
+
memcpy(&sortables[i].dest_addr.addr, addresses[i].address(),
|
|
92
|
+
addresses[i].size());
|
|
93
|
+
sortables[i].dest_addr.len = addresses[i].size();
|
|
94
|
+
}
|
|
95
|
+
address_sorting_rfc_6724_sort(sortables, addresses.size());
|
|
96
|
+
std::vector<EventEngine::ResolvedAddress> sorted_addresses;
|
|
97
|
+
sorted_addresses.reserve(addresses.size());
|
|
98
|
+
for (size_t i = 0; i < addresses.size(); ++i) {
|
|
99
|
+
sorted_addresses.emplace_back(
|
|
100
|
+
*static_cast<EventEngine::ResolvedAddress*>(sortables[i].user_data));
|
|
101
|
+
}
|
|
102
|
+
gpr_free(sortables);
|
|
103
|
+
return sorted_addresses;
|
|
104
|
+
}
|
|
105
|
+
|
|
82
106
|
namespace {
|
|
83
107
|
|
|
108
|
+
absl::Status AresInit() {
|
|
109
|
+
if (ShouldUseAresDnsResolver()) {
|
|
110
|
+
// ares_library_init and ares_library_cleanup are currently no-op except
|
|
111
|
+
// under Windows. Calling them may cause race conditions when other parts of
|
|
112
|
+
// the binary calls these functions concurrently.
|
|
113
|
+
#ifdef GPR_WINDOWS
|
|
114
|
+
int status = ares_library_init(ARES_LIB_INIT_ALL);
|
|
115
|
+
if (status != ARES_SUCCESS) {
|
|
116
|
+
return GRPC_ERROR_CREATE(
|
|
117
|
+
absl::StrCat("ares_library_init failed: ", ares_strerror(status)));
|
|
118
|
+
}
|
|
119
|
+
#endif // GPR_WINDOWS
|
|
120
|
+
}
|
|
121
|
+
return absl::OkStatus();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
absl::once_flag init_flag;
|
|
125
|
+
|
|
126
|
+
void AresOnceInit() {
|
|
127
|
+
grpc_core::AddressSortingInitOnce();
|
|
128
|
+
absl::call_once(init_flag, []() {
|
|
129
|
+
auto status = AresInit();
|
|
130
|
+
if (!status.ok()) {
|
|
131
|
+
VLOG(2) << "AresInit failed: " << status.message();
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
84
136
|
// A hard limit on the number of records (A/AAAA or SRV) we may get from a
|
|
85
137
|
// single response. This is to be defensive to prevent a bad DNS response from
|
|
86
138
|
// OOMing the process.
|
|
@@ -151,28 +203,6 @@ absl::Status SetRequestDNSServer(absl::string_view dns_server,
|
|
|
151
203
|
return absl::OkStatus();
|
|
152
204
|
}
|
|
153
205
|
|
|
154
|
-
std::vector<EventEngine::ResolvedAddress> SortAddresses(
|
|
155
|
-
const std::vector<EventEngine::ResolvedAddress>& addresses) {
|
|
156
|
-
address_sorting_sortable* sortables = static_cast<address_sorting_sortable*>(
|
|
157
|
-
gpr_zalloc(sizeof(address_sorting_sortable) * addresses.size()));
|
|
158
|
-
for (size_t i = 0; i < addresses.size(); i++) {
|
|
159
|
-
sortables[i].user_data =
|
|
160
|
-
const_cast<EventEngine::ResolvedAddress*>(&addresses[i]);
|
|
161
|
-
memcpy(&sortables[i].dest_addr.addr, addresses[i].address(),
|
|
162
|
-
addresses[i].size());
|
|
163
|
-
sortables[i].dest_addr.len = addresses[i].size();
|
|
164
|
-
}
|
|
165
|
-
address_sorting_rfc_6724_sort(sortables, addresses.size());
|
|
166
|
-
std::vector<EventEngine::ResolvedAddress> sorted_addresses;
|
|
167
|
-
sorted_addresses.reserve(addresses.size());
|
|
168
|
-
for (size_t i = 0; i < addresses.size(); ++i) {
|
|
169
|
-
sorted_addresses.emplace_back(
|
|
170
|
-
*static_cast<EventEngine::ResolvedAddress*>(sortables[i].user_data));
|
|
171
|
-
}
|
|
172
|
-
gpr_free(sortables);
|
|
173
|
-
return sorted_addresses;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
206
|
struct QueryArg {
|
|
177
207
|
QueryArg(AresResolver* ar, int id, absl::string_view name)
|
|
178
208
|
: ares_resolver(ar), callback_map_id(id), query_name(name) {}
|
|
@@ -253,6 +283,7 @@ AresResolver::CreateAresResolver(
|
|
|
253
283
|
std::unique_ptr<GrpcPolledFdFactory> polled_fd_factory,
|
|
254
284
|
std::shared_ptr<EventEngine> event_engine) {
|
|
255
285
|
ares_channel channel;
|
|
286
|
+
AresOnceInit();
|
|
256
287
|
absl::Status status =
|
|
257
288
|
InitAresChannel(dns_server, *polled_fd_factory, &channel);
|
|
258
289
|
if (!status.ok()) {
|
|
@@ -276,6 +307,7 @@ AresResolver::AresResolver(
|
|
|
276
307
|
#endif // GRPC_ENABLE_FORK_SUPPORT
|
|
277
308
|
event_engine_(std::move(event_engine)) {
|
|
278
309
|
(void)dns_server; // Used whether or not compiled with fork support
|
|
310
|
+
AresOnceInit();
|
|
279
311
|
polled_fd_factory_->Initialize(&mutex_, event_engine_.get());
|
|
280
312
|
}
|
|
281
313
|
|
|
@@ -951,36 +983,8 @@ bool ShouldUseAresDnsResolver() {
|
|
|
951
983
|
// defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
|
|
952
984
|
}
|
|
953
985
|
|
|
954
|
-
absl::Status AresInit() {
|
|
955
|
-
if (ShouldUseAresDnsResolver()) {
|
|
956
|
-
// ares_library_init and ares_library_cleanup are currently no-op except
|
|
957
|
-
// under Windows. Calling them may cause race conditions when other parts of
|
|
958
|
-
// the binary calls these functions concurrently.
|
|
959
|
-
#ifdef GPR_WINDOWS
|
|
960
|
-
int status = ares_library_init(ARES_LIB_INIT_ALL);
|
|
961
|
-
if (status != ARES_SUCCESS) {
|
|
962
|
-
return GRPC_ERROR_CREATE(
|
|
963
|
-
absl::StrCat("ares_library_init failed: ", ares_strerror(status)));
|
|
964
|
-
}
|
|
965
|
-
#endif // GPR_WINDOWS
|
|
966
|
-
}
|
|
967
|
-
return absl::OkStatus();
|
|
968
|
-
}
|
|
969
|
-
void AresShutdown() {
|
|
970
|
-
if (ShouldUseAresDnsResolver()) {
|
|
971
|
-
// ares_library_init and ares_library_cleanup are currently no-op except
|
|
972
|
-
// under Windows. Calling them may cause race conditions when other parts of
|
|
973
|
-
// the binary calls these functions concurrently.
|
|
974
|
-
#ifdef GPR_WINDOWS
|
|
975
|
-
ares_library_cleanup();
|
|
976
|
-
#endif // GPR_WINDOWS
|
|
977
|
-
}
|
|
978
|
-
}
|
|
979
|
-
|
|
980
986
|
#else // GRPC_ARES == 1
|
|
981
987
|
|
|
982
988
|
bool ShouldUseAresDnsResolver() { return false; }
|
|
983
|
-
absl::Status AresInit() { return absl::OkStatus(); }
|
|
984
|
-
void AresShutdown() {}
|
|
985
989
|
|
|
986
990
|
#endif // GRPC_ARES == 1
|
|
@@ -41,6 +41,9 @@
|
|
|
41
41
|
|
|
42
42
|
namespace grpc_event_engine::experimental {
|
|
43
43
|
|
|
44
|
+
std::vector<EventEngine::ResolvedAddress> SortAddresses(
|
|
45
|
+
const std::vector<EventEngine::ResolvedAddress>& addresses);
|
|
46
|
+
|
|
44
47
|
class AresResolver : public RefCountedDNSResolverInterface {
|
|
45
48
|
public:
|
|
46
49
|
#ifdef GRPC_ENABLE_FORK_SUPPORT
|
|
@@ -182,7 +185,5 @@ extern bool g_event_engine_grpc_ares_test_only_force_tcp;
|
|
|
182
185
|
#endif // GRPC_ARES == 1
|
|
183
186
|
|
|
184
187
|
bool ShouldUseAresDnsResolver();
|
|
185
|
-
absl::Status AresInit();
|
|
186
|
-
void AresShutdown();
|
|
187
188
|
|
|
188
189
|
#endif // GRPC_SRC_CORE_LIB_EVENT_ENGINE_ARES_RESOLVER_H
|
|
@@ -226,9 +226,9 @@ void Epoll1EventHandle::OrphanHandle(PosixEngineClosure* on_done,
|
|
|
226
226
|
// shutdown() syscall on that fd)
|
|
227
227
|
void Epoll1EventHandle::HandleShutdownInternal(absl::Status why,
|
|
228
228
|
bool releasing_fd) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
229
|
+
if (!absl::IsCancelled(why)) {
|
|
230
|
+
why = absl::UnavailableError(why.message());
|
|
231
|
+
}
|
|
232
232
|
if (read_closure_.SetShutdown(why)) {
|
|
233
233
|
if (releasing_fd) {
|
|
234
234
|
auto result = poller_->posix_interface().EpollCtlDel(
|