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
data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc}
RENAMED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
#include "src/core/resolver/dns/
|
|
14
|
+
#include "src/core/resolver/dns/dns_resolver.h"
|
|
15
15
|
|
|
16
16
|
#include <grpc/event_engine/event_engine.h>
|
|
17
17
|
#include <grpc/impl/channel_arg_names.h>
|
|
@@ -27,13 +27,13 @@
|
|
|
27
27
|
#include <utility>
|
|
28
28
|
#include <vector>
|
|
29
29
|
|
|
30
|
+
#include "src/core/config/core_configuration.h"
|
|
30
31
|
#include "src/core/lib/channel/channel_args.h"
|
|
31
32
|
#include "src/core/lib/debug/trace.h"
|
|
32
33
|
#include "src/core/lib/event_engine/resolved_address_internal.h"
|
|
33
34
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
|
34
|
-
#include "src/core/lib/iomgr/resolve_address.h"
|
|
35
35
|
#include "src/core/load_balancing/grpclb/grpclb_balancer_addresses.h"
|
|
36
|
-
#include "src/core/resolver/dns/
|
|
36
|
+
#include "src/core/resolver/dns/service_config_helper.h"
|
|
37
37
|
#include "src/core/resolver/endpoint_addresses.h"
|
|
38
38
|
#include "src/core/resolver/polling_resolver.h"
|
|
39
39
|
#include "src/core/resolver/resolver.h"
|
|
@@ -61,6 +61,8 @@
|
|
|
61
61
|
namespace grpc_core {
|
|
62
62
|
namespace {
|
|
63
63
|
|
|
64
|
+
const char* kDefaultSecurePort = "https";
|
|
65
|
+
|
|
64
66
|
#define GRPC_DNS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
|
65
67
|
#define GRPC_DNS_RECONNECT_BACKOFF_MULTIPLIER 1.6
|
|
66
68
|
#define GRPC_DNS_RECONNECT_MAX_BACKOFF_SECONDS 120
|
|
@@ -76,12 +78,12 @@ using grpc_event_engine::experimental::EventEngine;
|
|
|
76
78
|
// addresses.
|
|
77
79
|
|
|
78
80
|
// ----------------------------------------------------------------------------
|
|
79
|
-
//
|
|
81
|
+
// ClientChannelDNSResolver
|
|
80
82
|
// ----------------------------------------------------------------------------
|
|
81
|
-
class
|
|
83
|
+
class ClientChannelDNSResolver final : public PollingResolver {
|
|
82
84
|
public:
|
|
83
|
-
|
|
84
|
-
|
|
85
|
+
ClientChannelDNSResolver(ResolverArgs args,
|
|
86
|
+
Duration min_time_between_resolutions);
|
|
85
87
|
OrphanablePtr<Orphanable> StartRequest() override;
|
|
86
88
|
|
|
87
89
|
private:
|
|
@@ -92,7 +94,7 @@ class EventEngineClientChannelDNSResolver final : public PollingResolver {
|
|
|
92
94
|
: public InternallyRefCounted<EventEngineDNSRequestWrapper> {
|
|
93
95
|
public:
|
|
94
96
|
EventEngineDNSRequestWrapper(
|
|
95
|
-
RefCountedPtr<
|
|
97
|
+
RefCountedPtr<ClientChannelDNSResolver> resolver,
|
|
96
98
|
std::unique_ptr<EventEngine::DNSResolver> event_engine_resolver);
|
|
97
99
|
~EventEngineDNSRequestWrapper() override;
|
|
98
100
|
|
|
@@ -128,7 +130,7 @@ class EventEngineClientChannelDNSResolver final : public PollingResolver {
|
|
|
128
130
|
void MaybePopulateServiceConfigLocked(Resolver::Result* result)
|
|
129
131
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(on_resolved_mu_);
|
|
130
132
|
|
|
131
|
-
RefCountedPtr<
|
|
133
|
+
RefCountedPtr<ClientChannelDNSResolver> resolver_;
|
|
132
134
|
Mutex on_resolved_mu_;
|
|
133
135
|
// Lookup callbacks
|
|
134
136
|
bool is_hostname_inflight_ ABSL_GUARDED_BY(on_resolved_mu_) = false;
|
|
@@ -160,7 +162,7 @@ class EventEngineClientChannelDNSResolver final : public PollingResolver {
|
|
|
160
162
|
std::shared_ptr<EventEngine> event_engine_;
|
|
161
163
|
};
|
|
162
164
|
|
|
163
|
-
|
|
165
|
+
ClientChannelDNSResolver::ClientChannelDNSResolver(
|
|
164
166
|
ResolverArgs args, Duration min_time_between_resolutions)
|
|
165
167
|
: PollingResolver(std::move(args), min_time_between_resolutions,
|
|
166
168
|
BackOff::Options()
|
|
@@ -185,7 +187,7 @@ EventEngineClientChannelDNSResolver::EventEngineClientChannelDNSResolver(
|
|
|
185
187
|
.value_or(GRPC_DNS_DEFAULT_QUERY_TIMEOUT_MS)))),
|
|
186
188
|
event_engine_(channel_args().GetObjectRef<EventEngine>()) {}
|
|
187
189
|
|
|
188
|
-
OrphanablePtr<Orphanable>
|
|
190
|
+
OrphanablePtr<Orphanable> ClientChannelDNSResolver::StartRequest() {
|
|
189
191
|
auto dns_resolver =
|
|
190
192
|
event_engine_->GetDNSResolver({/*dns_server=*/authority()});
|
|
191
193
|
if (!dns_resolver.ok()) {
|
|
@@ -196,8 +198,7 @@ OrphanablePtr<Orphanable> EventEngineClientChannelDNSResolver::StartRequest() {
|
|
|
196
198
|
return nullptr;
|
|
197
199
|
}
|
|
198
200
|
return MakeOrphanable<EventEngineDNSRequestWrapper>(
|
|
199
|
-
RefAsSubclass<
|
|
200
|
-
"dns-resolving"),
|
|
201
|
+
RefAsSubclass<ClientChannelDNSResolver>(DEBUG_LOCATION, "dns-resolving"),
|
|
201
202
|
std::move(*dns_resolver));
|
|
202
203
|
}
|
|
203
204
|
|
|
@@ -205,9 +206,9 @@ OrphanablePtr<Orphanable> EventEngineClientChannelDNSResolver::StartRequest() {
|
|
|
205
206
|
// EventEngineDNSRequestWrapper definition
|
|
206
207
|
// ----------------------------------------------------------------------------
|
|
207
208
|
|
|
208
|
-
|
|
209
|
+
ClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
209
210
|
EventEngineDNSRequestWrapper(
|
|
210
|
-
RefCountedPtr<
|
|
211
|
+
RefCountedPtr<ClientChannelDNSResolver> resolver,
|
|
211
212
|
std::unique_ptr<EventEngine::DNSResolver> event_engine_resolver)
|
|
212
213
|
: resolver_(std::move(resolver)),
|
|
213
214
|
event_engine_resolver_(std::move(event_engine_resolver)) {
|
|
@@ -270,13 +271,12 @@ EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
270
271
|
});
|
|
271
272
|
}
|
|
272
273
|
|
|
273
|
-
|
|
274
|
+
ClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
274
275
|
~EventEngineDNSRequestWrapper() {
|
|
275
276
|
resolver_.reset(DEBUG_LOCATION, "dns-resolving");
|
|
276
277
|
}
|
|
277
278
|
|
|
278
|
-
void
|
|
279
|
-
Orphan() {
|
|
279
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::Orphan() {
|
|
280
280
|
{
|
|
281
281
|
MutexLock lock(&on_resolved_mu_);
|
|
282
282
|
orphaned_ = true;
|
|
@@ -291,8 +291,7 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
291
291
|
Unref(DEBUG_LOCATION, "Orphan");
|
|
292
292
|
}
|
|
293
293
|
|
|
294
|
-
void
|
|
295
|
-
OnTimeout() {
|
|
294
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::OnTimeout() {
|
|
296
295
|
MutexLock lock(&on_resolved_mu_);
|
|
297
296
|
GRPC_TRACE_VLOG(event_engine_client_channel_resolver, 2)
|
|
298
297
|
<< "(event_engine client channel resolver) DNSResolver::"
|
|
@@ -301,9 +300,8 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
301
300
|
event_engine_resolver_.reset();
|
|
302
301
|
}
|
|
303
302
|
|
|
304
|
-
void
|
|
305
|
-
|
|
306
|
-
new_addresses) {
|
|
303
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::OnHostnameResolved(
|
|
304
|
+
absl::StatusOr<std::vector<EventEngine::ResolvedAddress>> new_addresses) {
|
|
307
305
|
std::optional<Resolver::Result> result;
|
|
308
306
|
{
|
|
309
307
|
MutexLock lock(&on_resolved_mu_);
|
|
@@ -326,10 +324,9 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
326
324
|
}
|
|
327
325
|
}
|
|
328
326
|
|
|
329
|
-
void
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
srv_records) {
|
|
327
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::OnSRVResolved(
|
|
328
|
+
absl::StatusOr<std::vector<EventEngine::DNSResolver::SRVRecord>>
|
|
329
|
+
srv_records) {
|
|
333
330
|
std::optional<Resolver::Result> result;
|
|
334
331
|
auto cleanup = absl::MakeCleanup([&]() {
|
|
335
332
|
if (result.has_value()) {
|
|
@@ -379,7 +376,7 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
379
376
|
}
|
|
380
377
|
}
|
|
381
378
|
|
|
382
|
-
void
|
|
379
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
383
380
|
OnBalancerHostnamesResolved(
|
|
384
381
|
std::string authority,
|
|
385
382
|
absl::StatusOr<std::vector<EventEngine::ResolvedAddress>>
|
|
@@ -413,8 +410,8 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
413
410
|
result = OnResolvedLocked();
|
|
414
411
|
}
|
|
415
412
|
|
|
416
|
-
void
|
|
417
|
-
|
|
413
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::OnTXTResolved(
|
|
414
|
+
absl::StatusOr<std::vector<std::string>> service_config) {
|
|
418
415
|
std::optional<Resolver::Result> result;
|
|
419
416
|
{
|
|
420
417
|
MutexLock lock(&on_resolved_mu_);
|
|
@@ -456,13 +453,13 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
456
453
|
}
|
|
457
454
|
}
|
|
458
455
|
|
|
459
|
-
void
|
|
456
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
460
457
|
MaybePopulateAddressesLocked(Resolver::Result* result) {
|
|
461
458
|
if (addresses_.empty()) return;
|
|
462
459
|
result->addresses = std::move(addresses_);
|
|
463
460
|
}
|
|
464
461
|
|
|
465
|
-
void
|
|
462
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
466
463
|
MaybePopulateBalancerAddressesLocked(Resolver::Result* result) {
|
|
467
464
|
if (!balancer_addresses_.empty()) {
|
|
468
465
|
result->args =
|
|
@@ -470,7 +467,7 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
470
467
|
}
|
|
471
468
|
}
|
|
472
469
|
|
|
473
|
-
void
|
|
470
|
+
void ClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
474
471
|
MaybePopulateServiceConfigLocked(Resolver::Result* result) {
|
|
475
472
|
// This function is called only if we are returning addresses. In that case,
|
|
476
473
|
// we currently ignore TXT lookup failures.
|
|
@@ -498,8 +495,8 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
|
|
|
498
495
|
}
|
|
499
496
|
}
|
|
500
497
|
|
|
501
|
-
std::optional<Resolver::Result>
|
|
502
|
-
|
|
498
|
+
std::optional<Resolver::Result>
|
|
499
|
+
ClientChannelDNSResolver::EventEngineDNSRequestWrapper::OnResolvedLocked() {
|
|
503
500
|
if (orphaned_) return std::nullopt;
|
|
504
501
|
// Wait for all requested queries to return.
|
|
505
502
|
if (is_hostname_inflight_ || is_srv_inflight_ || is_txt_inflight_ ||
|
|
@@ -552,8 +549,7 @@ std::optional<Resolver::Result> EventEngineClientChannelDNSResolver::
|
|
|
552
549
|
|
|
553
550
|
} // namespace
|
|
554
551
|
|
|
555
|
-
bool
|
|
556
|
-
const URI& uri) const {
|
|
552
|
+
bool ClientChannelDNSResolverFactory::IsValidUri(const URI& uri) const {
|
|
557
553
|
if (absl::StripPrefix(uri.path(), "/").empty()) {
|
|
558
554
|
LOG(ERROR) << "no server name supplied in dns URI";
|
|
559
555
|
return false;
|
|
@@ -561,16 +557,21 @@ bool EventEngineClientChannelDNSResolverFactory::IsValidUri(
|
|
|
561
557
|
return true;
|
|
562
558
|
}
|
|
563
559
|
|
|
564
|
-
OrphanablePtr<Resolver>
|
|
565
|
-
EventEngineClientChannelDNSResolverFactory::CreateResolver(
|
|
560
|
+
OrphanablePtr<Resolver> ClientChannelDNSResolverFactory::CreateResolver(
|
|
566
561
|
ResolverArgs args) const {
|
|
567
562
|
Duration min_time_between_resolutions = std::max(
|
|
568
563
|
Duration::Zero(), args.args
|
|
569
564
|
.GetDurationFromIntMillis(
|
|
570
565
|
GRPC_ARG_DNS_MIN_TIME_BETWEEN_RESOLUTIONS_MS)
|
|
571
566
|
.value_or(Duration::Seconds(30)));
|
|
572
|
-
return MakeOrphanable<
|
|
573
|
-
|
|
567
|
+
return MakeOrphanable<ClientChannelDNSResolver>(std::move(args),
|
|
568
|
+
min_time_between_resolutions);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
void RegisterDnsResolver(CoreConfiguration::Builder* builder) {
|
|
572
|
+
VLOG(2) << "Using EventEngine dns resolver";
|
|
573
|
+
builder->resolver_registry()->RegisterResolverFactory(
|
|
574
|
+
std::make_unique<ClientChannelDNSResolverFactory>());
|
|
574
575
|
}
|
|
575
576
|
|
|
576
577
|
} // namespace grpc_core
|
data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h}
RENAMED
|
@@ -11,10 +11,11 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
#ifndef
|
|
15
|
-
#define
|
|
14
|
+
#ifndef GRPC_SRC_CORE_RESOLVER_DNS_DNS_RESOLVER_H
|
|
15
|
+
#define GRPC_SRC_CORE_RESOLVER_DNS_DNS_RESOLVER_H
|
|
16
16
|
#include <grpc/support/port_platform.h>
|
|
17
17
|
|
|
18
|
+
#include "src/core/config/core_configuration.h"
|
|
18
19
|
#include "src/core/resolver/resolver.h"
|
|
19
20
|
#include "src/core/resolver/resolver_factory.h"
|
|
20
21
|
#include "src/core/util/orphanable.h"
|
|
@@ -23,14 +24,16 @@
|
|
|
23
24
|
|
|
24
25
|
namespace grpc_core {
|
|
25
26
|
|
|
26
|
-
class
|
|
27
|
-
: public ResolverFactory {
|
|
27
|
+
class ClientChannelDNSResolverFactory final : public ResolverFactory {
|
|
28
28
|
public:
|
|
29
29
|
absl::string_view scheme() const override { return "dns"; }
|
|
30
30
|
bool IsValidUri(const URI& uri) const override;
|
|
31
31
|
OrphanablePtr<Resolver> CreateResolver(ResolverArgs args) const override;
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
+
// Centralized decision logic about which client channel DNS resolver to enable.
|
|
35
|
+
void RegisterDnsResolver(CoreConfiguration::Builder* builder);
|
|
36
|
+
|
|
34
37
|
} // namespace grpc_core
|
|
35
38
|
|
|
36
|
-
#endif //
|
|
39
|
+
#endif // GRPC_SRC_CORE_RESOLVER_DNS_DNS_RESOLVER_H
|
data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc}
RENAMED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
#include "src/core/resolver/dns/
|
|
14
|
+
#include "src/core/resolver/dns/service_config_helper.h"
|
|
15
15
|
|
|
16
16
|
#include <grpc/support/port_platform.h>
|
|
17
17
|
#include <stdlib.h>
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
-
#ifndef
|
|
16
|
-
#define
|
|
15
|
+
#ifndef GRPC_SRC_CORE_RESOLVER_DNS_SERVICE_CONFIG_HELPER_H
|
|
16
|
+
#define GRPC_SRC_CORE_RESOLVER_DNS_SERVICE_CONFIG_HELPER_H
|
|
17
17
|
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
|
19
19
|
|
|
@@ -29,4 +29,4 @@ absl::StatusOr<std::string> ChooseServiceConfig(
|
|
|
29
29
|
|
|
30
30
|
} // namespace grpc_core
|
|
31
31
|
|
|
32
|
-
#endif //
|
|
32
|
+
#endif // GRPC_SRC_CORE_RESOLVER_DNS_SERVICE_CONFIG_HELPER_H
|
|
@@ -45,6 +45,9 @@
|
|
|
45
45
|
// Backend service name associated with the addresses.
|
|
46
46
|
#define GRPC_ARG_BACKEND_SERVICE "grpc.internal.backend_service"
|
|
47
47
|
|
|
48
|
+
// Locality name associated with the addresses.
|
|
49
|
+
#define GRPC_ARG_LB_LOCALITY "grpc.internal.lb_locality"
|
|
50
|
+
|
|
48
51
|
namespace grpc_core {
|
|
49
52
|
|
|
50
53
|
// A list of addresses for a given endpoint with an associated set of channel
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
#include "src/core/util/time.h"
|
|
45
45
|
#include "src/core/util/uri.h"
|
|
46
46
|
#include "src/core/util/work_serializer.h"
|
|
47
|
+
#include "src/core/xds/grpc/xds_bootstrap_grpc_builder.h"
|
|
47
48
|
#include "src/core/xds/grpc/xds_client_grpc.h"
|
|
48
49
|
#include "src/core/xds/xds_client/xds_bootstrap.h"
|
|
49
50
|
#include "absl/log/log.h"
|
|
@@ -237,7 +238,7 @@ std::shared_ptr<GrpcXdsBootstrap> GoogleCloud2ProdResolver::ConstructBootstrap()
|
|
|
237
238
|
})},
|
|
238
239
|
{"node", Json::FromObject(std::move(node))},
|
|
239
240
|
});
|
|
240
|
-
return
|
|
241
|
+
return GrpcXdsBootstrapBuilder::Build(JsonDump(bootstrap)).value();
|
|
241
242
|
}
|
|
242
243
|
|
|
243
244
|
void GoogleCloud2ProdResolver::StartXdsResolver() {
|
|
@@ -79,6 +79,7 @@
|
|
|
79
79
|
#include "src/core/xds/grpc/xds_route_config.h"
|
|
80
80
|
#include "src/core/xds/grpc/xds_routing.h"
|
|
81
81
|
#include "src/core/xds/xds_client/xds_bootstrap.h"
|
|
82
|
+
#include "src/core/xds/xds_client/xds_transport.h"
|
|
82
83
|
#include "absl/log/log.h"
|
|
83
84
|
#include "absl/meta/type_traits.h"
|
|
84
85
|
#include "absl/random/random.h"
|
|
@@ -219,7 +220,9 @@ class XdsResolver final : public Resolver {
|
|
|
219
220
|
|
|
220
221
|
void BuildFilterChains(const XdsConfig& xds_config,
|
|
221
222
|
const XdsHttpFilterRegistry& http_filter_registry,
|
|
222
|
-
FilterChainBuilder& builder,
|
|
223
|
+
FilterChainBuilder& builder,
|
|
224
|
+
XdsTransportFactory& transport_factory,
|
|
225
|
+
Blackboard& blackboard);
|
|
223
226
|
|
|
224
227
|
private:
|
|
225
228
|
class RouteListIterator;
|
|
@@ -318,6 +321,29 @@ class XdsResolver final : public Resolver {
|
|
|
318
321
|
};
|
|
319
322
|
};
|
|
320
323
|
|
|
324
|
+
// Wraps a FilterChainBuilder in an XdsFilterChainBuilder.
|
|
325
|
+
// Also adds the ClusterSelectionFilter to the end of each filter chain.
|
|
326
|
+
class FilterChainBuilderWrapper final
|
|
327
|
+
: public XdsRouting::RouteConfigFilterChainBuilder::
|
|
328
|
+
XdsFilterChainBuilder {
|
|
329
|
+
public:
|
|
330
|
+
explicit FilterChainBuilderWrapper(FilterChainBuilder& builder)
|
|
331
|
+
: builder_(builder) {}
|
|
332
|
+
|
|
333
|
+
void AddFilter(const XdsHttpFilterFactory* factory,
|
|
334
|
+
RefCountedPtr<const FilterConfig> config) override {
|
|
335
|
+
factory->AddFilter(builder_, std::move(config));
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
absl::StatusOr<RefCountedPtr<FilterChain>> Build() override {
|
|
339
|
+
builder_.AddFilter<ClusterSelectionFilter>(nullptr);
|
|
340
|
+
return builder_.Build();
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
private:
|
|
344
|
+
FilterChainBuilder& builder_;
|
|
345
|
+
};
|
|
346
|
+
|
|
321
347
|
RefCountedPtr<ClusterRef> GetOrCreateClusterRef(
|
|
322
348
|
absl::string_view cluster_key, absl::string_view cluster_name) {
|
|
323
349
|
auto it = cluster_ref_map_.find(cluster_key);
|
|
@@ -420,15 +446,14 @@ XdsResolver::RouteConfigData::GetRouteForRequest(
|
|
|
420
446
|
void XdsResolver::RouteConfigData::BuildFilterChains(
|
|
421
447
|
const XdsConfig& xds_config,
|
|
422
448
|
const XdsHttpFilterRegistry& http_filter_registry,
|
|
423
|
-
FilterChainBuilder& builder,
|
|
449
|
+
FilterChainBuilder& builder, XdsTransportFactory& transport_factory,
|
|
450
|
+
Blackboard& blackboard) {
|
|
424
451
|
const auto& hcm = std::get<XdsListenerResource::HttpConnectionManager>(
|
|
425
452
|
xds_config.listener->listener);
|
|
453
|
+
FilterChainBuilderWrapper builder_wrapper(builder);
|
|
426
454
|
XdsRouting::RouteConfigFilterChainBuilder route_config_builder(
|
|
427
|
-
hcm.http_filters, http_filter_registry,
|
|
428
|
-
|
|
429
|
-
builder.AddFilter<ClusterSelectionFilter>(nullptr);
|
|
430
|
-
},
|
|
431
|
-
blackboard);
|
|
455
|
+
hcm.http_filters, http_filter_registry, builder_wrapper,
|
|
456
|
+
transport_factory, blackboard);
|
|
432
457
|
auto vhost_builder = route_config_builder.MakeVirtualHostFilterChainBuilder(
|
|
433
458
|
*xds_config.virtual_host);
|
|
434
459
|
// Set the filter chain for each route.
|
|
@@ -759,8 +784,9 @@ void XdsResolver::XdsConfigSelector::BuildFilterChains(
|
|
|
759
784
|
const auto& http_filter_registry =
|
|
760
785
|
DownCast<const GrpcXdsBootstrap&>(resolver_->xds_client_->bootstrap())
|
|
761
786
|
.http_filter_registry();
|
|
762
|
-
route_config_data_->BuildFilterChains(
|
|
763
|
-
|
|
787
|
+
route_config_data_->BuildFilterChains(
|
|
788
|
+
*xds_config_, http_filter_registry, builder,
|
|
789
|
+
*resolver_->xds_client_->transport_factory(), *resolver_->blackboard_);
|
|
764
790
|
}
|
|
765
791
|
|
|
766
792
|
//
|
data/src/core/server/server.cc
CHANGED
|
@@ -1323,9 +1323,7 @@ grpc_error_handle Server::SetupTransport(
|
|
|
1323
1323
|
args.SetObject(transport).SetObject<channelz::BaseNode>(
|
|
1324
1324
|
transport->GetSocketNode()),
|
|
1325
1325
|
channel_stack_type);
|
|
1326
|
-
if (!destination.ok())
|
|
1327
|
-
return absl_status_to_grpc_error(destination.status());
|
|
1328
|
-
}
|
|
1326
|
+
if (!destination.ok()) return destination.status();
|
|
1329
1327
|
t->SetCallDestination(std::move(*destination));
|
|
1330
1328
|
MutexLock lock(&mu_global_);
|
|
1331
1329
|
if (ShutdownCalled()) {
|
|
@@ -1347,9 +1345,7 @@ grpc_error_handle Server::SetupTransport(
|
|
|
1347
1345
|
args.SetObject(transport).SetObject<channelz::BaseNode>(
|
|
1348
1346
|
transport->GetSocketNode()),
|
|
1349
1347
|
channel_stack_type);
|
|
1350
|
-
if (!channel.ok())
|
|
1351
|
-
return absl_status_to_grpc_error(channel.status());
|
|
1352
|
-
}
|
|
1348
|
+
if (!channel.ok()) return channel.status();
|
|
1353
1349
|
GRPC_CHECK(*channel != nullptr);
|
|
1354
1350
|
auto* channel_stack = (*channel)->channel_stack();
|
|
1355
1351
|
GRPC_CHECK(channel_stack != nullptr);
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#include <memory>
|
|
23
23
|
|
|
24
24
|
#include "src/core/call/metadata_batch.h"
|
|
25
|
+
#include "src/core/filter/filter_chain.h"
|
|
25
26
|
#include "src/core/service_config/service_config.h"
|
|
26
27
|
#include "src/core/service_config/service_config_parser.h"
|
|
27
28
|
#include "src/core/util/dual_ref_counted.h"
|
|
@@ -37,17 +38,31 @@ namespace grpc_core {
|
|
|
37
38
|
// server-side call based on the received initial metadata.
|
|
38
39
|
class ServerConfigSelector : public RefCounted<ServerConfigSelector> {
|
|
39
40
|
public:
|
|
41
|
+
// A base class for connection state.
|
|
42
|
+
class ConnectionState {
|
|
43
|
+
public:
|
|
44
|
+
virtual ~ConnectionState() = default;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// The server will call this when the provider returns a new
|
|
48
|
+
// ServerConfigSelector to initialize the filter chains that the
|
|
49
|
+
// ServerConfigSelector may need.
|
|
50
|
+
virtual std::unique_ptr<ConnectionState> BuildFilterChains(
|
|
51
|
+
FilterChainBuilder& builder) = 0;
|
|
52
|
+
|
|
40
53
|
// Configuration to apply to an incoming call
|
|
54
|
+
// TODO(roth): When we remove the xds_server_filter_chain_per_route
|
|
55
|
+
// experiment, remove this struct and have GetCallConfig() return
|
|
56
|
+
// the filter chain directly.
|
|
41
57
|
struct CallConfig {
|
|
42
58
|
const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr;
|
|
43
59
|
RefCountedPtr<ServiceConfig> service_config;
|
|
60
|
+
absl::StatusOr<RefCountedPtr<const FilterChain>> filter_chain;
|
|
44
61
|
};
|
|
45
62
|
|
|
46
|
-
~ServerConfigSelector() override = default;
|
|
47
|
-
|
|
48
63
|
// Returns the CallConfig to apply to a call based on the incoming \a metadata
|
|
49
64
|
virtual absl::StatusOr<CallConfig> GetCallConfig(
|
|
50
|
-
grpc_metadata_batch* metadata) = 0;
|
|
65
|
+
const ConnectionState* state, grpc_metadata_batch* metadata) = 0;
|
|
51
66
|
};
|
|
52
67
|
|
|
53
68
|
// ServerConfigSelectorProvider allows for subscribers to watch for updates on
|