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
data/src/core/ext/xds/xds_api.cc
CHANGED
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
@@ -91,6 +89,7 @@
|
|
91
89
|
#include <grpc/support/alloc.h>
|
92
90
|
#include <grpc/support/string_util.h>
|
93
91
|
|
92
|
+
#include "src/core/ext/xds/xds_routing.h"
|
94
93
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
95
94
|
#include "src/core/lib/gpr/env.h"
|
96
95
|
#include "src/core/lib/gpr/string.h"
|
@@ -345,104 +344,6 @@ std::string XdsApi::RdsUpdate::ToString() const {
|
|
345
344
|
return absl::StrJoin(vhosts, "");
|
346
345
|
}
|
347
346
|
|
348
|
-
namespace {
|
349
|
-
|
350
|
-
// Better match type has smaller value.
|
351
|
-
enum MatchType {
|
352
|
-
EXACT_MATCH,
|
353
|
-
SUFFIX_MATCH,
|
354
|
-
PREFIX_MATCH,
|
355
|
-
UNIVERSE_MATCH,
|
356
|
-
INVALID_MATCH,
|
357
|
-
};
|
358
|
-
|
359
|
-
// Returns true if match succeeds.
|
360
|
-
bool DomainMatch(MatchType match_type, const std::string& domain_pattern_in,
|
361
|
-
const std::string& expected_host_name_in) {
|
362
|
-
// Normalize the args to lower-case. Domain matching is case-insensitive.
|
363
|
-
std::string domain_pattern = domain_pattern_in;
|
364
|
-
std::string expected_host_name = expected_host_name_in;
|
365
|
-
std::transform(domain_pattern.begin(), domain_pattern.end(),
|
366
|
-
domain_pattern.begin(),
|
367
|
-
[](unsigned char c) { return std::tolower(c); });
|
368
|
-
std::transform(expected_host_name.begin(), expected_host_name.end(),
|
369
|
-
expected_host_name.begin(),
|
370
|
-
[](unsigned char c) { return std::tolower(c); });
|
371
|
-
if (match_type == EXACT_MATCH) {
|
372
|
-
return domain_pattern == expected_host_name;
|
373
|
-
} else if (match_type == SUFFIX_MATCH) {
|
374
|
-
// Asterisk must match at least one char.
|
375
|
-
if (expected_host_name.size() < domain_pattern.size()) return false;
|
376
|
-
absl::string_view pattern_suffix(domain_pattern.c_str() + 1);
|
377
|
-
absl::string_view host_suffix(expected_host_name.c_str() +
|
378
|
-
expected_host_name.size() -
|
379
|
-
pattern_suffix.size());
|
380
|
-
return pattern_suffix == host_suffix;
|
381
|
-
} else if (match_type == PREFIX_MATCH) {
|
382
|
-
// Asterisk must match at least one char.
|
383
|
-
if (expected_host_name.size() < domain_pattern.size()) return false;
|
384
|
-
absl::string_view pattern_prefix(domain_pattern.c_str(),
|
385
|
-
domain_pattern.size() - 1);
|
386
|
-
absl::string_view host_prefix(expected_host_name.c_str(),
|
387
|
-
pattern_prefix.size());
|
388
|
-
return pattern_prefix == host_prefix;
|
389
|
-
} else {
|
390
|
-
return match_type == UNIVERSE_MATCH;
|
391
|
-
}
|
392
|
-
}
|
393
|
-
|
394
|
-
MatchType DomainPatternMatchType(const std::string& domain_pattern) {
|
395
|
-
if (domain_pattern.empty()) return INVALID_MATCH;
|
396
|
-
if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
|
397
|
-
if (domain_pattern == "*") return UNIVERSE_MATCH;
|
398
|
-
if (domain_pattern[0] == '*') return SUFFIX_MATCH;
|
399
|
-
if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
|
400
|
-
return INVALID_MATCH;
|
401
|
-
}
|
402
|
-
|
403
|
-
} // namespace
|
404
|
-
|
405
|
-
XdsApi::RdsUpdate::VirtualHost* XdsApi::RdsUpdate::FindVirtualHostForDomain(
|
406
|
-
const std::string& domain) {
|
407
|
-
// Find the best matched virtual host.
|
408
|
-
// The search order for 4 groups of domain patterns:
|
409
|
-
// 1. Exact match.
|
410
|
-
// 2. Suffix match (e.g., "*ABC").
|
411
|
-
// 3. Prefix match (e.g., "ABC*").
|
412
|
-
// 4. Universe match (i.e., "*").
|
413
|
-
// Within each group, longest match wins.
|
414
|
-
// If the same best matched domain pattern appears in multiple virtual hosts,
|
415
|
-
// the first matched virtual host wins.
|
416
|
-
VirtualHost* target_vhost = nullptr;
|
417
|
-
MatchType best_match_type = INVALID_MATCH;
|
418
|
-
size_t longest_match = 0;
|
419
|
-
// Check each domain pattern in each virtual host to determine the best
|
420
|
-
// matched virtual host.
|
421
|
-
for (VirtualHost& vhost : virtual_hosts) {
|
422
|
-
for (const std::string& domain_pattern : vhost.domains) {
|
423
|
-
// Check the match type first. Skip the pattern if it's not better than
|
424
|
-
// current match.
|
425
|
-
const MatchType match_type = DomainPatternMatchType(domain_pattern);
|
426
|
-
// This should be caught by RouteConfigParse().
|
427
|
-
GPR_ASSERT(match_type != INVALID_MATCH);
|
428
|
-
if (match_type > best_match_type) continue;
|
429
|
-
if (match_type == best_match_type &&
|
430
|
-
domain_pattern.size() <= longest_match) {
|
431
|
-
continue;
|
432
|
-
}
|
433
|
-
// Skip if match fails.
|
434
|
-
if (!DomainMatch(match_type, domain_pattern, domain)) continue;
|
435
|
-
// Choose this match.
|
436
|
-
target_vhost = &vhost;
|
437
|
-
best_match_type = match_type;
|
438
|
-
longest_match = domain_pattern.size();
|
439
|
-
if (best_match_type == EXACT_MATCH) break;
|
440
|
-
}
|
441
|
-
if (best_match_type == EXACT_MATCH) break;
|
442
|
-
}
|
443
|
-
return target_vhost;
|
444
|
-
}
|
445
|
-
|
446
347
|
//
|
447
348
|
// XdsApi::CommonTlsContext::CertificateValidationContext
|
448
349
|
//
|
@@ -821,23 +722,20 @@ std::string XdsApi::EdsUpdate::ToString() const {
|
|
821
722
|
// XdsApi
|
822
723
|
//
|
823
724
|
|
824
|
-
|
825
|
-
|
826
|
-
const char* XdsApi::
|
827
|
-
|
828
|
-
const char* XdsApi::kCdsTypeUrl =
|
829
|
-
"type.googleapis.com/envoy.config.cluster.v3.Cluster";
|
725
|
+
// TODO(roth): All constants and functions for individual resource types
|
726
|
+
// should be merged into the XdsResourceType abstraction.
|
727
|
+
const char* XdsApi::kLdsTypeUrl = "envoy.config.listener.v3.Listener";
|
728
|
+
const char* XdsApi::kRdsTypeUrl = "envoy.config.route.v3.RouteConfiguration";
|
729
|
+
const char* XdsApi::kCdsTypeUrl = "envoy.config.cluster.v3.Cluster";
|
830
730
|
const char* XdsApi::kEdsTypeUrl =
|
831
|
-
"
|
731
|
+
"envoy.config.endpoint.v3.ClusterLoadAssignment";
|
832
732
|
|
833
733
|
namespace {
|
834
734
|
|
835
|
-
const char* kLdsV2TypeUrl = "
|
836
|
-
const char* kRdsV2TypeUrl =
|
837
|
-
|
838
|
-
const char*
|
839
|
-
const char* kEdsV2TypeUrl =
|
840
|
-
"type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
|
735
|
+
const char* kLdsV2TypeUrl = "envoy.api.v2.Listener";
|
736
|
+
const char* kRdsV2TypeUrl = "envoy.api.v2.RouteConfiguration";
|
737
|
+
const char* kCdsV2TypeUrl = "envoy.api.v2.Cluster";
|
738
|
+
const char* kEdsV2TypeUrl = "envoy.api.v2.ClusterLoadAssignment";
|
841
739
|
|
842
740
|
bool IsLdsInternal(absl::string_view type_url, bool* is_v2 = nullptr) {
|
843
741
|
if (type_url == XdsApi::kLdsTypeUrl) return true;
|
@@ -860,13 +758,85 @@ bool IsEdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
|
860
758
|
return type_url == XdsApi::kEdsTypeUrl || type_url == kEdsV2TypeUrl;
|
861
759
|
}
|
862
760
|
|
761
|
+
absl::string_view TypeUrlExternalToInternal(bool use_v3,
|
762
|
+
const std::string& type_url) {
|
763
|
+
if (!use_v3) {
|
764
|
+
if (type_url == XdsApi::kLdsTypeUrl) {
|
765
|
+
return kLdsV2TypeUrl;
|
766
|
+
}
|
767
|
+
if (type_url == XdsApi::kRdsTypeUrl) {
|
768
|
+
return kRdsV2TypeUrl;
|
769
|
+
}
|
770
|
+
if (type_url == XdsApi::kCdsTypeUrl) {
|
771
|
+
return kCdsV2TypeUrl;
|
772
|
+
}
|
773
|
+
if (type_url == XdsApi::kEdsTypeUrl) {
|
774
|
+
return kEdsV2TypeUrl;
|
775
|
+
}
|
776
|
+
}
|
777
|
+
return type_url;
|
778
|
+
}
|
779
|
+
|
780
|
+
std::string TypeUrlInternalToExternal(absl::string_view type_url) {
|
781
|
+
if (type_url == kLdsV2TypeUrl) {
|
782
|
+
return XdsApi::kLdsTypeUrl;
|
783
|
+
} else if (type_url == kRdsV2TypeUrl) {
|
784
|
+
return XdsApi::kRdsTypeUrl;
|
785
|
+
} else if (type_url == kCdsV2TypeUrl) {
|
786
|
+
return XdsApi::kCdsTypeUrl;
|
787
|
+
} else if (type_url == kEdsV2TypeUrl) {
|
788
|
+
return XdsApi::kEdsTypeUrl;
|
789
|
+
}
|
790
|
+
return std::string(type_url);
|
791
|
+
}
|
792
|
+
|
793
|
+
struct EncodingContext {
|
794
|
+
XdsClient* client; // Used only for logging. Unsafe for dereferencing.
|
795
|
+
TraceFlag* tracer;
|
796
|
+
upb_symtab* symtab;
|
797
|
+
upb_arena* arena;
|
798
|
+
bool use_v3;
|
799
|
+
const CertificateProviderStore::PluginDefinitionMap*
|
800
|
+
certificate_provider_definition_map;
|
801
|
+
};
|
802
|
+
|
803
|
+
class XdsResourceType {
|
804
|
+
public:
|
805
|
+
// A base type for resource data.
|
806
|
+
struct ResourceData {};
|
807
|
+
|
808
|
+
struct DecodeResult {
|
809
|
+
std::string name;
|
810
|
+
absl::StatusOr<std::unique_ptr<ResourceData>> resource;
|
811
|
+
};
|
812
|
+
|
813
|
+
virtual ~XdsResourceType() = default;
|
814
|
+
|
815
|
+
virtual absl::string_view type_url() const = 0;
|
816
|
+
|
817
|
+
virtual absl::string_view v2_type_url() const = 0;
|
818
|
+
|
819
|
+
virtual absl::StatusOr<DecodeResult> Decode(
|
820
|
+
const EncodingContext& context, absl::string_view serialized_resource,
|
821
|
+
bool is_v2) const = 0;
|
822
|
+
|
823
|
+
bool IsType(absl::string_view resource_type, bool* is_v2) const {
|
824
|
+
if (resource_type == type_url()) return true;
|
825
|
+
if (resource_type == v2_type_url()) {
|
826
|
+
if (is_v2 != nullptr) *is_v2 = true;
|
827
|
+
return true;
|
828
|
+
}
|
829
|
+
return false;
|
830
|
+
}
|
831
|
+
};
|
832
|
+
|
863
833
|
absl::StatusOr<XdsApi::ResourceName> ParseResourceNameInternal(
|
864
834
|
absl::string_view name,
|
865
835
|
std::function<bool(absl::string_view, bool*)> is_expected_type) {
|
866
836
|
// Old-style names use the empty string for authority.
|
867
|
-
//
|
837
|
+
// authority is prefixed with "old:" to indicate that it's an old-style name.
|
868
838
|
if (!absl::StartsWith(name, "xdstp:")) {
|
869
|
-
return XdsApi::ResourceName{"",
|
839
|
+
return XdsApi::ResourceName{"old:", std::string(name)};
|
870
840
|
}
|
871
841
|
// New style name. Parse URI.
|
872
842
|
auto uri = URI::Parse(name);
|
@@ -882,9 +852,9 @@ absl::StatusOr<XdsApi::ResourceName> ParseResourceNameInternal(
|
|
882
852
|
uri->query_parameter_map().begin(), uri->query_parameter_map().end());
|
883
853
|
std::sort(query_parameters.begin(), query_parameters.end());
|
884
854
|
return XdsApi::ResourceName{
|
885
|
-
uri->authority(),
|
855
|
+
absl::StrCat("xdstp:", uri->authority()),
|
886
856
|
absl::StrCat(
|
887
|
-
|
857
|
+
path_parts.second, (query_parameters.empty() ? "?" : ""),
|
888
858
|
absl::StrJoin(query_parameters, "&", absl::PairFormatter("=")))};
|
889
859
|
}
|
890
860
|
|
@@ -971,9 +941,8 @@ absl::StatusOr<XdsApi::ResourceName> XdsApi::ParseResourceName(
|
|
971
941
|
std::string XdsApi::ConstructFullResourceName(absl::string_view authority,
|
972
942
|
absl::string_view resource_type,
|
973
943
|
absl::string_view name) {
|
974
|
-
if (absl::
|
975
|
-
return absl::StrCat("xdstp://", authority, "/", resource_type,
|
976
|
-
absl::StripPrefix(name, "xdstp:"));
|
944
|
+
if (absl::ConsumePrefix(&authority, "xdstp:")) {
|
945
|
+
return absl::StrCat("xdstp://", authority, "/", resource_type, "/", name);
|
977
946
|
} else {
|
978
947
|
return std::string(absl::StripPrefix(name, "old:"));
|
979
948
|
}
|
@@ -981,16 +950,6 @@ std::string XdsApi::ConstructFullResourceName(absl::string_view authority,
|
|
981
950
|
|
982
951
|
namespace {
|
983
952
|
|
984
|
-
struct EncodingContext {
|
985
|
-
XdsClient* client; // Used only for logging. Unsafe for dereferencing.
|
986
|
-
TraceFlag* tracer;
|
987
|
-
upb_symtab* symtab;
|
988
|
-
upb_arena* arena;
|
989
|
-
bool use_v3;
|
990
|
-
const CertificateProviderStore::PluginDefinitionMap*
|
991
|
-
certificate_provider_definition_map;
|
992
|
-
};
|
993
|
-
|
994
953
|
// Works for both std::string and absl::string_view.
|
995
954
|
template <typename T>
|
996
955
|
inline upb_strview StdStringToUpbString(const T& str) {
|
@@ -1170,25 +1129,6 @@ grpc_slice SerializeDiscoveryRequest(
|
|
1170
1129
|
return grpc_slice_from_copied_buffer(output, output_length);
|
1171
1130
|
}
|
1172
1131
|
|
1173
|
-
absl::string_view TypeUrlExternalToInternal(bool use_v3,
|
1174
|
-
const std::string& type_url) {
|
1175
|
-
if (!use_v3) {
|
1176
|
-
if (type_url == XdsApi::kLdsTypeUrl) {
|
1177
|
-
return kLdsV2TypeUrl;
|
1178
|
-
}
|
1179
|
-
if (type_url == XdsApi::kRdsTypeUrl) {
|
1180
|
-
return kRdsV2TypeUrl;
|
1181
|
-
}
|
1182
|
-
if (type_url == XdsApi::kCdsTypeUrl) {
|
1183
|
-
return kCdsV2TypeUrl;
|
1184
|
-
}
|
1185
|
-
if (type_url == XdsApi::kEdsTypeUrl) {
|
1186
|
-
return kEdsV2TypeUrl;
|
1187
|
-
}
|
1188
|
-
}
|
1189
|
-
return type_url;
|
1190
|
-
}
|
1191
|
-
|
1192
1132
|
} // namespace
|
1193
1133
|
|
1194
1134
|
grpc_slice XdsApi::CreateAdsRequest(
|
@@ -1210,8 +1150,10 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1210
1150
|
// Set type_url.
|
1211
1151
|
absl::string_view real_type_url =
|
1212
1152
|
TypeUrlExternalToInternal(server.ShouldUseV3(), type_url);
|
1153
|
+
std::string real_type_url_str =
|
1154
|
+
absl::StrCat("type.googleapis.com/", real_type_url);
|
1213
1155
|
envoy_service_discovery_v3_DiscoveryRequest_set_type_url(
|
1214
|
-
request, StdStringToUpbString(
|
1156
|
+
request, StdStringToUpbString(real_type_url_str));
|
1215
1157
|
// Set version_info.
|
1216
1158
|
if (!version.empty()) {
|
1217
1159
|
envoy_service_discovery_v3_DiscoveryRequest_set_version_info(
|
@@ -1263,7 +1205,7 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1263
1205
|
for (const auto& p : a.second) {
|
1264
1206
|
absl::string_view resource_id = p;
|
1265
1207
|
resource_name_storage.push_back(
|
1266
|
-
ConstructFullResourceName(authority,
|
1208
|
+
ConstructFullResourceName(authority, real_type_url, resource_id));
|
1267
1209
|
envoy_service_discovery_v3_DiscoveryRequest_add_resource_names(
|
1268
1210
|
request, StdStringToUpbString(resource_name_storage.back()),
|
1269
1211
|
arena.ptr());
|
@@ -1909,7 +1851,6 @@ grpc_error_handle RouteConfigParse(
|
|
1909
1851
|
const EncodingContext& context,
|
1910
1852
|
const envoy_config_route_v3_RouteConfiguration* route_config,
|
1911
1853
|
bool /*is_v2*/, XdsApi::RdsUpdate* rds_update) {
|
1912
|
-
MaybeLogRouteConfiguration(context, route_config);
|
1913
1854
|
// Get the virtual hosts.
|
1914
1855
|
size_t num_virtual_hosts;
|
1915
1856
|
const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
|
@@ -1924,8 +1865,7 @@ grpc_error_handle RouteConfigParse(
|
|
1924
1865
|
virtual_hosts[i], &domain_size);
|
1925
1866
|
for (size_t j = 0; j < domain_size; ++j) {
|
1926
1867
|
std::string domain_pattern = UpbStringToStdString(domains[j]);
|
1927
|
-
|
1928
|
-
if (match_type == INVALID_MATCH) {
|
1868
|
+
if (!XdsRouting::IsValidDomainPattern(domain_pattern)) {
|
1929
1869
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1930
1870
|
absl::StrCat("Invalid domain pattern \"", domain_pattern, "\"."));
|
1931
1871
|
}
|
@@ -3480,124 +3420,239 @@ grpc_error_handle EdsResourceParse(
|
|
3480
3420
|
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing EDS resource", &errors);
|
3481
3421
|
}
|
3482
3422
|
|
3483
|
-
|
3484
|
-
|
3485
|
-
|
3486
|
-
|
3487
|
-
|
3488
|
-
|
3489
|
-
|
3490
|
-
|
3491
|
-
|
3492
|
-
|
3493
|
-
|
3494
|
-
|
3495
|
-
|
3496
|
-
|
3497
|
-
|
3498
|
-
std::set<XdsApi::ResourceName>* resource_names_failed) {
|
3499
|
-
std::vector<grpc_error_handle> errors;
|
3500
|
-
// Get the resources from the response.
|
3501
|
-
size_t size;
|
3502
|
-
const google_protobuf_Any* const* resources =
|
3503
|
-
envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
|
3504
|
-
for (size_t i = 0; i < size; ++i) {
|
3505
|
-
// Check the type_url of the resource.
|
3506
|
-
absl::string_view type_url =
|
3507
|
-
UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
|
3508
|
-
bool is_v2 = false;
|
3509
|
-
if (!resource_type_selector_function(type_url, &is_v2)) {
|
3510
|
-
errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3511
|
-
absl::StrCat("resource index ", i, ": Resource is not ",
|
3512
|
-
resource_type_string, ".")));
|
3513
|
-
continue;
|
3514
|
-
}
|
3515
|
-
// Parse the resource.
|
3516
|
-
upb_strview serialized_resource = google_protobuf_Any_value(resources[i]);
|
3517
|
-
auto* resource = proto_parse_function(
|
3518
|
-
serialized_resource.data, serialized_resource.size, context.arena);
|
3423
|
+
class ListenerResourceType : public XdsResourceType {
|
3424
|
+
public:
|
3425
|
+
struct ListenerData : public ResourceData {
|
3426
|
+
XdsApi::LdsUpdate resource;
|
3427
|
+
};
|
3428
|
+
|
3429
|
+
absl::string_view type_url() const override { return XdsApi::kLdsTypeUrl; }
|
3430
|
+
absl::string_view v2_type_url() const override { return kLdsV2TypeUrl; }
|
3431
|
+
|
3432
|
+
absl::StatusOr<DecodeResult> Decode(const EncodingContext& context,
|
3433
|
+
absl::string_view serialized_resource,
|
3434
|
+
bool is_v2) const override {
|
3435
|
+
// Parse serialized proto.
|
3436
|
+
auto* resource = envoy_config_listener_v3_Listener_parse(
|
3437
|
+
serialized_resource.data(), serialized_resource.size(), context.arena);
|
3519
3438
|
if (resource == nullptr) {
|
3520
|
-
|
3521
|
-
absl::StrCat("resource index ", i, ": Can't parse ",
|
3522
|
-
resource_type_string, " resource.")));
|
3523
|
-
continue;
|
3439
|
+
return absl::InvalidArgumentError("Can't parse Listener resource.");
|
3524
3440
|
}
|
3525
|
-
|
3526
|
-
//
|
3527
|
-
|
3528
|
-
|
3529
|
-
|
3530
|
-
|
3531
|
-
|
3532
|
-
|
3533
|
-
|
3534
|
-
|
3441
|
+
MaybeLogListener(context, resource);
|
3442
|
+
// Validate resource.
|
3443
|
+
DecodeResult result;
|
3444
|
+
result.name =
|
3445
|
+
UpbStringToStdString(envoy_config_listener_v3_Listener_name(resource));
|
3446
|
+
auto listener_data = absl::make_unique<ListenerData>();
|
3447
|
+
grpc_error_handle error =
|
3448
|
+
LdsResourceParse(context, resource, is_v2, &listener_data->resource);
|
3449
|
+
if (error != GRPC_ERROR_NONE) {
|
3450
|
+
result.resource =
|
3451
|
+
absl::InvalidArgumentError(grpc_error_std_string(error));
|
3452
|
+
GRPC_ERROR_UNREF(error);
|
3453
|
+
} else {
|
3454
|
+
result.resource = std::move(listener_data);
|
3535
3455
|
}
|
3536
|
-
|
3537
|
-
|
3538
|
-
|
3539
|
-
|
3456
|
+
return std::move(result);
|
3457
|
+
}
|
3458
|
+
};
|
3459
|
+
|
3460
|
+
class RouteConfigResourceType : public XdsResourceType {
|
3461
|
+
public:
|
3462
|
+
struct RouteConfigData : public ResourceData {
|
3463
|
+
XdsApi::RdsUpdate resource;
|
3464
|
+
};
|
3465
|
+
|
3466
|
+
absl::string_view type_url() const override { return XdsApi::kRdsTypeUrl; }
|
3467
|
+
absl::string_view v2_type_url() const override { return kRdsV2TypeUrl; }
|
3468
|
+
|
3469
|
+
absl::StatusOr<DecodeResult> Decode(const EncodingContext& context,
|
3470
|
+
absl::string_view serialized_resource,
|
3471
|
+
bool is_v2) const override {
|
3472
|
+
// Parse serialized proto.
|
3473
|
+
auto* resource = envoy_config_route_v3_RouteConfiguration_parse(
|
3474
|
+
serialized_resource.data(), serialized_resource.size(), context.arena);
|
3475
|
+
if (resource == nullptr) {
|
3476
|
+
return absl::InvalidArgumentError("Can't parse Listener resource.");
|
3540
3477
|
}
|
3541
|
-
|
3542
|
-
|
3543
|
-
|
3544
|
-
|
3545
|
-
|
3546
|
-
|
3478
|
+
MaybeLogRouteConfiguration(context, resource);
|
3479
|
+
// Validate resource.
|
3480
|
+
DecodeResult result;
|
3481
|
+
result.name = UpbStringToStdString(
|
3482
|
+
envoy_config_route_v3_RouteConfiguration_name(resource));
|
3483
|
+
auto route_config_data = absl::make_unique<RouteConfigData>();
|
3484
|
+
grpc_error_handle error = RouteConfigParse(context, resource, is_v2,
|
3485
|
+
&route_config_data->resource);
|
3486
|
+
if (error != GRPC_ERROR_NONE) {
|
3487
|
+
result.resource =
|
3488
|
+
absl::InvalidArgumentError(grpc_error_std_string(error));
|
3489
|
+
GRPC_ERROR_UNREF(error);
|
3490
|
+
} else {
|
3491
|
+
result.resource = std::move(route_config_data);
|
3547
3492
|
}
|
3493
|
+
return std::move(result);
|
3494
|
+
}
|
3495
|
+
};
|
3496
|
+
|
3497
|
+
class ClusterResourceType : public XdsResourceType {
|
3498
|
+
public:
|
3499
|
+
struct ClusterData : public ResourceData {
|
3500
|
+
XdsApi::CdsUpdate resource;
|
3501
|
+
};
|
3502
|
+
|
3503
|
+
absl::string_view type_url() const override { return XdsApi::kCdsTypeUrl; }
|
3504
|
+
absl::string_view v2_type_url() const override { return kCdsV2TypeUrl; }
|
3505
|
+
|
3506
|
+
absl::StatusOr<DecodeResult> Decode(const EncodingContext& context,
|
3507
|
+
absl::string_view serialized_resource,
|
3508
|
+
bool is_v2) const override {
|
3509
|
+
// Parse serialized proto.
|
3510
|
+
auto* resource = envoy_config_cluster_v3_Cluster_parse(
|
3511
|
+
serialized_resource.data(), serialized_resource.size(), context.arena);
|
3512
|
+
if (resource == nullptr) {
|
3513
|
+
return absl::InvalidArgumentError("Can't parse Listener resource.");
|
3514
|
+
}
|
3515
|
+
MaybeLogCluster(context, resource);
|
3548
3516
|
// Validate resource.
|
3549
|
-
|
3517
|
+
DecodeResult result;
|
3518
|
+
result.name =
|
3519
|
+
UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(resource));
|
3520
|
+
auto cluster_data = absl::make_unique<ClusterData>();
|
3550
3521
|
grpc_error_handle error =
|
3551
|
-
|
3522
|
+
CdsResourceParse(context, resource, is_v2, &cluster_data->resource);
|
3552
3523
|
if (error != GRPC_ERROR_NONE) {
|
3553
|
-
|
3554
|
-
|
3555
|
-
|
3556
|
-
error));
|
3557
|
-
resource_names_failed->insert(*resource_name_status);
|
3524
|
+
result.resource =
|
3525
|
+
absl::InvalidArgumentError(grpc_error_std_string(error));
|
3526
|
+
GRPC_ERROR_UNREF(error);
|
3558
3527
|
} else {
|
3559
|
-
|
3560
|
-
auto& resource_data = (*update_map)[*resource_name_status];
|
3561
|
-
resource_data.resource = std::move(update);
|
3562
|
-
resource_data.serialized_proto =
|
3563
|
-
UpbStringToStdString(serialized_resource);
|
3528
|
+
result.resource = std::move(cluster_data);
|
3564
3529
|
}
|
3530
|
+
return std::move(result);
|
3565
3531
|
}
|
3566
|
-
|
3567
|
-
}
|
3532
|
+
};
|
3568
3533
|
|
3569
|
-
|
3570
|
-
|
3571
|
-
|
3572
|
-
|
3573
|
-
|
3574
|
-
} else if (type_url == kCdsV2TypeUrl) {
|
3575
|
-
return XdsApi::kCdsTypeUrl;
|
3576
|
-
} else if (type_url == kEdsV2TypeUrl) {
|
3577
|
-
return XdsApi::kEdsTypeUrl;
|
3578
|
-
}
|
3579
|
-
return std::string(type_url);
|
3580
|
-
}
|
3534
|
+
class EndpointResourceType : public XdsResourceType {
|
3535
|
+
public:
|
3536
|
+
struct EndpointData : public ResourceData {
|
3537
|
+
XdsApi::EdsUpdate resource;
|
3538
|
+
};
|
3581
3539
|
|
3582
|
-
|
3583
|
-
|
3584
|
-
return envoy_config_listener_v3_Listener_name(lds_resource);
|
3585
|
-
}
|
3540
|
+
absl::string_view type_url() const override { return XdsApi::kEdsTypeUrl; }
|
3541
|
+
absl::string_view v2_type_url() const override { return kEdsV2TypeUrl; }
|
3586
3542
|
|
3587
|
-
|
3588
|
-
|
3589
|
-
|
3590
|
-
|
3543
|
+
absl::StatusOr<DecodeResult> Decode(const EncodingContext& context,
|
3544
|
+
absl::string_view serialized_resource,
|
3545
|
+
bool is_v2) const override {
|
3546
|
+
// Parse serialized proto.
|
3547
|
+
auto* resource = envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
|
3548
|
+
serialized_resource.data(), serialized_resource.size(), context.arena);
|
3549
|
+
if (resource == nullptr) {
|
3550
|
+
return absl::InvalidArgumentError("Can't parse Listener resource.");
|
3551
|
+
}
|
3552
|
+
MaybeLogClusterLoadAssignment(context, resource);
|
3553
|
+
// Validate resource.
|
3554
|
+
DecodeResult result;
|
3555
|
+
result.name = UpbStringToStdString(
|
3556
|
+
envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(resource));
|
3557
|
+
auto endpoint_data = absl::make_unique<EndpointData>();
|
3558
|
+
grpc_error_handle error =
|
3559
|
+
EdsResourceParse(context, resource, is_v2, &endpoint_data->resource);
|
3560
|
+
if (error != GRPC_ERROR_NONE) {
|
3561
|
+
result.resource =
|
3562
|
+
absl::InvalidArgumentError(grpc_error_std_string(error));
|
3563
|
+
GRPC_ERROR_UNREF(error);
|
3564
|
+
} else {
|
3565
|
+
result.resource = std::move(endpoint_data);
|
3566
|
+
}
|
3567
|
+
return std::move(result);
|
3568
|
+
}
|
3569
|
+
};
|
3591
3570
|
|
3592
|
-
|
3593
|
-
const
|
3594
|
-
|
3571
|
+
grpc_error_handle AdsResourceParse(
|
3572
|
+
const EncodingContext& context, XdsResourceType* type, size_t idx,
|
3573
|
+
const google_protobuf_Any* resource_any,
|
3574
|
+
const std::map<absl::string_view /*authority*/,
|
3575
|
+
std::set<absl::string_view /*name*/>>&
|
3576
|
+
subscribed_resource_names,
|
3577
|
+
std::function<grpc_error_handle(
|
3578
|
+
absl::string_view, XdsApi::ResourceName,
|
3579
|
+
std::unique_ptr<XdsResourceType::ResourceData>, std::string)>
|
3580
|
+
add_result_func,
|
3581
|
+
std::set<XdsApi::ResourceName>* resource_names_failed) {
|
3582
|
+
// Check the type_url of the resource.
|
3583
|
+
absl::string_view type_url = absl::StripPrefix(
|
3584
|
+
UpbStringToAbsl(google_protobuf_Any_type_url(resource_any)),
|
3585
|
+
"type.googleapis.com/");
|
3586
|
+
bool is_v2 = false;
|
3587
|
+
if (!type->IsType(type_url, &is_v2)) {
|
3588
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3589
|
+
absl::StrCat("resource index ", idx, ": found resource type ", type_url,
|
3590
|
+
" in response for type ", type->type_url()));
|
3591
|
+
}
|
3592
|
+
// Parse the resource.
|
3593
|
+
absl::string_view serialized_resource =
|
3594
|
+
UpbStringToAbsl(google_protobuf_Any_value(resource_any));
|
3595
|
+
absl::StatusOr<XdsResourceType::DecodeResult> result =
|
3596
|
+
type->Decode(context, serialized_resource, is_v2);
|
3597
|
+
if (!result.ok()) {
|
3598
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3599
|
+
absl::StrCat("resource index ", idx, ": ", result.status().ToString()));
|
3600
|
+
}
|
3601
|
+
// Check the resource name.
|
3602
|
+
auto resource_name = ParseResourceNameInternal(
|
3603
|
+
result->name, [type](absl::string_view type_url, bool* is_v2) {
|
3604
|
+
return type->IsType(type_url, is_v2);
|
3605
|
+
});
|
3606
|
+
if (!resource_name.ok()) {
|
3607
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
3608
|
+
"resource index ", idx, ": Cannot parse xDS resource name \"",
|
3609
|
+
result->name, "\""));
|
3610
|
+
}
|
3611
|
+
// Ignore unexpected names.
|
3612
|
+
auto iter = subscribed_resource_names.find(resource_name->authority);
|
3613
|
+
if (iter == subscribed_resource_names.end() ||
|
3614
|
+
iter->second.find(resource_name->id) == iter->second.end()) {
|
3615
|
+
return GRPC_ERROR_NONE;
|
3616
|
+
}
|
3617
|
+
// Check that resource was valid.
|
3618
|
+
if (!result->resource.ok()) {
|
3619
|
+
resource_names_failed->insert(*resource_name);
|
3620
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
3621
|
+
"resource index ", idx, ": ", result->name,
|
3622
|
+
": validation error: ", result->resource.status().ToString()));
|
3623
|
+
}
|
3624
|
+
// Add result.
|
3625
|
+
grpc_error_handle error = add_result_func(result->name, *resource_name,
|
3626
|
+
std::move(*result->resource),
|
3627
|
+
std::string(serialized_resource));
|
3628
|
+
if (error != GRPC_ERROR_NONE) {
|
3629
|
+
resource_names_failed->insert(*resource_name);
|
3630
|
+
return grpc_error_add_child(
|
3631
|
+
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
3632
|
+
"resource index ", idx, ": ", result->name, ": validation error")),
|
3633
|
+
error);
|
3634
|
+
}
|
3635
|
+
return GRPC_ERROR_NONE;
|
3595
3636
|
}
|
3596
3637
|
|
3597
|
-
|
3598
|
-
|
3599
|
-
|
3600
|
-
|
3638
|
+
template <typename UpdateMap, typename ResourceTypeData>
|
3639
|
+
grpc_error_handle AddResult(
|
3640
|
+
UpdateMap* update_map, absl::string_view resource_name_string,
|
3641
|
+
XdsApi::ResourceName resource_name,
|
3642
|
+
std::unique_ptr<XdsResourceType::ResourceData> resource,
|
3643
|
+
std::string serialized_resource) {
|
3644
|
+
// Reject duplicate names.
|
3645
|
+
if (update_map->find(resource_name) != update_map->end()) {
|
3646
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
3647
|
+
absl::StrCat("duplicate resource name \"", resource_name_string, "\""));
|
3648
|
+
}
|
3649
|
+
// Save result.
|
3650
|
+
auto& resource_data = (*update_map)[resource_name];
|
3651
|
+
ResourceTypeData* typed_resource =
|
3652
|
+
static_cast<ResourceTypeData*>(resource.get());
|
3653
|
+
resource_data.resource = std::move(typed_resource->resource);
|
3654
|
+
resource_data.serialized_proto = std::move(serialized_resource);
|
3655
|
+
return GRPC_ERROR_NONE;
|
3601
3656
|
}
|
3602
3657
|
|
3603
3658
|
} // namespace
|
@@ -3637,41 +3692,88 @@ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
|
3637
3692
|
}
|
3638
3693
|
MaybeLogDiscoveryResponse(context, response);
|
3639
3694
|
// Record the type_url, the version_info, and the nonce of the response.
|
3640
|
-
result.type_url = TypeUrlInternalToExternal(
|
3641
|
-
|
3695
|
+
result.type_url = TypeUrlInternalToExternal(absl::StripPrefix(
|
3696
|
+
UpbStringToAbsl(
|
3697
|
+
envoy_service_discovery_v3_DiscoveryResponse_type_url(response)),
|
3698
|
+
"type.googleapis.com/"));
|
3642
3699
|
result.version = UpbStringToStdString(
|
3643
3700
|
envoy_service_discovery_v3_DiscoveryResponse_version_info(response));
|
3644
3701
|
result.nonce = UpbStringToStdString(
|
3645
3702
|
envoy_service_discovery_v3_DiscoveryResponse_nonce(response));
|
3646
|
-
//
|
3647
|
-
|
3648
|
-
|
3649
|
-
|
3650
|
-
|
3651
|
-
|
3652
|
-
|
3653
|
-
|
3654
|
-
|
3655
|
-
|
3656
|
-
|
3657
|
-
|
3658
|
-
|
3659
|
-
|
3660
|
-
|
3661
|
-
|
3662
|
-
|
3663
|
-
|
3664
|
-
|
3665
|
-
|
3666
|
-
|
3667
|
-
|
3668
|
-
|
3669
|
-
|
3670
|
-
|
3671
|
-
|
3672
|
-
|
3673
|
-
|
3674
|
-
|
3703
|
+
// Get the resources from the response.
|
3704
|
+
std::vector<grpc_error_handle> errors;
|
3705
|
+
size_t size;
|
3706
|
+
const google_protobuf_Any* const* resources =
|
3707
|
+
envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
|
3708
|
+
for (size_t i = 0; i < size; ++i) {
|
3709
|
+
// Parse the response according to the resource type.
|
3710
|
+
// TODO(roth): When we have time, change the API here to avoid the need
|
3711
|
+
// for templating and conditionals.
|
3712
|
+
grpc_error_handle parse_error = GRPC_ERROR_NONE;
|
3713
|
+
if (IsLds(result.type_url)) {
|
3714
|
+
ListenerResourceType resource_type;
|
3715
|
+
auto& update_map = result.lds_update_map;
|
3716
|
+
parse_error = AdsResourceParse(
|
3717
|
+
context, &resource_type, i, resources[i], subscribed_listener_names,
|
3718
|
+
[&update_map](absl::string_view resource_name_string,
|
3719
|
+
XdsApi::ResourceName resource_name,
|
3720
|
+
std::unique_ptr<XdsResourceType::ResourceData> resource,
|
3721
|
+
std::string serialized_resource) {
|
3722
|
+
return AddResult<LdsUpdateMap, ListenerResourceType::ListenerData>(
|
3723
|
+
&update_map, resource_name_string, std::move(resource_name),
|
3724
|
+
std::move(resource), std::move(serialized_resource));
|
3725
|
+
},
|
3726
|
+
&result.resource_names_failed);
|
3727
|
+
} else if (IsRds(result.type_url)) {
|
3728
|
+
RouteConfigResourceType resource_type;
|
3729
|
+
auto& update_map = result.rds_update_map;
|
3730
|
+
parse_error = AdsResourceParse(
|
3731
|
+
context, &resource_type, i, resources[i],
|
3732
|
+
subscribed_route_config_names,
|
3733
|
+
[&update_map](absl::string_view resource_name_string,
|
3734
|
+
XdsApi::ResourceName resource_name,
|
3735
|
+
std::unique_ptr<XdsResourceType::ResourceData> resource,
|
3736
|
+
std::string serialized_resource) {
|
3737
|
+
return AddResult<RdsUpdateMap,
|
3738
|
+
RouteConfigResourceType::RouteConfigData>(
|
3739
|
+
&update_map, resource_name_string, std::move(resource_name),
|
3740
|
+
std::move(resource), std::move(serialized_resource));
|
3741
|
+
},
|
3742
|
+
&result.resource_names_failed);
|
3743
|
+
} else if (IsCds(result.type_url)) {
|
3744
|
+
ClusterResourceType resource_type;
|
3745
|
+
auto& update_map = result.cds_update_map;
|
3746
|
+
parse_error = AdsResourceParse(
|
3747
|
+
context, &resource_type, i, resources[i], subscribed_cluster_names,
|
3748
|
+
[&update_map](absl::string_view resource_name_string,
|
3749
|
+
XdsApi::ResourceName resource_name,
|
3750
|
+
std::unique_ptr<XdsResourceType::ResourceData> resource,
|
3751
|
+
std::string serialized_resource) {
|
3752
|
+
return AddResult<CdsUpdateMap, ClusterResourceType::ClusterData>(
|
3753
|
+
&update_map, resource_name_string, std::move(resource_name),
|
3754
|
+
std::move(resource), std::move(serialized_resource));
|
3755
|
+
},
|
3756
|
+
&result.resource_names_failed);
|
3757
|
+
} else if (IsEds(result.type_url)) {
|
3758
|
+
EndpointResourceType resource_type;
|
3759
|
+
auto& update_map = result.eds_update_map;
|
3760
|
+
parse_error = AdsResourceParse(
|
3761
|
+
context, &resource_type, i, resources[i],
|
3762
|
+
subscribed_eds_service_names,
|
3763
|
+
[&update_map](absl::string_view resource_name_string,
|
3764
|
+
XdsApi::ResourceName resource_name,
|
3765
|
+
std::unique_ptr<XdsResourceType::ResourceData> resource,
|
3766
|
+
std::string serialized_resource) {
|
3767
|
+
return AddResult<EdsUpdateMap, EndpointResourceType::EndpointData>(
|
3768
|
+
&update_map, resource_name_string, std::move(resource_name),
|
3769
|
+
std::move(resource), std::move(serialized_resource));
|
3770
|
+
},
|
3771
|
+
&result.resource_names_failed);
|
3772
|
+
}
|
3773
|
+
if (parse_error != GRPC_ERROR_NONE) errors.push_back(parse_error);
|
3774
|
+
}
|
3775
|
+
result.parse_error =
|
3776
|
+
GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing ADS response", &errors);
|
3675
3777
|
return result;
|
3676
3778
|
}
|
3677
3779
|
|
@@ -3910,9 +4012,12 @@ std::string XdsApi::AssembleClientConfig(
|
|
3910
4012
|
PopulateNode(context, node_, build_version_, user_agent_name_,
|
3911
4013
|
user_agent_version_, node);
|
3912
4014
|
// Dump each resource.
|
4015
|
+
std::vector<std::string> type_url_storage;
|
3913
4016
|
for (const auto& p : resource_type_metadata_map) {
|
3914
4017
|
absl::string_view type_url = p.first;
|
3915
4018
|
const ResourceMetadataMap& resource_metadata_map = p.second;
|
4019
|
+
type_url_storage.emplace_back(
|
4020
|
+
absl::StrCat("type.googleapis.com/", type_url));
|
3916
4021
|
for (const auto& q : resource_metadata_map) {
|
3917
4022
|
absl::string_view resource_name = q.first;
|
3918
4023
|
const ResourceMetadata& metadata = *q.second;
|
@@ -3920,7 +4025,7 @@ std::string XdsApi::AssembleClientConfig(
|
|
3920
4025
|
envoy_service_status_v3_ClientConfig_add_generic_xds_configs(
|
3921
4026
|
client_config, context.arena);
|
3922
4027
|
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_type_url(
|
3923
|
-
entry, StdStringToUpbString(
|
4028
|
+
entry, StdStringToUpbString(type_url_storage.back()));
|
3924
4029
|
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_name(
|
3925
4030
|
entry, StdStringToUpbString(resource_name));
|
3926
4031
|
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_client_status(
|
@@ -3933,8 +4038,8 @@ std::string XdsApi::AssembleClientConfig(
|
|
3933
4038
|
auto* any_field =
|
3934
4039
|
envoy_service_status_v3_ClientConfig_GenericXdsConfig_mutable_xds_config(
|
3935
4040
|
entry, context.arena);
|
3936
|
-
google_protobuf_Any_set_type_url(
|
3937
|
-
|
4041
|
+
google_protobuf_Any_set_type_url(
|
4042
|
+
any_field, StdStringToUpbString(type_url_storage.back()));
|
3938
4043
|
google_protobuf_Any_set_value(
|
3939
4044
|
any_field, StdStringToUpbString(metadata.serialized_proto));
|
3940
4045
|
}
|