grpc 1.41.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 +126 -62
- data/etc/roots.pem +335 -326
- data/include/grpc/event_engine/event_engine.h +118 -54
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
- data/include/grpc/event_engine/memory_allocator.h +226 -0
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +294 -145
- data/include/grpc/grpc_security_constants.h +2 -14
- data/include/grpc/impl/codegen/port_platform.h +14 -3
- data/src/core/ext/filters/client_channel/backend_metric.cc +21 -23
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -2
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +254 -278
- data/src/core/ext/filters/client_channel/client_channel.h +79 -31
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +7 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -5
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- 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/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +167 -84
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- 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/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +32 -81
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +87 -34
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +53 -106
- data/src/core/ext/filters/client_channel/lb_policy.h +86 -60
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +14 -8
- 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 +11 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +9 -5
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- 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 +281 -344
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +12 -15
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +89 -147
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +20 -20
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +48 -67
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +51 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +69 -83
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- 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/{workarounds/workaround_cronet_compression_filter.h → server_config_selector/server_config_selector_filter.h} +11 -6
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -23
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +25 -27
- 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 +32 -52
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +68 -95
- 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 +108 -116
- 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 +26 -23
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +119 -15
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +41 -5
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +195 -183
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +12 -7
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +121 -116
- 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 +277 -208
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +141 -1
- 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 +171 -125
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +55 -4
- 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 +90 -71
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +17 -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 +121 -92
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -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 -44
- 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 +99 -78
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +19 -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 +508 -442
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +51 -19
- 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 +68 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +156 -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 -5
- 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 +103 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +199 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +14 -3
- 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 +25 -13
- 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 +20 -8
- 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 +19 -8
- 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 +28 -16
- 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 +19 -8
- 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 +71 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +132 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +44 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +85 -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 +307 -336
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- 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 +100 -138
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- 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 +61 -77
- 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 +61 -79
- 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 +80 -99
- 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 +325 -427
- 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 +7 -15
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +21 -30
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +7 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +7 -11
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +15 -19
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +27 -33
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +18 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +35 -41
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +21 -25
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- 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 +693 -625
- data/src/core/ext/xds/xds_api.h +137 -83
- data/src/core/ext/xds/xds_bootstrap.cc +6 -3
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_certificate_provider.h +1 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +112 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +752 -435
- data/src/core/ext/xds/xds_client.h +83 -69
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- 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 +976 -264
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.h +389 -88
- data/src/core/lib/backoff/backoff.cc +3 -3
- data/src/core/lib/channel/channel_args.cc +25 -7
- data/src/core/lib/channel/channel_args.h +11 -1
- 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 +3 -5
- data/src/core/lib/channel/channel_trace.cc +7 -7
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +13 -9
- data/src/core/lib/compression/compression_args.h +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +46 -2
- data/src/core/lib/config/core_configuration.h +50 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- 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/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +7 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- 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/memory.h +6 -0
- 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.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +13 -2
- data/src/core/lib/gprpp/table.h +423 -0
- data/src/core/lib/http/httpcli.cc +220 -198
- data/src/core/lib/http/httpcli.h +14 -12
- data/src/core/lib/http/parser.cc +2 -2
- 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 +29 -12
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +14 -30
- 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/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +5 -6
- data/src/core/lib/iomgr/event_engine/iomgr.cc +6 -26
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +12 -8
- data/src/core/lib/iomgr/event_engine/tcp.cc +16 -13
- data/src/core/lib/iomgr/event_engine/timer.cc +10 -4
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/exec_ctx.h +11 -11
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +16 -33
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- 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 +6 -12
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -11
- data/src/core/lib/iomgr/tcp_client_posix.cc +16 -41
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +3 -13
- 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 +32 -38
- 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 +7 -16
- data/src/core/lib/iomgr/tcp_server_posix.cc +20 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +9 -17
- data/src/core/lib/iomgr/tcp_windows.cc +4 -9
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- 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 +69 -1
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- 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/{transport/authority_override.h → resource_quota/thread_quota.cc} +22 -16
- 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/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +20 -24
- data/src/core/lib/security/authorization/evaluate_args.h +2 -1
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +15 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -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 +56 -21
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- 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 +5 -7
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +9 -15
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -22
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- 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 +5 -6
- 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/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +11 -3
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +345 -195
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -43
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +75 -45
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- 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 -23
- data/src/core/lib/slice/slice.h +341 -0
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +9 -5
- data/src/core/lib/slice/slice_intern.cc +9 -14
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +125 -0
- data/src/core/lib/slice/slice_refcount_base.h +181 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +377 -0
- data/src/core/lib/slice/static_slice.h +300 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/lib/surface/builtins.h +26 -0
- data/src/core/lib/surface/call.cc +171 -162
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +23 -61
- data/src/core/lib/surface/channel.h +2 -21
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +8 -7
- data/src/core/lib/surface/init.cc +0 -40
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +41 -27
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +45 -37
- data/src/core/lib/surface/server.h +25 -19
- data/src/core/lib/surface/validate_metadata.cc +7 -4
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -2
- data/src/core/lib/transport/byte_stream.cc +4 -0
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +6 -5
- data/src/core/lib/transport/metadata_batch.cc +40 -371
- data/src/core/lib/transport/metadata_batch.h +980 -71
- data/src/core/lib/transport/{authority_override.cc → parsed_metadata.cc} +12 -17
- data/src/core/lib/transport/parsed_metadata.h +382 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +632 -849
- data/src/core/lib/transport/static_metadata.h +115 -397
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +8 -31
- data/src/core/lib/transport/transport.h +0 -1
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- 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 +66 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +43 -80
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +40 -3
- data/src/core/tsi/ssl_transport_security.h +1 -0
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -10
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +15 -15
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.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.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
- 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/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +684 -674
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +54 -37
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- 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 +66 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +56 -280
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -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/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +30 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- 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/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +189 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +232 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
- 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 +2 -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 +5 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1326 -469
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
- 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/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +15 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +29 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +34 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +541 -134
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -11
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +66 -46
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- 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 +160 -87
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- 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 -1104
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- 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
|
|
@@ -82,24 +80,25 @@
|
|
82
80
|
#include "google/protobuf/timestamp.upb.h"
|
83
81
|
#include "google/protobuf/wrappers.upb.h"
|
84
82
|
#include "google/rpc/status.upb.h"
|
85
|
-
#include "udpa/type/v1/typed_struct.upb.h"
|
86
83
|
#include "upb/text_encode.h"
|
87
84
|
#include "upb/upb.h"
|
88
85
|
#include "upb/upb.hpp"
|
86
|
+
#include "xds/type/v3/typed_struct.upb.h"
|
89
87
|
|
90
88
|
#include <grpc/impl/codegen/log.h>
|
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"
|
97
|
-
#include "src/core/lib/gpr/useful.h"
|
98
96
|
#include "src/core/lib/gprpp/host_port.h"
|
99
97
|
#include "src/core/lib/iomgr/error.h"
|
100
98
|
#include "src/core/lib/iomgr/sockaddr.h"
|
101
99
|
#include "src/core/lib/iomgr/socket_utils.h"
|
102
100
|
#include "src/core/lib/slice/slice_utils.h"
|
101
|
+
#include "src/core/lib/uri/uri_parser.h"
|
103
102
|
|
104
103
|
namespace grpc_core {
|
105
104
|
|
@@ -116,11 +115,58 @@ bool XdsAggregateAndLogicalDnsClusterEnabled() {
|
|
116
115
|
return parse_succeeded && parsed_value;
|
117
116
|
}
|
118
117
|
|
118
|
+
// TODO(yashykt): Remove once RBAC is no longer experimental
|
119
|
+
bool XdsRbacEnabled() {
|
120
|
+
char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_RBAC");
|
121
|
+
bool parsed_value;
|
122
|
+
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
123
|
+
gpr_free(value);
|
124
|
+
return parse_succeeded && parsed_value;
|
125
|
+
}
|
126
|
+
|
127
|
+
//
|
128
|
+
// XdsApi::RetryPolicy
|
129
|
+
//
|
130
|
+
|
131
|
+
std::string XdsApi::RetryPolicy::RetryBackOff::ToString() const {
|
132
|
+
std::vector<std::string> contents;
|
133
|
+
contents.push_back(
|
134
|
+
absl::StrCat("RetryBackOff Base: ", base_interval.ToString()));
|
135
|
+
contents.push_back(
|
136
|
+
absl::StrCat("RetryBackOff max: ", max_interval.ToString()));
|
137
|
+
return absl::StrJoin(contents, ",");
|
138
|
+
}
|
139
|
+
|
140
|
+
std::string XdsApi::RetryPolicy::ToString() const {
|
141
|
+
std::vector<std::string> contents;
|
142
|
+
contents.push_back(absl::StrFormat("num_retries=%d", num_retries));
|
143
|
+
contents.push_back(retry_back_off.ToString());
|
144
|
+
return absl::StrCat("{", absl::StrJoin(contents, ","), "}");
|
145
|
+
}
|
146
|
+
|
147
|
+
//
|
148
|
+
// XdsApi::Route::Matchers
|
149
|
+
//
|
150
|
+
|
151
|
+
std::string XdsApi::Route::Matchers::ToString() const {
|
152
|
+
std::vector<std::string> contents;
|
153
|
+
contents.push_back(
|
154
|
+
absl::StrFormat("PathMatcher{%s}", path_matcher.ToString()));
|
155
|
+
for (const HeaderMatcher& header_matcher : header_matchers) {
|
156
|
+
contents.push_back(header_matcher.ToString());
|
157
|
+
}
|
158
|
+
if (fraction_per_million.has_value()) {
|
159
|
+
contents.push_back(absl::StrFormat("Fraction Per Million %d",
|
160
|
+
fraction_per_million.value()));
|
161
|
+
}
|
162
|
+
return absl::StrJoin(contents, "\n");
|
163
|
+
}
|
164
|
+
|
119
165
|
//
|
120
|
-
// XdsApi::Route::HashPolicy
|
166
|
+
// XdsApi::Route::RouteAction::HashPolicy
|
121
167
|
//
|
122
168
|
|
123
|
-
XdsApi::Route::HashPolicy::HashPolicy(const HashPolicy& other)
|
169
|
+
XdsApi::Route::RouteAction::HashPolicy::HashPolicy(const HashPolicy& other)
|
124
170
|
: type(other.type),
|
125
171
|
header_name(other.header_name),
|
126
172
|
regex_substitution(other.regex_substitution) {
|
@@ -130,8 +176,8 @@ XdsApi::Route::HashPolicy::HashPolicy(const HashPolicy& other)
|
|
130
176
|
}
|
131
177
|
}
|
132
178
|
|
133
|
-
XdsApi::Route::HashPolicy&
|
134
|
-
|
179
|
+
XdsApi::Route::RouteAction::HashPolicy&
|
180
|
+
XdsApi::Route::RouteAction::HashPolicy::operator=(const HashPolicy& other) {
|
135
181
|
type = other.type;
|
136
182
|
header_name = other.header_name;
|
137
183
|
if (other.regex != nullptr) {
|
@@ -142,14 +188,14 @@ XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
|
|
142
188
|
return *this;
|
143
189
|
}
|
144
190
|
|
145
|
-
XdsApi::Route::HashPolicy::HashPolicy(HashPolicy&& other) noexcept
|
191
|
+
XdsApi::Route::RouteAction::HashPolicy::HashPolicy(HashPolicy&& other) noexcept
|
146
192
|
: type(other.type),
|
147
193
|
header_name(std::move(other.header_name)),
|
148
194
|
regex(std::move(other.regex)),
|
149
195
|
regex_substitution(std::move(other.regex_substitution)) {}
|
150
196
|
|
151
|
-
XdsApi::Route::HashPolicy&
|
152
|
-
|
197
|
+
XdsApi::Route::RouteAction::HashPolicy&
|
198
|
+
XdsApi::Route::RouteAction::HashPolicy::operator=(HashPolicy&& other) noexcept {
|
153
199
|
type = other.type;
|
154
200
|
header_name = std::move(other.header_name);
|
155
201
|
regex = std::move(other.regex);
|
@@ -157,7 +203,7 @@ XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
|
|
157
203
|
return *this;
|
158
204
|
}
|
159
205
|
|
160
|
-
bool XdsApi::Route::HashPolicy::HashPolicy::operator==(
|
206
|
+
bool XdsApi::Route::RouteAction::HashPolicy::HashPolicy::operator==(
|
161
207
|
const HashPolicy& other) const {
|
162
208
|
if (type != other.type) return false;
|
163
209
|
if (type == Type::HEADER) {
|
@@ -173,7 +219,7 @@ bool XdsApi::Route::HashPolicy::HashPolicy::operator==(
|
|
173
219
|
return true;
|
174
220
|
}
|
175
221
|
|
176
|
-
std::string XdsApi::Route::HashPolicy::ToString() const {
|
222
|
+
std::string XdsApi::Route::RouteAction::HashPolicy::ToString() const {
|
177
223
|
std::vector<std::string> contents;
|
178
224
|
switch (type) {
|
179
225
|
case Type::HEADER:
|
@@ -194,43 +240,10 @@ std::string XdsApi::Route::HashPolicy::ToString() const {
|
|
194
240
|
}
|
195
241
|
|
196
242
|
//
|
197
|
-
// XdsApi::Route::
|
198
|
-
//
|
199
|
-
std::string XdsApi::Route::RetryPolicy::RetryBackOff::ToString() const {
|
200
|
-
std::vector<std::string> contents;
|
201
|
-
contents.push_back(
|
202
|
-
absl::StrCat("RetryBackOff Base: ", base_interval.ToString()));
|
203
|
-
contents.push_back(
|
204
|
-
absl::StrCat("RetryBackOff max: ", max_interval.ToString()));
|
205
|
-
return absl::StrJoin(contents, ",");
|
206
|
-
}
|
207
|
-
|
208
|
-
std::string XdsApi::Route::RetryPolicy::ToString() const {
|
209
|
-
std::vector<std::string> contents;
|
210
|
-
contents.push_back(absl::StrFormat("num_retries=%d", num_retries));
|
211
|
-
contents.push_back(retry_back_off.ToString());
|
212
|
-
return absl::StrJoin(contents, ",");
|
213
|
-
}
|
214
|
-
|
215
|
-
//
|
216
|
-
// XdsApi::Route
|
243
|
+
// XdsApi::Route::RouteAction::ClusterWeight
|
217
244
|
//
|
218
245
|
|
219
|
-
std::string XdsApi::Route::
|
220
|
-
std::vector<std::string> contents;
|
221
|
-
contents.push_back(
|
222
|
-
absl::StrFormat("PathMatcher{%s}", path_matcher.ToString()));
|
223
|
-
for (const HeaderMatcher& header_matcher : header_matchers) {
|
224
|
-
contents.push_back(header_matcher.ToString());
|
225
|
-
}
|
226
|
-
if (fraction_per_million.has_value()) {
|
227
|
-
contents.push_back(absl::StrFormat("Fraction Per Million %d",
|
228
|
-
fraction_per_million.value()));
|
229
|
-
}
|
230
|
-
return absl::StrJoin(contents, "\n");
|
231
|
-
}
|
232
|
-
|
233
|
-
std::string XdsApi::Route::ClusterWeight::ToString() const {
|
246
|
+
std::string XdsApi::Route::RouteAction::ClusterWeight::ToString() const {
|
234
247
|
std::vector<std::string> contents;
|
235
248
|
contents.push_back(absl::StrCat("cluster=", name));
|
236
249
|
contents.push_back(absl::StrCat("weight=", weight));
|
@@ -247,15 +260,17 @@ std::string XdsApi::Route::ClusterWeight::ToString() const {
|
|
247
260
|
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
248
261
|
}
|
249
262
|
|
250
|
-
|
263
|
+
//
|
264
|
+
// XdsApi::Route::RouteAction
|
265
|
+
//
|
266
|
+
|
267
|
+
std::string XdsApi::Route::RouteAction::ToString() const {
|
251
268
|
std::vector<std::string> contents;
|
252
|
-
contents.push_back(matchers.ToString());
|
253
269
|
for (const HashPolicy& hash_policy : hash_policies) {
|
254
270
|
contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
|
255
271
|
}
|
256
272
|
if (retry_policy.has_value()) {
|
257
|
-
contents.push_back(
|
258
|
-
absl::StrCat("retry_policy={", retry_policy->ToString(), "}"));
|
273
|
+
contents.push_back(absl::StrCat("retry_policy=", retry_policy->ToString()));
|
259
274
|
}
|
260
275
|
if (!cluster_name.empty()) {
|
261
276
|
contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
|
@@ -266,6 +281,25 @@ std::string XdsApi::Route::ToString() const {
|
|
266
281
|
if (max_stream_duration.has_value()) {
|
267
282
|
contents.push_back(max_stream_duration->ToString());
|
268
283
|
}
|
284
|
+
return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
|
285
|
+
}
|
286
|
+
|
287
|
+
//
|
288
|
+
// XdsApi::Route
|
289
|
+
//
|
290
|
+
|
291
|
+
std::string XdsApi::Route::ToString() const {
|
292
|
+
std::vector<std::string> contents;
|
293
|
+
contents.push_back(matchers.ToString());
|
294
|
+
auto* route_action = absl::get_if<XdsApi::Route::RouteAction>(&action);
|
295
|
+
if (route_action != nullptr) {
|
296
|
+
contents.push_back(absl::StrCat("route=", route_action->ToString()));
|
297
|
+
} else if (absl::holds_alternative<XdsApi::Route::NonForwardingAction>(
|
298
|
+
action)) {
|
299
|
+
contents.push_back("non_forwarding_action={}");
|
300
|
+
} else {
|
301
|
+
contents.push_back("unknown_action={}");
|
302
|
+
}
|
269
303
|
if (!typed_per_filter_config.empty()) {
|
270
304
|
contents.push_back("typed_per_filter_config={");
|
271
305
|
for (const auto& p : typed_per_filter_config) {
|
@@ -310,104 +344,6 @@ std::string XdsApi::RdsUpdate::ToString() const {
|
|
310
344
|
return absl::StrJoin(vhosts, "");
|
311
345
|
}
|
312
346
|
|
313
|
-
namespace {
|
314
|
-
|
315
|
-
// Better match type has smaller value.
|
316
|
-
enum MatchType {
|
317
|
-
EXACT_MATCH,
|
318
|
-
SUFFIX_MATCH,
|
319
|
-
PREFIX_MATCH,
|
320
|
-
UNIVERSE_MATCH,
|
321
|
-
INVALID_MATCH,
|
322
|
-
};
|
323
|
-
|
324
|
-
// Returns true if match succeeds.
|
325
|
-
bool DomainMatch(MatchType match_type, const std::string& domain_pattern_in,
|
326
|
-
const std::string& expected_host_name_in) {
|
327
|
-
// Normalize the args to lower-case. Domain matching is case-insensitive.
|
328
|
-
std::string domain_pattern = domain_pattern_in;
|
329
|
-
std::string expected_host_name = expected_host_name_in;
|
330
|
-
std::transform(domain_pattern.begin(), domain_pattern.end(),
|
331
|
-
domain_pattern.begin(),
|
332
|
-
[](unsigned char c) { return std::tolower(c); });
|
333
|
-
std::transform(expected_host_name.begin(), expected_host_name.end(),
|
334
|
-
expected_host_name.begin(),
|
335
|
-
[](unsigned char c) { return std::tolower(c); });
|
336
|
-
if (match_type == EXACT_MATCH) {
|
337
|
-
return domain_pattern == expected_host_name;
|
338
|
-
} else if (match_type == SUFFIX_MATCH) {
|
339
|
-
// Asterisk must match at least one char.
|
340
|
-
if (expected_host_name.size() < domain_pattern.size()) return false;
|
341
|
-
absl::string_view pattern_suffix(domain_pattern.c_str() + 1);
|
342
|
-
absl::string_view host_suffix(expected_host_name.c_str() +
|
343
|
-
expected_host_name.size() -
|
344
|
-
pattern_suffix.size());
|
345
|
-
return pattern_suffix == host_suffix;
|
346
|
-
} else if (match_type == PREFIX_MATCH) {
|
347
|
-
// Asterisk must match at least one char.
|
348
|
-
if (expected_host_name.size() < domain_pattern.size()) return false;
|
349
|
-
absl::string_view pattern_prefix(domain_pattern.c_str(),
|
350
|
-
domain_pattern.size() - 1);
|
351
|
-
absl::string_view host_prefix(expected_host_name.c_str(),
|
352
|
-
pattern_prefix.size());
|
353
|
-
return pattern_prefix == host_prefix;
|
354
|
-
} else {
|
355
|
-
return match_type == UNIVERSE_MATCH;
|
356
|
-
}
|
357
|
-
}
|
358
|
-
|
359
|
-
MatchType DomainPatternMatchType(const std::string& domain_pattern) {
|
360
|
-
if (domain_pattern.empty()) return INVALID_MATCH;
|
361
|
-
if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
|
362
|
-
if (domain_pattern == "*") return UNIVERSE_MATCH;
|
363
|
-
if (domain_pattern[0] == '*') return SUFFIX_MATCH;
|
364
|
-
if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
|
365
|
-
return INVALID_MATCH;
|
366
|
-
}
|
367
|
-
|
368
|
-
} // namespace
|
369
|
-
|
370
|
-
XdsApi::RdsUpdate::VirtualHost* XdsApi::RdsUpdate::FindVirtualHostForDomain(
|
371
|
-
const std::string& domain) {
|
372
|
-
// Find the best matched virtual host.
|
373
|
-
// The search order for 4 groups of domain patterns:
|
374
|
-
// 1. Exact match.
|
375
|
-
// 2. Suffix match (e.g., "*ABC").
|
376
|
-
// 3. Prefix match (e.g., "ABC*").
|
377
|
-
// 4. Universe match (i.e., "*").
|
378
|
-
// Within each group, longest match wins.
|
379
|
-
// If the same best matched domain pattern appears in multiple virtual hosts,
|
380
|
-
// the first matched virtual host wins.
|
381
|
-
VirtualHost* target_vhost = nullptr;
|
382
|
-
MatchType best_match_type = INVALID_MATCH;
|
383
|
-
size_t longest_match = 0;
|
384
|
-
// Check each domain pattern in each virtual host to determine the best
|
385
|
-
// matched virtual host.
|
386
|
-
for (VirtualHost& vhost : virtual_hosts) {
|
387
|
-
for (const std::string& domain_pattern : vhost.domains) {
|
388
|
-
// Check the match type first. Skip the pattern if it's not better than
|
389
|
-
// current match.
|
390
|
-
const MatchType match_type = DomainPatternMatchType(domain_pattern);
|
391
|
-
// This should be caught by RouteConfigParse().
|
392
|
-
GPR_ASSERT(match_type != INVALID_MATCH);
|
393
|
-
if (match_type > best_match_type) continue;
|
394
|
-
if (match_type == best_match_type &&
|
395
|
-
domain_pattern.size() <= longest_match) {
|
396
|
-
continue;
|
397
|
-
}
|
398
|
-
// Skip if match fails.
|
399
|
-
if (!DomainMatch(match_type, domain_pattern, domain)) continue;
|
400
|
-
// Choose this match.
|
401
|
-
target_vhost = &vhost;
|
402
|
-
best_match_type = match_type;
|
403
|
-
longest_match = domain_pattern.size();
|
404
|
-
if (best_match_type == EXACT_MATCH) break;
|
405
|
-
}
|
406
|
-
if (best_match_type == EXACT_MATCH) break;
|
407
|
-
}
|
408
|
-
return target_vhost;
|
409
|
-
}
|
410
|
-
|
411
347
|
//
|
412
348
|
// XdsApi::CommonTlsContext::CertificateValidationContext
|
413
349
|
//
|
@@ -786,25 +722,22 @@ std::string XdsApi::EdsUpdate::ToString() const {
|
|
786
722
|
// XdsApi
|
787
723
|
//
|
788
724
|
|
789
|
-
|
790
|
-
|
791
|
-
const char* XdsApi::
|
792
|
-
|
793
|
-
const char* XdsApi::kCdsTypeUrl =
|
794
|
-
"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";
|
795
730
|
const char* XdsApi::kEdsTypeUrl =
|
796
|
-
"
|
731
|
+
"envoy.config.endpoint.v3.ClusterLoadAssignment";
|
797
732
|
|
798
733
|
namespace {
|
799
734
|
|
800
|
-
const char* kLdsV2TypeUrl = "
|
801
|
-
const char* kRdsV2TypeUrl =
|
802
|
-
|
803
|
-
const char*
|
804
|
-
const char* kEdsV2TypeUrl =
|
805
|
-
"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";
|
806
739
|
|
807
|
-
bool
|
740
|
+
bool IsLdsInternal(absl::string_view type_url, bool* is_v2 = nullptr) {
|
808
741
|
if (type_url == XdsApi::kLdsTypeUrl) return true;
|
809
742
|
if (type_url == kLdsV2TypeUrl) {
|
810
743
|
if (is_v2 != nullptr) *is_v2 = true;
|
@@ -813,18 +746,118 @@ bool IsLds(absl::string_view type_url, bool* is_v2 = nullptr) {
|
|
813
746
|
return false;
|
814
747
|
}
|
815
748
|
|
816
|
-
bool
|
749
|
+
bool IsRdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
817
750
|
return type_url == XdsApi::kRdsTypeUrl || type_url == kRdsV2TypeUrl;
|
818
751
|
}
|
819
752
|
|
820
|
-
bool
|
753
|
+
bool IsCdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
821
754
|
return type_url == XdsApi::kCdsTypeUrl || type_url == kCdsV2TypeUrl;
|
822
755
|
}
|
823
756
|
|
824
|
-
bool
|
757
|
+
bool IsEdsInternal(absl::string_view type_url, bool* /*is_v2*/ = nullptr) {
|
825
758
|
return type_url == XdsApi::kEdsTypeUrl || type_url == kEdsV2TypeUrl;
|
826
759
|
}
|
827
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
|
+
|
833
|
+
absl::StatusOr<XdsApi::ResourceName> ParseResourceNameInternal(
|
834
|
+
absl::string_view name,
|
835
|
+
std::function<bool(absl::string_view, bool*)> is_expected_type) {
|
836
|
+
// Old-style names use the empty string for authority.
|
837
|
+
// authority is prefixed with "old:" to indicate that it's an old-style name.
|
838
|
+
if (!absl::StartsWith(name, "xdstp:")) {
|
839
|
+
return XdsApi::ResourceName{"old:", std::string(name)};
|
840
|
+
}
|
841
|
+
// New style name. Parse URI.
|
842
|
+
auto uri = URI::Parse(name);
|
843
|
+
if (!uri.ok()) return uri.status();
|
844
|
+
// Split the resource type off of the path to get the id.
|
845
|
+
std::pair<absl::string_view, absl::string_view> path_parts =
|
846
|
+
absl::StrSplit(uri->path(), absl::MaxSplits('/', 1));
|
847
|
+
if (!is_expected_type(path_parts.first, nullptr)) {
|
848
|
+
return absl::InvalidArgumentError(
|
849
|
+
"xdstp URI path must indicate valid xDS resource type");
|
850
|
+
}
|
851
|
+
std::vector<std::pair<absl::string_view, absl::string_view>> query_parameters(
|
852
|
+
uri->query_parameter_map().begin(), uri->query_parameter_map().end());
|
853
|
+
std::sort(query_parameters.begin(), query_parameters.end());
|
854
|
+
return XdsApi::ResourceName{
|
855
|
+
absl::StrCat("xdstp:", uri->authority()),
|
856
|
+
absl::StrCat(
|
857
|
+
path_parts.second, (query_parameters.empty() ? "?" : ""),
|
858
|
+
absl::StrJoin(query_parameters, "&", absl::PairFormatter("=")))};
|
859
|
+
}
|
860
|
+
|
828
861
|
} // namespace
|
829
862
|
|
830
863
|
// If gRPC is built with -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="...", that string
|
@@ -881,17 +914,41 @@ XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
|
|
881
914
|
XdsHttpFilterRegistry::PopulateSymtab(symtab_.ptr());
|
882
915
|
}
|
883
916
|
|
884
|
-
|
917
|
+
bool XdsApi::IsLds(absl::string_view type_url) {
|
918
|
+
return IsLdsInternal(type_url);
|
919
|
+
}
|
885
920
|
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
|
921
|
+
bool XdsApi::IsRds(absl::string_view type_url) {
|
922
|
+
return IsRdsInternal(type_url);
|
923
|
+
}
|
924
|
+
|
925
|
+
bool XdsApi::IsCds(absl::string_view type_url) {
|
926
|
+
return IsCdsInternal(type_url);
|
927
|
+
}
|
928
|
+
|
929
|
+
bool XdsApi::IsEds(absl::string_view type_url) {
|
930
|
+
return IsEdsInternal(type_url);
|
931
|
+
}
|
932
|
+
|
933
|
+
absl::StatusOr<XdsApi::ResourceName> XdsApi::ParseResourceName(
|
934
|
+
absl::string_view name, bool (*is_expected_type)(absl::string_view)) {
|
935
|
+
return ParseResourceNameInternal(
|
936
|
+
name, [is_expected_type](absl::string_view type, bool*) {
|
937
|
+
return is_expected_type(type);
|
938
|
+
});
|
939
|
+
}
|
940
|
+
|
941
|
+
std::string XdsApi::ConstructFullResourceName(absl::string_view authority,
|
942
|
+
absl::string_view resource_type,
|
943
|
+
absl::string_view name) {
|
944
|
+
if (absl::ConsumePrefix(&authority, "xdstp:")) {
|
945
|
+
return absl::StrCat("xdstp://", authority, "/", resource_type, "/", name);
|
946
|
+
} else {
|
947
|
+
return std::string(absl::StripPrefix(name, "old:"));
|
948
|
+
}
|
949
|
+
}
|
950
|
+
|
951
|
+
namespace {
|
895
952
|
|
896
953
|
// Works for both std::string and absl::string_view.
|
897
954
|
template <typename T>
|
@@ -1072,30 +1129,12 @@ grpc_slice SerializeDiscoveryRequest(
|
|
1072
1129
|
return grpc_slice_from_copied_buffer(output, output_length);
|
1073
1130
|
}
|
1074
1131
|
|
1075
|
-
absl::string_view TypeUrlExternalToInternal(bool use_v3,
|
1076
|
-
const std::string& type_url) {
|
1077
|
-
if (!use_v3) {
|
1078
|
-
if (type_url == XdsApi::kLdsTypeUrl) {
|
1079
|
-
return kLdsV2TypeUrl;
|
1080
|
-
}
|
1081
|
-
if (type_url == XdsApi::kRdsTypeUrl) {
|
1082
|
-
return kRdsV2TypeUrl;
|
1083
|
-
}
|
1084
|
-
if (type_url == XdsApi::kCdsTypeUrl) {
|
1085
|
-
return kCdsV2TypeUrl;
|
1086
|
-
}
|
1087
|
-
if (type_url == XdsApi::kEdsTypeUrl) {
|
1088
|
-
return kEdsV2TypeUrl;
|
1089
|
-
}
|
1090
|
-
}
|
1091
|
-
return type_url;
|
1092
|
-
}
|
1093
|
-
|
1094
1132
|
} // namespace
|
1095
1133
|
|
1096
1134
|
grpc_slice XdsApi::CreateAdsRequest(
|
1097
1135
|
const XdsBootstrap::XdsServer& server, const std::string& type_url,
|
1098
|
-
const std::
|
1136
|
+
const std::map<absl::string_view /*authority*/,
|
1137
|
+
std::set<absl::string_view /*name*/>>& resource_names,
|
1099
1138
|
const std::string& version, const std::string& nonce,
|
1100
1139
|
grpc_error_handle error, bool populate_node) {
|
1101
1140
|
upb::Arena arena;
|
@@ -1111,8 +1150,10 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1111
1150
|
// Set type_url.
|
1112
1151
|
absl::string_view real_type_url =
|
1113
1152
|
TypeUrlExternalToInternal(server.ShouldUseV3(), type_url);
|
1153
|
+
std::string real_type_url_str =
|
1154
|
+
absl::StrCat("type.googleapis.com/", real_type_url);
|
1114
1155
|
envoy_service_discovery_v3_DiscoveryRequest_set_type_url(
|
1115
|
-
request, StdStringToUpbString(
|
1156
|
+
request, StdStringToUpbString(real_type_url_str));
|
1116
1157
|
// Set version_info.
|
1117
1158
|
if (!version.empty()) {
|
1118
1159
|
envoy_service_discovery_v3_DiscoveryRequest_set_version_info(
|
@@ -1148,10 +1189,27 @@ grpc_slice XdsApi::CreateAdsRequest(
|
|
1148
1189
|
PopulateNode(context, node_, build_version_, user_agent_name_,
|
1149
1190
|
user_agent_version_, node_msg);
|
1150
1191
|
}
|
1192
|
+
// A vector for temporary local storage of resource name strings.
|
1193
|
+
std::vector<std::string> resource_name_storage;
|
1194
|
+
// Make sure the vector is sized right up-front, so that reallocations
|
1195
|
+
// don't move the strings out from under the upb proto object that
|
1196
|
+
// points to them.
|
1197
|
+
size_t size = 0;
|
1198
|
+
for (const auto& p : resource_names) {
|
1199
|
+
size += p.second.size();
|
1200
|
+
}
|
1201
|
+
resource_name_storage.reserve(size);
|
1151
1202
|
// Add resource_names.
|
1152
|
-
for (const auto&
|
1153
|
-
|
1154
|
-
|
1203
|
+
for (const auto& a : resource_names) {
|
1204
|
+
absl::string_view authority = a.first;
|
1205
|
+
for (const auto& p : a.second) {
|
1206
|
+
absl::string_view resource_id = p;
|
1207
|
+
resource_name_storage.push_back(
|
1208
|
+
ConstructFullResourceName(authority, real_type_url, resource_id));
|
1209
|
+
envoy_service_discovery_v3_DiscoveryRequest_add_resource_names(
|
1210
|
+
request, StdStringToUpbString(resource_name_storage.back()),
|
1211
|
+
arena.ptr());
|
1212
|
+
}
|
1155
1213
|
}
|
1156
1214
|
MaybeLogDiscoveryRequest(context, request);
|
1157
1215
|
return SerializeDiscoveryRequest(context, request);
|
@@ -1438,16 +1496,17 @@ grpc_error_handle ExtractHttpFilterTypeName(const EncodingContext& context,
|
|
1438
1496
|
const google_protobuf_Any* any,
|
1439
1497
|
absl::string_view* filter_type) {
|
1440
1498
|
*filter_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
|
1441
|
-
if (*filter_type == "type.googleapis.com/
|
1499
|
+
if (*filter_type == "type.googleapis.com/xds.type.v3.TypedStruct" ||
|
1500
|
+
*filter_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
|
1442
1501
|
upb_strview any_value = google_protobuf_Any_value(any);
|
1443
|
-
const auto* typed_struct =
|
1502
|
+
const auto* typed_struct = xds_type_v3_TypedStruct_parse(
|
1444
1503
|
any_value.data, any_value.size, context.arena);
|
1445
1504
|
if (typed_struct == nullptr) {
|
1446
1505
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1447
1506
|
"could not parse TypedStruct from filter config");
|
1448
1507
|
}
|
1449
1508
|
*filter_type =
|
1450
|
-
UpbStringToAbsl(
|
1509
|
+
UpbStringToAbsl(xds_type_v3_TypedStruct_type_url(typed_struct));
|
1451
1510
|
}
|
1452
1511
|
*filter_type = absl::StripPrefix(*filter_type, "type.googleapis.com/");
|
1453
1512
|
return GRPC_ERROR_NONE;
|
@@ -1528,9 +1587,9 @@ XdsApi::Duration DurationParse(const google_protobuf_Duration* proto_duration) {
|
|
1528
1587
|
grpc_error_handle RetryPolicyParse(
|
1529
1588
|
const EncodingContext& context,
|
1530
1589
|
const envoy_config_route_v3_RetryPolicy* retry_policy,
|
1531
|
-
absl::optional<XdsApi::
|
1590
|
+
absl::optional<XdsApi::RetryPolicy>* retry) {
|
1532
1591
|
std::vector<grpc_error_handle> errors;
|
1533
|
-
XdsApi::
|
1592
|
+
XdsApi::RetryPolicy retry_to_return;
|
1534
1593
|
auto retry_on = UpbStringToStdString(
|
1535
1594
|
envoy_config_route_v3_RetryPolicy_retry_on(retry_policy));
|
1536
1595
|
std::vector<absl::string_view> codes = absl::StrSplit(retry_on, ',');
|
@@ -1552,10 +1611,6 @@ grpc_error_handle RetryPolicyParse(
|
|
1552
1611
|
}
|
1553
1612
|
}
|
1554
1613
|
}
|
1555
|
-
// TODO(donnadionne): when we add support for per_try_timeout, we will need to
|
1556
|
-
// return a policy if per_try_timeout is set even if retry_on specified no
|
1557
|
-
// supported policies.
|
1558
|
-
if (retry_to_return.retry_on.Empty()) return GRPC_ERROR_NONE;
|
1559
1614
|
const google_protobuf_UInt32Value* num_retries =
|
1560
1615
|
envoy_config_route_v3_RetryPolicy_num_retries(retry_policy);
|
1561
1616
|
if (num_retries != nullptr) {
|
@@ -1614,11 +1669,8 @@ grpc_error_handle RetryPolicyParse(
|
|
1614
1669
|
|
1615
1670
|
grpc_error_handle RouteActionParse(const EncodingContext& context,
|
1616
1671
|
const envoy_config_route_v3_Route* route_msg,
|
1617
|
-
XdsApi::Route* route,
|
1618
|
-
|
1619
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1620
|
-
"No RouteAction found in route.");
|
1621
|
-
}
|
1672
|
+
XdsApi::Route::RouteAction* route,
|
1673
|
+
bool* ignore_route) {
|
1622
1674
|
const envoy_config_route_v3_RouteAction* route_action =
|
1623
1675
|
envoy_config_route_v3_Route_route(route_msg);
|
1624
1676
|
// Get the cluster or weighted_clusters in the RouteAction.
|
@@ -1647,7 +1699,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1647
1699
|
for (size_t j = 0; j < clusters_size; ++j) {
|
1648
1700
|
const envoy_config_route_v3_WeightedCluster_ClusterWeight*
|
1649
1701
|
cluster_weight = clusters[j];
|
1650
|
-
XdsApi::Route::ClusterWeight cluster;
|
1702
|
+
XdsApi::Route::RouteAction::ClusterWeight cluster;
|
1651
1703
|
cluster.name = UpbStringToStdString(
|
1652
1704
|
envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
|
1653
1705
|
cluster_weight));
|
@@ -1716,7 +1768,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1716
1768
|
for (size_t i = 0; i < size; ++i) {
|
1717
1769
|
const envoy_config_route_v3_RouteAction_HashPolicy* hash_policy =
|
1718
1770
|
hash_policies[i];
|
1719
|
-
XdsApi::Route::HashPolicy policy;
|
1771
|
+
XdsApi::Route::RouteAction::HashPolicy policy;
|
1720
1772
|
policy.terminal =
|
1721
1773
|
envoy_config_route_v3_RouteAction_HashPolicy_terminal(hash_policy);
|
1722
1774
|
const envoy_config_route_v3_RouteAction_HashPolicy_Header* header;
|
@@ -1724,7 +1776,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1724
1776
|
filter_state;
|
1725
1777
|
if ((header = envoy_config_route_v3_RouteAction_HashPolicy_header(
|
1726
1778
|
hash_policy)) != nullptr) {
|
1727
|
-
policy.type = XdsApi::Route::HashPolicy::Type::HEADER;
|
1779
|
+
policy.type = XdsApi::Route::RouteAction::HashPolicy::Type::HEADER;
|
1728
1780
|
policy.header_name = UpbStringToStdString(
|
1729
1781
|
envoy_config_route_v3_RouteAction_HashPolicy_Header_header_name(
|
1730
1782
|
header));
|
@@ -1768,7 +1820,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1768
1820
|
envoy_config_route_v3_RouteAction_HashPolicy_FilterState_key(
|
1769
1821
|
filter_state));
|
1770
1822
|
if (key == "io.grpc.channel_id") {
|
1771
|
-
policy.type = XdsApi::Route::HashPolicy::Type::CHANNEL_ID;
|
1823
|
+
policy.type = XdsApi::Route::RouteAction::HashPolicy::Type::CHANNEL_ID;
|
1772
1824
|
} else {
|
1773
1825
|
gpr_log(GPR_DEBUG,
|
1774
1826
|
"RouteAction HashPolicy contains policy specifier "
|
@@ -1787,7 +1839,7 @@ grpc_error_handle RouteActionParse(const EncodingContext& context,
|
|
1787
1839
|
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1788
1840
|
envoy_config_route_v3_RouteAction_retry_policy(route_action);
|
1789
1841
|
if (retry_policy != nullptr) {
|
1790
|
-
absl::optional<XdsApi::
|
1842
|
+
absl::optional<XdsApi::RetryPolicy> retry;
|
1791
1843
|
grpc_error_handle error = RetryPolicyParse(context, retry_policy, &retry);
|
1792
1844
|
if (error != GRPC_ERROR_NONE) return error;
|
1793
1845
|
route->retry_policy = retry;
|
@@ -1799,7 +1851,6 @@ grpc_error_handle RouteConfigParse(
|
|
1799
1851
|
const EncodingContext& context,
|
1800
1852
|
const envoy_config_route_v3_RouteConfiguration* route_config,
|
1801
1853
|
bool /*is_v2*/, XdsApi::RdsUpdate* rds_update) {
|
1802
|
-
MaybeLogRouteConfiguration(context, route_config);
|
1803
1854
|
// Get the virtual hosts.
|
1804
1855
|
size_t num_virtual_hosts;
|
1805
1856
|
const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
|
@@ -1814,8 +1865,7 @@ grpc_error_handle RouteConfigParse(
|
|
1814
1865
|
virtual_hosts[i], &domain_size);
|
1815
1866
|
for (size_t j = 0; j < domain_size; ++j) {
|
1816
1867
|
std::string domain_pattern = UpbStringToStdString(domains[j]);
|
1817
|
-
|
1818
|
-
if (match_type == INVALID_MATCH) {
|
1868
|
+
if (!XdsRouting::IsValidDomainPattern(domain_pattern)) {
|
1819
1869
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1820
1870
|
absl::StrCat("Invalid domain pattern \"", domain_pattern, "\"."));
|
1821
1871
|
}
|
@@ -1837,7 +1887,7 @@ grpc_error_handle RouteConfigParse(
|
|
1837
1887
|
if (error != GRPC_ERROR_NONE) return error;
|
1838
1888
|
}
|
1839
1889
|
// Parse retry policy.
|
1840
|
-
absl::optional<XdsApi::
|
1890
|
+
absl::optional<XdsApi::RetryPolicy> virtual_host_retry_policy;
|
1841
1891
|
const envoy_config_route_v3_RetryPolicy* retry_policy =
|
1842
1892
|
envoy_config_route_v3_VirtualHost_retry_policy(virtual_hosts[i]);
|
1843
1893
|
if (retry_policy != nullptr) {
|
@@ -1876,11 +1926,21 @@ grpc_error_handle RouteConfigParse(
|
|
1876
1926
|
if (error != GRPC_ERROR_NONE) return error;
|
1877
1927
|
error = RouteRuntimeFractionParse(match, &route);
|
1878
1928
|
if (error != GRPC_ERROR_NONE) return error;
|
1879
|
-
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1929
|
+
if (envoy_config_route_v3_Route_has_route(routes[j])) {
|
1930
|
+
route.action.emplace<XdsApi::Route::RouteAction>();
|
1931
|
+
auto& route_action =
|
1932
|
+
absl::get<XdsApi::Route::RouteAction>(route.action);
|
1933
|
+
error =
|
1934
|
+
RouteActionParse(context, routes[j], &route_action, &ignore_route);
|
1935
|
+
if (error != GRPC_ERROR_NONE) return error;
|
1936
|
+
if (ignore_route) continue;
|
1937
|
+
if (route_action.retry_policy == absl::nullopt &&
|
1938
|
+
retry_policy != nullptr) {
|
1939
|
+
route_action.retry_policy = virtual_host_retry_policy;
|
1940
|
+
}
|
1941
|
+
} else if (envoy_config_route_v3_Route_has_non_forwarding_action(
|
1942
|
+
routes[j])) {
|
1943
|
+
route.action.emplace<XdsApi::Route::NonForwardingAction>();
|
1884
1944
|
}
|
1885
1945
|
if (context.use_v3) {
|
1886
1946
|
grpc_error_handle error = ParseTypedPerFilterConfig<
|
@@ -2237,32 +2297,47 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
2237
2297
|
absl::StrFormat("Filter %s is not supported on %s", filter_type,
|
2238
2298
|
is_client ? "clients" : "servers"));
|
2239
2299
|
}
|
2240
|
-
|
2300
|
+
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
2301
|
+
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
2302
|
+
context.arena);
|
2303
|
+
if (!filter_config.ok()) {
|
2304
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
2305
|
+
"filter config for type ", filter_type,
|
2306
|
+
" failed to parse: ", filter_config.status().ToString()));
|
2307
|
+
}
|
2308
|
+
http_connection_manager->http_filters.emplace_back(
|
2309
|
+
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2310
|
+
std::string(name), std::move(*filter_config)});
|
2311
|
+
}
|
2312
|
+
if (http_connection_manager->http_filters.empty()) {
|
2313
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2314
|
+
"Expected at least one HTTP filter");
|
2315
|
+
}
|
2316
|
+
// Make sure that the last filter is terminal and non-last filters are
|
2317
|
+
// non-terminal. Note that this check is being performed in a separate loop
|
2318
|
+
// to take care of the case where there are two terminal filters in the list
|
2319
|
+
// out of which only one gets added in the final list.
|
2320
|
+
for (const auto& http_filter : http_connection_manager->http_filters) {
|
2321
|
+
const XdsHttpFilterImpl* filter_impl =
|
2322
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
2323
|
+
http_filter.config.config_proto_type_name);
|
2324
|
+
if (&http_filter != &http_connection_manager->http_filters.back()) {
|
2241
2325
|
// Filters before the last filter must not be terminal.
|
2242
2326
|
if (filter_impl->IsTerminalFilter()) {
|
2243
2327
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2244
|
-
absl::StrCat("terminal filter for config type ",
|
2328
|
+
absl::StrCat("terminal filter for config type ",
|
2329
|
+
http_filter.config.config_proto_type_name,
|
2245
2330
|
" must be the last filter in the chain"));
|
2246
2331
|
}
|
2247
2332
|
} else {
|
2248
2333
|
// The last filter must be terminal.
|
2249
2334
|
if (!filter_impl->IsTerminalFilter()) {
|
2250
2335
|
return GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2251
|
-
absl::StrCat("non-terminal filter for config type ",
|
2336
|
+
absl::StrCat("non-terminal filter for config type ",
|
2337
|
+
http_filter.config.config_proto_type_name,
|
2252
2338
|
" is the last filter in the chain"));
|
2253
2339
|
}
|
2254
2340
|
}
|
2255
|
-
absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
|
2256
|
-
filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
|
2257
|
-
context.arena);
|
2258
|
-
if (!filter_config.ok()) {
|
2259
|
-
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
2260
|
-
"filter config for type ", filter_type,
|
2261
|
-
" failed to parse: ", filter_config.status().ToString()));
|
2262
|
-
}
|
2263
|
-
http_connection_manager->http_filters.emplace_back(
|
2264
|
-
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2265
|
-
std::string(name), std::move(*filter_config)});
|
2266
2341
|
}
|
2267
2342
|
} else {
|
2268
2343
|
// If using a v2 config, we just hard-code a list containing only the
|
@@ -2273,7 +2348,10 @@ grpc_error_handle HttpConnectionManagerParse(
|
|
2273
2348
|
XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
|
2274
2349
|
"router", {kXdsHttpRouterFilterConfigName, Json()}});
|
2275
2350
|
}
|
2276
|
-
|
2351
|
+
// Guarding parsing of RouteConfig on the server side with the environmental
|
2352
|
+
// variable since that's the first feature on the server side that will be
|
2353
|
+
// using this.
|
2354
|
+
if (is_client || XdsRbacEnabled()) {
|
2277
2355
|
// Found inlined route_config. Parse it to find the cluster_name.
|
2278
2356
|
if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
|
2279
2357
|
http_connection_manager_proto)) {
|
@@ -2508,6 +2586,8 @@ grpc_error_handle FilterChainParse(
|
|
2508
2586
|
filter_chain_match, &filter_chain->filter_chain_match);
|
2509
2587
|
if (error != GRPC_ERROR_NONE) errors.push_back(error);
|
2510
2588
|
}
|
2589
|
+
filter_chain->filter_chain_data =
|
2590
|
+
std::make_shared<XdsApi::LdsUpdate::FilterChainData>();
|
2511
2591
|
// Parse the filters list. Currently we only support HttpConnectionManager.
|
2512
2592
|
size_t size = 0;
|
2513
2593
|
auto* filters =
|
@@ -2543,8 +2623,6 @@ grpc_error_handle FilterChainParse(
|
|
2543
2623
|
"Could not parse HttpConnectionManager config from filter "
|
2544
2624
|
"typed_config"));
|
2545
2625
|
} else {
|
2546
|
-
filter_chain->filter_chain_data =
|
2547
|
-
std::make_shared<XdsApi::LdsUpdate::FilterChainData>();
|
2548
2626
|
grpc_error_handle error = HttpConnectionManagerParse(
|
2549
2627
|
false /* is_client */, context, http_connection_manager, is_v2,
|
2550
2628
|
&filter_chain->filter_chain_data->http_connection_manager);
|
@@ -3277,7 +3355,7 @@ grpc_error_handle DropParseAndAppend(
|
|
3277
3355
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
|
3278
3356
|
}
|
3279
3357
|
// Cap numerator to 1000000.
|
3280
|
-
numerator =
|
3358
|
+
numerator = std::min(numerator, 1000000u);
|
3281
3359
|
drop_config->AddCategory(std::move(category), numerator);
|
3282
3360
|
return GRPC_ERROR_NONE;
|
3283
3361
|
}
|
@@ -3342,123 +3420,257 @@ grpc_error_handle EdsResourceParse(
|
|
3342
3420
|
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing EDS resource", &errors);
|
3343
3421
|
}
|
3344
3422
|
|
3345
|
-
|
3346
|
-
|
3347
|
-
|
3348
|
-
|
3349
|
-
|
3350
|
-
|
3351
|
-
|
3352
|
-
|
3353
|
-
|
3354
|
-
|
3355
|
-
|
3356
|
-
|
3357
|
-
|
3358
|
-
|
3359
|
-
|
3360
|
-
|
3361
|
-
|
3362
|
-
|
3363
|
-
|
3364
|
-
//
|
3365
|
-
|
3366
|
-
|
3367
|
-
|
3368
|
-
|
3369
|
-
|
3370
|
-
|
3371
|
-
|
3372
|
-
|
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);
|
3438
|
+
if (resource == nullptr) {
|
3439
|
+
return absl::InvalidArgumentError("Can't parse Listener resource.");
|
3440
|
+
}
|
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);
|
3373
3455
|
}
|
3374
|
-
|
3375
|
-
|
3376
|
-
|
3377
|
-
|
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);
|
3378
3475
|
if (resource == nullptr) {
|
3379
|
-
|
3380
|
-
absl::StrCat("resource index ", i, ": Can't parse ",
|
3381
|
-
resource_type_string, " resource.")));
|
3382
|
-
continue;
|
3476
|
+
return absl::InvalidArgumentError("Can't parse Listener resource.");
|
3383
3477
|
}
|
3384
|
-
|
3385
|
-
//
|
3386
|
-
|
3387
|
-
|
3388
|
-
|
3389
|
-
|
3390
|
-
|
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);
|
3391
3492
|
}
|
3392
|
-
|
3393
|
-
|
3394
|
-
|
3395
|
-
|
3396
|
-
|
3397
|
-
|
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.");
|
3398
3514
|
}
|
3515
|
+
MaybeLogCluster(context, resource);
|
3399
3516
|
// Validate resource.
|
3400
|
-
|
3517
|
+
DecodeResult result;
|
3518
|
+
result.name =
|
3519
|
+
UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(resource));
|
3520
|
+
auto cluster_data = absl::make_unique<ClusterData>();
|
3401
3521
|
grpc_error_handle error =
|
3402
|
-
|
3522
|
+
CdsResourceParse(context, resource, is_v2, &cluster_data->resource);
|
3403
3523
|
if (error != GRPC_ERROR_NONE) {
|
3404
|
-
|
3405
|
-
|
3406
|
-
|
3407
|
-
error));
|
3408
|
-
resource_names_failed->insert(resource_name);
|
3524
|
+
result.resource =
|
3525
|
+
absl::InvalidArgumentError(grpc_error_std_string(error));
|
3526
|
+
GRPC_ERROR_UNREF(error);
|
3409
3527
|
} else {
|
3410
|
-
|
3411
|
-
auto& resource_data = (*update_map)[resource_name];
|
3412
|
-
resource_data.resource = std::move(update);
|
3413
|
-
resource_data.serialized_proto =
|
3414
|
-
UpbStringToStdString(serialized_resource);
|
3528
|
+
result.resource = std::move(cluster_data);
|
3415
3529
|
}
|
3530
|
+
return std::move(result);
|
3416
3531
|
}
|
3417
|
-
|
3418
|
-
}
|
3532
|
+
};
|
3419
3533
|
|
3420
|
-
|
3421
|
-
|
3422
|
-
|
3423
|
-
|
3424
|
-
|
3425
|
-
} else if (type_url == kCdsV2TypeUrl) {
|
3426
|
-
return XdsApi::kCdsTypeUrl;
|
3427
|
-
} else if (type_url == kEdsV2TypeUrl) {
|
3428
|
-
return XdsApi::kEdsTypeUrl;
|
3429
|
-
}
|
3430
|
-
return std::string(type_url);
|
3431
|
-
}
|
3534
|
+
class EndpointResourceType : public XdsResourceType {
|
3535
|
+
public:
|
3536
|
+
struct EndpointData : public ResourceData {
|
3537
|
+
XdsApi::EdsUpdate resource;
|
3538
|
+
};
|
3432
3539
|
|
3433
|
-
|
3434
|
-
|
3435
|
-
return envoy_config_listener_v3_Listener_name(lds_resource);
|
3436
|
-
}
|
3540
|
+
absl::string_view type_url() const override { return XdsApi::kEdsTypeUrl; }
|
3541
|
+
absl::string_view v2_type_url() const override { return kEdsV2TypeUrl; }
|
3437
3542
|
|
3438
|
-
|
3439
|
-
|
3440
|
-
|
3441
|
-
|
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
|
+
};
|
3442
3570
|
|
3443
|
-
|
3444
|
-
const
|
3445
|
-
|
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;
|
3446
3636
|
}
|
3447
3637
|
|
3448
|
-
|
3449
|
-
|
3450
|
-
|
3451
|
-
|
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;
|
3452
3656
|
}
|
3453
3657
|
|
3454
3658
|
} // namespace
|
3455
3659
|
|
3456
3660
|
XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
3457
3661
|
const XdsBootstrap::XdsServer& server, const grpc_slice& encoded_response,
|
3458
|
-
const std::
|
3459
|
-
|
3460
|
-
|
3461
|
-
const std::
|
3662
|
+
const std::map<absl::string_view /*authority*/,
|
3663
|
+
std::set<absl::string_view /*name*/>>&
|
3664
|
+
subscribed_listener_names,
|
3665
|
+
const std::map<absl::string_view /*authority*/,
|
3666
|
+
std::set<absl::string_view /*name*/>>&
|
3667
|
+
subscribed_route_config_names,
|
3668
|
+
const std::map<absl::string_view /*authority*/,
|
3669
|
+
std::set<absl::string_view /*name*/>>&
|
3670
|
+
subscribed_cluster_names,
|
3671
|
+
const std::map<absl::string_view /*authority*/,
|
3672
|
+
std::set<absl::string_view /*name*/>>&
|
3673
|
+
subscribed_eds_service_names) {
|
3462
3674
|
AdsParseResult result;
|
3463
3675
|
upb::Arena arena;
|
3464
3676
|
const EncodingContext context = {client_,
|
@@ -3480,41 +3692,88 @@ XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
|
|
3480
3692
|
}
|
3481
3693
|
MaybeLogDiscoveryResponse(context, response);
|
3482
3694
|
// Record the type_url, the version_info, and the nonce of the response.
|
3483
|
-
result.type_url = TypeUrlInternalToExternal(
|
3484
|
-
|
3695
|
+
result.type_url = TypeUrlInternalToExternal(absl::StripPrefix(
|
3696
|
+
UpbStringToAbsl(
|
3697
|
+
envoy_service_discovery_v3_DiscoveryResponse_type_url(response)),
|
3698
|
+
"type.googleapis.com/"));
|
3485
3699
|
result.version = UpbStringToStdString(
|
3486
3700
|
envoy_service_discovery_v3_DiscoveryResponse_version_info(response));
|
3487
3701
|
result.nonce = UpbStringToStdString(
|
3488
3702
|
envoy_service_discovery_v3_DiscoveryResponse_nonce(response));
|
3489
|
-
//
|
3490
|
-
|
3491
|
-
|
3492
|
-
|
3493
|
-
|
3494
|
-
|
3495
|
-
|
3496
|
-
|
3497
|
-
|
3498
|
-
|
3499
|
-
|
3500
|
-
|
3501
|
-
|
3502
|
-
|
3503
|
-
|
3504
|
-
|
3505
|
-
|
3506
|
-
|
3507
|
-
|
3508
|
-
|
3509
|
-
|
3510
|
-
|
3511
|
-
|
3512
|
-
|
3513
|
-
|
3514
|
-
|
3515
|
-
|
3516
|
-
|
3517
|
-
|
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);
|
3518
3777
|
return result;
|
3519
3778
|
}
|
3520
3779
|
|
@@ -3726,6 +3985,7 @@ grpc_error_handle XdsApi::ParseLrsResponse(
|
|
3726
3985
|
}
|
3727
3986
|
|
3728
3987
|
namespace {
|
3988
|
+
|
3729
3989
|
google_protobuf_Timestamp* GrpcMillisToTimestamp(const EncodingContext& context,
|
3730
3990
|
grpc_millis value) {
|
3731
3991
|
google_protobuf_Timestamp* timestamp =
|
@@ -3736,218 +3996,6 @@ google_protobuf_Timestamp* GrpcMillisToTimestamp(const EncodingContext& context,
|
|
3736
3996
|
return timestamp;
|
3737
3997
|
}
|
3738
3998
|
|
3739
|
-
envoy_admin_v3_UpdateFailureState* CreateUpdateFailureStateUpb(
|
3740
|
-
const EncodingContext& context,
|
3741
|
-
const XdsApi::ResourceMetadata* resource_metadata) {
|
3742
|
-
auto* update_failure_state =
|
3743
|
-
envoy_admin_v3_UpdateFailureState_new(context.arena);
|
3744
|
-
envoy_admin_v3_UpdateFailureState_set_details(
|
3745
|
-
update_failure_state,
|
3746
|
-
StdStringToUpbString(resource_metadata->failed_details));
|
3747
|
-
envoy_admin_v3_UpdateFailureState_set_version_info(
|
3748
|
-
update_failure_state,
|
3749
|
-
StdStringToUpbString(resource_metadata->failed_version));
|
3750
|
-
envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
|
3751
|
-
update_failure_state,
|
3752
|
-
GrpcMillisToTimestamp(context, resource_metadata->failed_update_time));
|
3753
|
-
return update_failure_state;
|
3754
|
-
}
|
3755
|
-
|
3756
|
-
void DumpLdsConfig(const EncodingContext& context,
|
3757
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3758
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3759
|
-
upb_strview kLdsTypeUrlUpb = upb_strview_makez(XdsApi::kLdsTypeUrl);
|
3760
|
-
auto* listener_config_dump =
|
3761
|
-
envoy_service_status_v3_PerXdsConfig_mutable_listener_config(
|
3762
|
-
per_xds_config, context.arena);
|
3763
|
-
envoy_admin_v3_ListenersConfigDump_set_version_info(
|
3764
|
-
listener_config_dump,
|
3765
|
-
StdStringToUpbString(resource_type_metadata.version));
|
3766
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3767
|
-
absl::string_view name = p.first;
|
3768
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3769
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3770
|
-
auto* dynamic_listener =
|
3771
|
-
envoy_admin_v3_ListenersConfigDump_add_dynamic_listeners(
|
3772
|
-
listener_config_dump, context.arena);
|
3773
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_name(
|
3774
|
-
dynamic_listener, name_upb);
|
3775
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_client_status(
|
3776
|
-
dynamic_listener, meta->client_status);
|
3777
|
-
if (!meta->serialized_proto.empty()) {
|
3778
|
-
// Set in-effective listeners
|
3779
|
-
auto* dynamic_listener_state =
|
3780
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_mutable_active_state(
|
3781
|
-
dynamic_listener, context.arena);
|
3782
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_version_info(
|
3783
|
-
dynamic_listener_state, StdStringToUpbString(meta->version));
|
3784
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_last_updated(
|
3785
|
-
dynamic_listener_state,
|
3786
|
-
GrpcMillisToTimestamp(context, meta->update_time));
|
3787
|
-
auto* listener_any =
|
3788
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListenerState_mutable_listener(
|
3789
|
-
dynamic_listener_state, context.arena);
|
3790
|
-
google_protobuf_Any_set_type_url(listener_any, kLdsTypeUrlUpb);
|
3791
|
-
google_protobuf_Any_set_value(
|
3792
|
-
listener_any, StdStringToUpbString(meta->serialized_proto));
|
3793
|
-
}
|
3794
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3795
|
-
// Set error_state if NACKED
|
3796
|
-
envoy_admin_v3_ListenersConfigDump_DynamicListener_set_error_state(
|
3797
|
-
dynamic_listener, CreateUpdateFailureStateUpb(context, meta));
|
3798
|
-
}
|
3799
|
-
}
|
3800
|
-
}
|
3801
|
-
|
3802
|
-
void DumpRdsConfig(const EncodingContext& context,
|
3803
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3804
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3805
|
-
upb_strview kRdsTypeUrlUpb = upb_strview_makez(XdsApi::kRdsTypeUrl);
|
3806
|
-
auto* route_config_dump =
|
3807
|
-
envoy_service_status_v3_PerXdsConfig_mutable_route_config(per_xds_config,
|
3808
|
-
context.arena);
|
3809
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3810
|
-
absl::string_view name = p.first;
|
3811
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3812
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3813
|
-
auto* dynamic_route_config =
|
3814
|
-
envoy_admin_v3_RoutesConfigDump_add_dynamic_route_configs(
|
3815
|
-
route_config_dump, context.arena);
|
3816
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_client_status(
|
3817
|
-
dynamic_route_config, meta->client_status);
|
3818
|
-
auto* route_config_any =
|
3819
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_mutable_route_config(
|
3820
|
-
dynamic_route_config, context.arena);
|
3821
|
-
if (!meta->serialized_proto.empty()) {
|
3822
|
-
// Set in-effective route configs
|
3823
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_version_info(
|
3824
|
-
dynamic_route_config, StdStringToUpbString(meta->version));
|
3825
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_last_updated(
|
3826
|
-
dynamic_route_config,
|
3827
|
-
GrpcMillisToTimestamp(context, meta->update_time));
|
3828
|
-
google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
|
3829
|
-
google_protobuf_Any_set_value(
|
3830
|
-
route_config_any, StdStringToUpbString(meta->serialized_proto));
|
3831
|
-
} else {
|
3832
|
-
// If there isn't a working route config, we still need to print the
|
3833
|
-
// name.
|
3834
|
-
auto* route_config =
|
3835
|
-
envoy_config_route_v3_RouteConfiguration_new(context.arena);
|
3836
|
-
envoy_config_route_v3_RouteConfiguration_set_name(route_config, name_upb);
|
3837
|
-
size_t length;
|
3838
|
-
char* bytes = envoy_config_route_v3_RouteConfiguration_serialize(
|
3839
|
-
route_config, context.arena, &length);
|
3840
|
-
google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
|
3841
|
-
google_protobuf_Any_set_value(route_config_any,
|
3842
|
-
upb_strview_make(bytes, length));
|
3843
|
-
}
|
3844
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3845
|
-
// Set error_state if NACKED
|
3846
|
-
envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_error_state(
|
3847
|
-
dynamic_route_config, CreateUpdateFailureStateUpb(context, meta));
|
3848
|
-
}
|
3849
|
-
}
|
3850
|
-
}
|
3851
|
-
|
3852
|
-
void DumpCdsConfig(const EncodingContext& context,
|
3853
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3854
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3855
|
-
upb_strview kCdsTypeUrlUpb = upb_strview_makez(XdsApi::kCdsTypeUrl);
|
3856
|
-
auto* cluster_config_dump =
|
3857
|
-
envoy_service_status_v3_PerXdsConfig_mutable_cluster_config(
|
3858
|
-
per_xds_config, context.arena);
|
3859
|
-
envoy_admin_v3_ClustersConfigDump_set_version_info(
|
3860
|
-
cluster_config_dump,
|
3861
|
-
StdStringToUpbString(resource_type_metadata.version));
|
3862
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3863
|
-
absl::string_view name = p.first;
|
3864
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3865
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3866
|
-
auto* dynamic_cluster =
|
3867
|
-
envoy_admin_v3_ClustersConfigDump_add_dynamic_active_clusters(
|
3868
|
-
cluster_config_dump, context.arena);
|
3869
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_client_status(
|
3870
|
-
dynamic_cluster, meta->client_status);
|
3871
|
-
auto* cluster_any =
|
3872
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_mutable_cluster(
|
3873
|
-
dynamic_cluster, context.arena);
|
3874
|
-
if (!meta->serialized_proto.empty()) {
|
3875
|
-
// Set in-effective clusters
|
3876
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_version_info(
|
3877
|
-
dynamic_cluster, StdStringToUpbString(meta->version));
|
3878
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_last_updated(
|
3879
|
-
dynamic_cluster, GrpcMillisToTimestamp(context, meta->update_time));
|
3880
|
-
google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
|
3881
|
-
google_protobuf_Any_set_value(
|
3882
|
-
cluster_any, StdStringToUpbString(meta->serialized_proto));
|
3883
|
-
} else {
|
3884
|
-
// If there isn't a working cluster, we still need to print the name.
|
3885
|
-
auto* cluster = envoy_config_cluster_v3_Cluster_new(context.arena);
|
3886
|
-
envoy_config_cluster_v3_Cluster_set_name(cluster, name_upb);
|
3887
|
-
size_t length;
|
3888
|
-
char* bytes = envoy_config_cluster_v3_Cluster_serialize(
|
3889
|
-
cluster, context.arena, &length);
|
3890
|
-
google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
|
3891
|
-
google_protobuf_Any_set_value(cluster_any,
|
3892
|
-
upb_strview_make(bytes, length));
|
3893
|
-
}
|
3894
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3895
|
-
// Set error_state if NACKED
|
3896
|
-
envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_error_state(
|
3897
|
-
dynamic_cluster, CreateUpdateFailureStateUpb(context, meta));
|
3898
|
-
}
|
3899
|
-
}
|
3900
|
-
}
|
3901
|
-
|
3902
|
-
void DumpEdsConfig(const EncodingContext& context,
|
3903
|
-
const XdsApi::ResourceTypeMetadata& resource_type_metadata,
|
3904
|
-
envoy_service_status_v3_PerXdsConfig* per_xds_config) {
|
3905
|
-
upb_strview kEdsTypeUrlUpb = upb_strview_makez(XdsApi::kEdsTypeUrl);
|
3906
|
-
auto* endpoint_config_dump =
|
3907
|
-
envoy_service_status_v3_PerXdsConfig_mutable_endpoint_config(
|
3908
|
-
per_xds_config, context.arena);
|
3909
|
-
for (auto& p : resource_type_metadata.resource_metadata_map) {
|
3910
|
-
absl::string_view name = p.first;
|
3911
|
-
const XdsApi::ResourceMetadata* meta = p.second;
|
3912
|
-
const upb_strview name_upb = StdStringToUpbString(name);
|
3913
|
-
auto* dynamic_endpoint =
|
3914
|
-
envoy_admin_v3_EndpointsConfigDump_add_dynamic_endpoint_configs(
|
3915
|
-
endpoint_config_dump, context.arena);
|
3916
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_client_status(
|
3917
|
-
dynamic_endpoint, meta->client_status);
|
3918
|
-
auto* endpoint_any =
|
3919
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_mutable_endpoint_config(
|
3920
|
-
dynamic_endpoint, context.arena);
|
3921
|
-
if (!meta->serialized_proto.empty()) {
|
3922
|
-
// Set in-effective endpoints
|
3923
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_version_info(
|
3924
|
-
dynamic_endpoint, StdStringToUpbString(meta->version));
|
3925
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_last_updated(
|
3926
|
-
dynamic_endpoint, GrpcMillisToTimestamp(context, meta->update_time));
|
3927
|
-
google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
|
3928
|
-
google_protobuf_Any_set_value(
|
3929
|
-
endpoint_any, StdStringToUpbString(meta->serialized_proto));
|
3930
|
-
} else {
|
3931
|
-
// If there isn't a working endpoint, we still need to print the name.
|
3932
|
-
auto* cluster_load_assignment =
|
3933
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_new(context.arena);
|
3934
|
-
envoy_config_endpoint_v3_ClusterLoadAssignment_set_cluster_name(
|
3935
|
-
cluster_load_assignment, name_upb);
|
3936
|
-
size_t length;
|
3937
|
-
char* bytes = envoy_config_endpoint_v3_ClusterLoadAssignment_serialize(
|
3938
|
-
cluster_load_assignment, context.arena, &length);
|
3939
|
-
google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
|
3940
|
-
google_protobuf_Any_set_value(endpoint_any,
|
3941
|
-
upb_strview_make(bytes, length));
|
3942
|
-
}
|
3943
|
-
if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
|
3944
|
-
// Set error_state if NACKED
|
3945
|
-
envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_error_state(
|
3946
|
-
dynamic_endpoint, CreateUpdateFailureStateUpb(context, meta));
|
3947
|
-
}
|
3948
|
-
}
|
3949
|
-
}
|
3950
|
-
|
3951
3999
|
} // namespace
|
3952
4000
|
|
3953
4001
|
std::string XdsApi::AssembleClientConfig(
|
@@ -3963,33 +4011,53 @@ std::string XdsApi::AssembleClientConfig(
|
|
3963
4011
|
arena.ptr(), true, certificate_provider_definition_map_};
|
3964
4012
|
PopulateNode(context, node_, build_version_, user_agent_name_,
|
3965
4013
|
user_agent_version_, node);
|
3966
|
-
// Dump each
|
3967
|
-
|
4014
|
+
// Dump each resource.
|
4015
|
+
std::vector<std::string> type_url_storage;
|
4016
|
+
for (const auto& p : resource_type_metadata_map) {
|
3968
4017
|
absl::string_view type_url = p.first;
|
3969
|
-
const
|
3970
|
-
|
3971
|
-
|
3972
|
-
|
3973
|
-
|
3974
|
-
|
3975
|
-
|
3976
|
-
|
3977
|
-
|
3978
|
-
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
|
3983
|
-
|
3984
|
-
|
3985
|
-
|
3986
|
-
|
3987
|
-
|
3988
|
-
|
3989
|
-
|
3990
|
-
|
3991
|
-
|
3992
|
-
|
4018
|
+
const ResourceMetadataMap& resource_metadata_map = p.second;
|
4019
|
+
type_url_storage.emplace_back(
|
4020
|
+
absl::StrCat("type.googleapis.com/", type_url));
|
4021
|
+
for (const auto& q : resource_metadata_map) {
|
4022
|
+
absl::string_view resource_name = q.first;
|
4023
|
+
const ResourceMetadata& metadata = *q.second;
|
4024
|
+
auto* entry =
|
4025
|
+
envoy_service_status_v3_ClientConfig_add_generic_xds_configs(
|
4026
|
+
client_config, context.arena);
|
4027
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_type_url(
|
4028
|
+
entry, StdStringToUpbString(type_url_storage.back()));
|
4029
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_name(
|
4030
|
+
entry, StdStringToUpbString(resource_name));
|
4031
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_client_status(
|
4032
|
+
entry, metadata.client_status);
|
4033
|
+
if (!metadata.serialized_proto.empty()) {
|
4034
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_version_info(
|
4035
|
+
entry, StdStringToUpbString(metadata.version));
|
4036
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_last_updated(
|
4037
|
+
entry, GrpcMillisToTimestamp(context, metadata.update_time));
|
4038
|
+
auto* any_field =
|
4039
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_mutable_xds_config(
|
4040
|
+
entry, context.arena);
|
4041
|
+
google_protobuf_Any_set_type_url(
|
4042
|
+
any_field, StdStringToUpbString(type_url_storage.back()));
|
4043
|
+
google_protobuf_Any_set_value(
|
4044
|
+
any_field, StdStringToUpbString(metadata.serialized_proto));
|
4045
|
+
}
|
4046
|
+
if (metadata.client_status == XdsApi::ResourceMetadata::NACKED) {
|
4047
|
+
auto* update_failure_state =
|
4048
|
+
envoy_admin_v3_UpdateFailureState_new(context.arena);
|
4049
|
+
envoy_admin_v3_UpdateFailureState_set_details(
|
4050
|
+
update_failure_state,
|
4051
|
+
StdStringToUpbString(metadata.failed_details));
|
4052
|
+
envoy_admin_v3_UpdateFailureState_set_version_info(
|
4053
|
+
update_failure_state,
|
4054
|
+
StdStringToUpbString(metadata.failed_version));
|
4055
|
+
envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
|
4056
|
+
update_failure_state,
|
4057
|
+
GrpcMillisToTimestamp(context, metadata.failed_update_time));
|
4058
|
+
envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_error_state(
|
4059
|
+
entry, update_failure_state);
|
4060
|
+
}
|
3993
4061
|
}
|
3994
4062
|
}
|
3995
4063
|
// Serialize the upb message to bytes
|