grpc 1.34.0 → 1.37.0
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 +893 -2840
- data/etc/roots.pem +257 -573
- data/include/grpc/compression.h +1 -1
- data/include/grpc/grpc.h +28 -0
- data/include/grpc/grpc_security.h +77 -14
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +1 -1
- data/include/grpc/impl/codegen/log.h +0 -2
- data/include/grpc/impl/codegen/port_platform.h +2 -0
- data/include/grpc/impl/codegen/sync_windows.h +4 -0
- data/include/grpc/slice_buffer.h +3 -3
- data/include/grpc/support/sync.h +3 -3
- data/include/grpc/support/time.h +7 -7
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +2823 -1559
- data/src/core/ext/filters/client_channel/client_channel.h +0 -6
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +13 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +191 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -10
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -7
- data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -35
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +27 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +369 -108
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver.h +1 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +41 -57
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +444 -22
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +21 -22
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -17
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +377 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -34
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +310 -160
- data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
- data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
- data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
- data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
- data/src/core/ext/filters/client_channel/server_address.cc +9 -0
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +100 -193
- data/src/core/ext/filters/client_channel/subchannel.h +73 -111
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +10 -8
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
- data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +495 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +189 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
- data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
- data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +1 -1
- data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
- data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +23 -10
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +29 -16
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +623 -219
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +46 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1459 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- 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 +27 -28
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +350 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1348 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +119 -124
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +450 -284
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +24 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +62 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +69 -45
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +275 -78
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +19 -19
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +80 -43
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +41 -41
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +172 -89
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +53 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +188 -78
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +48 -7
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -14
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +34 -32
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +151 -61
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +33 -29
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +138 -54
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +488 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +141 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +452 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +70 -37
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +257 -216
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +995 -495
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +268 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +281 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +96 -98
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +378 -226
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +28 -25
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +124 -53
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +9 -12
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +29 -24
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -33
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +51 -44
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +179 -129
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -4
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -4
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -8
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -3
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +93 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +124 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +54 -37
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +171 -59
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +77 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
- data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
- data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +383 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +10 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +753 -724
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +120 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +76 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +371 -377
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +130 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
- data/src/core/ext/xds/certificate_provider_store.cc +10 -7
- data/src/core/ext/xds/certificate_provider_store.h +12 -7
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
- data/src/core/ext/xds/xds_api.cc +2265 -593
- data/src/core/ext/xds/xds_api.h +335 -102
- data/src/core/ext/xds/xds_bootstrap.cc +80 -45
- data/src/core/ext/xds/xds_bootstrap.h +17 -6
- data/src/core/ext/xds/xds_certificate_provider.cc +232 -67
- data/src/core/ext/xds/xds_certificate_provider.h +103 -26
- data/src/core/ext/xds/xds_client.cc +212 -63
- data/src/core/ext/xds/xds_client.h +35 -1
- data/src/core/ext/xds/xds_client_stats.cc +4 -3
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/ext/xds/xds_http_fault_filter.cc +226 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +63 -0
- data/src/core/ext/xds/xds_http_filters.cc +114 -0
- data/src/core/ext/xds/xds_http_filters.h +130 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +532 -0
- data/src/core/lib/channel/channel_args.cc +8 -8
- data/src/core/lib/channel/channel_stack.cc +12 -0
- data/src/core/lib/channel/channel_stack.h +7 -0
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +105 -18
- data/src/core/lib/channel/channelz.h +30 -2
- data/src/core/lib/channel/channelz_registry.cc +14 -0
- data/src/core/lib/channel/channelz_registry.h +0 -1
- data/src/core/lib/channel/handshaker.cc +4 -46
- data/src/core/lib/channel/handshaker.h +1 -18
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +5 -0
- data/src/core/lib/compression/compression_args.cc +3 -2
- data/src/core/lib/debug/stats.h +2 -2
- data/src/core/lib/debug/stats_data.h +13 -13
- data/src/core/lib/gpr/alloc.cc +3 -2
- data/src/core/lib/gpr/log.cc +59 -17
- data/src/core/lib/gpr/log_linux.cc +3 -1
- data/src/core/lib/gpr/log_posix.cc +3 -1
- data/src/core/lib/gpr/log_windows.cc +3 -1
- data/src/core/lib/gpr/spinlock.h +10 -2
- data/src/core/lib/gpr/string.cc +22 -21
- data/src/core/lib/gpr/string.h +5 -6
- data/src/core/lib/gpr/sync.cc +4 -4
- data/src/core/lib/gpr/sync_abseil.cc +3 -6
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gpr/time.cc +12 -12
- data/src/core/lib/gprpp/arena.h +3 -2
- data/src/core/lib/gprpp/atomic.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/ref_counted.h +2 -2
- data/src/core/lib/gprpp/ref_counted_ptr.h +11 -1
- data/src/core/lib/gprpp/sync.h +129 -40
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/gprpp/thd_posix.cc +6 -1
- data/src/core/lib/gprpp/thd_windows.cc +3 -1
- data/src/core/lib/gprpp/time_util.cc +77 -0
- data/src/core/lib/gprpp/time_util.h +42 -0
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +3 -3
- data/src/core/lib/http/parser.cc +1 -2
- data/src/core/lib/iomgr/buffer_list.h +1 -1
- data/src/core/lib/iomgr/call_combiner.cc +8 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +2 -2
- data/src/core/lib/iomgr/combiner.cc +2 -1
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/error.cc +15 -11
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +11 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +23 -16
- data/src/core/lib/iomgr/ev_epollex_linux.cc +21 -17
- data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/exec_ctx.cc +6 -2
- data/src/core/lib/iomgr/exec_ctx.h +6 -4
- data/src/core/lib/iomgr/executor.cc +2 -1
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/executor/threadpool.h +1 -1
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
- data/src/core/lib/iomgr/load_file.h +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +19 -14
- data/src/core/lib/iomgr/lockfree_event.h +2 -2
- data/src/core/lib/iomgr/parse_address.cc +52 -46
- data/src/core/lib/iomgr/parse_address.h +13 -9
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
- data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +5 -5
- data/src/core/lib/iomgr/sockaddr_utils.cc +131 -11
- data/src/core/lib/iomgr/sockaddr_utils.h +26 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
- data/src/core/lib/iomgr/socket_mutator.cc +3 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
- data/src/core/lib/iomgr/tcp_client.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_custom.cc +22 -17
- data/src/core/lib/iomgr/tcp_posix.cc +14 -14
- data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
- data/src/core/lib/iomgr/tcp_uv.cc +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +3 -3
- data/src/core/lib/iomgr/timer_generic.cc +5 -5
- data/src/core/lib/iomgr/timer_manager.cc +3 -3
- data/src/core/lib/iomgr/udp_server.cc +1 -2
- data/src/core/lib/iomgr/udp_server.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/json/json.h +10 -0
- data/src/core/lib/matchers/matchers.cc +339 -0
- data/src/core/lib/matchers/matchers.h +160 -0
- data/src/core/lib/security/context/security_context.cc +4 -3
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/credentials.h +2 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
- data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -18
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -4
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -6
- data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +3 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +209 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +50 -17
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +3 -2
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/ssl_utils.cc +11 -6
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +89 -26
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +35 -7
- data/src/core/lib/slice/slice_intern.cc +9 -11
- data/src/core/lib/slice/slice_internal.h +2 -2
- data/src/core/lib/surface/call.cc +32 -24
- data/src/core/lib/surface/call_details.cc +8 -8
- data/src/core/lib/surface/channel.cc +16 -10
- data/src/core/lib/surface/channel.h +6 -5
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +24 -19
- data/src/core/lib/surface/completion_queue.h +16 -16
- data/src/core/lib/surface/init.cc +19 -20
- data/src/core/lib/surface/lame_client.cc +47 -54
- data/src/core/lib/surface/lame_client.h +5 -0
- data/src/core/lib/surface/server.cc +102 -51
- data/src/core/lib/surface/server.h +112 -18
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +6 -4
- data/src/core/lib/transport/authority_override.h +5 -2
- data/src/core/lib/transport/connectivity_state.h +6 -4
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +6 -2
- data/src/core/lib/transport/metadata_batch.cc +27 -0
- data/src/core/lib/transport/metadata_batch.h +18 -4
- data/src/core/lib/transport/static_metadata.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +4 -3
- data/src/core/lib/transport/transport.h +7 -7
- data/src/core/lib/uri/uri_parser.cc +131 -249
- data/src/core/lib/uri/uri_parser.h +57 -21
- data/src/core/plugin_registry/grpc_plugin_registry.cc +22 -4
- data/src/core/tsi/alts/crypt/gsec.cc +5 -4
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -25
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +39 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
- data/src/core/tsi/fake_transport_security.cc +16 -5
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
- data/src/core/tsi/ssl_transport_security.cc +62 -52
- data/src/core/tsi/ssl_transport_security.h +6 -9
- data/src/core/tsi/transport_security.cc +6 -6
- data/src/core/tsi/transport_security_interface.h +1 -1
- data/src/ruby/ext/grpc/extconf.rb +9 -1
- data/src/ruby/ext/grpc/rb_channel.c +10 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.c +11 -1
- data/src/ruby/ext/grpc/rb_channel_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +14 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +34 -13
- data/src/ruby/ext/grpc/rb_server.c +13 -1
- data/src/ruby/ext/grpc/rb_server_credentials.c +19 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +4 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +215 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +35 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +169 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +35 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +35 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
- data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
- data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +715 -713
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +21 -13
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +135 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -29
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +22 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +67 -33
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +362 -50
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
- data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
- data/third_party/upb/upb/decode.c +248 -167
- data/third_party/upb/upb/decode.h +20 -1
- data/third_party/upb/upb/decode.int.h +163 -0
- data/third_party/upb/upb/decode_fast.c +1040 -0
- data/third_party/upb/upb/decode_fast.h +126 -0
- data/third_party/upb/upb/def.c +525 -516
- data/third_party/upb/upb/def.h +16 -31
- data/third_party/upb/upb/def.hpp +37 -123
- data/third_party/upb/upb/encode.c +227 -169
- data/third_party/upb/upb/encode.h +27 -2
- data/third_party/upb/upb/msg.c +167 -88
- data/third_party/upb/upb/msg.h +174 -34
- data/third_party/upb/upb/port_def.inc +74 -61
- data/third_party/upb/upb/port_undef.inc +3 -7
- data/third_party/upb/upb/reflection.c +36 -19
- data/third_party/upb/upb/table.c +34 -197
- data/third_party/upb/upb/table.int.h +14 -5
- data/third_party/upb/upb/text_encode.c +45 -22
- data/third_party/upb/upb/text_encode.h +4 -1
- data/third_party/upb/upb/upb.c +18 -41
- data/third_party/upb/upb/upb.h +36 -7
- data/third_party/upb/upb/upb.hpp +4 -4
- data/third_party/upb/upb/upb.int.h +29 -0
- data/third_party/xxhash/xxhash.h +5443 -0
- metadata +152 -82
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -53
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -129
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -77
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -85
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -160
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -84
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
- data/src/core/lib/gprpp/map.h +0 -53
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/authorization_engine.h +0 -84
- data/src/core/lib/security/authorization/evaluate_args.cc +0 -153
- data/src/core/lib/security/authorization/evaluate_args.h +0 -59
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/upb/upb/port.c +0 -26
@@ -23,6 +23,8 @@
|
|
23
23
|
#include <stdlib.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
+
#include "absl/strings/str_split.h"
|
27
|
+
|
26
28
|
#include <grpc/support/alloc.h>
|
27
29
|
#include <grpc/support/string_util.h>
|
28
30
|
|
@@ -33,7 +35,6 @@
|
|
33
35
|
#include "src/core/lib/iomgr/parse_address.h"
|
34
36
|
#include "src/core/lib/iomgr/resolve_address.h"
|
35
37
|
#include "src/core/lib/iomgr/unix_sockets_posix.h"
|
36
|
-
#include "src/core/lib/iomgr/work_serializer.h"
|
37
38
|
#include "src/core/lib/slice/slice_internal.h"
|
38
39
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
39
40
|
|
@@ -51,13 +52,14 @@ class SockaddrResolver : public Resolver {
|
|
51
52
|
void ShutdownLocked() override {}
|
52
53
|
|
53
54
|
private:
|
55
|
+
std::unique_ptr<ResultHandler> result_handler_;
|
54
56
|
ServerAddressList addresses_;
|
55
57
|
const grpc_channel_args* channel_args_ = nullptr;
|
56
58
|
};
|
57
59
|
|
58
60
|
SockaddrResolver::SockaddrResolver(ServerAddressList addresses,
|
59
61
|
ResolverArgs args)
|
60
|
-
:
|
62
|
+
: result_handler_(std::move(args.result_handler)),
|
61
63
|
addresses_(std::move(addresses)),
|
62
64
|
channel_args_(grpc_channel_args_copy(args.args)) {}
|
63
65
|
|
@@ -71,37 +73,27 @@ void SockaddrResolver::StartLocked() {
|
|
71
73
|
// TODO(roth): Use std::move() once channel args is converted to C++.
|
72
74
|
result.args = channel_args_;
|
73
75
|
channel_args_ = nullptr;
|
74
|
-
|
76
|
+
result_handler_->ReturnResult(std::move(result));
|
75
77
|
}
|
76
78
|
|
77
79
|
//
|
78
80
|
// Factory
|
79
81
|
//
|
80
82
|
|
81
|
-
|
82
|
-
|
83
|
-
bool ParseUri(const grpc_uri* uri,
|
84
|
-
bool parse(const grpc_uri* uri, grpc_resolved_address* dst),
|
83
|
+
bool ParseUri(const URI& uri,
|
84
|
+
bool parse(const URI& uri, grpc_resolved_address* dst),
|
85
85
|
ServerAddressList* addresses) {
|
86
|
-
if (
|
86
|
+
if (!uri.authority().empty()) {
|
87
87
|
gpr_log(GPR_ERROR, "authority-based URIs not supported by the %s scheme",
|
88
|
-
uri
|
88
|
+
uri.scheme().c_str());
|
89
89
|
return false;
|
90
90
|
}
|
91
91
|
// Construct addresses.
|
92
|
-
grpc_slice path_slice =
|
93
|
-
grpc_slice_new(uri->path, strlen(uri->path), DoNothing);
|
94
|
-
grpc_slice_buffer path_parts;
|
95
|
-
grpc_slice_buffer_init(&path_parts);
|
96
|
-
grpc_slice_split(path_slice, ",", &path_parts);
|
97
92
|
bool errors_found = false;
|
98
|
-
for (
|
99
|
-
|
100
|
-
grpc_core::UniquePtr<char> part_str(
|
101
|
-
grpc_slice_to_c_string(path_parts.slices[i]));
|
102
|
-
ith_uri.path = part_str.get();
|
93
|
+
for (absl::string_view ith_path : absl::StrSplit(uri.path(), ',')) {
|
94
|
+
URI ith_uri(uri.scheme(), "", std::string(ith_path), {}, "");
|
103
95
|
grpc_resolved_address addr;
|
104
|
-
if (!parse(
|
96
|
+
if (!parse(ith_uri, &addr)) {
|
105
97
|
errors_found = true;
|
106
98
|
break;
|
107
99
|
}
|
@@ -109,14 +101,11 @@ bool ParseUri(const grpc_uri* uri,
|
|
109
101
|
addresses->emplace_back(addr, nullptr /* args */);
|
110
102
|
}
|
111
103
|
}
|
112
|
-
grpc_slice_buffer_destroy_internal(&path_parts);
|
113
|
-
grpc_slice_unref_internal(path_slice);
|
114
104
|
return !errors_found;
|
115
105
|
}
|
116
106
|
|
117
107
|
OrphanablePtr<Resolver> CreateSockaddrResolver(
|
118
|
-
ResolverArgs args,
|
119
|
-
bool parse(const grpc_uri* uri, grpc_resolved_address* dst)) {
|
108
|
+
ResolverArgs args, bool parse(const URI& uri, grpc_resolved_address* dst)) {
|
120
109
|
ServerAddressList addresses;
|
121
110
|
if (!ParseUri(args.uri, parse, &addresses)) return nullptr;
|
122
111
|
// Instantiate resolver.
|
@@ -126,7 +115,7 @@ OrphanablePtr<Resolver> CreateSockaddrResolver(
|
|
126
115
|
|
127
116
|
class IPv4ResolverFactory : public ResolverFactory {
|
128
117
|
public:
|
129
|
-
bool IsValidUri(const
|
118
|
+
bool IsValidUri(const URI& uri) const override {
|
130
119
|
return ParseUri(uri, grpc_parse_ipv4, nullptr);
|
131
120
|
}
|
132
121
|
|
@@ -139,7 +128,7 @@ class IPv4ResolverFactory : public ResolverFactory {
|
|
139
128
|
|
140
129
|
class IPv6ResolverFactory : public ResolverFactory {
|
141
130
|
public:
|
142
|
-
bool IsValidUri(const
|
131
|
+
bool IsValidUri(const URI& uri) const override {
|
143
132
|
return ParseUri(uri, grpc_parse_ipv6, nullptr);
|
144
133
|
}
|
145
134
|
|
@@ -153,7 +142,7 @@ class IPv6ResolverFactory : public ResolverFactory {
|
|
153
142
|
#ifdef GRPC_HAVE_UNIX_SOCKET
|
154
143
|
class UnixResolverFactory : public ResolverFactory {
|
155
144
|
public:
|
156
|
-
bool IsValidUri(const
|
145
|
+
bool IsValidUri(const URI& uri) const override {
|
157
146
|
return ParseUri(uri, grpc_parse_unix, nullptr);
|
158
147
|
}
|
159
148
|
|
@@ -161,9 +150,8 @@ class UnixResolverFactory : public ResolverFactory {
|
|
161
150
|
return CreateSockaddrResolver(std::move(args), grpc_parse_unix);
|
162
151
|
}
|
163
152
|
|
164
|
-
|
165
|
-
|
166
|
-
return grpc_core::UniquePtr<char>(gpr_strdup("localhost"));
|
153
|
+
std::string GetDefaultAuthority(const URI& /*uri*/) const override {
|
154
|
+
return "localhost";
|
167
155
|
}
|
168
156
|
|
169
157
|
const char* scheme() const override { return "unix"; }
|
@@ -171,7 +159,7 @@ class UnixResolverFactory : public ResolverFactory {
|
|
171
159
|
|
172
160
|
class UnixAbstractResolverFactory : public ResolverFactory {
|
173
161
|
public:
|
174
|
-
bool IsValidUri(const
|
162
|
+
bool IsValidUri(const URI& uri) const override {
|
175
163
|
return ParseUri(uri, grpc_parse_unix_abstract, nullptr);
|
176
164
|
}
|
177
165
|
|
@@ -179,9 +167,8 @@ class UnixAbstractResolverFactory : public ResolverFactory {
|
|
179
167
|
return CreateSockaddrResolver(std::move(args), grpc_parse_unix_abstract);
|
180
168
|
}
|
181
169
|
|
182
|
-
|
183
|
-
|
184
|
-
return grpc_core::UniquePtr<char>(gpr_strdup("localhost"));
|
170
|
+
std::string GetDefaultAuthority(const URI& /*uri*/) const override {
|
171
|
+
return "localhost";
|
185
172
|
}
|
186
173
|
|
187
174
|
const char* scheme() const override { return "unix-abstract"; }
|
@@ -22,13 +22,18 @@
|
|
22
22
|
#include "absl/strings/str_join.h"
|
23
23
|
#include "absl/strings/str_split.h"
|
24
24
|
#include "re2/re2.h"
|
25
|
+
#define XXH_INLINE_ALL
|
26
|
+
#include "xxhash.h"
|
25
27
|
|
26
28
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
29
|
+
#include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
|
27
30
|
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
28
31
|
#include "src/core/ext/xds/xds_client.h"
|
32
|
+
#include "src/core/ext/xds/xds_http_filters.h"
|
29
33
|
#include "src/core/lib/channel/channel_args.h"
|
30
34
|
#include "src/core/lib/iomgr/closure.h"
|
31
35
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
36
|
+
#include "src/core/lib/surface/lame_client.h"
|
32
37
|
#include "src/core/lib/transport/timeout_encoding.h"
|
33
38
|
|
34
39
|
namespace grpc_core {
|
@@ -46,13 +51,11 @@ namespace {
|
|
46
51
|
class XdsResolver : public Resolver {
|
47
52
|
public:
|
48
53
|
explicit XdsResolver(ResolverArgs args)
|
49
|
-
:
|
50
|
-
|
54
|
+
: work_serializer_(std::move(args.work_serializer)),
|
55
|
+
result_handler_(std::move(args.result_handler)),
|
56
|
+
server_name_(absl::StripPrefix(args.uri.path(), "/")),
|
51
57
|
args_(grpc_channel_args_copy(args.args)),
|
52
58
|
interested_parties_(args.pollset_set) {
|
53
|
-
char* path = args.uri->path;
|
54
|
-
if (path[0] == '/') ++path;
|
55
|
-
server_name_ = path;
|
56
59
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
57
60
|
gpr_log(GPR_INFO, "[xds_resolver %p] created for server name %s", this,
|
58
61
|
server_name_.c_str());
|
@@ -137,9 +140,7 @@ class XdsResolver : public Resolver {
|
|
137
140
|
|
138
141
|
class XdsConfigSelector : public ConfigSelector {
|
139
142
|
public:
|
140
|
-
XdsConfigSelector(RefCountedPtr<XdsResolver> resolver,
|
141
|
-
const std::vector<XdsApi::Route>& routes,
|
142
|
-
grpc_error* error);
|
143
|
+
XdsConfigSelector(RefCountedPtr<XdsResolver> resolver, grpc_error** error);
|
143
144
|
~XdsConfigSelector() override;
|
144
145
|
|
145
146
|
const char* name() const override { return "XdsConfigSelector"; }
|
@@ -153,26 +154,41 @@ class XdsResolver : public Resolver {
|
|
153
154
|
|
154
155
|
CallConfig GetCallConfig(GetCallConfigArgs args) override;
|
155
156
|
|
157
|
+
std::vector<const grpc_channel_filter*> GetFilters() override {
|
158
|
+
return filters_;
|
159
|
+
}
|
160
|
+
|
161
|
+
grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) override;
|
162
|
+
|
156
163
|
private:
|
157
164
|
struct Route {
|
165
|
+
struct ClusterWeightState {
|
166
|
+
uint32_t range_end;
|
167
|
+
absl::string_view cluster;
|
168
|
+
RefCountedPtr<ServiceConfig> method_config;
|
169
|
+
|
170
|
+
bool operator==(const ClusterWeightState& other) const;
|
171
|
+
};
|
172
|
+
|
158
173
|
XdsApi::Route route;
|
159
|
-
absl::InlinedVector<std::pair<uint32_t, absl::string_view>, 2>
|
160
|
-
weighted_cluster_state;
|
161
174
|
RefCountedPtr<ServiceConfig> method_config;
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
}
|
175
|
+
absl::InlinedVector<ClusterWeightState, 2> weighted_cluster_state;
|
176
|
+
|
177
|
+
bool operator==(const Route& other) const;
|
166
178
|
};
|
167
179
|
using RouteTable = std::vector<Route>;
|
168
180
|
|
169
181
|
void MaybeAddCluster(const std::string& name);
|
170
|
-
grpc_error* CreateMethodConfig(
|
171
|
-
|
182
|
+
grpc_error* CreateMethodConfig(
|
183
|
+
const XdsApi::Route& route,
|
184
|
+
const XdsApi::Route::ClusterWeight* cluster_weight,
|
185
|
+
RefCountedPtr<ServiceConfig>* method_config);
|
172
186
|
|
173
187
|
RefCountedPtr<XdsResolver> resolver_;
|
174
188
|
RouteTable route_table_;
|
175
189
|
std::map<absl::string_view, RefCountedPtr<ClusterState>> clusters_;
|
190
|
+
std::vector<const grpc_channel_filter*> filters_;
|
191
|
+
grpc_error* filter_error_ = GRPC_ERROR_NONE;
|
176
192
|
};
|
177
193
|
|
178
194
|
void OnListenerUpdate(XdsApi::LdsUpdate listener);
|
@@ -184,16 +200,25 @@ class XdsResolver : public Resolver {
|
|
184
200
|
void GenerateResult();
|
185
201
|
void MaybeRemoveUnusedClusters();
|
186
202
|
|
203
|
+
std::shared_ptr<WorkSerializer> work_serializer_;
|
204
|
+
std::unique_ptr<ResultHandler> result_handler_;
|
187
205
|
std::string server_name_;
|
188
206
|
const grpc_channel_args* args_;
|
189
207
|
grpc_pollset_set* interested_parties_;
|
208
|
+
|
190
209
|
RefCountedPtr<XdsClient> xds_client_;
|
210
|
+
|
191
211
|
XdsClient::ListenerWatcherInterface* listener_watcher_ = nullptr;
|
212
|
+
// This will not contain the RouteConfiguration, even if it comes with the
|
213
|
+
// LDS response; instead, the relevant VirtualHost from the
|
214
|
+
// RouteConfiguration will be saved in current_virtual_host_.
|
215
|
+
XdsApi::LdsUpdate current_listener_;
|
216
|
+
|
192
217
|
std::string route_config_name_;
|
193
218
|
XdsClient::RouteConfigWatcherInterface* route_config_watcher_ = nullptr;
|
219
|
+
XdsApi::RdsUpdate::VirtualHost current_virtual_host_;
|
220
|
+
|
194
221
|
ClusterState::ClusterStateMap cluster_state_map_;
|
195
|
-
std::vector<XdsApi::Route> current_update_;
|
196
|
-
XdsApi::Duration http_max_stream_duration_;
|
197
222
|
};
|
198
223
|
|
199
224
|
//
|
@@ -212,7 +237,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
|
212
237
|
XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver,
|
213
238
|
XdsApi::RdsUpdate update)
|
214
239
|
: resolver_(std::move(resolver)), type_(kRdsUpdate) {
|
215
|
-
update_.rds_update = std::move(update);
|
240
|
+
update_.http_connection_manager.rds_update = std::move(update);
|
216
241
|
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
217
242
|
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
218
243
|
}
|
@@ -233,7 +258,7 @@ XdsResolver::Notifier::Notifier(RefCountedPtr<XdsResolver> resolver)
|
|
233
258
|
void XdsResolver::Notifier::RunInExecCtx(void* arg, grpc_error* error) {
|
234
259
|
Notifier* self = static_cast<Notifier*>(arg);
|
235
260
|
GRPC_ERROR_REF(error);
|
236
|
-
self->resolver_->
|
261
|
+
self->resolver_->work_serializer_->Run(
|
237
262
|
[self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
|
238
263
|
}
|
239
264
|
|
@@ -248,7 +273,8 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
|
|
248
273
|
resolver_->OnListenerUpdate(std::move(update_));
|
249
274
|
break;
|
250
275
|
case kRdsUpdate:
|
251
|
-
resolver_->OnRouteConfigUpdate(
|
276
|
+
resolver_->OnRouteConfigUpdate(
|
277
|
+
std::move(*update_.http_connection_manager.rds_update));
|
252
278
|
break;
|
253
279
|
case kError:
|
254
280
|
resolver_->OnError(error);
|
@@ -260,13 +286,35 @@ void XdsResolver::Notifier::RunInWorkSerializer(grpc_error* error) {
|
|
260
286
|
delete this;
|
261
287
|
}
|
262
288
|
|
289
|
+
//
|
290
|
+
// XdsResolver::XdsConfigSelector::Route
|
291
|
+
//
|
292
|
+
|
293
|
+
bool MethodConfigsEqual(const ServiceConfig* sc1, const ServiceConfig* sc2) {
|
294
|
+
if (sc1 == nullptr) return sc2 == nullptr;
|
295
|
+
if (sc2 == nullptr) return false;
|
296
|
+
return sc1->json_string() == sc2->json_string();
|
297
|
+
}
|
298
|
+
|
299
|
+
bool XdsResolver::XdsConfigSelector::Route::ClusterWeightState::operator==(
|
300
|
+
const ClusterWeightState& other) const {
|
301
|
+
return range_end == other.range_end && cluster == other.cluster &&
|
302
|
+
MethodConfigsEqual(method_config.get(), other.method_config.get());
|
303
|
+
}
|
304
|
+
|
305
|
+
bool XdsResolver::XdsConfigSelector::Route::operator==(
|
306
|
+
const Route& other) const {
|
307
|
+
return route == other.route &&
|
308
|
+
weighted_cluster_state == other.weighted_cluster_state &&
|
309
|
+
MethodConfigsEqual(method_config.get(), other.method_config.get());
|
310
|
+
}
|
311
|
+
|
263
312
|
//
|
264
313
|
// XdsResolver::XdsConfigSelector
|
265
314
|
//
|
266
315
|
|
267
316
|
XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
268
|
-
RefCountedPtr<XdsResolver> resolver,
|
269
|
-
const std::vector<XdsApi::Route>& routes, grpc_error* error)
|
317
|
+
RefCountedPtr<XdsResolver> resolver, grpc_error** error)
|
270
318
|
: resolver_(std::move(resolver)) {
|
271
319
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
272
320
|
gpr_log(GPR_INFO, "[xds_resolver %p] creating XdsConfigSelector %p",
|
@@ -281,8 +329,8 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
281
329
|
// weighted_cluster_state field points to the memory in the route field, so
|
282
330
|
// moving the entry in a reallocation will cause the string_view to point to
|
283
331
|
// invalid data.
|
284
|
-
route_table_.reserve(routes.size());
|
285
|
-
for (auto& route : routes) {
|
332
|
+
route_table_.reserve(resolver_->current_virtual_host_.routes.size());
|
333
|
+
for (auto& route : resolver_->current_virtual_host_.routes) {
|
286
334
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
287
335
|
gpr_log(GPR_INFO, "[xds_resolver %p] XdsConfigSelector %p: route: %s",
|
288
336
|
resolver_.get(), this, route.ToString().c_str());
|
@@ -294,27 +342,95 @@ XdsResolver::XdsConfigSelector::XdsConfigSelector(
|
|
294
342
|
// one.
|
295
343
|
if (!route.max_stream_duration.has_value()) {
|
296
344
|
route_entry.route.max_stream_duration =
|
297
|
-
resolver_->
|
345
|
+
resolver_->current_listener_.http_connection_manager
|
346
|
+
.http_max_stream_duration;
|
298
347
|
}
|
299
|
-
error = CreateMethodConfig(&route_entry.method_config, route_entry.route);
|
300
348
|
if (route.weighted_clusters.empty()) {
|
349
|
+
*error = CreateMethodConfig(route_entry.route, nullptr,
|
350
|
+
&route_entry.method_config);
|
301
351
|
MaybeAddCluster(route.cluster_name);
|
302
352
|
} else {
|
303
353
|
uint32_t end = 0;
|
304
354
|
for (const auto& weighted_cluster : route_entry.route.weighted_clusters) {
|
305
|
-
|
355
|
+
Route::ClusterWeightState cluster_weight_state;
|
356
|
+
*error = CreateMethodConfig(route_entry.route, &weighted_cluster,
|
357
|
+
&cluster_weight_state.method_config);
|
358
|
+
if (*error != GRPC_ERROR_NONE) return;
|
306
359
|
end += weighted_cluster.weight;
|
307
|
-
|
308
|
-
|
360
|
+
cluster_weight_state.range_end = end;
|
361
|
+
cluster_weight_state.cluster = weighted_cluster.name;
|
362
|
+
route_entry.weighted_cluster_state.push_back(
|
363
|
+
std::move(cluster_weight_state));
|
364
|
+
MaybeAddCluster(weighted_cluster.name);
|
309
365
|
}
|
310
366
|
}
|
311
367
|
}
|
368
|
+
// Populate filter list.
|
369
|
+
bool found_router = false;
|
370
|
+
for (const auto& http_filter :
|
371
|
+
resolver_->current_listener_.http_connection_manager.http_filters) {
|
372
|
+
// Stop at the router filter. It's a no-op for us, and we ignore
|
373
|
+
// anything that may come after it, for compatibility with Envoy.
|
374
|
+
if (http_filter.config.config_proto_type_name ==
|
375
|
+
kXdsHttpRouterFilterConfigName) {
|
376
|
+
found_router = true;
|
377
|
+
break;
|
378
|
+
}
|
379
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
380
|
+
// at config validation time in the XdsApi code.
|
381
|
+
const XdsHttpFilterImpl* filter_impl =
|
382
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
383
|
+
http_filter.config.config_proto_type_name);
|
384
|
+
GPR_ASSERT(filter_impl != nullptr);
|
385
|
+
// Add C-core filter to list.
|
386
|
+
filters_.push_back(filter_impl->channel_filter());
|
387
|
+
}
|
388
|
+
// For compatibility with Envoy, if the router filter is not
|
389
|
+
// configured, we fail all RPCs.
|
390
|
+
if (!found_router) {
|
391
|
+
filter_error_ =
|
392
|
+
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
393
|
+
"no xDS HTTP router filter configured"),
|
394
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
395
|
+
filters_.push_back(&grpc_lame_filter);
|
396
|
+
}
|
397
|
+
}
|
398
|
+
|
399
|
+
XdsResolver::XdsConfigSelector::~XdsConfigSelector() {
|
400
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
401
|
+
gpr_log(GPR_INFO, "[xds_resolver %p] destroying XdsConfigSelector %p",
|
402
|
+
resolver_.get(), this);
|
403
|
+
}
|
404
|
+
clusters_.clear();
|
405
|
+
resolver_->MaybeRemoveUnusedClusters();
|
406
|
+
GRPC_ERROR_UNREF(filter_error_);
|
407
|
+
}
|
408
|
+
|
409
|
+
const XdsHttpFilterImpl::FilterConfig* FindFilterConfigOverride(
|
410
|
+
const std::string& instance_name,
|
411
|
+
const XdsApi::RdsUpdate::VirtualHost& vhost, const XdsApi::Route& route,
|
412
|
+
const XdsApi::Route::ClusterWeight* cluster_weight) {
|
413
|
+
// Check ClusterWeight, if any.
|
414
|
+
if (cluster_weight != nullptr) {
|
415
|
+
auto it = cluster_weight->typed_per_filter_config.find(instance_name);
|
416
|
+
if (it != cluster_weight->typed_per_filter_config.end()) return &it->second;
|
417
|
+
}
|
418
|
+
// Check Route.
|
419
|
+
auto it = route.typed_per_filter_config.find(instance_name);
|
420
|
+
if (it != route.typed_per_filter_config.end()) return &it->second;
|
421
|
+
// Check VirtualHost.
|
422
|
+
it = vhost.typed_per_filter_config.find(instance_name);
|
423
|
+
if (it != vhost.typed_per_filter_config.end()) return &it->second;
|
424
|
+
// Not found.
|
425
|
+
return nullptr;
|
312
426
|
}
|
313
427
|
|
314
428
|
grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
315
|
-
|
316
|
-
|
429
|
+
const XdsApi::Route& route,
|
430
|
+
const XdsApi::Route::ClusterWeight* cluster_weight,
|
431
|
+
RefCountedPtr<ServiceConfig>* method_config) {
|
317
432
|
std::vector<std::string> fields;
|
433
|
+
// Set timeout.
|
318
434
|
if (route.max_stream_duration.has_value() &&
|
319
435
|
(route.max_stream_duration->seconds != 0 ||
|
320
436
|
route.max_stream_duration->nanos != 0)) {
|
@@ -322,6 +438,51 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
322
438
|
route.max_stream_duration->seconds,
|
323
439
|
route.max_stream_duration->nanos));
|
324
440
|
}
|
441
|
+
// Handle xDS HTTP filters.
|
442
|
+
std::map<std::string, std::vector<std::string>> per_filter_configs;
|
443
|
+
grpc_channel_args* args = grpc_channel_args_copy(resolver_->args_);
|
444
|
+
for (const auto& http_filter :
|
445
|
+
resolver_->current_listener_.http_connection_manager.http_filters) {
|
446
|
+
// Stop at the router filter. It's a no-op for us, and we ignore
|
447
|
+
// anything that may come after it, for compatibility with Envoy.
|
448
|
+
if (http_filter.config.config_proto_type_name ==
|
449
|
+
kXdsHttpRouterFilterConfigName) {
|
450
|
+
break;
|
451
|
+
}
|
452
|
+
// Find filter. This is guaranteed to succeed, because it's checked
|
453
|
+
// at config validation time in the XdsApi code.
|
454
|
+
const XdsHttpFilterImpl* filter_impl =
|
455
|
+
XdsHttpFilterRegistry::GetFilterForType(
|
456
|
+
http_filter.config.config_proto_type_name);
|
457
|
+
GPR_ASSERT(filter_impl != nullptr);
|
458
|
+
// Allow filter to add channel args that may affect service config
|
459
|
+
// parsing.
|
460
|
+
args = filter_impl->ModifyChannelArgs(args);
|
461
|
+
// Find config override, if any.
|
462
|
+
const XdsHttpFilterImpl::FilterConfig* config_override =
|
463
|
+
FindFilterConfigOverride(http_filter.name,
|
464
|
+
resolver_->current_virtual_host_, route,
|
465
|
+
cluster_weight);
|
466
|
+
// Generate service config for filter.
|
467
|
+
auto method_config_field =
|
468
|
+
filter_impl->GenerateServiceConfig(http_filter.config, config_override);
|
469
|
+
if (!method_config_field.ok()) {
|
470
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
471
|
+
absl::StrCat("failed to generate method config for HTTP filter ",
|
472
|
+
http_filter.name, ": ",
|
473
|
+
method_config_field.status().ToString())
|
474
|
+
.c_str());
|
475
|
+
}
|
476
|
+
per_filter_configs[method_config_field->service_config_field_name]
|
477
|
+
.push_back(method_config_field->element);
|
478
|
+
}
|
479
|
+
for (const auto& p : per_filter_configs) {
|
480
|
+
fields.emplace_back(absl::StrCat(" \"", p.first, "\": [\n",
|
481
|
+
absl::StrJoin(p.second, ",\n"),
|
482
|
+
"\n ]"));
|
483
|
+
}
|
484
|
+
// Construct service config.
|
485
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
325
486
|
if (!fields.empty()) {
|
326
487
|
std::string json = absl::StrCat(
|
327
488
|
"{\n"
|
@@ -333,19 +494,20 @@ grpc_error* XdsResolver::XdsConfigSelector::CreateMethodConfig(
|
|
333
494
|
absl::StrJoin(fields, ",\n"),
|
334
495
|
"\n } ]\n"
|
335
496
|
"}");
|
336
|
-
*method_config =
|
337
|
-
ServiceConfig::Create(resolver_->args_, json.c_str(), &error);
|
497
|
+
*method_config = ServiceConfig::Create(args, json.c_str(), &error);
|
338
498
|
}
|
499
|
+
grpc_channel_args_destroy(args);
|
339
500
|
return error;
|
340
501
|
}
|
341
502
|
|
342
|
-
XdsResolver::XdsConfigSelector
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
503
|
+
grpc_channel_args* XdsResolver::XdsConfigSelector::ModifyChannelArgs(
|
504
|
+
grpc_channel_args* args) {
|
505
|
+
if (filter_error_ == GRPC_ERROR_NONE) return args;
|
506
|
+
grpc_arg error_arg = MakeLameClientErrorArg(filter_error_);
|
507
|
+
grpc_channel_args* new_args =
|
508
|
+
grpc_channel_args_copy_and_add(args, &error_arg, 1);
|
509
|
+
grpc_channel_args_destroy(args);
|
510
|
+
return new_args;
|
349
511
|
}
|
350
512
|
|
351
513
|
void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
@@ -361,108 +523,50 @@ void XdsResolver::XdsConfigSelector::MaybeAddCluster(const std::string& name) {
|
|
361
523
|
}
|
362
524
|
}
|
363
525
|
|
364
|
-
|
365
|
-
|
366
|
-
switch (path_matcher.type) {
|
367
|
-
case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PREFIX:
|
368
|
-
return path_matcher.case_sensitive
|
369
|
-
? absl::StartsWith(path, path_matcher.string_matcher)
|
370
|
-
: absl::StartsWithIgnoreCase(path,
|
371
|
-
path_matcher.string_matcher);
|
372
|
-
case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::PATH:
|
373
|
-
return path_matcher.case_sensitive
|
374
|
-
? path == path_matcher.string_matcher
|
375
|
-
: absl::EqualsIgnoreCase(path, path_matcher.string_matcher);
|
376
|
-
case XdsApi::Route::Matchers::PathMatcher::PathMatcherType::REGEX:
|
377
|
-
// Note: Case-sensitive option will already have been set appropriately
|
378
|
-
// in path_matcher.regex_matcher when it was constructed, so no
|
379
|
-
// need to check it here.
|
380
|
-
return RE2::FullMatch(path.data(), *path_matcher.regex_matcher);
|
381
|
-
default:
|
382
|
-
return false;
|
383
|
-
}
|
384
|
-
}
|
385
|
-
|
386
|
-
absl::optional<absl::string_view> GetMetadataValue(
|
387
|
-
const std::string& target_key, grpc_metadata_batch* initial_metadata,
|
526
|
+
absl::optional<absl::string_view> GetHeaderValue(
|
527
|
+
grpc_metadata_batch* initial_metadata, absl::string_view header_name,
|
388
528
|
std::string* concatenated_value) {
|
389
|
-
// Find all values for the specified key.
|
390
|
-
GPR_DEBUG_ASSERT(initial_metadata != nullptr);
|
391
|
-
absl::InlinedVector<absl::string_view, 1> values;
|
392
|
-
for (grpc_linked_mdelem* md = initial_metadata->list.head; md != nullptr;
|
393
|
-
md = md->next) {
|
394
|
-
absl::string_view key = StringViewFromSlice(GRPC_MDKEY(md->md));
|
395
|
-
absl::string_view value = StringViewFromSlice(GRPC_MDVALUE(md->md));
|
396
|
-
if (target_key == key) values.push_back(value);
|
397
|
-
}
|
398
|
-
// If none found, no match.
|
399
|
-
if (values.empty()) return absl::nullopt;
|
400
|
-
// If exactly one found, return it as-is.
|
401
|
-
if (values.size() == 1) return values.front();
|
402
|
-
// If more than one found, concatenate the values, using
|
403
|
-
// *concatenated_values as a temporary holding place for the
|
404
|
-
// concatenated string.
|
405
|
-
*concatenated_value = absl::StrJoin(values, ",");
|
406
|
-
return *concatenated_value;
|
407
|
-
}
|
408
|
-
|
409
|
-
bool HeaderMatchHelper(
|
410
|
-
const XdsApi::Route::Matchers::HeaderMatcher& header_matcher,
|
411
|
-
grpc_metadata_batch* initial_metadata) {
|
412
|
-
std::string concatenated_value;
|
413
|
-
absl::optional<absl::string_view> value;
|
414
529
|
// Note: If we ever allow binary headers here, we still need to
|
415
530
|
// special-case ignore "grpc-tags-bin" and "grpc-trace-bin", since
|
416
531
|
// they are not visible to the LB policy in grpc-go.
|
417
|
-
if (absl::EndsWith(
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
value = "application/grpc";
|
422
|
-
} else {
|
423
|
-
value = GetMetadataValue(header_matcher.name, initial_metadata,
|
424
|
-
&concatenated_value);
|
532
|
+
if (absl::EndsWith(header_name, "-bin")) {
|
533
|
+
return absl::nullopt;
|
534
|
+
} else if (header_name == "content-type") {
|
535
|
+
return "application/grpc";
|
425
536
|
}
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
537
|
+
return grpc_metadata_batch_get_value(initial_metadata, header_name,
|
538
|
+
concatenated_value);
|
539
|
+
}
|
540
|
+
|
541
|
+
bool HeadersMatch(const std::vector<HeaderMatcher>& header_matchers,
|
542
|
+
grpc_metadata_batch* initial_metadata) {
|
543
|
+
for (const auto& header_matcher : header_matchers) {
|
544
|
+
std::string concatenated_value;
|
545
|
+
if (!header_matcher.Match(GetHeaderValue(
|
546
|
+
initial_metadata, header_matcher.name(), &concatenated_value))) {
|
433
547
|
return false;
|
434
548
|
}
|
435
549
|
}
|
436
|
-
|
437
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::EXACT:
|
438
|
-
return value.value() == header_matcher.string_matcher;
|
439
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::REGEX:
|
440
|
-
return RE2::FullMatch(value.value().data(), *header_matcher.regex_match);
|
441
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::RANGE:
|
442
|
-
int64_t int_value;
|
443
|
-
if (!absl::SimpleAtoi(value.value(), &int_value)) {
|
444
|
-
return false;
|
445
|
-
}
|
446
|
-
return int_value >= header_matcher.range_start &&
|
447
|
-
int_value < header_matcher.range_end;
|
448
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::PREFIX:
|
449
|
-
return absl::StartsWith(value.value(), header_matcher.string_matcher);
|
450
|
-
case XdsApi::Route::Matchers::HeaderMatcher::HeaderMatcherType::SUFFIX:
|
451
|
-
return absl::EndsWith(value.value(), header_matcher.string_matcher);
|
452
|
-
default:
|
453
|
-
return false;
|
454
|
-
}
|
550
|
+
return true;
|
455
551
|
}
|
456
552
|
|
457
|
-
|
458
|
-
const
|
553
|
+
absl::optional<uint64_t> HeaderHashHelper(
|
554
|
+
const XdsApi::Route::HashPolicy& policy,
|
459
555
|
grpc_metadata_batch* initial_metadata) {
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
556
|
+
GPR_ASSERT(policy.type == XdsApi::Route::HashPolicy::HEADER);
|
557
|
+
std::string value_buffer;
|
558
|
+
absl::optional<absl::string_view> header_value =
|
559
|
+
GetHeaderValue(initial_metadata, policy.header_name, &value_buffer);
|
560
|
+
if (policy.regex != nullptr) {
|
561
|
+
// If GetHeaderValue() did not already store the value in
|
562
|
+
// value_buffer, copy it there now, so we can modify it.
|
563
|
+
if (header_value->data() != value_buffer.data()) {
|
564
|
+
value_buffer = std::string(*header_value);
|
565
|
+
}
|
566
|
+
RE2::GlobalReplace(&value_buffer, *policy.regex, policy.regex_substitution);
|
567
|
+
header_value = value_buffer;
|
464
568
|
}
|
465
|
-
return
|
569
|
+
return XXH64(header_value->data(), header_value->size(), 0);
|
466
570
|
}
|
467
571
|
|
468
572
|
bool UnderFraction(const uint32_t fraction_per_million) {
|
@@ -475,8 +579,8 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
475
579
|
GetCallConfigArgs args) {
|
476
580
|
for (const auto& entry : route_table_) {
|
477
581
|
// Path matching.
|
478
|
-
if (!
|
479
|
-
|
582
|
+
if (!entry.route.matchers.path_matcher.Match(
|
583
|
+
StringViewFromSlice(*args.path))) {
|
480
584
|
continue;
|
481
585
|
}
|
482
586
|
// Header Matching.
|
@@ -491,13 +595,15 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
491
595
|
}
|
492
596
|
// Found a route match
|
493
597
|
absl::string_view cluster_name;
|
598
|
+
RefCountedPtr<ServiceConfig> method_config;
|
494
599
|
if (entry.route.weighted_clusters.empty()) {
|
495
600
|
cluster_name = entry.route.cluster_name;
|
601
|
+
method_config = entry.method_config;
|
496
602
|
} else {
|
497
603
|
const uint32_t key =
|
498
604
|
rand() %
|
499
605
|
entry.weighted_cluster_state[entry.weighted_cluster_state.size() - 1]
|
500
|
-
.
|
606
|
+
.range_end;
|
501
607
|
// Find the index in weighted clusters corresponding to key.
|
502
608
|
size_t mid = 0;
|
503
609
|
size_t start_index = 0;
|
@@ -505,9 +611,9 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
505
611
|
size_t index = 0;
|
506
612
|
while (end_index > start_index) {
|
507
613
|
mid = (start_index + end_index) / 2;
|
508
|
-
if (entry.weighted_cluster_state[mid].
|
614
|
+
if (entry.weighted_cluster_state[mid].range_end > key) {
|
509
615
|
end_index = mid;
|
510
|
-
} else if (entry.weighted_cluster_state[mid].
|
616
|
+
} else if (entry.weighted_cluster_state[mid].range_end < key) {
|
511
617
|
start_index = mid + 1;
|
512
618
|
} else {
|
513
619
|
index = mid + 1;
|
@@ -515,21 +621,56 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
515
621
|
}
|
516
622
|
}
|
517
623
|
if (index == 0) index = start_index;
|
518
|
-
GPR_ASSERT(entry.weighted_cluster_state[index].
|
519
|
-
cluster_name = entry.weighted_cluster_state[index].
|
624
|
+
GPR_ASSERT(entry.weighted_cluster_state[index].range_end > key);
|
625
|
+
cluster_name = entry.weighted_cluster_state[index].cluster;
|
626
|
+
method_config = entry.weighted_cluster_state[index].method_config;
|
520
627
|
}
|
521
628
|
auto it = clusters_.find(cluster_name);
|
522
629
|
GPR_ASSERT(it != clusters_.end());
|
523
630
|
XdsResolver* resolver =
|
524
631
|
static_cast<XdsResolver*>(resolver_->Ref().release());
|
525
632
|
ClusterState* cluster_state = it->second->Ref().release();
|
633
|
+
// Generate a hash
|
634
|
+
absl::optional<uint64_t> hash;
|
635
|
+
for (const auto& hash_policy : entry.route.hash_policies) {
|
636
|
+
absl::optional<uint64_t> new_hash;
|
637
|
+
switch (hash_policy.type) {
|
638
|
+
case XdsApi::Route::HashPolicy::HEADER:
|
639
|
+
new_hash = HeaderHashHelper(hash_policy, args.initial_metadata);
|
640
|
+
break;
|
641
|
+
case XdsApi::Route::HashPolicy::CHANNEL_ID:
|
642
|
+
new_hash =
|
643
|
+
static_cast<uint64_t>(reinterpret_cast<uintptr_t>(resolver));
|
644
|
+
break;
|
645
|
+
default:
|
646
|
+
GPR_ASSERT(0);
|
647
|
+
}
|
648
|
+
if (new_hash.has_value()) {
|
649
|
+
// Rotating the old value prevents duplicate hash rules from cancelling
|
650
|
+
// each other out and preserves all of the entropy
|
651
|
+
const uint64_t old_value =
|
652
|
+
hash.has_value() ? ((hash.value() << 1) | (hash.value() >> 63)) : 0;
|
653
|
+
hash = old_value ^ new_hash.value();
|
654
|
+
}
|
655
|
+
// If the policy is a terminal policy and a hash has been generated,
|
656
|
+
// ignore the rest of the hash policies.
|
657
|
+
if (hash_policy.terminal && hash.has_value()) {
|
658
|
+
break;
|
659
|
+
}
|
660
|
+
}
|
661
|
+
if (!hash.has_value()) {
|
662
|
+
// If there is no hash, we just choose a random value as a default.
|
663
|
+
hash = rand();
|
664
|
+
}
|
526
665
|
CallConfig call_config;
|
527
|
-
if (
|
528
|
-
call_config.service_config = entry.method_config;
|
666
|
+
if (method_config != nullptr) {
|
529
667
|
call_config.method_configs =
|
530
|
-
|
668
|
+
method_config->GetMethodParsedConfigVector(grpc_empty_slice());
|
669
|
+
call_config.service_config = std::move(method_config);
|
531
670
|
}
|
532
671
|
call_config.call_attributes[kXdsClusterAttribute] = it->first;
|
672
|
+
call_config.call_attributes[kRequestRingHashAttribute] =
|
673
|
+
absl::StrFormat("%" PRIu64, hash.value());
|
533
674
|
call_config.on_call_committed = [resolver, cluster_state]() {
|
534
675
|
cluster_state->Unref();
|
535
676
|
ExecCtx::Run(
|
@@ -545,7 +686,7 @@ ConfigSelector::CallConfig XdsResolver::XdsConfigSelector::GetCallConfig(
|
|
545
686
|
GRPC_CLOSURE_CREATE(
|
546
687
|
[](void* arg, grpc_error* /*error*/) {
|
547
688
|
auto* resolver = static_cast<XdsResolver*>(arg);
|
548
|
-
resolver->
|
689
|
+
resolver->work_serializer_->Run(
|
549
690
|
[resolver]() {
|
550
691
|
resolver->MaybeRemoveUnusedClusters();
|
551
692
|
resolver->Unref();
|
@@ -572,7 +713,7 @@ void XdsResolver::StartLocked() {
|
|
572
713
|
"Failed to create xds client -- channel will remain in "
|
573
714
|
"TRANSIENT_FAILURE: %s",
|
574
715
|
grpc_error_string(error));
|
575
|
-
|
716
|
+
result_handler_->ReturnError(error);
|
576
717
|
return;
|
577
718
|
}
|
578
719
|
grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
|
@@ -617,24 +758,34 @@ void XdsResolver::OnListenerUpdate(XdsApi::LdsUpdate listener) {
|
|
617
758
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_resolver_trace)) {
|
618
759
|
gpr_log(GPR_INFO, "[xds_resolver %p] received updated listener data", this);
|
619
760
|
}
|
620
|
-
if (listener.route_config_name !=
|
761
|
+
if (listener.http_connection_manager.route_config_name !=
|
762
|
+
route_config_name_) {
|
621
763
|
if (route_config_watcher_ != nullptr) {
|
622
764
|
xds_client_->CancelRouteConfigDataWatch(
|
623
765
|
route_config_name_, route_config_watcher_,
|
624
|
-
/*delay_unsubscription
|
766
|
+
/*delay_unsubscription=*/
|
767
|
+
!listener.http_connection_manager.route_config_name.empty());
|
625
768
|
route_config_watcher_ = nullptr;
|
626
769
|
}
|
627
|
-
route_config_name_ =
|
770
|
+
route_config_name_ =
|
771
|
+
std::move(listener.http_connection_manager.route_config_name);
|
628
772
|
if (!route_config_name_.empty()) {
|
773
|
+
current_virtual_host_.routes.clear();
|
629
774
|
auto watcher = absl::make_unique<RouteConfigWatcher>(Ref());
|
630
775
|
route_config_watcher_ = watcher.get();
|
631
776
|
xds_client_->WatchRouteConfigData(route_config_name_, std::move(watcher));
|
632
777
|
}
|
633
778
|
}
|
634
|
-
|
779
|
+
current_listener_ = std::move(listener);
|
635
780
|
if (route_config_name_.empty()) {
|
636
|
-
GPR_ASSERT(
|
637
|
-
|
781
|
+
GPR_ASSERT(
|
782
|
+
current_listener_.http_connection_manager.rds_update.has_value());
|
783
|
+
OnRouteConfigUpdate(
|
784
|
+
std::move(*current_listener_.http_connection_manager.rds_update));
|
785
|
+
} else {
|
786
|
+
// HCM may contain newer filter config. We need to propagate the update as
|
787
|
+
// config selector to the channel
|
788
|
+
GenerateResult();
|
638
789
|
}
|
639
790
|
}
|
640
791
|
|
@@ -652,8 +803,8 @@ void XdsResolver::OnRouteConfigUpdate(XdsApi::RdsUpdate rds_update) {
|
|
652
803
|
.c_str()));
|
653
804
|
return;
|
654
805
|
}
|
655
|
-
// Save the
|
656
|
-
|
806
|
+
// Save the virtual host in the resolver.
|
807
|
+
current_virtual_host_ = std::move(*vhost);
|
657
808
|
// Send a new result to the channel.
|
658
809
|
GenerateResult();
|
659
810
|
}
|
@@ -664,7 +815,7 @@ void XdsResolver::OnError(grpc_error* error) {
|
|
664
815
|
Result result;
|
665
816
|
result.args = grpc_channel_args_copy(args_);
|
666
817
|
result.service_config_error = error;
|
667
|
-
|
818
|
+
result_handler_->ReturnResult(std::move(result));
|
668
819
|
}
|
669
820
|
|
670
821
|
void XdsResolver::OnResourceDoesNotExist() {
|
@@ -672,13 +823,13 @@ void XdsResolver::OnResourceDoesNotExist() {
|
|
672
823
|
"[xds_resolver %p] LDS/RDS resource does not exist -- clearing "
|
673
824
|
"update and returning empty service config",
|
674
825
|
this);
|
675
|
-
|
826
|
+
current_virtual_host_.routes.clear();
|
676
827
|
Result result;
|
677
828
|
result.service_config =
|
678
829
|
ServiceConfig::Create(args_, "{}", &result.service_config_error);
|
679
830
|
GPR_ASSERT(result.service_config != nullptr);
|
680
831
|
result.args = grpc_channel_args_copy(args_);
|
681
|
-
|
832
|
+
result_handler_->ReturnResult(std::move(result));
|
682
833
|
}
|
683
834
|
|
684
835
|
grpc_error* XdsResolver::CreateServiceConfig(
|
@@ -714,12 +865,11 @@ grpc_error* XdsResolver::CreateServiceConfig(
|
|
714
865
|
}
|
715
866
|
|
716
867
|
void XdsResolver::GenerateResult() {
|
717
|
-
if (
|
868
|
+
if (current_virtual_host_.routes.empty()) return;
|
718
869
|
// First create XdsConfigSelector, which may add new entries to the cluster
|
719
870
|
// state map, and then CreateServiceConfig for LB policies.
|
720
871
|
grpc_error* error = GRPC_ERROR_NONE;
|
721
|
-
auto config_selector =
|
722
|
-
MakeRefCounted<XdsConfigSelector>(Ref(), current_update_, error);
|
872
|
+
auto config_selector = MakeRefCounted<XdsConfigSelector>(Ref(), &error);
|
723
873
|
if (error != GRPC_ERROR_NONE) {
|
724
874
|
OnError(error);
|
725
875
|
return;
|
@@ -736,7 +886,7 @@ void XdsResolver::GenerateResult() {
|
|
736
886
|
}
|
737
887
|
grpc_arg new_arg = config_selector->MakeChannelArg();
|
738
888
|
result.args = grpc_channel_args_copy_and_add(args_, &new_arg, 1);
|
739
|
-
|
889
|
+
result_handler_->ReturnResult(std::move(result));
|
740
890
|
}
|
741
891
|
|
742
892
|
void XdsResolver::MaybeRemoveUnusedClusters() {
|
@@ -762,8 +912,8 @@ void XdsResolver::MaybeRemoveUnusedClusters() {
|
|
762
912
|
|
763
913
|
class XdsResolverFactory : public ResolverFactory {
|
764
914
|
public:
|
765
|
-
bool IsValidUri(const
|
766
|
-
if (GPR_UNLIKELY(
|
915
|
+
bool IsValidUri(const URI& uri) const override {
|
916
|
+
if (GPR_UNLIKELY(!uri.authority().empty())) {
|
767
917
|
gpr_log(GPR_ERROR, "URI authority not supported");
|
768
918
|
return false;
|
769
919
|
}
|