grpc 1.42.0 → 1.43.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +85 -34
- data/include/grpc/event_engine/event_engine.h +37 -13
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -11
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc_security.h +276 -145
- data/include/grpc/grpc_security_constants.h +1 -14
- data/include/grpc/impl/codegen/port_platform.h +7 -3
- data/src/core/ext/filters/client_channel/backend_metric.cc +6 -7
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +81 -40
- data/src/core/ext/filters/client_channel/client_channel.h +5 -4
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +4 -4
- data/src/core/ext/filters/client_channel/health/health_check_client.h +1 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +12 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +27 -80
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +82 -34
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +47 -91
- data/src/core/ext/filters/client_channel/lb_policy.h +75 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +8 -12
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +6 -12
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +222 -294
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -7
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +4 -4
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -30
- data/src/core/ext/filters/http/http_filters_plugin.cc +3 -5
- data/src/core/ext/filters/http/server/http_server_filter.cc +11 -28
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +265 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -20
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +8 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +54 -79
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +53 -62
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
- data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +83 -19
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +33 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +66 -92
- data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +16 -7
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +253 -218
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +162 -128
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +89 -71
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +117 -93
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +93 -75
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +503 -440
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
- data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +26 -13
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +2 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
- data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +54 -9
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +17 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +13 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +24 -12
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +19 -7
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +27 -15
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +28 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +16 -5
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +2 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +2 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +2 -53
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +2 -111
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +2 -7
- data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_api.cc +409 -304
- data/src/core/ext/xds/xds_api.h +3 -1
- data/src/core/ext/xds/xds_bootstrap.cc +6 -3
- data/src/core/ext/xds/xds_certificate_provider.h +1 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +3 -4
- data/src/core/ext/xds/xds_client.cc +395 -291
- data/src/core/ext/xds/xds_client.h +47 -38
- data/src/core/ext/xds/xds_routing.cc +247 -0
- data/src/core/ext/xds/xds_routing.h +98 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +975 -261
- data/src/core/lib/avl/avl.h +389 -88
- data/src/core/lib/backoff/backoff.cc +2 -2
- data/src/core/lib/channel/channel_args.cc +17 -17
- data/src/core/lib/channel/channel_args.h +11 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_stack_builder.cc +0 -2
- data/src/core/lib/channel/channel_trace.cc +6 -6
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/compression/compression_args.cc +7 -5
- data/src/core/lib/compression/compression_args.h +6 -4
- data/src/core/lib/config/core_configuration.cc +3 -1
- data/src/core/lib/config/core_configuration.h +11 -0
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/event_engine.cc +0 -13
- data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
- data/src/core/lib/event_engine/event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/memory_allocator.cc +70 -0
- data/src/core/lib/gpr/tls.h +6 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -3
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/status_helper.h +1 -1
- data/src/core/lib/gprpp/table.h +13 -1
- data/src/core/lib/http/httpcli.cc +30 -26
- data/src/core/lib/http/httpcli.h +14 -12
- data/src/core/lib/iomgr/buffer_list.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +13 -13
- data/src/core/lib/iomgr/call_combiner.cc +2 -3
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/event_engine/endpoint.cc +2 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +5 -25
- data/src/core/lib/iomgr/event_engine/resolver.cc +3 -2
- data/src/core/lib/iomgr/event_engine/tcp.cc +7 -5
- data/src/core/lib/iomgr/event_engine/timer.cc +4 -3
- data/src/core/lib/iomgr/exec_ctx.h +11 -11
- data/src/core/lib/iomgr/executor.cc +12 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +2 -4
- data/src/core/lib/iomgr/tcp_client.h +1 -3
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -9
- data/src/core/lib/iomgr/tcp_client_custom.cc +4 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -23
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +1 -10
- data/src/core/lib/iomgr/tcp_custom.cc +9 -36
- data/src/core/lib/iomgr/tcp_custom.h +0 -1
- data/src/core/lib/iomgr/tcp_posix.cc +28 -33
- data/src/core/lib/iomgr/tcp_posix.h +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +4 -6
- data/src/core/lib/iomgr/tcp_server.h +6 -8
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -15
- data/src/core/lib/iomgr/tcp_server_posix.cc +18 -22
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +5 -12
- data/src/core/lib/iomgr/tcp_windows.cc +2 -7
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +1 -1
- data/src/core/lib/iomgr/work_serializer.cc +115 -44
- data/src/core/lib/iomgr/work_serializer.h +16 -4
- data/src/core/lib/json/json_reader.cc +83 -35
- data/src/core/lib/json/json_util.cc +1 -1
- data/src/core/lib/promise/activity.cc +115 -0
- data/src/core/lib/promise/activity.h +499 -0
- data/src/core/lib/promise/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +407 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +44 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/loop.h +108 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +60 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +71 -0
- data/src/core/lib/resource_quota/api.cc +108 -0
- data/src/core/lib/resource_quota/api.h +41 -0
- data/src/core/lib/resource_quota/memory_quota.cc +454 -0
- data/src/core/lib/resource_quota/memory_quota.h +421 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +58 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +13 -19
- data/src/core/lib/security/authorization/evaluate_args.h +2 -1
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +3 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +11 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -10
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +3 -4
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +4 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -22
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +11 -90
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +19 -82
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -4
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +10 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +344 -195
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -41
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/slice/percent_encoding.cc +30 -86
- data/src/core/lib/slice/percent_encoding.h +5 -11
- data/src/core/lib/slice/slice.cc +7 -7
- data/src/core/lib/slice/slice.h +341 -0
- data/src/core/lib/slice/slice_buffer.cc +4 -0
- data/src/core/lib/slice/slice_intern.cc +1 -1
- data/src/core/lib/slice/slice_refcount.h +5 -1
- data/src/core/lib/slice/slice_refcount_base.h +19 -11
- data/src/core/lib/slice/static_slice.cc +331 -483
- data/src/core/lib/slice/static_slice.h +101 -132
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +85 -59
- data/src/core/lib/surface/channel.cc +4 -29
- data/src/core/lib/surface/channel.h +2 -12
- data/src/core/lib/surface/completion_queue.cc +2 -2
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +24 -17
- data/src/core/lib/surface/server.cc +22 -22
- data/src/core/lib/surface/server.h +8 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.cc +4 -0
- data/src/core/lib/transport/metadata.h +4 -4
- data/src/core/lib/transport/metadata_batch.cc +5 -0
- data/src/core/lib/transport/metadata_batch.h +174 -99
- data/src/core/lib/transport/parsed_metadata.cc +35 -0
- data/src/core/lib/transport/parsed_metadata.h +180 -61
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +529 -614
- data/src/core/lib/transport/static_metadata.h +0 -18
- data/src/core/lib/transport/transport.cc +4 -26
- data/src/core/lib/transport/transport.h +0 -1
- data/src/core/lib/transport/transport_op_string.cc +1 -1
- data/src/core/lib/uri/uri_parser.cc +19 -19
- data/src/core/lib/uri/uri_parser.h +2 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/local_transport_security.cc +15 -15
- data/src/core/tsi/ssl_transport_security.cc +30 -1
- data/src/core/tsi/ssl_transport_security.h +1 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -10
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +9 -15
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
- data/third_party/abseil-cpp/absl/status/status.cc +9 -17
- data/third_party/abseil-cpp/absl/status/status.h +19 -15
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
- data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +67 -36
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +17 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +3 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +6 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/upb/upb/decode.c +309 -178
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/decode_internal.h +1 -0
- data/third_party/upb/upb/def.c +330 -85
- data/third_party/upb/upb/def.h +45 -14
- data/third_party/upb/upb/def.hpp +17 -4
- data/third_party/upb/upb/encode.c +100 -40
- data/third_party/upb/upb/msg.c +22 -9
- data/third_party/upb/upb/msg_internal.h +90 -8
- data/third_party/upb/upb/reflection.c +98 -58
- data/third_party/upb/upb/reflection.h +6 -2
- data/third_party/upb/upb/text_encode.c +3 -3
- data/third_party/upb/upb/upb.c +8 -0
- metadata +116 -56
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/gprpp/match.h +0 -73
- data/src/core/lib/gprpp/overload.h +0 -59
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -18,41 +18,142 @@
|
|
18
18
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
|
+
#include "absl/strings/str_join.h"
|
21
22
|
#include "absl/strings/str_replace.h"
|
22
23
|
|
24
|
+
#include "src/core/ext/filters/server_config_selector/server_config_selector.h"
|
25
|
+
#include "src/core/ext/filters/server_config_selector/server_config_selector_filter.h"
|
23
26
|
#include "src/core/ext/xds/xds_certificate_provider.h"
|
27
|
+
#include "src/core/ext/xds/xds_channel_stack_modifier.h"
|
24
28
|
#include "src/core/ext/xds/xds_client.h"
|
29
|
+
#include "src/core/ext/xds/xds_routing.h"
|
25
30
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
26
31
|
#include "src/core/lib/channel/channel_args.h"
|
32
|
+
#include "src/core/lib/config/core_configuration.h"
|
27
33
|
#include "src/core/lib/gprpp/host_port.h"
|
28
34
|
#include "src/core/lib/iomgr/sockaddr.h"
|
29
35
|
#include "src/core/lib/iomgr/socket_utils.h"
|
30
36
|
#include "src/core/lib/security/credentials/xds/xds_credentials.h"
|
37
|
+
#include "src/core/lib/slice/slice_utils.h"
|
31
38
|
#include "src/core/lib/surface/api_trace.h"
|
32
39
|
#include "src/core/lib/surface/server.h"
|
40
|
+
#include "src/core/lib/transport/error_utils.h"
|
33
41
|
#include "src/core/lib/uri/uri_parser.h"
|
34
42
|
|
35
43
|
namespace grpc_core {
|
44
|
+
namespace {
|
36
45
|
|
37
46
|
TraceFlag grpc_xds_server_config_fetcher_trace(false,
|
38
47
|
"xds_server_config_fetcher");
|
39
48
|
|
40
|
-
|
49
|
+
// A server config fetcher that fetches the information for configuring server
|
50
|
+
// listeners from the xDS control plane.
|
51
|
+
class XdsServerConfigFetcher : public grpc_server_config_fetcher {
|
52
|
+
public:
|
53
|
+
XdsServerConfigFetcher(RefCountedPtr<XdsClient> xds_client,
|
54
|
+
grpc_server_xds_status_notifier notifier);
|
55
|
+
|
56
|
+
void StartWatch(std::string listening_address,
|
57
|
+
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
58
|
+
watcher) override;
|
59
|
+
|
60
|
+
void CancelWatch(
|
61
|
+
grpc_server_config_fetcher::WatcherInterface* watcher) override;
|
62
|
+
|
63
|
+
// Return the interested parties from the xds client so that it can be polled.
|
64
|
+
grpc_pollset_set* interested_parties() override {
|
65
|
+
return xds_client_->interested_parties();
|
66
|
+
}
|
67
|
+
|
68
|
+
private:
|
69
|
+
class ListenerWatcher;
|
70
|
+
|
71
|
+
RefCountedPtr<XdsClient> xds_client_;
|
72
|
+
grpc_server_xds_status_notifier serving_status_notifier_;
|
73
|
+
Mutex mu_;
|
74
|
+
std::map<grpc_server_config_fetcher::WatcherInterface*, ListenerWatcher*>
|
75
|
+
listener_watchers_ ABSL_GUARDED_BY(mu_);
|
76
|
+
};
|
77
|
+
|
78
|
+
// A watcher implementation for listening on LDS updates from the xDS control
|
79
|
+
// plane. When a good LDS update is received, it creates a
|
80
|
+
// FilterChainMatchManager object that would replace the existing (if any)
|
81
|
+
// FilterChainMatchManager object after all referenced RDS resources are
|
82
|
+
// fetched. Note that a good update also causes the server listener to start
|
83
|
+
// listening if it isn't already. If an error LDS update is received (NACKed
|
84
|
+
// resource, timeouts), the previous good FilterChainMatchManager, if any,
|
85
|
+
// continues to be used. If there isn't any previous good update or if the
|
86
|
+
// update received was a fatal error (resource does not exist), the server
|
87
|
+
// listener is made to stop listening.
|
88
|
+
class XdsServerConfigFetcher::ListenerWatcher
|
89
|
+
: public XdsClient::ListenerWatcherInterface {
|
90
|
+
public:
|
91
|
+
ListenerWatcher(RefCountedPtr<XdsClient> xds_client,
|
92
|
+
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
93
|
+
server_config_watcher,
|
94
|
+
grpc_server_xds_status_notifier serving_status_notifier,
|
95
|
+
std::string listening_address);
|
96
|
+
|
97
|
+
void OnListenerChanged(XdsApi::LdsUpdate listener) override;
|
98
|
+
|
99
|
+
void OnError(grpc_error_handle error) override;
|
100
|
+
|
101
|
+
void OnResourceDoesNotExist() override;
|
102
|
+
|
103
|
+
const std::string& listening_address() const { return listening_address_; }
|
41
104
|
|
42
|
-
|
105
|
+
private:
|
106
|
+
class FilterChainMatchManager;
|
107
|
+
|
108
|
+
void OnFatalError(absl::Status status) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
|
109
|
+
|
110
|
+
// Invoked by FilterChainMatchManager that is done fetching all referenced RDS
|
111
|
+
// resources. If the calling FilterChainMatchManager is the
|
112
|
+
// pending_filter_chain_match_manager_, it is promoted to be the
|
113
|
+
// filter_chain_match_manager_ in use.
|
114
|
+
void PendingFilterChainMatchManagerReady(
|
115
|
+
FilterChainMatchManager* filter_chain_match_manager) {
|
116
|
+
MutexLock lock(&mu_);
|
117
|
+
PendingFilterChainMatchManagerReadyLocked(filter_chain_match_manager);
|
118
|
+
}
|
119
|
+
void PendingFilterChainMatchManagerReadyLocked(
|
120
|
+
FilterChainMatchManager* filter_chain_match_manager)
|
121
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&mu_);
|
122
|
+
|
123
|
+
const RefCountedPtr<XdsClient> xds_client_;
|
124
|
+
const std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
125
|
+
server_config_watcher_;
|
126
|
+
const grpc_server_xds_status_notifier serving_status_notifier_;
|
127
|
+
const std::string listening_address_;
|
128
|
+
Mutex mu_;
|
129
|
+
RefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_
|
130
|
+
ABSL_GUARDED_BY(mu_);
|
131
|
+
RefCountedPtr<FilterChainMatchManager> pending_filter_chain_match_manager_
|
132
|
+
ABSL_GUARDED_BY(mu_);
|
133
|
+
};
|
134
|
+
|
135
|
+
// A connection manager used by the server listener code to inject channel args
|
136
|
+
// to be used for each incoming connection. This implementation chooses the
|
137
|
+
// appropriate filter chain from the xDS Listener resource and injects channel
|
138
|
+
// args that configure the right mTLS certs and cause the right set of HTTP
|
139
|
+
// filters to be injected.
|
140
|
+
class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
|
43
141
|
: public grpc_server_config_fetcher::ConnectionManager {
|
44
142
|
public:
|
45
143
|
FilterChainMatchManager(
|
46
144
|
RefCountedPtr<XdsClient> xds_client,
|
47
145
|
XdsApi::LdsUpdate::FilterChainMap filter_chain_map,
|
48
|
-
absl::optional<XdsApi::LdsUpdate::FilterChainData> default_filter_chain)
|
49
|
-
: xds_client_(xds_client),
|
50
|
-
filter_chain_map_(std::move(filter_chain_map)),
|
51
|
-
default_filter_chain_(std::move(default_filter_chain)) {}
|
146
|
+
absl::optional<XdsApi::LdsUpdate::FilterChainData> default_filter_chain);
|
52
147
|
|
53
148
|
absl::StatusOr<grpc_channel_args*> UpdateChannelArgsForConnection(
|
54
149
|
grpc_channel_args* args, grpc_endpoint* tcp) override;
|
55
150
|
|
151
|
+
void Orphan() override;
|
152
|
+
|
153
|
+
// Invoked by ListenerWatcher to start fetching referenced RDS resources.
|
154
|
+
void StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher)
|
155
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ListenerWatcher::mu_);
|
156
|
+
|
56
157
|
const XdsApi::LdsUpdate::FilterChainMap& filter_chain_map() const {
|
57
158
|
return filter_chain_map_;
|
58
159
|
}
|
@@ -72,37 +173,608 @@ class FilterChainMatchManager
|
|
72
173
|
RefCountedPtr<XdsCertificateProvider> xds;
|
73
174
|
};
|
74
175
|
|
176
|
+
class RouteConfigWatcher;
|
177
|
+
struct RdsUpdateState {
|
178
|
+
RouteConfigWatcher* watcher;
|
179
|
+
absl::optional<absl::StatusOr<XdsApi::RdsUpdate>> rds_update;
|
180
|
+
};
|
181
|
+
|
182
|
+
class XdsServerConfigSelector;
|
183
|
+
class StaticXdsServerConfigSelectorProvider;
|
184
|
+
class DynamicXdsServerConfigSelectorProvider;
|
185
|
+
|
75
186
|
absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
|
76
187
|
CreateOrGetXdsCertificateProviderFromFilterChainData(
|
77
188
|
const XdsApi::LdsUpdate::FilterChainData* filter_chain);
|
78
189
|
|
79
|
-
|
190
|
+
// Helper functions invoked by RouteConfigWatcher when there are updates to
|
191
|
+
// RDS resources.
|
192
|
+
void OnRouteConfigChanged(const std::string& resource_name,
|
193
|
+
XdsApi::RdsUpdate route_config);
|
194
|
+
void OnError(const std::string& resource_name, grpc_error_handle error);
|
195
|
+
void OnResourceDoesNotExist(const std::string& resource_name);
|
196
|
+
|
197
|
+
RefCountedPtr<XdsClient> xds_client_;
|
198
|
+
// This ref is only kept around till the FilterChainMatchManager becomes
|
199
|
+
// ready.
|
200
|
+
RefCountedPtr<ListenerWatcher> listener_watcher_;
|
80
201
|
const XdsApi::LdsUpdate::FilterChainMap filter_chain_map_;
|
81
202
|
const absl::optional<XdsApi::LdsUpdate::FilterChainData>
|
82
203
|
default_filter_chain_;
|
83
204
|
Mutex mu_;
|
205
|
+
size_t rds_resources_yet_to_fetch_ ABSL_GUARDED_BY(mu_) = 0;
|
206
|
+
std::map<std::string /* resource_name */, RdsUpdateState> rds_map_
|
207
|
+
ABSL_GUARDED_BY(mu_);
|
84
208
|
std::map<const XdsApi::LdsUpdate::FilterChainData*, CertificateProviders>
|
85
209
|
certificate_providers_map_ ABSL_GUARDED_BY(mu_);
|
86
210
|
};
|
87
211
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
212
|
+
// A watcher implementation for listening on RDS updates referenced to by a
|
213
|
+
// FilterChainMatchManager object. After all referenced RDS resources are
|
214
|
+
// fetched (errors are allowed), the FilterChainMatchManager tries to replace
|
215
|
+
// the current object. The watcher continues to update the referenced RDS
|
216
|
+
// resources so that new XdsServerConfigSelectorProvider objects are created
|
217
|
+
// with the latest updates and new connections do not need to wait for the RDS
|
218
|
+
// resources to be fetched.
|
219
|
+
class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
220
|
+
RouteConfigWatcher : public XdsClient::RouteConfigWatcherInterface {
|
221
|
+
public:
|
222
|
+
RouteConfigWatcher(
|
223
|
+
std::string resource_name,
|
224
|
+
WeakRefCountedPtr<FilterChainMatchManager> filter_chain_match_manager)
|
225
|
+
: resource_name_(std::move(resource_name)),
|
226
|
+
filter_chain_match_manager_(std::move(filter_chain_match_manager)) {}
|
227
|
+
|
228
|
+
void OnRouteConfigChanged(XdsApi::RdsUpdate route_config) override {
|
229
|
+
filter_chain_match_manager_->OnRouteConfigChanged(resource_name_,
|
230
|
+
std::move(route_config));
|
231
|
+
}
|
232
|
+
|
233
|
+
void OnError(grpc_error_handle error) override {
|
234
|
+
filter_chain_match_manager_->OnError(resource_name_, error);
|
235
|
+
}
|
236
|
+
|
237
|
+
void OnResourceDoesNotExist() override {
|
238
|
+
filter_chain_match_manager_->OnResourceDoesNotExist(resource_name_);
|
239
|
+
}
|
240
|
+
|
241
|
+
private:
|
242
|
+
std::string resource_name_;
|
243
|
+
WeakRefCountedPtr<FilterChainMatchManager> filter_chain_match_manager_;
|
244
|
+
};
|
245
|
+
|
246
|
+
// An implementation of ServerConfigSelector used by
|
247
|
+
// StaticXdsServerConfigSelectorProvider and
|
248
|
+
// DynamicXdsServerConfigSelectorProvider to parse the RDS update and get
|
249
|
+
// per-call configuration based on incoming metadata.
|
250
|
+
class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
251
|
+
XdsServerConfigSelector : public ServerConfigSelector {
|
252
|
+
public:
|
253
|
+
static absl::StatusOr<RefCountedPtr<XdsServerConfigSelector>> Create(
|
254
|
+
XdsApi::RdsUpdate rds_update,
|
255
|
+
const std::vector<XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter>&
|
256
|
+
http_filters);
|
257
|
+
~XdsServerConfigSelector() override = default;
|
258
|
+
|
259
|
+
CallConfig GetCallConfig(grpc_metadata_batch* metadata) override;
|
260
|
+
|
261
|
+
private:
|
262
|
+
struct VirtualHost {
|
263
|
+
struct Route {
|
264
|
+
// true if an action other than kNonForwardingAction is configured.
|
265
|
+
bool unsupported_action;
|
266
|
+
XdsApi::Route::Matchers matchers;
|
267
|
+
RefCountedPtr<ServiceConfig> method_config;
|
268
|
+
};
|
269
|
+
|
270
|
+
class RouteListIterator : public XdsRouting::RouteListIterator {
|
271
|
+
public:
|
272
|
+
explicit RouteListIterator(const std::vector<Route>* routes)
|
273
|
+
: routes_(routes) {}
|
274
|
+
|
275
|
+
size_t Size() const override { return routes_->size(); }
|
276
|
+
|
277
|
+
const XdsApi::Route::Matchers& GetMatchersForRoute(
|
278
|
+
size_t index) const override {
|
279
|
+
return (*routes_)[index].matchers;
|
280
|
+
}
|
281
|
+
|
282
|
+
private:
|
283
|
+
const std::vector<Route>* routes_;
|
284
|
+
};
|
285
|
+
|
286
|
+
std::vector<std::string> domains;
|
287
|
+
std::vector<Route> routes;
|
288
|
+
};
|
289
|
+
|
290
|
+
class VirtualHostListIterator : public XdsRouting::VirtualHostListIterator {
|
291
|
+
public:
|
292
|
+
explicit VirtualHostListIterator(
|
293
|
+
const std::vector<VirtualHost>* virtual_hosts)
|
294
|
+
: virtual_hosts_(virtual_hosts) {}
|
295
|
+
|
296
|
+
size_t Size() const override { return virtual_hosts_->size(); }
|
297
|
+
|
298
|
+
const std::vector<std::string>& GetDomainsForVirtualHost(
|
299
|
+
size_t index) const override {
|
300
|
+
return (*virtual_hosts_)[index].domains;
|
96
301
|
}
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
302
|
+
|
303
|
+
private:
|
304
|
+
const std::vector<VirtualHost>* virtual_hosts_;
|
305
|
+
};
|
306
|
+
|
307
|
+
std::vector<VirtualHost> virtual_hosts_;
|
308
|
+
};
|
309
|
+
|
310
|
+
// An XdsServerConfigSelectorProvider implementation for when the
|
311
|
+
// RouteConfiguration is available inline.
|
312
|
+
class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
313
|
+
StaticXdsServerConfigSelectorProvider
|
314
|
+
: public ServerConfigSelectorProvider {
|
315
|
+
public:
|
316
|
+
StaticXdsServerConfigSelectorProvider(
|
317
|
+
absl::StatusOr<XdsApi::RdsUpdate> static_resource,
|
318
|
+
std::vector<XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter>
|
319
|
+
http_filters)
|
320
|
+
: static_resource_(std::move(static_resource)),
|
321
|
+
http_filters_(std::move(http_filters)) {}
|
322
|
+
|
323
|
+
absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
|
324
|
+
std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
|
325
|
+
watcher) override {
|
326
|
+
GPR_ASSERT(watcher_ == nullptr);
|
327
|
+
watcher_ = std::move(watcher);
|
328
|
+
if (!static_resource_.ok()) {
|
329
|
+
return static_resource_.status();
|
103
330
|
}
|
331
|
+
return XdsServerConfigSelector::Create(static_resource_.value(),
|
332
|
+
http_filters_);
|
333
|
+
}
|
334
|
+
|
335
|
+
void CancelWatch() override { watcher_.reset(); }
|
336
|
+
|
337
|
+
private:
|
338
|
+
absl::StatusOr<XdsApi::RdsUpdate> static_resource_;
|
339
|
+
std::vector<XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter>
|
340
|
+
http_filters_;
|
341
|
+
std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
|
342
|
+
watcher_;
|
343
|
+
};
|
344
|
+
|
345
|
+
// An XdsServerConfigSelectorProvider implementation for when the
|
346
|
+
// RouteConfiguration is to be fetched separately via RDS.
|
347
|
+
class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
348
|
+
DynamicXdsServerConfigSelectorProvider
|
349
|
+
: public ServerConfigSelectorProvider {
|
350
|
+
public:
|
351
|
+
DynamicXdsServerConfigSelectorProvider(
|
352
|
+
RefCountedPtr<XdsClient> xds_client, std::string resource_name,
|
353
|
+
absl::StatusOr<XdsApi::RdsUpdate> initial_resource,
|
354
|
+
std::vector<XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter>
|
355
|
+
http_filters);
|
356
|
+
|
357
|
+
absl::StatusOr<RefCountedPtr<ServerConfigSelector>> Watch(
|
358
|
+
std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
|
359
|
+
watcher) override;
|
360
|
+
void CancelWatch() override;
|
361
|
+
|
362
|
+
private:
|
363
|
+
class RouteConfigWatcher;
|
364
|
+
|
365
|
+
void OnRouteConfigChanged(XdsApi::RdsUpdate rds_update);
|
366
|
+
void OnError(grpc_error_handle error);
|
367
|
+
void OnResourceDoesNotExist();
|
368
|
+
|
369
|
+
RefCountedPtr<XdsClient> xds_client_;
|
370
|
+
std::string resource_name_;
|
371
|
+
std::vector<XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter>
|
372
|
+
http_filters_;
|
373
|
+
RouteConfigWatcher* route_config_watcher_ = nullptr;
|
374
|
+
Mutex mu_;
|
375
|
+
std::unique_ptr<ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
|
376
|
+
watcher_ ABSL_GUARDED_BY(mu_);
|
377
|
+
absl::StatusOr<XdsApi::RdsUpdate> resource_ ABSL_GUARDED_BY(mu_);
|
378
|
+
};
|
379
|
+
|
380
|
+
// A watcher implementation for updating the RDS resource used by
|
381
|
+
// DynamicXdsServerConfigSelectorProvider
|
382
|
+
class XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
383
|
+
DynamicXdsServerConfigSelectorProvider::RouteConfigWatcher
|
384
|
+
: public XdsClient::RouteConfigWatcherInterface {
|
385
|
+
public:
|
386
|
+
explicit RouteConfigWatcher(
|
387
|
+
RefCountedPtr<DynamicXdsServerConfigSelectorProvider> parent)
|
388
|
+
: parent_(std::move(parent)) {}
|
389
|
+
|
390
|
+
void OnRouteConfigChanged(XdsApi::RdsUpdate route_config) override {
|
391
|
+
parent_->OnRouteConfigChanged(std::move(route_config));
|
392
|
+
}
|
393
|
+
|
394
|
+
void OnError(grpc_error_handle error) override { parent_->OnError(error); }
|
395
|
+
|
396
|
+
void OnResourceDoesNotExist() override { parent_->OnResourceDoesNotExist(); }
|
397
|
+
|
398
|
+
private:
|
399
|
+
RefCountedPtr<DynamicXdsServerConfigSelectorProvider> parent_;
|
400
|
+
};
|
401
|
+
|
402
|
+
//
|
403
|
+
// XdsServerConfigFetcher
|
404
|
+
//
|
405
|
+
|
406
|
+
XdsServerConfigFetcher::XdsServerConfigFetcher(
|
407
|
+
RefCountedPtr<XdsClient> xds_client,
|
408
|
+
grpc_server_xds_status_notifier notifier)
|
409
|
+
: xds_client_(std::move(xds_client)), serving_status_notifier_(notifier) {
|
410
|
+
GPR_ASSERT(xds_client_ != nullptr);
|
411
|
+
}
|
412
|
+
|
413
|
+
void XdsServerConfigFetcher::StartWatch(
|
414
|
+
std::string listening_address,
|
415
|
+
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface> watcher) {
|
416
|
+
grpc_server_config_fetcher::WatcherInterface* watcher_ptr = watcher.get();
|
417
|
+
auto listener_watcher = MakeRefCounted<ListenerWatcher>(
|
418
|
+
xds_client_, std::move(watcher), serving_status_notifier_,
|
419
|
+
listening_address);
|
420
|
+
auto* listener_watcher_ptr = listener_watcher.get();
|
421
|
+
xds_client_->WatchListenerData(
|
422
|
+
absl::StrReplaceAll(
|
423
|
+
xds_client_->bootstrap().server_listener_resource_name_template(),
|
424
|
+
{{"%s", listening_address}}),
|
425
|
+
std::move(listener_watcher));
|
426
|
+
MutexLock lock(&mu_);
|
427
|
+
listener_watchers_.emplace(watcher_ptr, listener_watcher_ptr);
|
428
|
+
}
|
429
|
+
|
430
|
+
void XdsServerConfigFetcher::CancelWatch(
|
431
|
+
grpc_server_config_fetcher::WatcherInterface* watcher) {
|
432
|
+
MutexLock lock(&mu_);
|
433
|
+
auto it = listener_watchers_.find(watcher);
|
434
|
+
if (it != listener_watchers_.end()) {
|
435
|
+
// Cancel the watch on the listener before erasing
|
436
|
+
xds_client_->CancelListenerDataWatch(
|
437
|
+
absl::StrReplaceAll(
|
438
|
+
xds_client_->bootstrap().server_listener_resource_name_template(),
|
439
|
+
{{"%s", it->second->listening_address()}}),
|
440
|
+
it->second, false /* delay_unsubscription */);
|
441
|
+
listener_watchers_.erase(it);
|
442
|
+
}
|
443
|
+
}
|
444
|
+
|
445
|
+
//
|
446
|
+
// XdsServerConfigFetcher::ListenerWatcher
|
447
|
+
//
|
448
|
+
|
449
|
+
XdsServerConfigFetcher::ListenerWatcher::ListenerWatcher(
|
450
|
+
RefCountedPtr<XdsClient> xds_client,
|
451
|
+
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
452
|
+
server_config_watcher,
|
453
|
+
grpc_server_xds_status_notifier serving_status_notifier,
|
454
|
+
std::string listening_address)
|
455
|
+
: xds_client_(std::move(xds_client)),
|
456
|
+
server_config_watcher_(std::move(server_config_watcher)),
|
457
|
+
serving_status_notifier_(serving_status_notifier),
|
458
|
+
listening_address_(std::move(listening_address)) {}
|
459
|
+
|
460
|
+
void XdsServerConfigFetcher::ListenerWatcher::OnListenerChanged(
|
461
|
+
XdsApi::LdsUpdate listener) {
|
462
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_server_config_fetcher_trace)) {
|
463
|
+
gpr_log(GPR_INFO,
|
464
|
+
"[ListenerWatcher %p] Received LDS update from xds client %p: %s",
|
465
|
+
this, xds_client_.get(), listener.ToString().c_str());
|
466
|
+
}
|
467
|
+
if (listener.address != listening_address_) {
|
468
|
+
MutexLock lock(&mu_);
|
469
|
+
OnFatalError(absl::FailedPreconditionError(
|
470
|
+
"Address in LDS update does not match listening address"));
|
471
|
+
return;
|
472
|
+
}
|
473
|
+
auto new_filter_chain_match_manager = MakeRefCounted<FilterChainMatchManager>(
|
474
|
+
xds_client_, std::move(listener.filter_chain_map),
|
475
|
+
std::move(listener.default_filter_chain));
|
476
|
+
MutexLock lock(&mu_);
|
477
|
+
if (filter_chain_match_manager_ == nullptr ||
|
478
|
+
!(new_filter_chain_match_manager->filter_chain_map() ==
|
479
|
+
filter_chain_match_manager_->filter_chain_map() &&
|
480
|
+
new_filter_chain_match_manager->default_filter_chain() ==
|
481
|
+
filter_chain_match_manager_->default_filter_chain())) {
|
482
|
+
pending_filter_chain_match_manager_ =
|
483
|
+
std::move(new_filter_chain_match_manager);
|
484
|
+
if (XdsRbacEnabled()) {
|
485
|
+
pending_filter_chain_match_manager_->StartRdsWatch(Ref());
|
486
|
+
} else {
|
487
|
+
PendingFilterChainMatchManagerReadyLocked(
|
488
|
+
pending_filter_chain_match_manager_.get());
|
489
|
+
}
|
490
|
+
}
|
491
|
+
}
|
492
|
+
|
493
|
+
void XdsServerConfigFetcher::ListenerWatcher::OnError(grpc_error_handle error) {
|
494
|
+
MutexLock lock(&mu_);
|
495
|
+
if (filter_chain_match_manager_ != nullptr ||
|
496
|
+
pending_filter_chain_match_manager_ != nullptr) {
|
497
|
+
gpr_log(GPR_ERROR,
|
498
|
+
"ListenerWatcher:%p XdsClient reports error: %s for %s; "
|
499
|
+
"ignoring in favor of existing resource",
|
500
|
+
this, grpc_error_std_string(error).c_str(),
|
501
|
+
listening_address_.c_str());
|
502
|
+
} else {
|
503
|
+
if (serving_status_notifier_.on_serving_status_update != nullptr) {
|
504
|
+
serving_status_notifier_.on_serving_status_update(
|
505
|
+
serving_status_notifier_.user_data, listening_address_.c_str(),
|
506
|
+
{GRPC_STATUS_UNAVAILABLE, grpc_error_std_string(error).c_str()});
|
507
|
+
} else {
|
508
|
+
gpr_log(GPR_ERROR,
|
509
|
+
"ListenerWatcher:%p error obtaining xDS Listener resource: %s; "
|
510
|
+
"not serving on %s",
|
511
|
+
this, grpc_error_std_string(error).c_str(),
|
512
|
+
listening_address_.c_str());
|
513
|
+
}
|
514
|
+
}
|
515
|
+
GRPC_ERROR_UNREF(error);
|
516
|
+
}
|
517
|
+
|
518
|
+
void XdsServerConfigFetcher::ListenerWatcher::OnFatalError(
|
519
|
+
absl::Status status) {
|
520
|
+
pending_filter_chain_match_manager_.reset();
|
521
|
+
if (filter_chain_match_manager_ != nullptr) {
|
522
|
+
// The server has started listening already, so we need to gracefully
|
523
|
+
// stop serving.
|
524
|
+
server_config_watcher_->StopServing();
|
525
|
+
filter_chain_match_manager_.reset();
|
526
|
+
}
|
527
|
+
if (serving_status_notifier_.on_serving_status_update != nullptr) {
|
528
|
+
serving_status_notifier_.on_serving_status_update(
|
529
|
+
serving_status_notifier_.user_data, listening_address_.c_str(),
|
530
|
+
{static_cast<grpc_status_code>(status.raw_code()),
|
531
|
+
std::string(status.message()).c_str()});
|
532
|
+
} else {
|
533
|
+
gpr_log(GPR_ERROR,
|
534
|
+
"ListenerWatcher:%p Encountered fatal error %s; not serving on %s",
|
535
|
+
this, status.ToString().c_str(), listening_address_.c_str());
|
536
|
+
}
|
537
|
+
}
|
538
|
+
|
539
|
+
void XdsServerConfigFetcher::ListenerWatcher::OnResourceDoesNotExist() {
|
540
|
+
MutexLock lock(&mu_);
|
541
|
+
OnFatalError(absl::NotFoundError("Requested listener does not exist"));
|
542
|
+
}
|
543
|
+
|
544
|
+
void XdsServerConfigFetcher::ListenerWatcher::
|
545
|
+
PendingFilterChainMatchManagerReadyLocked(
|
546
|
+
XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager*
|
547
|
+
filter_chain_match_manager) {
|
548
|
+
if (pending_filter_chain_match_manager_ != filter_chain_match_manager) {
|
549
|
+
// This FilterChainMatchManager is no longer the current pending resource.
|
550
|
+
// It should get cleaned up eventually. Ignore this update.
|
551
|
+
return;
|
552
|
+
}
|
553
|
+
// Let the logger know about the update if there was no previous good update.
|
554
|
+
if (filter_chain_match_manager_ == nullptr) {
|
555
|
+
if (serving_status_notifier_.on_serving_status_update != nullptr) {
|
556
|
+
serving_status_notifier_.on_serving_status_update(
|
557
|
+
serving_status_notifier_.user_data, listening_address_.c_str(),
|
558
|
+
{GRPC_STATUS_OK, ""});
|
559
|
+
} else {
|
560
|
+
gpr_log(GPR_INFO,
|
561
|
+
"xDS Listener resource obtained; will start serving on %s",
|
562
|
+
listening_address_.c_str());
|
563
|
+
}
|
564
|
+
}
|
565
|
+
// Promote the pending FilterChainMatchManager
|
566
|
+
filter_chain_match_manager_ = std::move(pending_filter_chain_match_manager_);
|
567
|
+
// TODO(yashykt): Right now, the server_config_watcher_ does not invoke
|
568
|
+
// XdsServerConfigFetcher while holding a lock, but that might change in the
|
569
|
+
// future in which case we would want to execute this update outside the
|
570
|
+
// critical region through a WorkSerializer similar to XdsClient.
|
571
|
+
server_config_watcher_->UpdateConnectionManager(filter_chain_match_manager_);
|
572
|
+
}
|
573
|
+
|
574
|
+
//
|
575
|
+
// XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager
|
576
|
+
//
|
577
|
+
|
578
|
+
XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
579
|
+
FilterChainMatchManager(
|
580
|
+
RefCountedPtr<XdsClient> xds_client,
|
581
|
+
XdsApi::LdsUpdate::FilterChainMap filter_chain_map,
|
582
|
+
absl::optional<XdsApi::LdsUpdate::FilterChainData> default_filter_chain)
|
583
|
+
: xds_client_(std::move(xds_client)),
|
584
|
+
filter_chain_map_(std::move(filter_chain_map)),
|
585
|
+
default_filter_chain_(std::move(default_filter_chain)) {}
|
586
|
+
|
587
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
588
|
+
StartRdsWatch(RefCountedPtr<ListenerWatcher> listener_watcher) {
|
589
|
+
// Get the set of RDS resources to watch on
|
590
|
+
std::set<std::string> resource_names;
|
591
|
+
for (const auto& destination_ip : filter_chain_map_.destination_ip_vector) {
|
592
|
+
for (const auto& source_type : destination_ip.source_types_array) {
|
593
|
+
for (const auto& source_ip : source_type) {
|
594
|
+
for (const auto& source_port_pair : source_ip.ports_map) {
|
595
|
+
if (!source_port_pair.second.data->http_connection_manager
|
596
|
+
.route_config_name.empty()) {
|
597
|
+
resource_names.insert(
|
598
|
+
source_port_pair.second.data->http_connection_manager
|
599
|
+
.route_config_name);
|
600
|
+
}
|
601
|
+
}
|
602
|
+
}
|
603
|
+
}
|
604
|
+
}
|
605
|
+
if (default_filter_chain_.has_value() &&
|
606
|
+
!default_filter_chain_->http_connection_manager.route_config_name
|
607
|
+
.empty()) {
|
608
|
+
resource_names.insert(
|
609
|
+
default_filter_chain_->http_connection_manager.route_config_name);
|
610
|
+
}
|
611
|
+
// Start watching on referenced RDS resources
|
612
|
+
{
|
613
|
+
MutexLock lock(&mu_);
|
614
|
+
for (const auto& resource_name : resource_names) {
|
615
|
+
++rds_resources_yet_to_fetch_;
|
616
|
+
auto route_config_watcher =
|
617
|
+
MakeRefCounted<RouteConfigWatcher>(resource_name, WeakRef());
|
618
|
+
rds_map_.emplace(resource_name, RdsUpdateState{route_config_watcher.get(),
|
619
|
+
absl::nullopt});
|
620
|
+
xds_client_->WatchRouteConfigData(resource_name,
|
621
|
+
std::move(route_config_watcher));
|
622
|
+
}
|
623
|
+
if (rds_resources_yet_to_fetch_ != 0) {
|
624
|
+
listener_watcher_ = std::move(listener_watcher);
|
625
|
+
listener_watcher = nullptr;
|
626
|
+
}
|
627
|
+
}
|
628
|
+
// Promote this filter chain match manager if all referenced resources are
|
629
|
+
// fetched.
|
630
|
+
if (listener_watcher != nullptr) {
|
631
|
+
listener_watcher->PendingFilterChainMatchManagerReadyLocked(this);
|
632
|
+
}
|
633
|
+
}
|
634
|
+
|
635
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
636
|
+
Orphan() {
|
637
|
+
MutexLock lock(&mu_);
|
638
|
+
// Cancel the RDS watches to clear up the weak refs
|
639
|
+
for (const auto& entry : rds_map_) {
|
640
|
+
xds_client_->CancelRouteConfigDataWatch(entry.first, entry.second.watcher,
|
641
|
+
false /* delay_unsubscription */);
|
642
|
+
}
|
643
|
+
// Also give up the ref on ListenerWatcher since it won't be needed anymore
|
644
|
+
listener_watcher_.reset();
|
645
|
+
}
|
646
|
+
|
647
|
+
absl::StatusOr<RefCountedPtr<XdsCertificateProvider>>
|
648
|
+
XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
649
|
+
CreateOrGetXdsCertificateProviderFromFilterChainData(
|
650
|
+
const XdsApi::LdsUpdate::FilterChainData* filter_chain) {
|
651
|
+
MutexLock lock(&mu_);
|
652
|
+
auto it = certificate_providers_map_.find(filter_chain);
|
653
|
+
if (it != certificate_providers_map_.end()) {
|
654
|
+
return it->second.xds;
|
655
|
+
}
|
656
|
+
CertificateProviders certificate_providers;
|
657
|
+
// Configure root cert.
|
658
|
+
absl::string_view root_provider_instance_name =
|
659
|
+
filter_chain->downstream_tls_context.common_tls_context
|
660
|
+
.certificate_validation_context.ca_certificate_provider_instance
|
661
|
+
.instance_name;
|
662
|
+
absl::string_view root_provider_cert_name =
|
663
|
+
filter_chain->downstream_tls_context.common_tls_context
|
664
|
+
.certificate_validation_context.ca_certificate_provider_instance
|
665
|
+
.certificate_name;
|
666
|
+
if (!root_provider_instance_name.empty()) {
|
667
|
+
certificate_providers.root =
|
668
|
+
xds_client_->certificate_provider_store()
|
669
|
+
.CreateOrGetCertificateProvider(root_provider_instance_name);
|
670
|
+
if (certificate_providers.root == nullptr) {
|
671
|
+
return absl::NotFoundError(
|
672
|
+
absl::StrCat("Certificate provider instance name: \"",
|
673
|
+
root_provider_instance_name, "\" not recognized."));
|
674
|
+
}
|
675
|
+
}
|
676
|
+
// Configure identity cert.
|
677
|
+
absl::string_view identity_provider_instance_name =
|
678
|
+
filter_chain->downstream_tls_context.common_tls_context
|
679
|
+
.tls_certificate_provider_instance.instance_name;
|
680
|
+
absl::string_view identity_provider_cert_name =
|
681
|
+
filter_chain->downstream_tls_context.common_tls_context
|
682
|
+
.tls_certificate_provider_instance.certificate_name;
|
683
|
+
if (!identity_provider_instance_name.empty()) {
|
684
|
+
certificate_providers.instance =
|
685
|
+
xds_client_->certificate_provider_store()
|
686
|
+
.CreateOrGetCertificateProvider(identity_provider_instance_name);
|
687
|
+
if (certificate_providers.instance == nullptr) {
|
688
|
+
return absl::NotFoundError(
|
689
|
+
absl::StrCat("Certificate provider instance name: \"",
|
690
|
+
identity_provider_instance_name, "\" not recognized."));
|
691
|
+
}
|
692
|
+
}
|
693
|
+
certificate_providers.xds = MakeRefCounted<XdsCertificateProvider>();
|
694
|
+
certificate_providers.xds->UpdateRootCertNameAndDistributor(
|
695
|
+
"", root_provider_cert_name,
|
696
|
+
certificate_providers.root == nullptr
|
697
|
+
? nullptr
|
698
|
+
: certificate_providers.root->distributor());
|
699
|
+
certificate_providers.xds->UpdateIdentityCertNameAndDistributor(
|
700
|
+
"", identity_provider_cert_name,
|
701
|
+
certificate_providers.instance == nullptr
|
702
|
+
? nullptr
|
703
|
+
: certificate_providers.instance->distributor());
|
704
|
+
certificate_providers.xds->UpdateRequireClientCertificate(
|
705
|
+
"", filter_chain->downstream_tls_context.require_client_certificate);
|
706
|
+
auto xds_certificate_provider = certificate_providers.xds;
|
707
|
+
certificate_providers_map_.emplace(filter_chain,
|
708
|
+
std::move(certificate_providers));
|
709
|
+
return xds_certificate_provider;
|
710
|
+
}
|
711
|
+
|
712
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
713
|
+
OnRouteConfigChanged(const std::string& resource_name,
|
714
|
+
XdsApi::RdsUpdate route_config) {
|
715
|
+
RefCountedPtr<ListenerWatcher> listener_watcher;
|
716
|
+
{
|
717
|
+
MutexLock lock(&mu_);
|
718
|
+
auto& state = rds_map_[resource_name];
|
719
|
+
if (!state.rds_update.has_value()) {
|
720
|
+
if (--rds_resources_yet_to_fetch_ == 0) {
|
721
|
+
listener_watcher = std::move(listener_watcher_);
|
722
|
+
}
|
723
|
+
}
|
724
|
+
state.rds_update = std::move(route_config);
|
725
|
+
}
|
726
|
+
// Promote the filter chain match manager object if all the referenced
|
727
|
+
// resources are fetched.
|
728
|
+
if (listener_watcher != nullptr) {
|
729
|
+
listener_watcher->PendingFilterChainMatchManagerReady(this);
|
730
|
+
}
|
731
|
+
}
|
732
|
+
|
733
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::OnError(
|
734
|
+
const std::string& resource_name, grpc_error_handle error) {
|
735
|
+
RefCountedPtr<ListenerWatcher> listener_watcher;
|
736
|
+
{
|
737
|
+
MutexLock lock(&mu_);
|
738
|
+
auto& state = rds_map_[resource_name];
|
739
|
+
if (!state.rds_update.has_value()) {
|
740
|
+
if (--rds_resources_yet_to_fetch_ == 0) {
|
741
|
+
listener_watcher = std::move(listener_watcher_);
|
742
|
+
}
|
743
|
+
state.rds_update = grpc_error_to_absl_status(error);
|
744
|
+
} else {
|
745
|
+
// Prefer existing good version over current errored version
|
746
|
+
if (!state.rds_update->ok()) {
|
747
|
+
state.rds_update = grpc_error_to_absl_status(error);
|
748
|
+
}
|
749
|
+
}
|
750
|
+
}
|
751
|
+
// Promote the filter chain match manager object if all the referenced
|
752
|
+
// resources are fetched.
|
753
|
+
if (listener_watcher != nullptr) {
|
754
|
+
listener_watcher->PendingFilterChainMatchManagerReady(this);
|
755
|
+
}
|
756
|
+
GRPC_ERROR_UNREF(error);
|
757
|
+
}
|
758
|
+
|
759
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
760
|
+
OnResourceDoesNotExist(const std::string& resource_name) {
|
761
|
+
RefCountedPtr<ListenerWatcher> listener_watcher;
|
762
|
+
{
|
763
|
+
MutexLock lock(&mu_);
|
764
|
+
auto& state = rds_map_[resource_name];
|
765
|
+
if (!state.rds_update.has_value()) {
|
766
|
+
if (--rds_resources_yet_to_fetch_ == 0) {
|
767
|
+
listener_watcher = std::move(listener_watcher_);
|
768
|
+
}
|
769
|
+
}
|
770
|
+
state.rds_update =
|
771
|
+
absl::NotFoundError("Requested route config does not exist");
|
772
|
+
}
|
773
|
+
// Promote the filter chain match manager object if all the referenced
|
774
|
+
// resources are fetched.
|
775
|
+
if (listener_watcher != nullptr) {
|
776
|
+
listener_watcher->PendingFilterChainMatchManagerReady(this);
|
104
777
|
}
|
105
|
-
return false;
|
106
778
|
}
|
107
779
|
|
108
780
|
const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourcePort(
|
@@ -148,6 +820,26 @@ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceIp(
|
|
148
820
|
return FindFilterChainDataForSourcePort(best_match->ports_map, port);
|
149
821
|
}
|
150
822
|
|
823
|
+
bool IsLoopbackIp(const grpc_resolved_address* address) {
|
824
|
+
const grpc_sockaddr* sock_addr =
|
825
|
+
reinterpret_cast<const grpc_sockaddr*>(&address->addr);
|
826
|
+
if (sock_addr->sa_family == GRPC_AF_INET) {
|
827
|
+
const grpc_sockaddr_in* addr4 =
|
828
|
+
reinterpret_cast<const grpc_sockaddr_in*>(sock_addr);
|
829
|
+
if (addr4->sin_addr.s_addr == grpc_htonl(INADDR_LOOPBACK)) {
|
830
|
+
return true;
|
831
|
+
}
|
832
|
+
} else if (sock_addr->sa_family == GRPC_AF_INET6) {
|
833
|
+
const grpc_sockaddr_in6* addr6 =
|
834
|
+
reinterpret_cast<const grpc_sockaddr_in6*>(sock_addr);
|
835
|
+
if (memcmp(&addr6->sin6_addr, &in6addr_loopback,
|
836
|
+
sizeof(in6addr_loopback)) == 0) {
|
837
|
+
return true;
|
838
|
+
}
|
839
|
+
}
|
840
|
+
return false;
|
841
|
+
}
|
842
|
+
|
151
843
|
const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForSourceType(
|
152
844
|
const XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceTypesArray&
|
153
845
|
source_types_array,
|
@@ -247,73 +939,9 @@ const XdsApi::LdsUpdate::FilterChainData* FindFilterChainDataForDestinationIp(
|
|
247
939
|
host);
|
248
940
|
}
|
249
941
|
|
250
|
-
absl::StatusOr<
|
251
|
-
FilterChainMatchManager::
|
252
|
-
|
253
|
-
MutexLock lock(&mu_);
|
254
|
-
auto it = certificate_providers_map_.find(filter_chain);
|
255
|
-
if (it != certificate_providers_map_.end()) {
|
256
|
-
return it->second.xds;
|
257
|
-
}
|
258
|
-
CertificateProviders certificate_providers;
|
259
|
-
// Configure root cert.
|
260
|
-
absl::string_view root_provider_instance_name =
|
261
|
-
filter_chain->downstream_tls_context.common_tls_context
|
262
|
-
.certificate_validation_context.ca_certificate_provider_instance
|
263
|
-
.instance_name;
|
264
|
-
absl::string_view root_provider_cert_name =
|
265
|
-
filter_chain->downstream_tls_context.common_tls_context
|
266
|
-
.certificate_validation_context.ca_certificate_provider_instance
|
267
|
-
.certificate_name;
|
268
|
-
if (!root_provider_instance_name.empty()) {
|
269
|
-
certificate_providers.root =
|
270
|
-
xds_client_->certificate_provider_store()
|
271
|
-
.CreateOrGetCertificateProvider(root_provider_instance_name);
|
272
|
-
if (certificate_providers.root == nullptr) {
|
273
|
-
return absl::NotFoundError(
|
274
|
-
absl::StrCat("Certificate provider instance name: \"",
|
275
|
-
root_provider_instance_name, "\" not recognized."));
|
276
|
-
}
|
277
|
-
}
|
278
|
-
// Configure identity cert.
|
279
|
-
absl::string_view identity_provider_instance_name =
|
280
|
-
filter_chain->downstream_tls_context.common_tls_context
|
281
|
-
.tls_certificate_provider_instance.instance_name;
|
282
|
-
absl::string_view identity_provider_cert_name =
|
283
|
-
filter_chain->downstream_tls_context.common_tls_context
|
284
|
-
.tls_certificate_provider_instance.certificate_name;
|
285
|
-
if (!identity_provider_instance_name.empty()) {
|
286
|
-
certificate_providers.instance =
|
287
|
-
xds_client_->certificate_provider_store()
|
288
|
-
.CreateOrGetCertificateProvider(identity_provider_instance_name);
|
289
|
-
if (certificate_providers.instance == nullptr) {
|
290
|
-
return absl::NotFoundError(
|
291
|
-
absl::StrCat("Certificate provider instance name: \"",
|
292
|
-
identity_provider_instance_name, "\" not recognized."));
|
293
|
-
}
|
294
|
-
}
|
295
|
-
certificate_providers.xds = MakeRefCounted<XdsCertificateProvider>();
|
296
|
-
certificate_providers.xds->UpdateRootCertNameAndDistributor(
|
297
|
-
"", root_provider_cert_name,
|
298
|
-
certificate_providers.root == nullptr
|
299
|
-
? nullptr
|
300
|
-
: certificate_providers.root->distributor());
|
301
|
-
certificate_providers.xds->UpdateIdentityCertNameAndDistributor(
|
302
|
-
"", identity_provider_cert_name,
|
303
|
-
certificate_providers.instance == nullptr
|
304
|
-
? nullptr
|
305
|
-
: certificate_providers.instance->distributor());
|
306
|
-
certificate_providers.xds->UpdateRequireClientCertificate(
|
307
|
-
"", filter_chain->downstream_tls_context.require_client_certificate);
|
308
|
-
auto xds_certificate_provider = certificate_providers.xds;
|
309
|
-
certificate_providers_map_.emplace(filter_chain,
|
310
|
-
std::move(certificate_providers));
|
311
|
-
return xds_certificate_provider;
|
312
|
-
}
|
313
|
-
|
314
|
-
absl::StatusOr<grpc_channel_args*>
|
315
|
-
FilterChainMatchManager::UpdateChannelArgsForConnection(grpc_channel_args* args,
|
316
|
-
grpc_endpoint* tcp) {
|
942
|
+
absl::StatusOr<grpc_channel_args*> XdsServerConfigFetcher::ListenerWatcher::
|
943
|
+
FilterChainMatchManager::UpdateChannelArgsForConnection(
|
944
|
+
grpc_channel_args* args, grpc_endpoint* tcp) {
|
317
945
|
const auto* filter_chain = FindFilterChainDataForDestinationIp(
|
318
946
|
filter_chain_map_.destination_ip_vector, tcp);
|
319
947
|
if (filter_chain == nullptr && default_filter_chain_.has_value()) {
|
@@ -323,195 +951,279 @@ FilterChainMatchManager::UpdateChannelArgsForConnection(grpc_channel_args* args,
|
|
323
951
|
grpc_channel_args_destroy(args);
|
324
952
|
return absl::UnavailableError("No matching filter chain found");
|
325
953
|
}
|
326
|
-
|
954
|
+
absl::InlinedVector<grpc_arg, 3> args_to_add;
|
955
|
+
RefCountedPtr<ServerConfigSelectorProvider> server_config_selector_provider;
|
956
|
+
RefCountedPtr<XdsChannelStackModifier> channel_stack_modifier;
|
957
|
+
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider;
|
958
|
+
// Add config selector filter
|
959
|
+
if (XdsRbacEnabled()) {
|
960
|
+
std::vector<const grpc_channel_filter*> filters;
|
961
|
+
// Iterate the list of HTTP filters in reverse since in Core, received data
|
962
|
+
// flows *up* the stack.
|
963
|
+
for (auto reverse_iterator =
|
964
|
+
filter_chain->http_connection_manager.http_filters.rbegin();
|
965
|
+
reverse_iterator !=
|
966
|
+
filter_chain->http_connection_manager.http_filters.rend();
|
967
|
+
++reverse_iterator) {
|
968
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
969
|
+
// at config validation time in the XdsApi code.
|
970
|
+
const XdsHttpFilterImpl* filter_impl =
|
971
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
972
|
+
reverse_iterator->config.config_proto_type_name);
|
973
|
+
GPR_ASSERT(filter_impl != nullptr);
|
974
|
+
// Some filters like the router filter are no-op filters and do not have
|
975
|
+
// an implementation.
|
976
|
+
if (filter_impl->channel_filter() != nullptr) {
|
977
|
+
filters.push_back(filter_impl->channel_filter());
|
978
|
+
}
|
979
|
+
}
|
980
|
+
filters.push_back(&kServerConfigSelectorFilter);
|
981
|
+
channel_stack_modifier =
|
982
|
+
MakeRefCounted<XdsChannelStackModifier>(std::move(filters));
|
983
|
+
if (filter_chain->http_connection_manager.rds_update.has_value()) {
|
984
|
+
server_config_selector_provider =
|
985
|
+
MakeRefCounted<StaticXdsServerConfigSelectorProvider>(
|
986
|
+
filter_chain->http_connection_manager.rds_update.value(),
|
987
|
+
filter_chain->http_connection_manager.http_filters);
|
988
|
+
} else {
|
989
|
+
absl::StatusOr<XdsApi::RdsUpdate> initial_resource;
|
990
|
+
{
|
991
|
+
MutexLock lock(&mu_);
|
992
|
+
initial_resource =
|
993
|
+
rds_map_[filter_chain->http_connection_manager.route_config_name]
|
994
|
+
.rds_update.value();
|
995
|
+
}
|
996
|
+
server_config_selector_provider =
|
997
|
+
MakeRefCounted<DynamicXdsServerConfigSelectorProvider>(
|
998
|
+
xds_client_,
|
999
|
+
filter_chain->http_connection_manager.route_config_name,
|
1000
|
+
std::move(initial_resource),
|
1001
|
+
filter_chain->http_connection_manager.http_filters);
|
1002
|
+
}
|
1003
|
+
args_to_add.emplace_back(server_config_selector_provider->MakeChannelArg());
|
1004
|
+
args_to_add.emplace_back(channel_stack_modifier->MakeChannelArg());
|
1005
|
+
}
|
1006
|
+
// Add XdsCertificateProvider if credentials are xDS.
|
327
1007
|
grpc_server_credentials* server_creds =
|
328
1008
|
grpc_find_server_credentials_in_args(args);
|
329
|
-
if (server_creds
|
330
|
-
|
1009
|
+
if (server_creds != nullptr && server_creds->type() == kCredentialsTypeXds) {
|
1010
|
+
absl::StatusOr<RefCountedPtr<XdsCertificateProvider>> result =
|
1011
|
+
CreateOrGetXdsCertificateProviderFromFilterChainData(filter_chain);
|
1012
|
+
if (!result.ok()) {
|
1013
|
+
grpc_channel_args_destroy(args);
|
1014
|
+
return result.status();
|
1015
|
+
}
|
1016
|
+
xds_certificate_provider = std::move(*result);
|
1017
|
+
GPR_ASSERT(xds_certificate_provider != nullptr);
|
1018
|
+
args_to_add.emplace_back(xds_certificate_provider->MakeChannelArg());
|
331
1019
|
}
|
332
|
-
|
333
|
-
|
334
|
-
|
1020
|
+
if (!args_to_add.empty()) {
|
1021
|
+
grpc_channel_args* updated_args = grpc_channel_args_copy_and_add(
|
1022
|
+
args, args_to_add.data(), args_to_add.size());
|
335
1023
|
grpc_channel_args_destroy(args);
|
336
|
-
|
337
|
-
}
|
338
|
-
RefCountedPtr<XdsCertificateProvider> xds_certificate_provider =
|
339
|
-
std::move(*result);
|
340
|
-
GPR_ASSERT(xds_certificate_provider != nullptr);
|
341
|
-
grpc_arg arg_to_add = xds_certificate_provider->MakeChannelArg();
|
342
|
-
grpc_channel_args* updated_args =
|
343
|
-
grpc_channel_args_copy_and_add(args, &arg_to_add, 1);
|
344
|
-
grpc_channel_args_destroy(args);
|
345
|
-
return updated_args;
|
346
|
-
}
|
347
|
-
|
348
|
-
class XdsServerConfigFetcher : public grpc_server_config_fetcher {
|
349
|
-
public:
|
350
|
-
explicit XdsServerConfigFetcher(RefCountedPtr<XdsClient> xds_client,
|
351
|
-
grpc_server_xds_status_notifier notifier)
|
352
|
-
: xds_client_(std::move(xds_client)), serving_status_notifier_(notifier) {
|
353
|
-
GPR_ASSERT(xds_client_ != nullptr);
|
354
|
-
}
|
355
|
-
|
356
|
-
void StartWatch(std::string listening_address,
|
357
|
-
std::unique_ptr<grpc_server_config_fetcher::WatcherInterface>
|
358
|
-
watcher) override {
|
359
|
-
grpc_server_config_fetcher::WatcherInterface* watcher_ptr = watcher.get();
|
360
|
-
auto listener_watcher = absl::make_unique<ListenerWatcher>(
|
361
|
-
std::move(watcher), xds_client_, serving_status_notifier_,
|
362
|
-
listening_address);
|
363
|
-
auto* listener_watcher_ptr = listener_watcher.get();
|
364
|
-
listening_address = absl::StrReplaceAll(
|
365
|
-
xds_client_->bootstrap().server_listener_resource_name_template(),
|
366
|
-
{{"%s", listening_address}});
|
367
|
-
xds_client_->WatchListenerData(listening_address,
|
368
|
-
std::move(listener_watcher));
|
369
|
-
MutexLock lock(&mu_);
|
370
|
-
auto& watcher_state = watchers_[watcher_ptr];
|
371
|
-
watcher_state.listening_address = listening_address;
|
372
|
-
watcher_state.listener_watcher = listener_watcher_ptr;
|
373
|
-
}
|
374
|
-
|
375
|
-
void CancelWatch(
|
376
|
-
grpc_server_config_fetcher::WatcherInterface* watcher) override {
|
377
|
-
MutexLock lock(&mu_);
|
378
|
-
auto it = watchers_.find(watcher);
|
379
|
-
if (it != watchers_.end()) {
|
380
|
-
// Cancel the watch on the listener before erasing
|
381
|
-
xds_client_->CancelListenerDataWatch(it->second.listening_address,
|
382
|
-
it->second.listener_watcher,
|
383
|
-
false /* delay_unsubscription */);
|
384
|
-
watchers_.erase(it);
|
385
|
-
}
|
1024
|
+
args = updated_args;
|
386
1025
|
}
|
1026
|
+
return args;
|
1027
|
+
}
|
387
1028
|
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
}
|
1029
|
+
//
|
1030
|
+
// XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::XdsServerConfigSelector
|
1031
|
+
//
|
392
1032
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
}
|
419
|
-
if (listener.address != listening_address_) {
|
420
|
-
OnFatalError(absl::FailedPreconditionError(
|
421
|
-
"Address in LDS update does not match listening address"));
|
422
|
-
return;
|
1033
|
+
absl::StatusOr<
|
1034
|
+
RefCountedPtr<XdsServerConfigFetcher::ListenerWatcher::
|
1035
|
+
FilterChainMatchManager::XdsServerConfigSelector>>
|
1036
|
+
XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1037
|
+
XdsServerConfigSelector::Create(
|
1038
|
+
XdsApi::RdsUpdate rds_update,
|
1039
|
+
const std::vector<XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter>&
|
1040
|
+
http_filters) {
|
1041
|
+
auto config_selector = MakeRefCounted<XdsServerConfigSelector>();
|
1042
|
+
for (auto& vhost : rds_update.virtual_hosts) {
|
1043
|
+
config_selector->virtual_hosts_.emplace_back();
|
1044
|
+
auto& virtual_host = config_selector->virtual_hosts_.back();
|
1045
|
+
virtual_host.domains = std::move(vhost.domains);
|
1046
|
+
for (auto& route : vhost.routes) {
|
1047
|
+
virtual_host.routes.emplace_back();
|
1048
|
+
auto& config_selector_route = virtual_host.routes.back();
|
1049
|
+
config_selector_route.matchers = std::move(route.matchers);
|
1050
|
+
config_selector_route.unsupported_action =
|
1051
|
+
absl::get_if<XdsApi::Route::NonForwardingAction>(&route.action) ==
|
1052
|
+
nullptr;
|
1053
|
+
XdsRouting::GeneratePerHttpFilterConfigsResult result =
|
1054
|
+
XdsRouting::GeneratePerHTTPFilterConfigs(http_filters, vhost, route,
|
1055
|
+
nullptr, nullptr);
|
1056
|
+
if (result.error != GRPC_ERROR_NONE) {
|
1057
|
+
return grpc_error_to_absl_status(result.error);
|
423
1058
|
}
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
gpr_log(GPR_INFO,
|
431
|
-
"xDS Listener resource obtained; will start serving on %s",
|
432
|
-
listening_address_.c_str());
|
433
|
-
}
|
1059
|
+
std::vector<std::string> fields;
|
1060
|
+
fields.reserve(result.per_filter_configs.size());
|
1061
|
+
for (const auto& p : result.per_filter_configs) {
|
1062
|
+
fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
|
1063
|
+
absl::StrJoin(p.second, ",\n"),
|
1064
|
+
"\n ]"));
|
434
1065
|
}
|
435
|
-
if (
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
1066
|
+
if (!fields.empty()) {
|
1067
|
+
std::string json = absl::StrCat(
|
1068
|
+
"{\n"
|
1069
|
+
" \"methodConfig\": [ {\n"
|
1070
|
+
" \"name\": [\n"
|
1071
|
+
" {}\n"
|
1072
|
+
" ],\n"
|
1073
|
+
" ",
|
1074
|
+
absl::StrJoin(fields, ",\n"),
|
1075
|
+
"\n } ]\n"
|
1076
|
+
"}");
|
1077
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
1078
|
+
config_selector_route.method_config =
|
1079
|
+
ServiceConfig::Create(result.args, json.c_str(), &error);
|
1080
|
+
GPR_ASSERT(error == GRPC_ERROR_NONE);
|
445
1081
|
}
|
1082
|
+
grpc_channel_args_destroy(result.args);
|
446
1083
|
}
|
1084
|
+
}
|
1085
|
+
return config_selector;
|
1086
|
+
}
|
447
1087
|
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
1088
|
+
ServerConfigSelector::CallConfig XdsServerConfigFetcher::ListenerWatcher::
|
1089
|
+
FilterChainMatchManager::XdsServerConfigSelector::GetCallConfig(
|
1090
|
+
grpc_metadata_batch* metadata) {
|
1091
|
+
CallConfig call_config;
|
1092
|
+
if (metadata->legacy_index()->named.path == nullptr) {
|
1093
|
+
call_config.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("No path found");
|
1094
|
+
return call_config;
|
1095
|
+
}
|
1096
|
+
absl::string_view path = StringViewFromSlice(
|
1097
|
+
GRPC_MDVALUE(metadata->legacy_index()->named.path->md));
|
1098
|
+
if (metadata->legacy_index()->named.authority == nullptr) {
|
1099
|
+
call_config.error =
|
1100
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("No authority found");
|
1101
|
+
return call_config;
|
1102
|
+
}
|
1103
|
+
absl::string_view authority = StringViewFromSlice(
|
1104
|
+
GRPC_MDVALUE(metadata->legacy_index()->named.authority->md));
|
1105
|
+
auto vhost_index = XdsRouting::FindVirtualHostForDomain(
|
1106
|
+
VirtualHostListIterator(&virtual_hosts_), authority);
|
1107
|
+
if (!vhost_index.has_value()) {
|
1108
|
+
call_config.error =
|
1109
|
+
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
1110
|
+
"could not find VirtualHost for ", authority,
|
1111
|
+
" in RouteConfiguration")),
|
1112
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
1113
|
+
return call_config;
|
1114
|
+
}
|
1115
|
+
auto& virtual_host = virtual_hosts_[vhost_index.value()];
|
1116
|
+
auto route_index = XdsRouting::GetRouteForRequest(
|
1117
|
+
VirtualHost::RouteListIterator(&virtual_host.routes), path, metadata);
|
1118
|
+
if (route_index.has_value()) {
|
1119
|
+
auto& route = virtual_host.routes[route_index.value()];
|
1120
|
+
// Found the matching route
|
1121
|
+
if (route.unsupported_action) {
|
1122
|
+
call_config.error = grpc_error_set_int(
|
1123
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1124
|
+
"Matching route has unsupported action"),
|
1125
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
1126
|
+
return call_config;
|
470
1127
|
}
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
"ListenerWatcher:%p Encountered fatal error %s; not serving on %s",
|
476
|
-
this, status.ToString().c_str(), listening_address_.c_str());
|
477
|
-
if (filter_chain_match_manager_ != nullptr) {
|
478
|
-
// The server has started listening already, so we need to gracefully
|
479
|
-
// stop serving.
|
480
|
-
server_config_watcher_->StopServing();
|
481
|
-
filter_chain_match_manager_.reset();
|
482
|
-
}
|
483
|
-
if (serving_status_notifier_.on_serving_status_update != nullptr) {
|
484
|
-
serving_status_notifier_.on_serving_status_update(
|
485
|
-
serving_status_notifier_.user_data, listening_address_.c_str(),
|
486
|
-
{static_cast<grpc_status_code>(status.raw_code()),
|
487
|
-
std::string(status.message()).c_str()});
|
488
|
-
}
|
1128
|
+
if (route.method_config != nullptr) {
|
1129
|
+
call_config.method_configs =
|
1130
|
+
route.method_config->GetMethodParsedConfigVector(grpc_empty_slice());
|
1131
|
+
call_config.service_config = route.method_config;
|
489
1132
|
}
|
1133
|
+
return call_config;
|
1134
|
+
}
|
1135
|
+
call_config.error = grpc_error_set_int(
|
1136
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("No route matched"),
|
1137
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
1138
|
+
return call_config;
|
1139
|
+
}
|
490
1140
|
|
491
|
-
|
492
|
-
|
493
|
-
|
1141
|
+
//
|
1142
|
+
// XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::DynamicXdsServerConfigSelectorProvider
|
1143
|
+
//
|
494
1144
|
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
1145
|
+
XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1146
|
+
DynamicXdsServerConfigSelectorProvider::
|
1147
|
+
DynamicXdsServerConfigSelectorProvider(
|
1148
|
+
RefCountedPtr<XdsClient> xds_client, std::string resource_name,
|
1149
|
+
absl::StatusOr<XdsApi::RdsUpdate> initial_resource,
|
1150
|
+
std::vector<XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter>
|
1151
|
+
http_filters)
|
1152
|
+
: xds_client_(std::move(xds_client)),
|
1153
|
+
resource_name_(std::move(resource_name)),
|
1154
|
+
http_filters_(std::move(http_filters)),
|
1155
|
+
resource_(std::move(initial_resource)) {
|
1156
|
+
GPR_ASSERT(!resource_name_.empty());
|
1157
|
+
auto route_config_watcher = MakeRefCounted<RouteConfigWatcher>(Ref());
|
1158
|
+
route_config_watcher_ = route_config_watcher.get();
|
1159
|
+
xds_client_->WatchRouteConfigData(resource_name_,
|
1160
|
+
std::move(route_config_watcher));
|
1161
|
+
}
|
503
1162
|
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
1163
|
+
absl::StatusOr<RefCountedPtr<ServerConfigSelector>>
|
1164
|
+
XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1165
|
+
DynamicXdsServerConfigSelectorProvider::Watch(
|
1166
|
+
std::unique_ptr<
|
1167
|
+
ServerConfigSelectorProvider::ServerConfigSelectorWatcher>
|
1168
|
+
watcher) {
|
1169
|
+
absl::StatusOr<XdsApi::RdsUpdate> resource;
|
1170
|
+
{
|
1171
|
+
MutexLock lock(&mu_);
|
1172
|
+
GPR_ASSERT(watcher_ == nullptr);
|
1173
|
+
watcher_ = std::move(watcher);
|
1174
|
+
resource = resource_;
|
1175
|
+
}
|
1176
|
+
if (!resource.ok()) {
|
1177
|
+
return resource.status();
|
1178
|
+
}
|
1179
|
+
return XdsServerConfigSelector::Create(resource.value(), http_filters_);
|
1180
|
+
}
|
508
1181
|
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
1182
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1183
|
+
DynamicXdsServerConfigSelectorProvider::CancelWatch() {
|
1184
|
+
xds_client_->CancelRouteConfigDataWatch(resource_name_, route_config_watcher_,
|
1185
|
+
false /* delay_unsubscription */);
|
1186
|
+
MutexLock lock(&mu_);
|
1187
|
+
watcher_.reset();
|
1188
|
+
}
|
1189
|
+
|
1190
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1191
|
+
DynamicXdsServerConfigSelectorProvider::OnRouteConfigChanged(
|
1192
|
+
XdsApi::RdsUpdate rds_update) {
|
1193
|
+
MutexLock lock(&mu_);
|
1194
|
+
resource_ = std::move(rds_update);
|
1195
|
+
if (watcher_ == nullptr) {
|
1196
|
+
return;
|
1197
|
+
}
|
1198
|
+
watcher_->OnServerConfigSelectorUpdate(
|
1199
|
+
XdsServerConfigSelector::Create(*resource_, http_filters_));
|
1200
|
+
}
|
1201
|
+
|
1202
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1203
|
+
DynamicXdsServerConfigSelectorProvider::OnError(grpc_error_handle error) {
|
1204
|
+
MutexLock lock(&mu_);
|
1205
|
+
// Prefer existing good update.
|
1206
|
+
if (resource_.ok()) {
|
1207
|
+
GRPC_ERROR_UNREF(error);
|
1208
|
+
return;
|
1209
|
+
}
|
1210
|
+
resource_ = grpc_error_to_absl_status(error);
|
1211
|
+
GRPC_ERROR_UNREF(error);
|
1212
|
+
if (watcher_ == nullptr) {
|
1213
|
+
return;
|
1214
|
+
}
|
1215
|
+
watcher_->OnServerConfigSelectorUpdate(resource_.status());
|
1216
|
+
}
|
1217
|
+
|
1218
|
+
void XdsServerConfigFetcher::ListenerWatcher::FilterChainMatchManager::
|
1219
|
+
DynamicXdsServerConfigSelectorProvider::OnResourceDoesNotExist() {
|
1220
|
+
MutexLock lock(&mu_);
|
1221
|
+
resource_ = absl::NotFoundError("Requested route config does not exist");
|
1222
|
+
if (watcher_ == nullptr) {
|
1223
|
+
return;
|
1224
|
+
}
|
1225
|
+
watcher_->OnServerConfigSelectorUpdate(resource_.status());
|
1226
|
+
}
|
515
1227
|
|
516
1228
|
} // namespace
|
517
1229
|
} // namespace grpc_core
|
@@ -520,7 +1232,9 @@ grpc_server_config_fetcher* grpc_server_config_fetcher_xds_create(
|
|
520
1232
|
grpc_server_xds_status_notifier notifier, const grpc_channel_args* args) {
|
521
1233
|
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
522
1234
|
grpc_core::ExecCtx exec_ctx;
|
523
|
-
args =
|
1235
|
+
args = grpc_core::CoreConfiguration::Get()
|
1236
|
+
.channel_args_preconditioning()
|
1237
|
+
.PreconditionChannelArgs(args);
|
524
1238
|
GRPC_API_TRACE("grpc_server_config_fetcher_xds_create()", 0, ());
|
525
1239
|
grpc_error_handle error = GRPC_ERROR_NONE;
|
526
1240
|
grpc_core::RefCountedPtr<grpc_core::XdsClient> xds_client =
|