grpc 1.33.0.pre1 → 1.37.0.pre1
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 +1075 -2814
- data/etc/roots.pem +257 -573
- data/include/grpc/compression.h +1 -1
- data/include/grpc/grpc.h +29 -2
- data/include/grpc/grpc_security.h +215 -175
- 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 +10 -3
- data/include/grpc/impl/codegen/log.h +0 -2
- data/include/grpc/impl/codegen/port_platform.h +24 -55
- 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 +2829 -1588
- 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 +15 -4
- 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 +10 -7
- data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +7 -8
- data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
- data/src/core/ext/filters/client_channel/lb_policy.cc +9 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +5 -6
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +115 -106
- 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/grpclb_client_stats.cc +3 -1
- 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 +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +55 -23
- 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/round_robin/round_robin.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +370 -109
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +52 -24
- 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/{eds_drop.cc → xds_cluster_impl.cc} +332 -108
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +22 -27
- 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 +7 -5
- data/src/core/ext/filters/client_channel/resolver.h +5 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +42 -58
- 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 +5 -5
- 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 +22 -23
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -18
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- 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 +37 -30
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +342 -133
- 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 +24 -38
- 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 +4 -2
- data/src/core/ext/filters/client_channel/server_address.cc +9 -0
- data/src/core/ext/filters/client_channel/server_address.h +31 -4
- data/src/core/ext/filters/client_channel/service_config.cc +3 -1
- data/src/core/ext/filters/client_channel/service_config.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +117 -207
- data/src/core/ext/filters/client_channel/subchannel.h +75 -113
- data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -10
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +1 -1
- data/src/core/ext/filters/deadline/deadline_filter.cc +87 -79
- data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
- 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/http_client_filter.cc +1 -1
- 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/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/max_age/max_age_filter.cc +36 -33
- 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/chttp2_connector.h +1 -1
- 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 +629 -211
- 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/bin_decoder.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +50 -39
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +5 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -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/hpack_parser.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +2 -3
- 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/annotations/deprecation.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +251 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
- 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/circuit_breaker.upbdefs.c +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +543 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +136 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +272 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +135 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +231 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +107 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +195 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +193 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
- 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 +101 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +944 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +290 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
- 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 +505 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +170 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +97 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +246 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +73 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +80 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
- 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/metadata.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -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/number.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
- 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/envoy/type/matcher/v3/value.upbdefs.c +81 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
- 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 +310 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
- 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_factory.h +7 -5
- data/src/core/ext/xds/certificate_provider_store.cc +87 -0
- data/src/core/ext/xds/certificate_provider_store.h +70 -8
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +144 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +69 -0
- data/src/core/ext/xds/xds_api.cc +2378 -1183
- data/src/core/ext/xds/xds_api.h +373 -99
- data/src/core/ext/xds/xds_bootstrap.cc +250 -68
- data/src/core/ext/xds/xds_bootstrap.h +40 -13
- data/src/core/ext/xds/xds_certificate_provider.cc +405 -0
- data/src/core/ext/xds/xds_certificate_provider.h +151 -0
- data/src/core/ext/xds/xds_client.cc +364 -182
- data/src/core/ext/xds/xds_client.h +47 -12
- data/src/core/ext/xds/xds_client_stats.cc +43 -5
- data/src/core/ext/xds/xds_client_stats.h +4 -4
- 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 +9 -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.cc +4 -2
- 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 +32 -4
- 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 +3 -20
- 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.cc +8 -4
- data/src/core/lib/compression/compression_args.cc +3 -2
- data/src/core/lib/compression/compression_internal.cc +10 -5
- data/src/core/lib/compression/compression_internal.h +2 -1
- data/src/core/lib/compression/stream_compression_identity.cc +1 -3
- data/src/core/lib/debug/stats.h +2 -2
- data/src/core/lib/debug/stats_data.cc +1 -0
- data/src/core/lib/debug/stats_data.h +13 -13
- data/src/core/lib/gpr/alloc.cc +3 -2
- data/src/core/lib/gpr/cpu_iphone.cc +10 -2
- data/src/core/lib/gpr/log.cc +59 -17
- data/src/core/lib/gpr/log_linux.cc +19 -3
- data/src/core/lib/gpr/log_posix.cc +15 -1
- data/src/core/lib/gpr/log_windows.cc +18 -4
- data/src/core/lib/gpr/murmur_hash.cc +1 -1
- data/src/core/lib/gpr/spinlock.h +10 -2
- data/src/core/lib/gpr/string.cc +23 -22
- 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/gpr/time_precise.cc +3 -2
- data/src/core/lib/gpr/tls.h +4 -0
- data/src/core/lib/gpr/tls_msvc.h +2 -0
- data/src/core/lib/gpr/tls_stdcpp.h +48 -0
- data/src/core/lib/gpr/useful.h +5 -4
- 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 +46 -51
- data/src/core/lib/gprpp/examine_stack.cc +43 -0
- data/src/core/lib/gprpp/examine_stack.h +46 -0
- data/src/core/lib/gprpp/fork.cc +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/orphanable.h +4 -8
- data/src/core/lib/gprpp/ref_counted.h +42 -48
- data/src/core/lib/gprpp/ref_counted_ptr.h +20 -12
- data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
- data/src/core/lib/gprpp/stat_posix.cc +49 -0
- data/src/core/lib/gprpp/stat_windows.cc +48 -0
- data/src/core/lib/gprpp/sync.h +129 -40
- data/src/core/lib/gprpp/thd.h +3 -3
- data/src/core/lib/gprpp/thd_posix.cc +42 -37
- 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 +47 -27
- 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 +17 -12
- 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 +29 -21
- 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 +7 -3
- 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/mpmcqueue.h +5 -5
- data/src/core/lib/iomgr/executor/threadpool.h +4 -4
- 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 +127 -43
- data/src/core/lib/iomgr/parse_address.h +32 -8
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
- 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 +4 -4
- data/src/core/lib/iomgr/resolve_address.cc +4 -4
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
- 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 +17 -16
- 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 +5 -5
- 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 +32 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/json/json.h +12 -2
- data/src/core/lib/json/json_reader.cc +8 -4
- data/src/core/lib/json/json_util.h +167 -0
- data/src/core/lib/json/json_writer.cc +2 -1
- 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/context/security_context.h +3 -1
- 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 +7 -7
- data/src/core/lib/security/credentials/credentials.h +5 -4
- 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 +213 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +497 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.h +120 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +135 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +48 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +213 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +58 -0
- 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 +64 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -4
- 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 +39 -46
- 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 +30 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +399 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +138 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +78 -150
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +57 -187
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -13
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
- 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 +3 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +121 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +87 -0
- data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +3 -3
- data/src/core/lib/security/security_connector/security_connector.cc +4 -3
- data/src/core/lib/security/security_connector/security_connector.h +4 -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 +16 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +360 -279
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +105 -61
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +36 -8
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
- data/src/core/lib/security/util/json_util.h +1 -0
- data/src/core/lib/slice/slice.cc +7 -4
- data/src/core/lib/slice/slice_buffer.cc +2 -1
- data/src/core/lib/slice/slice_intern.cc +11 -13
- data/src/core/lib/slice/slice_internal.h +2 -2
- data/src/core/lib/surface/call.cc +41 -32
- 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 +31 -25
- 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 +106 -53
- data/src/core/lib/surface/server.h +114 -20
- data/src/core/lib/surface/validate_metadata.h +3 -0
- 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 +7 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +9 -7
- 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.h +2 -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/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +5 -3
- data/src/core/lib/transport/transport.h +8 -8
- 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 +26 -8
- 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 +43 -47
- 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 +17 -5
- data/src/core/tsi/local_transport_security.cc +5 -1
- data/src/core/tsi/local_transport_security.h +6 -7
- 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 +3 -2
- data/src/core/tsi/ssl_transport_security.cc +73 -56
- data/src/core/tsi/ssl_transport_security.h +6 -6
- data/src/core/tsi/transport_security.cc +10 -8
- data/src/core/tsi/transport_security_interface.h +1 -1
- data/src/ruby/ext/grpc/extconf.rb +10 -2
- 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 +36 -14
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +70 -37
- 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/algorithm/container.h +59 -22
- data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +9 -6
- data/third_party/abseil-cpp/absl/base/config.h +60 -17
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
- data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
- data/third_party/abseil-cpp/absl/base/macros.h +36 -109
- data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
- data/third_party/abseil-cpp/absl/base/options.h +31 -4
- data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
- data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
- data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
- data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
- data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
- data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
- data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
- data/third_party/abseil-cpp/absl/status/status.cc +4 -6
- data/third_party/abseil-cpp/absl/status/status.h +502 -113
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
- 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/strings/charconv.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
- data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
- data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
- data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +4 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
- data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
- data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
- data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
- data/third_party/abseil-cpp/absl/time/format.cc +43 -36
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
- data/third_party/abseil-cpp/absl/time/time.h +15 -16
- data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
- data/third_party/abseil-cpp/absl/types/optional.h +9 -9
- data/third_party/abseil-cpp/absl/types/span.h +49 -36
- data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
- data/third_party/boringssl-with-bazel/err_data.c +728 -722
- 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/bio.c +2 -0
- 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/fipsmodule/cipher/e_aes.c +173 -35
- 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 +97 -39
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +155 -2
- 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/trust_token/internal.h +90 -63
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
- 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/pcy_data.c +5 -3
- 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 +25 -24
- 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 +2 -2
- 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/aead.h +24 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +10 -8
- 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 +14 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
- 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/des.h +6 -0
- 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/opensslconf.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
- 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 +122 -34
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -99
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +546 -402
- data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
- 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 +73 -17
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +49 -9
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +87 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +18 -22
- 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 +570 -53
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +55 -13
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +192 -56
- 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 +2178 -0
- data/third_party/upb/upb/def.h +315 -0
- data/third_party/upb/upb/def.hpp +439 -0
- 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 +408 -0
- data/third_party/upb/upb/reflection.h +168 -0
- 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 +421 -0
- data/third_party/upb/upb/text_encode.h +38 -0
- 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 +335 -75
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -1136
- 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/xds/google_mesh_ca_certificate_provider_factory.cc +0 -377
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -102
- 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 -42
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -68
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -93
- 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 -56
- data/src/core/lib/security/certificate_provider.h +0 -60
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -503
- data/third_party/upb/upb/port.c +0 -26
@@ -16,18 +16,13 @@
|
|
16
16
|
|
17
17
|
#include <grpc/support/port_platform.h>
|
18
18
|
|
19
|
-
#include <
|
20
|
-
#include <
|
21
|
-
#include <
|
19
|
+
#include <set>
|
20
|
+
#include <string>
|
21
|
+
#include <vector>
|
22
22
|
|
23
|
-
#include "absl/
|
24
|
-
#include "absl/strings/match.h"
|
25
|
-
#include "absl/strings/numbers.h"
|
23
|
+
#include "absl/status/status.h"
|
26
24
|
#include "absl/strings/str_cat.h"
|
27
|
-
#include "absl/strings/str_join.h"
|
28
|
-
#include "absl/strings/str_split.h"
|
29
25
|
#include "absl/strings/string_view.h"
|
30
|
-
#include "re2/re2.h"
|
31
26
|
|
32
27
|
#include <grpc/grpc.h>
|
33
28
|
|
@@ -36,7 +31,6 @@
|
|
36
31
|
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
37
32
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
38
33
|
#include "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h"
|
39
|
-
#include "src/core/ext/xds/xds_api.h"
|
40
34
|
#include "src/core/lib/channel/channel_args.h"
|
41
35
|
#include "src/core/lib/gpr/string.h"
|
42
36
|
#include "src/core/lib/gprpp/orphanable.h"
|
@@ -61,7 +55,7 @@ class XdsClusterManagerLbConfig : public LoadBalancingPolicy::Config {
|
|
61
55
|
using ClusterMap =
|
62
56
|
std::map<std::string, RefCountedPtr<LoadBalancingPolicy::Config>>;
|
63
57
|
|
64
|
-
XdsClusterManagerLbConfig(ClusterMap cluster_map)
|
58
|
+
explicit XdsClusterManagerLbConfig(ClusterMap cluster_map)
|
65
59
|
: cluster_map_(std::move(cluster_map)) {}
|
66
60
|
|
67
61
|
const char* name() const override { return kXdsClusterManager; }
|
@@ -109,17 +103,13 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
109
103
|
|
110
104
|
// It is required that the keys of cluster_map have to live at least as long
|
111
105
|
// as the ClusterPicker instance.
|
112
|
-
ClusterPicker(ClusterMap cluster_map
|
113
|
-
|
114
|
-
: cluster_map_(std::move(cluster_map)), config_(std::move(config)) {}
|
106
|
+
explicit ClusterPicker(ClusterMap cluster_map)
|
107
|
+
: cluster_map_(std::move(cluster_map)) {}
|
115
108
|
|
116
109
|
PickResult Pick(PickArgs args) override;
|
117
110
|
|
118
111
|
private:
|
119
112
|
ClusterMap cluster_map_;
|
120
|
-
// Take a reference to config so that we can use
|
121
|
-
// XdsApi::RdsUpdate::RdsRoute::Matchers from it.
|
122
|
-
RefCountedPtr<XdsClusterManagerLbConfig> config_;
|
123
113
|
};
|
124
114
|
|
125
115
|
// Each ClusterChild holds a ref to its parent XdsClusterManagerLb.
|
@@ -127,7 +117,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
127
117
|
public:
|
128
118
|
ClusterChild(RefCountedPtr<XdsClusterManagerLb> xds_cluster_manager_policy,
|
129
119
|
const std::string& name);
|
130
|
-
~ClusterChild();
|
120
|
+
~ClusterChild() override;
|
131
121
|
|
132
122
|
void Orphan() override;
|
133
123
|
|
@@ -151,7 +141,9 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
151
141
|
explicit Helper(RefCountedPtr<ClusterChild> xds_cluster_manager_child)
|
152
142
|
: xds_cluster_manager_child_(std::move(xds_cluster_manager_child)) {}
|
153
143
|
|
154
|
-
~Helper() {
|
144
|
+
~Helper() override {
|
145
|
+
xds_cluster_manager_child_.reset(DEBUG_LOCATION, "Helper");
|
146
|
+
}
|
155
147
|
|
156
148
|
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
157
149
|
ServerAddress address, const grpc_channel_args& args) override;
|
@@ -192,7 +184,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
|
|
192
184
|
bool shutdown_ = false;
|
193
185
|
};
|
194
186
|
|
195
|
-
~XdsClusterManagerLb();
|
187
|
+
~XdsClusterManagerLb() override;
|
196
188
|
|
197
189
|
void ShutdownLocked() override;
|
198
190
|
|
@@ -368,8 +360,7 @@ void XdsClusterManagerLb::UpdateStateLocked() {
|
|
368
360
|
Ref(DEBUG_LOCATION, "QueuePicker")));
|
369
361
|
}
|
370
362
|
}
|
371
|
-
picker =
|
372
|
-
absl::make_unique<ClusterPicker>(std::move(cluster_map), config_);
|
363
|
+
picker = absl::make_unique<ClusterPicker>(std::move(cluster_map));
|
373
364
|
break;
|
374
365
|
}
|
375
366
|
case GRPC_CHANNEL_CONNECTING:
|
@@ -510,7 +501,7 @@ void XdsClusterManagerLb::ClusterChild::ResetBackoffLocked() {
|
|
510
501
|
|
511
502
|
void XdsClusterManagerLb::ClusterChild::DeactivateLocked() {
|
512
503
|
// If already deactivated, don't do that again.
|
513
|
-
if (delayed_removal_timer_callback_pending_
|
504
|
+
if (delayed_removal_timer_callback_pending_) return;
|
514
505
|
// Set the child weight to 0 so that future picker won't contain this child.
|
515
506
|
// Start a timer to delete the child.
|
516
507
|
Ref(DEBUG_LOCATION, "ClusterChild+timer").release();
|
@@ -547,8 +538,9 @@ void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked(
|
|
547
538
|
RefCountedPtr<SubchannelInterface>
|
548
539
|
XdsClusterManagerLb::ClusterChild::Helper::CreateSubchannel(
|
549
540
|
ServerAddress address, const grpc_channel_args& args) {
|
550
|
-
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_)
|
541
|
+
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
|
551
542
|
return nullptr;
|
543
|
+
}
|
552
544
|
return xds_cluster_manager_child_->xds_cluster_manager_policy_
|
553
545
|
->channel_control_helper()
|
554
546
|
->CreateSubchannel(std::move(address), args);
|
@@ -566,8 +558,9 @@ void XdsClusterManagerLb::ClusterChild::Helper::UpdateState(
|
|
566
558
|
xds_cluster_manager_child_->name_.c_str(), ConnectivityStateName(state),
|
567
559
|
status.ToString().c_str(), picker.get());
|
568
560
|
}
|
569
|
-
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_)
|
561
|
+
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
|
570
562
|
return;
|
563
|
+
}
|
571
564
|
// Cache the picker in the ClusterChild.
|
572
565
|
xds_cluster_manager_child_->picker_wrapper_ =
|
573
566
|
MakeRefCounted<ChildPickerWrapper>(xds_cluster_manager_child_->name_,
|
@@ -591,8 +584,9 @@ void XdsClusterManagerLb::ClusterChild::Helper::UpdateState(
|
|
591
584
|
}
|
592
585
|
|
593
586
|
void XdsClusterManagerLb::ClusterChild::Helper::RequestReresolution() {
|
594
|
-
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_)
|
587
|
+
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
|
595
588
|
return;
|
589
|
+
}
|
596
590
|
xds_cluster_manager_child_->xds_cluster_manager_policy_
|
597
591
|
->channel_control_helper()
|
598
592
|
->RequestReresolution();
|
@@ -600,8 +594,9 @@ void XdsClusterManagerLb::ClusterChild::Helper::RequestReresolution() {
|
|
600
594
|
|
601
595
|
void XdsClusterManagerLb::ClusterChild::Helper::AddTraceEvent(
|
602
596
|
TraceSeverity severity, absl::string_view message) {
|
603
|
-
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_)
|
597
|
+
if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
|
604
598
|
return;
|
599
|
+
}
|
605
600
|
xds_cluster_manager_child_->xds_cluster_manager_policy_
|
606
601
|
->channel_control_helper()
|
607
602
|
->AddTraceEvent(severity, message);
|
@@ -0,0 +1,1384 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2018 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include <inttypes.h>
|
20
|
+
#include <limits.h>
|
21
|
+
|
22
|
+
#include "absl/strings/str_cat.h"
|
23
|
+
#include "absl/types/optional.h"
|
24
|
+
|
25
|
+
#include <grpc/grpc.h>
|
26
|
+
|
27
|
+
#include "src/core/ext/filters/client_channel/client_channel.h"
|
28
|
+
#include "src/core/ext/filters/client_channel/lb_policy.h"
|
29
|
+
#include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
|
30
|
+
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
31
|
+
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
|
32
|
+
#include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
|
33
|
+
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
34
|
+
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
35
|
+
#include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
|
36
|
+
#include "src/core/ext/filters/client_channel/resolver_registry.h"
|
37
|
+
#include "src/core/ext/filters/client_channel/server_address.h"
|
38
|
+
#include "src/core/ext/xds/xds_channel_args.h"
|
39
|
+
#include "src/core/ext/xds/xds_client.h"
|
40
|
+
#include "src/core/ext/xds/xds_client_stats.h"
|
41
|
+
#include "src/core/lib/channel/channel_args.h"
|
42
|
+
#include "src/core/lib/gpr/string.h"
|
43
|
+
#include "src/core/lib/gprpp/orphanable.h"
|
44
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
45
|
+
#include "src/core/lib/iomgr/work_serializer.h"
|
46
|
+
#include "src/core/lib/transport/error_utils.h"
|
47
|
+
#include "src/core/lib/uri/uri_parser.h"
|
48
|
+
|
49
|
+
#define GRPC_EDS_DEFAULT_FALLBACK_TIMEOUT 10000
|
50
|
+
|
51
|
+
namespace grpc_core {
|
52
|
+
|
53
|
+
TraceFlag grpc_lb_xds_cluster_resolver_trace(false, "xds_cluster_resolver_lb");
|
54
|
+
|
55
|
+
const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
|
56
|
+
|
57
|
+
namespace {
|
58
|
+
|
59
|
+
constexpr char kXdsClusterResolver[] = "xds_cluster_resolver_experimental";
|
60
|
+
|
61
|
+
// Config for EDS LB policy.
|
62
|
+
class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
|
63
|
+
public:
|
64
|
+
struct DiscoveryMechanism {
|
65
|
+
std::string cluster_name;
|
66
|
+
absl::optional<std::string> lrs_load_reporting_server_name;
|
67
|
+
uint32_t max_concurrent_requests;
|
68
|
+
enum DiscoveryMechanismType {
|
69
|
+
EDS,
|
70
|
+
LOGICAL_DNS,
|
71
|
+
};
|
72
|
+
DiscoveryMechanismType type;
|
73
|
+
std::string eds_service_name;
|
74
|
+
|
75
|
+
bool operator==(const DiscoveryMechanism& other) const {
|
76
|
+
return (cluster_name == other.cluster_name &&
|
77
|
+
lrs_load_reporting_server_name ==
|
78
|
+
other.lrs_load_reporting_server_name &&
|
79
|
+
max_concurrent_requests == other.max_concurrent_requests &&
|
80
|
+
type == other.type && eds_service_name == other.eds_service_name);
|
81
|
+
}
|
82
|
+
};
|
83
|
+
|
84
|
+
XdsClusterResolverLbConfig(
|
85
|
+
std::vector<DiscoveryMechanism> discovery_mechanisms, Json xds_lb_policy)
|
86
|
+
: discovery_mechanisms_(std::move(discovery_mechanisms)),
|
87
|
+
xds_lb_policy_(std::move(xds_lb_policy)) {}
|
88
|
+
|
89
|
+
const char* name() const override { return kXdsClusterResolver; }
|
90
|
+
const std::vector<DiscoveryMechanism>& discovery_mechanisms() const {
|
91
|
+
return discovery_mechanisms_;
|
92
|
+
}
|
93
|
+
|
94
|
+
const Json& xds_lb_policy() const { return xds_lb_policy_; }
|
95
|
+
|
96
|
+
private:
|
97
|
+
std::vector<DiscoveryMechanism> discovery_mechanisms_;
|
98
|
+
Json xds_lb_policy_;
|
99
|
+
};
|
100
|
+
|
101
|
+
// Xds Cluster Resolver LB policy.
|
102
|
+
class XdsClusterResolverLb : public LoadBalancingPolicy {
|
103
|
+
public:
|
104
|
+
XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args);
|
105
|
+
|
106
|
+
const char* name() const override { return kXdsClusterResolver; }
|
107
|
+
|
108
|
+
void UpdateLocked(UpdateArgs args) override;
|
109
|
+
void ResetBackoffLocked() override;
|
110
|
+
void ExitIdleLocked() override;
|
111
|
+
|
112
|
+
private:
|
113
|
+
// Discovery Mechanism Base class
|
114
|
+
//
|
115
|
+
// Implemented by EDS and LOGICAL_DNS.
|
116
|
+
//
|
117
|
+
// Implementations are responsible for calling the LB policy's
|
118
|
+
// OnEndpointChanged(), OnError(), and OnResourceDoesNotExist()
|
119
|
+
// methods when the corresponding events occur.
|
120
|
+
//
|
121
|
+
// Must implement Orphan() method to cancel the watchers.
|
122
|
+
class DiscoveryMechanism : public InternallyRefCounted<DiscoveryMechanism> {
|
123
|
+
public:
|
124
|
+
DiscoveryMechanism(
|
125
|
+
RefCountedPtr<XdsClusterResolverLb> xds_cluster_resolver_lb,
|
126
|
+
size_t index)
|
127
|
+
: parent_(std::move(xds_cluster_resolver_lb)), index_(index) {}
|
128
|
+
virtual void Start() = 0;
|
129
|
+
void Orphan() override = 0;
|
130
|
+
virtual Json::Array override_child_policy() = 0;
|
131
|
+
virtual bool disable_reresolution() = 0;
|
132
|
+
|
133
|
+
// Caller must ensure that config_ is set before calling.
|
134
|
+
absl::string_view GetXdsClusterResolverResourceName() const {
|
135
|
+
if (!parent_->is_xds_uri_) return parent_->server_name_;
|
136
|
+
if (!parent_->config_->discovery_mechanisms()[index_]
|
137
|
+
.eds_service_name.empty()) {
|
138
|
+
return parent_->config_->discovery_mechanisms()[index_]
|
139
|
+
.eds_service_name;
|
140
|
+
}
|
141
|
+
return parent_->config_->discovery_mechanisms()[index_].cluster_name;
|
142
|
+
}
|
143
|
+
|
144
|
+
// Returns a pair containing the cluster and eds_service_name
|
145
|
+
// to use for LRS load reporting. Caller must ensure that config_ is set
|
146
|
+
// before calling.
|
147
|
+
std::pair<absl::string_view, absl::string_view> GetLrsClusterKey() const {
|
148
|
+
if (!parent_->is_xds_uri_) return {parent_->server_name_, nullptr};
|
149
|
+
return {
|
150
|
+
parent_->config_->discovery_mechanisms()[index_].cluster_name,
|
151
|
+
parent_->config_->discovery_mechanisms()[index_].eds_service_name};
|
152
|
+
}
|
153
|
+
|
154
|
+
protected:
|
155
|
+
XdsClusterResolverLb* parent() const { return parent_.get(); }
|
156
|
+
size_t index() const { return index_; }
|
157
|
+
|
158
|
+
private:
|
159
|
+
RefCountedPtr<XdsClusterResolverLb> parent_;
|
160
|
+
// Stores its own index in the vector of DiscoveryMechanism.
|
161
|
+
size_t index_;
|
162
|
+
};
|
163
|
+
|
164
|
+
class EdsDiscoveryMechanism : public DiscoveryMechanism {
|
165
|
+
public:
|
166
|
+
EdsDiscoveryMechanism(
|
167
|
+
RefCountedPtr<XdsClusterResolverLb> xds_cluster_resolver_lb,
|
168
|
+
size_t index)
|
169
|
+
: DiscoveryMechanism(std::move(xds_cluster_resolver_lb), index) {}
|
170
|
+
void Start() override;
|
171
|
+
void Orphan() override;
|
172
|
+
Json::Array override_child_policy() override { return Json::Array{}; }
|
173
|
+
bool disable_reresolution() override { return true; }
|
174
|
+
|
175
|
+
private:
|
176
|
+
class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
|
177
|
+
public:
|
178
|
+
explicit EndpointWatcher(
|
179
|
+
RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism)
|
180
|
+
: discovery_mechanism_(std::move(discovery_mechanism)) {}
|
181
|
+
~EndpointWatcher() override {
|
182
|
+
discovery_mechanism_.reset(DEBUG_LOCATION, "EndpointWatcher");
|
183
|
+
}
|
184
|
+
void OnEndpointChanged(XdsApi::EdsUpdate update) override {
|
185
|
+
new Notifier(discovery_mechanism_, std::move(update));
|
186
|
+
}
|
187
|
+
void OnError(grpc_error* error) override {
|
188
|
+
new Notifier(discovery_mechanism_, error);
|
189
|
+
}
|
190
|
+
void OnResourceDoesNotExist() override {
|
191
|
+
new Notifier(discovery_mechanism_);
|
192
|
+
}
|
193
|
+
|
194
|
+
private:
|
195
|
+
class Notifier {
|
196
|
+
public:
|
197
|
+
Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
|
198
|
+
XdsApi::EdsUpdate update);
|
199
|
+
Notifier(RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism,
|
200
|
+
grpc_error* error);
|
201
|
+
explicit Notifier(
|
202
|
+
RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism);
|
203
|
+
~Notifier() { discovery_mechanism_.reset(DEBUG_LOCATION, "Notifier"); }
|
204
|
+
|
205
|
+
private:
|
206
|
+
enum Type { kUpdate, kError, kDoesNotExist };
|
207
|
+
|
208
|
+
static void RunInExecCtx(void* arg, grpc_error* error);
|
209
|
+
void RunInWorkSerializer(grpc_error* error);
|
210
|
+
|
211
|
+
RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism_;
|
212
|
+
grpc_closure closure_;
|
213
|
+
XdsApi::EdsUpdate update_;
|
214
|
+
Type type_;
|
215
|
+
};
|
216
|
+
|
217
|
+
RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism_;
|
218
|
+
};
|
219
|
+
|
220
|
+
// Note that this is not owned, so this pointer must never be dereferenced.
|
221
|
+
EndpointWatcher* watcher_ = nullptr;
|
222
|
+
};
|
223
|
+
|
224
|
+
class LogicalDNSDiscoveryMechanism : public DiscoveryMechanism {
|
225
|
+
public:
|
226
|
+
LogicalDNSDiscoveryMechanism(
|
227
|
+
RefCountedPtr<XdsClusterResolverLb> xds_cluster_resolver_lb,
|
228
|
+
size_t index)
|
229
|
+
: DiscoveryMechanism(std::move(xds_cluster_resolver_lb), index) {}
|
230
|
+
void Start() override;
|
231
|
+
void Orphan() override;
|
232
|
+
Json::Array override_child_policy() override {
|
233
|
+
return Json::Array{
|
234
|
+
Json::Object{
|
235
|
+
{"pick_first", Json::Object()},
|
236
|
+
},
|
237
|
+
};
|
238
|
+
}
|
239
|
+
bool disable_reresolution() override { return false; };
|
240
|
+
|
241
|
+
private:
|
242
|
+
class ResolverResultHandler : public Resolver::ResultHandler {
|
243
|
+
public:
|
244
|
+
explicit ResolverResultHandler(
|
245
|
+
RefCountedPtr<LogicalDNSDiscoveryMechanism> discovery_mechanism)
|
246
|
+
: discovery_mechanism_(std::move(discovery_mechanism)) {}
|
247
|
+
|
248
|
+
~ResolverResultHandler() override {}
|
249
|
+
|
250
|
+
void ReturnResult(Resolver::Result result) override;
|
251
|
+
|
252
|
+
void ReturnError(grpc_error* error) override;
|
253
|
+
|
254
|
+
private:
|
255
|
+
RefCountedPtr<LogicalDNSDiscoveryMechanism> discovery_mechanism_;
|
256
|
+
};
|
257
|
+
// This is only necessary because of a bug in msvc where nested class cannot
|
258
|
+
// access protected member in base class.
|
259
|
+
friend class ResolverResultHandler;
|
260
|
+
OrphanablePtr<Resolver> resolver_;
|
261
|
+
};
|
262
|
+
|
263
|
+
struct DiscoveryMechanismEntry {
|
264
|
+
OrphanablePtr<DiscoveryMechanism> discovery_mechanism;
|
265
|
+
bool first_update_received = false;
|
266
|
+
// Number of priorities this mechanism has contributed to priority_list_.
|
267
|
+
// (The sum of this across all discovery mechanisms should always equal
|
268
|
+
// the number of priorities in priority_list_.)
|
269
|
+
uint32_t num_priorities = 0;
|
270
|
+
RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config;
|
271
|
+
// Populated only when an update has been delivered by the mechanism
|
272
|
+
// but has not yet been applied to the LB policy's combined priority_list_.
|
273
|
+
absl::optional<XdsApi::EdsUpdate::PriorityList> pending_priority_list;
|
274
|
+
};
|
275
|
+
|
276
|
+
class Helper : public ChannelControlHelper {
|
277
|
+
public:
|
278
|
+
explicit Helper(
|
279
|
+
RefCountedPtr<XdsClusterResolverLb> xds_cluster_resolver_policy)
|
280
|
+
: xds_cluster_resolver_policy_(std::move(xds_cluster_resolver_policy)) {
|
281
|
+
}
|
282
|
+
|
283
|
+
~Helper() override {
|
284
|
+
xds_cluster_resolver_policy_.reset(DEBUG_LOCATION, "Helper");
|
285
|
+
}
|
286
|
+
|
287
|
+
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
288
|
+
ServerAddress address, const grpc_channel_args& args) override;
|
289
|
+
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
290
|
+
std::unique_ptr<SubchannelPicker> picker) override;
|
291
|
+
// This is a no-op, because we get the addresses from the xds
|
292
|
+
// client, which is a watch-based API.
|
293
|
+
void RequestReresolution() override {}
|
294
|
+
void AddTraceEvent(TraceSeverity severity,
|
295
|
+
absl::string_view message) override;
|
296
|
+
|
297
|
+
private:
|
298
|
+
RefCountedPtr<XdsClusterResolverLb> xds_cluster_resolver_policy_;
|
299
|
+
};
|
300
|
+
|
301
|
+
~XdsClusterResolverLb() override;
|
302
|
+
|
303
|
+
void ShutdownLocked() override;
|
304
|
+
|
305
|
+
void OnEndpointChanged(size_t index, XdsApi::EdsUpdate update);
|
306
|
+
void OnError(size_t index, grpc_error* error);
|
307
|
+
void OnResourceDoesNotExist(size_t index);
|
308
|
+
|
309
|
+
void MaybeDestroyChildPolicyLocked();
|
310
|
+
|
311
|
+
void UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list);
|
312
|
+
void UpdateChildPolicyLocked();
|
313
|
+
OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
|
314
|
+
const grpc_channel_args* args);
|
315
|
+
ServerAddressList CreateChildPolicyAddressesLocked();
|
316
|
+
RefCountedPtr<Config> CreateChildPolicyConfigLocked();
|
317
|
+
grpc_channel_args* CreateChildPolicyArgsLocked(
|
318
|
+
const grpc_channel_args* args_in);
|
319
|
+
|
320
|
+
// Server name from target URI.
|
321
|
+
std::string server_name_;
|
322
|
+
bool is_xds_uri_;
|
323
|
+
|
324
|
+
// Current channel args and config from the resolver.
|
325
|
+
const grpc_channel_args* args_ = nullptr;
|
326
|
+
RefCountedPtr<XdsClusterResolverLbConfig> config_;
|
327
|
+
|
328
|
+
// Internal state.
|
329
|
+
bool shutting_down_ = false;
|
330
|
+
|
331
|
+
// The xds client and endpoint watcher.
|
332
|
+
RefCountedPtr<XdsClient> xds_client_;
|
333
|
+
|
334
|
+
// Vector of discovery mechansism entries in priority order.
|
335
|
+
std::vector<DiscoveryMechanismEntry> discovery_mechanisms_;
|
336
|
+
|
337
|
+
// The latest data from the endpoint watcher.
|
338
|
+
XdsApi::EdsUpdate::PriorityList priority_list_;
|
339
|
+
// State used to retain child policy names for priority policy.
|
340
|
+
std::vector<size_t /*child_number*/> priority_child_numbers_;
|
341
|
+
|
342
|
+
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
343
|
+
};
|
344
|
+
|
345
|
+
//
|
346
|
+
// XdsClusterResolverLb::Helper
|
347
|
+
//
|
348
|
+
|
349
|
+
RefCountedPtr<SubchannelInterface>
|
350
|
+
XdsClusterResolverLb::Helper::CreateSubchannel(ServerAddress address,
|
351
|
+
const grpc_channel_args& args) {
|
352
|
+
if (xds_cluster_resolver_policy_->shutting_down_) return nullptr;
|
353
|
+
return xds_cluster_resolver_policy_->channel_control_helper()
|
354
|
+
->CreateSubchannel(std::move(address), args);
|
355
|
+
}
|
356
|
+
|
357
|
+
void XdsClusterResolverLb::Helper::UpdateState(
|
358
|
+
grpc_connectivity_state state, const absl::Status& status,
|
359
|
+
std::unique_ptr<SubchannelPicker> picker) {
|
360
|
+
if (xds_cluster_resolver_policy_->shutting_down_ ||
|
361
|
+
xds_cluster_resolver_policy_->child_policy_ == nullptr) {
|
362
|
+
return;
|
363
|
+
}
|
364
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
365
|
+
gpr_log(GPR_INFO,
|
366
|
+
"[xds_cluster_resolver_lb %p] child policy updated state=%s (%s) "
|
367
|
+
"picker=%p",
|
368
|
+
xds_cluster_resolver_policy_.get(), ConnectivityStateName(state),
|
369
|
+
status.ToString().c_str(), picker.get());
|
370
|
+
}
|
371
|
+
xds_cluster_resolver_policy_->channel_control_helper()->UpdateState(
|
372
|
+
state, status, std::move(picker));
|
373
|
+
}
|
374
|
+
|
375
|
+
void XdsClusterResolverLb::Helper::AddTraceEvent(TraceSeverity severity,
|
376
|
+
absl::string_view message) {
|
377
|
+
if (xds_cluster_resolver_policy_->shutting_down_) return;
|
378
|
+
xds_cluster_resolver_policy_->channel_control_helper()->AddTraceEvent(
|
379
|
+
severity, message);
|
380
|
+
}
|
381
|
+
|
382
|
+
//
|
383
|
+
// XdsClusterResolverLb::EdsDiscoveryMechanism
|
384
|
+
//
|
385
|
+
|
386
|
+
void XdsClusterResolverLb::EdsDiscoveryMechanism::Start() {
|
387
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
388
|
+
gpr_log(GPR_INFO,
|
389
|
+
"[xds_cluster_resolver_lb %p] eds discovery mechanism %" PRIuPTR
|
390
|
+
":%p starting xds watch for %s",
|
391
|
+
parent(), index(), this,
|
392
|
+
std::string(GetXdsClusterResolverResourceName()).c_str());
|
393
|
+
}
|
394
|
+
auto watcher = absl::make_unique<EndpointWatcher>(
|
395
|
+
Ref(DEBUG_LOCATION, "EdsDiscoveryMechanism"));
|
396
|
+
watcher_ = watcher.get();
|
397
|
+
parent()->xds_client_->WatchEndpointData(GetXdsClusterResolverResourceName(),
|
398
|
+
std::move(watcher));
|
399
|
+
}
|
400
|
+
|
401
|
+
void XdsClusterResolverLb::EdsDiscoveryMechanism::Orphan() {
|
402
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
403
|
+
gpr_log(GPR_INFO,
|
404
|
+
"[xds_cluster_resolver_lb %p] eds discovery mechanism %" PRIuPTR
|
405
|
+
":%p cancelling xds watch for %s",
|
406
|
+
parent(), index(), this,
|
407
|
+
std::string(GetXdsClusterResolverResourceName()).c_str());
|
408
|
+
}
|
409
|
+
parent()->xds_client_->CancelEndpointDataWatch(
|
410
|
+
GetXdsClusterResolverResourceName(), watcher_);
|
411
|
+
Unref();
|
412
|
+
}
|
413
|
+
|
414
|
+
//
|
415
|
+
// XdsClusterResolverLb::EndpointWatcher::Notifier
|
416
|
+
//
|
417
|
+
|
418
|
+
XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
|
419
|
+
Notifier(RefCountedPtr<XdsClusterResolverLb::EdsDiscoveryMechanism>
|
420
|
+
discovery_mechanism,
|
421
|
+
XdsApi::EdsUpdate update)
|
422
|
+
: discovery_mechanism_(std::move(discovery_mechanism)),
|
423
|
+
update_(std::move(update)),
|
424
|
+
type_(kUpdate) {
|
425
|
+
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
426
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
427
|
+
}
|
428
|
+
|
429
|
+
XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
|
430
|
+
Notifier(RefCountedPtr<XdsClusterResolverLb::EdsDiscoveryMechanism>
|
431
|
+
discovery_mechanism,
|
432
|
+
grpc_error* error)
|
433
|
+
: discovery_mechanism_(std::move(discovery_mechanism)), type_(kError) {
|
434
|
+
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
435
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
|
436
|
+
}
|
437
|
+
|
438
|
+
XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
|
439
|
+
Notifier(RefCountedPtr<XdsClusterResolverLb::EdsDiscoveryMechanism>
|
440
|
+
discovery_mechanism)
|
441
|
+
: discovery_mechanism_(std::move(discovery_mechanism)),
|
442
|
+
type_(kDoesNotExist) {
|
443
|
+
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
444
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
445
|
+
}
|
446
|
+
|
447
|
+
void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
|
448
|
+
RunInExecCtx(void* arg, grpc_error* error) {
|
449
|
+
Notifier* self = static_cast<Notifier*>(arg);
|
450
|
+
GRPC_ERROR_REF(error);
|
451
|
+
self->discovery_mechanism_->parent()->work_serializer()->Run(
|
452
|
+
[self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
|
453
|
+
}
|
454
|
+
|
455
|
+
void XdsClusterResolverLb::EdsDiscoveryMechanism::EndpointWatcher::Notifier::
|
456
|
+
RunInWorkSerializer(grpc_error* error) {
|
457
|
+
switch (type_) {
|
458
|
+
case kUpdate:
|
459
|
+
discovery_mechanism_->parent()->OnEndpointChanged(
|
460
|
+
discovery_mechanism_->index(), std::move(update_));
|
461
|
+
break;
|
462
|
+
case kError:
|
463
|
+
discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(),
|
464
|
+
error);
|
465
|
+
break;
|
466
|
+
case kDoesNotExist:
|
467
|
+
discovery_mechanism_->parent()->OnResourceDoesNotExist(
|
468
|
+
discovery_mechanism_->index());
|
469
|
+
break;
|
470
|
+
};
|
471
|
+
delete this;
|
472
|
+
}
|
473
|
+
|
474
|
+
//
|
475
|
+
// XdsClusterResolverLb::LogicalDNSDiscoveryMechanism
|
476
|
+
//
|
477
|
+
|
478
|
+
void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
|
479
|
+
std::string target = parent()->server_name_;
|
480
|
+
grpc_channel_args* args = nullptr;
|
481
|
+
FakeResolverResponseGenerator* fake_resolver_response_generator =
|
482
|
+
grpc_channel_args_find_pointer<FakeResolverResponseGenerator>(
|
483
|
+
parent()->args_,
|
484
|
+
GRPC_ARG_XDS_LOGICAL_DNS_CLUSTER_FAKE_RESOLVER_RESPONSE_GENERATOR);
|
485
|
+
if (fake_resolver_response_generator != nullptr) {
|
486
|
+
target = absl::StrCat("fake:", target);
|
487
|
+
grpc_arg new_arg = FakeResolverResponseGenerator::MakeChannelArg(
|
488
|
+
fake_resolver_response_generator);
|
489
|
+
args = grpc_channel_args_copy_and_add(parent()->args_, &new_arg, 1);
|
490
|
+
} else {
|
491
|
+
args = grpc_channel_args_copy(parent()->args_);
|
492
|
+
}
|
493
|
+
resolver_ = ResolverRegistry::CreateResolver(
|
494
|
+
target.c_str(), args, parent()->interested_parties(),
|
495
|
+
parent()->work_serializer(),
|
496
|
+
absl::make_unique<ResolverResultHandler>(
|
497
|
+
Ref(DEBUG_LOCATION, "LogicalDNSDiscoveryMechanism")));
|
498
|
+
grpc_channel_args_destroy(args);
|
499
|
+
if (resolver_ == nullptr) {
|
500
|
+
parent()->OnResourceDoesNotExist(index());
|
501
|
+
return;
|
502
|
+
}
|
503
|
+
resolver_->StartLocked();
|
504
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
505
|
+
gpr_log(GPR_INFO,
|
506
|
+
"[xds_cluster_resolver_lb %p] logical DNS discovery mechanism "
|
507
|
+
"%" PRIuPTR ":%p starting dns resolver %p",
|
508
|
+
parent(), index(), this, resolver_.get());
|
509
|
+
}
|
510
|
+
}
|
511
|
+
|
512
|
+
void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Orphan() {
|
513
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
514
|
+
gpr_log(
|
515
|
+
GPR_INFO,
|
516
|
+
"[xds_cluster_resolver_lb %p] logical DNS discovery mechanism %" PRIuPTR
|
517
|
+
":%p shutting down dns resolver %p",
|
518
|
+
parent(), index(), this, resolver_.get());
|
519
|
+
}
|
520
|
+
resolver_.reset();
|
521
|
+
Unref();
|
522
|
+
}
|
523
|
+
|
524
|
+
//
|
525
|
+
// XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler
|
526
|
+
//
|
527
|
+
|
528
|
+
void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
|
529
|
+
ReturnResult(Resolver::Result result) {
|
530
|
+
// convert result to eds update
|
531
|
+
XdsApi::EdsUpdate update;
|
532
|
+
XdsApi::EdsUpdate::Priority::Locality locality;
|
533
|
+
locality.name = MakeRefCounted<XdsLocalityName>("", "", "");
|
534
|
+
locality.lb_weight = 1;
|
535
|
+
locality.endpoints = std::move(result.addresses);
|
536
|
+
XdsApi::EdsUpdate::Priority priority;
|
537
|
+
priority.localities.emplace(locality.name.get(), std::move(locality));
|
538
|
+
update.priorities.emplace_back(std::move(priority));
|
539
|
+
discovery_mechanism_->parent()->OnEndpointChanged(
|
540
|
+
discovery_mechanism_->index(), std::move(update));
|
541
|
+
}
|
542
|
+
|
543
|
+
void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
|
544
|
+
ReturnError(grpc_error* error) {
|
545
|
+
discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(), error);
|
546
|
+
}
|
547
|
+
|
548
|
+
//
|
549
|
+
// XdsClusterResolverLb public methods
|
550
|
+
//
|
551
|
+
|
552
|
+
XdsClusterResolverLb::XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client,
|
553
|
+
Args args)
|
554
|
+
: LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
|
555
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
556
|
+
gpr_log(GPR_INFO,
|
557
|
+
"[xds_cluster_resolver_lb %p] created -- using xds client %p", this,
|
558
|
+
xds_client_.get());
|
559
|
+
}
|
560
|
+
// Record server name.
|
561
|
+
const char* server_uri =
|
562
|
+
grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
|
563
|
+
GPR_ASSERT(server_uri != nullptr);
|
564
|
+
absl::StatusOr<URI> uri = URI::Parse(server_uri);
|
565
|
+
GPR_ASSERT(uri.ok() && !uri->path().empty());
|
566
|
+
server_name_ = std::string(absl::StripPrefix(uri->path(), "/"));
|
567
|
+
is_xds_uri_ = uri->scheme() == "xds";
|
568
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
569
|
+
gpr_log(GPR_INFO,
|
570
|
+
"[xds_cluster_resolver_lb %p] server name from channel "
|
571
|
+
"(is_xds_uri=%d): %s",
|
572
|
+
this, is_xds_uri_, server_name_.c_str());
|
573
|
+
}
|
574
|
+
// EDS-only flow.
|
575
|
+
if (!is_xds_uri_) {
|
576
|
+
// Setup channelz linkage.
|
577
|
+
channelz::ChannelNode* parent_channelz_node =
|
578
|
+
grpc_channel_args_find_pointer<channelz::ChannelNode>(
|
579
|
+
args.args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
580
|
+
if (parent_channelz_node != nullptr) {
|
581
|
+
xds_client_->AddChannelzLinkage(parent_channelz_node);
|
582
|
+
}
|
583
|
+
// Couple polling.
|
584
|
+
grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
|
585
|
+
interested_parties());
|
586
|
+
}
|
587
|
+
}
|
588
|
+
|
589
|
+
XdsClusterResolverLb::~XdsClusterResolverLb() {
|
590
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
591
|
+
gpr_log(GPR_INFO,
|
592
|
+
"[xds_cluster_resolver_lb %p] destroying xds_cluster_resolver LB "
|
593
|
+
"policy",
|
594
|
+
this);
|
595
|
+
}
|
596
|
+
}
|
597
|
+
|
598
|
+
void XdsClusterResolverLb::ShutdownLocked() {
|
599
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
600
|
+
gpr_log(GPR_INFO, "[xds_cluster_resolver_lb %p] shutting down", this);
|
601
|
+
}
|
602
|
+
shutting_down_ = true;
|
603
|
+
MaybeDestroyChildPolicyLocked();
|
604
|
+
discovery_mechanisms_.clear();
|
605
|
+
if (!is_xds_uri_) {
|
606
|
+
// Remove channelz linkage.
|
607
|
+
channelz::ChannelNode* parent_channelz_node =
|
608
|
+
grpc_channel_args_find_pointer<channelz::ChannelNode>(
|
609
|
+
args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
610
|
+
if (parent_channelz_node != nullptr) {
|
611
|
+
xds_client_->RemoveChannelzLinkage(parent_channelz_node);
|
612
|
+
}
|
613
|
+
// Decouple polling.
|
614
|
+
grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
|
615
|
+
interested_parties());
|
616
|
+
}
|
617
|
+
xds_client_.reset(DEBUG_LOCATION, "XdsClusterResolverLb");
|
618
|
+
// Destroy channel args.
|
619
|
+
grpc_channel_args_destroy(args_);
|
620
|
+
args_ = nullptr;
|
621
|
+
}
|
622
|
+
|
623
|
+
void XdsClusterResolverLb::MaybeDestroyChildPolicyLocked() {
|
624
|
+
if (child_policy_ != nullptr) {
|
625
|
+
grpc_pollset_set_del_pollset_set(child_policy_->interested_parties(),
|
626
|
+
interested_parties());
|
627
|
+
child_policy_.reset();
|
628
|
+
}
|
629
|
+
}
|
630
|
+
|
631
|
+
void XdsClusterResolverLb::UpdateLocked(UpdateArgs args) {
|
632
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
633
|
+
gpr_log(GPR_INFO, "[xds_cluster_resolver_lb %p] Received update", this);
|
634
|
+
}
|
635
|
+
const bool is_initial_update = args_ == nullptr;
|
636
|
+
// Update config.
|
637
|
+
auto old_config = std::move(config_);
|
638
|
+
config_ = std::move(args.config);
|
639
|
+
// Update args.
|
640
|
+
grpc_channel_args_destroy(args_);
|
641
|
+
args_ = args.args;
|
642
|
+
args.args = nullptr;
|
643
|
+
// Update child policy if needed.
|
644
|
+
if (child_policy_ != nullptr) UpdateChildPolicyLocked();
|
645
|
+
// Create endpoint watcher if needed.
|
646
|
+
if (is_initial_update) {
|
647
|
+
for (const auto& config : config_->discovery_mechanisms()) {
|
648
|
+
DiscoveryMechanismEntry entry;
|
649
|
+
if (config.type == XdsClusterResolverLbConfig::DiscoveryMechanism::
|
650
|
+
DiscoveryMechanismType::EDS) {
|
651
|
+
entry.discovery_mechanism =
|
652
|
+
grpc_core::MakeOrphanable<EdsDiscoveryMechanism>(
|
653
|
+
Ref(DEBUG_LOCATION, "EdsDiscoveryMechanism"),
|
654
|
+
discovery_mechanisms_.size());
|
655
|
+
} else if (config.type == XdsClusterResolverLbConfig::DiscoveryMechanism::
|
656
|
+
DiscoveryMechanismType::LOGICAL_DNS) {
|
657
|
+
entry.discovery_mechanism =
|
658
|
+
grpc_core::MakeOrphanable<LogicalDNSDiscoveryMechanism>(
|
659
|
+
Ref(DEBUG_LOCATION, "LogicalDNSDiscoveryMechanism"),
|
660
|
+
discovery_mechanisms_.size());
|
661
|
+
} else {
|
662
|
+
GPR_ASSERT(0);
|
663
|
+
}
|
664
|
+
discovery_mechanisms_.push_back(std::move(entry));
|
665
|
+
}
|
666
|
+
// Call start() on all discovery mechanisms after creation.
|
667
|
+
for (const auto& discovery_mechanism : discovery_mechanisms_) {
|
668
|
+
discovery_mechanism.discovery_mechanism->Start();
|
669
|
+
}
|
670
|
+
}
|
671
|
+
}
|
672
|
+
|
673
|
+
void XdsClusterResolverLb::ResetBackoffLocked() {
|
674
|
+
// When the XdsClient is instantiated in the resolver instead of in this
|
675
|
+
// LB policy, this is done via the resolver, so we don't need to do it here.
|
676
|
+
if (!is_xds_uri_ && xds_client_ != nullptr) xds_client_->ResetBackoff();
|
677
|
+
if (child_policy_ != nullptr) {
|
678
|
+
child_policy_->ResetBackoffLocked();
|
679
|
+
}
|
680
|
+
}
|
681
|
+
|
682
|
+
void XdsClusterResolverLb::ExitIdleLocked() {
|
683
|
+
if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
|
684
|
+
}
|
685
|
+
|
686
|
+
void XdsClusterResolverLb::OnEndpointChanged(size_t index,
|
687
|
+
XdsApi::EdsUpdate update) {
|
688
|
+
if (shutting_down_) return;
|
689
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
690
|
+
gpr_log(GPR_INFO,
|
691
|
+
"[xds_cluster_resolver_lb %p] Received update from xds client"
|
692
|
+
" for discovery mechanism %" PRIuPTR "",
|
693
|
+
this, index);
|
694
|
+
}
|
695
|
+
// We need at least one priority for each discovery mechanism, just so that we
|
696
|
+
// have a child in which to create the xds_cluster_impl policy. This ensures
|
697
|
+
// that we properly handle the case of a discovery mechanism dropping 100% of
|
698
|
+
// calls, the OnError() case, and the OnResourceDoesNotExist() case.
|
699
|
+
if (update.priorities.empty()) update.priorities.emplace_back();
|
700
|
+
discovery_mechanisms_[index].drop_config = std::move(update.drop_config);
|
701
|
+
discovery_mechanisms_[index].pending_priority_list =
|
702
|
+
std::move(update.priorities);
|
703
|
+
discovery_mechanisms_[index].first_update_received = true;
|
704
|
+
// If any discovery mechanism has not received its first update,
|
705
|
+
// wait until that happens before creating the child policy.
|
706
|
+
// TODO(roth): If this becomes problematic in the future (e.g., a
|
707
|
+
// secondary discovery mechanism delaying us from starting up at all),
|
708
|
+
// we can consider some sort of optimization whereby we can create the
|
709
|
+
// priority policy with only a subset of its children. But we need to
|
710
|
+
// make sure not to get into a situation where the priority policy
|
711
|
+
// will put the channel into TRANSIENT_FAILURE instead of CONNECTING
|
712
|
+
// while we're still waiting for the other discovery mechanism(s).
|
713
|
+
for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
|
714
|
+
if (!mechanism.first_update_received) return;
|
715
|
+
}
|
716
|
+
// Construct new priority list.
|
717
|
+
XdsApi::EdsUpdate::PriorityList priority_list;
|
718
|
+
size_t priority_index = 0;
|
719
|
+
for (DiscoveryMechanismEntry& mechanism : discovery_mechanisms_) {
|
720
|
+
// If the mechanism has a pending update, use that.
|
721
|
+
// Otherwise, use the priorities that it previously contributed to the
|
722
|
+
// combined list.
|
723
|
+
if (mechanism.pending_priority_list.has_value()) {
|
724
|
+
priority_list.insert(priority_list.end(),
|
725
|
+
mechanism.pending_priority_list->begin(),
|
726
|
+
mechanism.pending_priority_list->end());
|
727
|
+
priority_index += mechanism.num_priorities;
|
728
|
+
mechanism.num_priorities = mechanism.pending_priority_list->size();
|
729
|
+
mechanism.pending_priority_list.reset();
|
730
|
+
} else {
|
731
|
+
priority_list.insert(
|
732
|
+
priority_list.end(), priority_list_.begin() + priority_index,
|
733
|
+
priority_list_.begin() + priority_index + mechanism.num_priorities);
|
734
|
+
priority_index += mechanism.num_priorities;
|
735
|
+
}
|
736
|
+
}
|
737
|
+
// Update child policy.
|
738
|
+
UpdatePriorityList(std::move(priority_list));
|
739
|
+
}
|
740
|
+
|
741
|
+
void XdsClusterResolverLb::OnError(size_t index, grpc_error* error) {
|
742
|
+
gpr_log(GPR_ERROR,
|
743
|
+
"[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
|
744
|
+
" xds watcher reported error: %s",
|
745
|
+
this, index, grpc_error_string(error));
|
746
|
+
GRPC_ERROR_UNREF(error);
|
747
|
+
if (shutting_down_) return;
|
748
|
+
if (!discovery_mechanisms_[index].first_update_received) {
|
749
|
+
// Call OnEndpointChanged with an empty update just like
|
750
|
+
// OnResourceDoesNotExist.
|
751
|
+
OnEndpointChanged(index, XdsApi::EdsUpdate());
|
752
|
+
}
|
753
|
+
}
|
754
|
+
|
755
|
+
void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index) {
|
756
|
+
gpr_log(GPR_ERROR,
|
757
|
+
"[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
|
758
|
+
" resource does not exist",
|
759
|
+
this, index);
|
760
|
+
if (shutting_down_) return;
|
761
|
+
// Call OnEndpointChanged with an empty update.
|
762
|
+
OnEndpointChanged(index, XdsApi::EdsUpdate());
|
763
|
+
}
|
764
|
+
|
765
|
+
//
|
766
|
+
// child policy-related methods
|
767
|
+
//
|
768
|
+
|
769
|
+
void XdsClusterResolverLb::UpdatePriorityList(
|
770
|
+
XdsApi::EdsUpdate::PriorityList priority_list) {
|
771
|
+
// Build some maps from locality to child number and the reverse from
|
772
|
+
// the old data in priority_list_ and priority_child_numbers_.
|
773
|
+
std::map<XdsLocalityName*, size_t /*child_number*/, XdsLocalityName::Less>
|
774
|
+
locality_child_map;
|
775
|
+
std::map<size_t, std::set<XdsLocalityName*>> child_locality_map;
|
776
|
+
for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
|
777
|
+
size_t child_number = priority_child_numbers_[priority];
|
778
|
+
const auto& localities = priority_list_[priority].localities;
|
779
|
+
for (const auto& p : localities) {
|
780
|
+
XdsLocalityName* locality_name = p.first;
|
781
|
+
locality_child_map[locality_name] = child_number;
|
782
|
+
child_locality_map[child_number].insert(locality_name);
|
783
|
+
}
|
784
|
+
}
|
785
|
+
// Construct new list of children.
|
786
|
+
std::vector<size_t> priority_child_numbers;
|
787
|
+
for (size_t priority = 0; priority < priority_list.size(); ++priority) {
|
788
|
+
const auto& localities = priority_list[priority].localities;
|
789
|
+
absl::optional<size_t> child_number;
|
790
|
+
// If one of the localities in this priority already existed, reuse its
|
791
|
+
// child number.
|
792
|
+
for (const auto& p : localities) {
|
793
|
+
XdsLocalityName* locality_name = p.first;
|
794
|
+
if (!child_number.has_value()) {
|
795
|
+
auto it = locality_child_map.find(locality_name);
|
796
|
+
if (it != locality_child_map.end()) {
|
797
|
+
child_number = it->second;
|
798
|
+
locality_child_map.erase(it);
|
799
|
+
// Remove localities that *used* to be in this child number, so
|
800
|
+
// that we don't incorrectly reuse this child number for a
|
801
|
+
// subsequent priority.
|
802
|
+
for (XdsLocalityName* old_locality :
|
803
|
+
child_locality_map[*child_number]) {
|
804
|
+
locality_child_map.erase(old_locality);
|
805
|
+
}
|
806
|
+
}
|
807
|
+
} else {
|
808
|
+
// Remove all localities that are now in this child number, so
|
809
|
+
// that we don't accidentally reuse this child number for a
|
810
|
+
// subsequent priority.
|
811
|
+
locality_child_map.erase(locality_name);
|
812
|
+
}
|
813
|
+
}
|
814
|
+
// If we didn't find an existing child number, assign a new one.
|
815
|
+
if (!child_number.has_value()) {
|
816
|
+
for (child_number = 0;
|
817
|
+
child_locality_map.find(*child_number) != child_locality_map.end();
|
818
|
+
++(*child_number)) {
|
819
|
+
}
|
820
|
+
// Add entry so we know that the child number is in use.
|
821
|
+
// (Don't need to add the list of localities, since we won't use them.)
|
822
|
+
child_locality_map[*child_number];
|
823
|
+
}
|
824
|
+
priority_child_numbers.push_back(*child_number);
|
825
|
+
}
|
826
|
+
// Save update.
|
827
|
+
priority_list_ = std::move(priority_list);
|
828
|
+
priority_child_numbers_ = std::move(priority_child_numbers);
|
829
|
+
// Update child policy.
|
830
|
+
UpdateChildPolicyLocked();
|
831
|
+
}
|
832
|
+
|
833
|
+
ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
|
834
|
+
ServerAddressList addresses;
|
835
|
+
for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
|
836
|
+
const auto& localities = priority_list_[priority].localities;
|
837
|
+
std::string priority_child_name =
|
838
|
+
absl::StrCat("child", priority_child_numbers_[priority]);
|
839
|
+
for (const auto& p : localities) {
|
840
|
+
const auto& locality_name = p.first;
|
841
|
+
const auto& locality = p.second;
|
842
|
+
std::vector<std::string> hierarchical_path = {
|
843
|
+
priority_child_name, locality_name->AsHumanReadableString()};
|
844
|
+
for (const auto& endpoint : locality.endpoints) {
|
845
|
+
addresses.emplace_back(
|
846
|
+
endpoint
|
847
|
+
.WithAttribute(kHierarchicalPathAttributeKey,
|
848
|
+
MakeHierarchicalPathAttribute(hierarchical_path))
|
849
|
+
.WithAttribute(kXdsLocalityNameAttributeKey,
|
850
|
+
absl::make_unique<XdsLocalityAttribute>(
|
851
|
+
locality_name->Ref()))
|
852
|
+
.WithAttribute(ServerAddressWeightAttribute::
|
853
|
+
kServerAddressWeightAttributeKey,
|
854
|
+
absl::make_unique<ServerAddressWeightAttribute>(
|
855
|
+
locality.lb_weight)));
|
856
|
+
}
|
857
|
+
}
|
858
|
+
}
|
859
|
+
return addresses;
|
860
|
+
}
|
861
|
+
|
862
|
+
RefCountedPtr<LoadBalancingPolicy::Config>
|
863
|
+
XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
|
864
|
+
Json::Object priority_children;
|
865
|
+
Json::Array priority_priorities;
|
866
|
+
// Setting up index to iterate through the discovery mechanisms and keeping
|
867
|
+
// track the discovery_mechanism each priority belongs to.
|
868
|
+
size_t discovery_index = 0;
|
869
|
+
// Setting up num_priorities_remaining to track the priorities in each
|
870
|
+
// discovery_mechanism.
|
871
|
+
size_t num_priorities_remaining_in_discovery =
|
872
|
+
discovery_mechanisms_[discovery_index].num_priorities;
|
873
|
+
for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
|
874
|
+
Json child_policy;
|
875
|
+
if (!discovery_mechanisms_[discovery_index]
|
876
|
+
.discovery_mechanism->override_child_policy()
|
877
|
+
.empty()) {
|
878
|
+
child_policy = discovery_mechanisms_[discovery_index]
|
879
|
+
.discovery_mechanism->override_child_policy();
|
880
|
+
} else {
|
881
|
+
const auto& xds_lb_policy = config_->xds_lb_policy().object_value();
|
882
|
+
if (xds_lb_policy.find("ROUND_ROBIN") != xds_lb_policy.end()) {
|
883
|
+
const auto& localities = priority_list_[priority].localities;
|
884
|
+
Json::Object weighted_targets;
|
885
|
+
for (const auto& p : localities) {
|
886
|
+
XdsLocalityName* locality_name = p.first;
|
887
|
+
const auto& locality = p.second;
|
888
|
+
// Construct JSON object containing locality name.
|
889
|
+
Json::Object locality_name_json;
|
890
|
+
if (!locality_name->region().empty()) {
|
891
|
+
locality_name_json["region"] = locality_name->region();
|
892
|
+
}
|
893
|
+
if (!locality_name->zone().empty()) {
|
894
|
+
locality_name_json["zone"] = locality_name->zone();
|
895
|
+
}
|
896
|
+
if (!locality_name->sub_zone().empty()) {
|
897
|
+
locality_name_json["sub_zone"] = locality_name->sub_zone();
|
898
|
+
}
|
899
|
+
// Add weighted target entry.
|
900
|
+
weighted_targets[locality_name->AsHumanReadableString()] =
|
901
|
+
Json::Object{
|
902
|
+
{"weight", locality.lb_weight},
|
903
|
+
{"childPolicy",
|
904
|
+
Json::Array{
|
905
|
+
Json::Object{
|
906
|
+
{"round_robin", Json::Object()},
|
907
|
+
},
|
908
|
+
}},
|
909
|
+
};
|
910
|
+
}
|
911
|
+
// Construct locality-picking policy.
|
912
|
+
// Start with field from our config and add the "targets" field.
|
913
|
+
child_policy = Json::Array{
|
914
|
+
Json::Object{
|
915
|
+
{"weighted_target_experimental",
|
916
|
+
Json::Object{
|
917
|
+
{"targets", Json::Object()},
|
918
|
+
}},
|
919
|
+
},
|
920
|
+
};
|
921
|
+
Json::Object& config =
|
922
|
+
*(*child_policy.mutable_array())[0].mutable_object();
|
923
|
+
auto it = config.begin();
|
924
|
+
GPR_ASSERT(it != config.end());
|
925
|
+
(*it->second.mutable_object())["targets"] = std::move(weighted_targets);
|
926
|
+
} else {
|
927
|
+
auto it = xds_lb_policy.find("RING_HASH");
|
928
|
+
GPR_ASSERT(it != xds_lb_policy.end());
|
929
|
+
Json::Object ring_hash_experimental_policy = it->second.object_value();
|
930
|
+
child_policy = Json::Array{
|
931
|
+
Json::Object{
|
932
|
+
{"ring_hash_experimental", ring_hash_experimental_policy},
|
933
|
+
},
|
934
|
+
};
|
935
|
+
}
|
936
|
+
}
|
937
|
+
// Wrap it in the drop policy.
|
938
|
+
Json::Array drop_categories;
|
939
|
+
if (discovery_mechanisms_[discovery_index].drop_config != nullptr) {
|
940
|
+
for (const auto& category : discovery_mechanisms_[discovery_index]
|
941
|
+
.drop_config->drop_category_list()) {
|
942
|
+
drop_categories.push_back(Json::Object{
|
943
|
+
{"category", category.name},
|
944
|
+
{"requests_per_million", category.parts_per_million},
|
945
|
+
});
|
946
|
+
}
|
947
|
+
}
|
948
|
+
const auto lrs_key = discovery_mechanisms_[discovery_index]
|
949
|
+
.discovery_mechanism->GetLrsClusterKey();
|
950
|
+
Json::Object xds_cluster_impl_config = {
|
951
|
+
{"clusterName", std::string(lrs_key.first)},
|
952
|
+
{"childPolicy", std::move(child_policy)},
|
953
|
+
{"dropCategories", std::move(drop_categories)},
|
954
|
+
{"maxConcurrentRequests",
|
955
|
+
config_->discovery_mechanisms()[discovery_index]
|
956
|
+
.max_concurrent_requests},
|
957
|
+
};
|
958
|
+
if (!lrs_key.second.empty()) {
|
959
|
+
xds_cluster_impl_config["edsServiceName"] = std::string(lrs_key.second);
|
960
|
+
}
|
961
|
+
if (config_->discovery_mechanisms()[discovery_index]
|
962
|
+
.lrs_load_reporting_server_name.has_value()) {
|
963
|
+
xds_cluster_impl_config["lrsLoadReportingServerName"] =
|
964
|
+
config_->discovery_mechanisms()[discovery_index]
|
965
|
+
.lrs_load_reporting_server_name.value();
|
966
|
+
}
|
967
|
+
Json locality_picking_policy = Json::Array{Json::Object{
|
968
|
+
{"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
|
969
|
+
}};
|
970
|
+
// Add priority entry.
|
971
|
+
const size_t child_number = priority_child_numbers_[priority];
|
972
|
+
std::string child_name = absl::StrCat("child", child_number);
|
973
|
+
priority_priorities.emplace_back(child_name);
|
974
|
+
Json::Object child_config = {
|
975
|
+
{"config", std::move(locality_picking_policy)},
|
976
|
+
};
|
977
|
+
if (discovery_mechanisms_[discovery_index]
|
978
|
+
.discovery_mechanism->disable_reresolution()) {
|
979
|
+
child_config["ignore_reresolution_requests"] = true;
|
980
|
+
}
|
981
|
+
priority_children[child_name] = std::move(child_config);
|
982
|
+
// Each priority in the priority_list_ should correspond to a priority in a
|
983
|
+
// discovery mechanism in discovery_mechanisms_ (both in the same order).
|
984
|
+
// Keeping track of the discovery_mechanism each priority belongs to.
|
985
|
+
--num_priorities_remaining_in_discovery;
|
986
|
+
while (num_priorities_remaining_in_discovery == 0 &&
|
987
|
+
discovery_index < discovery_mechanisms_.size() - 1) {
|
988
|
+
++discovery_index;
|
989
|
+
num_priorities_remaining_in_discovery =
|
990
|
+
discovery_mechanisms_[discovery_index].num_priorities;
|
991
|
+
}
|
992
|
+
}
|
993
|
+
// There should be matching number of priorities in discovery_mechanisms_ and
|
994
|
+
// in priority_list_; therefore at the end of looping through all the
|
995
|
+
// priorities, num_priorities_remaining should be down to 0, and index should
|
996
|
+
// be the last index in discovery_mechanisms_.
|
997
|
+
GPR_ASSERT(num_priorities_remaining_in_discovery == 0);
|
998
|
+
GPR_ASSERT(discovery_index == discovery_mechanisms_.size() - 1);
|
999
|
+
Json json = Json::Array{Json::Object{
|
1000
|
+
{"priority_experimental",
|
1001
|
+
Json::Object{
|
1002
|
+
{"children", std::move(priority_children)},
|
1003
|
+
{"priorities", std::move(priority_priorities)},
|
1004
|
+
}},
|
1005
|
+
}};
|
1006
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
1007
|
+
std::string json_str = json.Dump(/*indent=*/1);
|
1008
|
+
gpr_log(
|
1009
|
+
GPR_INFO,
|
1010
|
+
"[xds_cluster_resolver_lb %p] generated config for child policy: %s",
|
1011
|
+
this, json_str.c_str());
|
1012
|
+
}
|
1013
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
1014
|
+
RefCountedPtr<LoadBalancingPolicy::Config> config =
|
1015
|
+
LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
|
1016
|
+
if (error != GRPC_ERROR_NONE) {
|
1017
|
+
// This should never happen, but if it does, we basically have no
|
1018
|
+
// way to fix it, so we put the channel in TRANSIENT_FAILURE.
|
1019
|
+
gpr_log(GPR_ERROR,
|
1020
|
+
"[xds_cluster_resolver_lb %p] error parsing generated child policy "
|
1021
|
+
"config -- "
|
1022
|
+
"will put channel in TRANSIENT_FAILURE: %s",
|
1023
|
+
this, grpc_error_string(error));
|
1024
|
+
error = grpc_error_set_int(
|
1025
|
+
grpc_error_add_child(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1026
|
+
"xds_cluster_resolver LB policy: error "
|
1027
|
+
"parsing generated child policy config"),
|
1028
|
+
error),
|
1029
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
|
1030
|
+
channel_control_helper()->UpdateState(
|
1031
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
|
1032
|
+
absl::make_unique<TransientFailurePicker>(error));
|
1033
|
+
return nullptr;
|
1034
|
+
}
|
1035
|
+
return config;
|
1036
|
+
}
|
1037
|
+
|
1038
|
+
void XdsClusterResolverLb::UpdateChildPolicyLocked() {
|
1039
|
+
if (shutting_down_) return;
|
1040
|
+
UpdateArgs update_args;
|
1041
|
+
update_args.config = CreateChildPolicyConfigLocked();
|
1042
|
+
if (update_args.config == nullptr) return;
|
1043
|
+
update_args.addresses = CreateChildPolicyAddressesLocked();
|
1044
|
+
update_args.args = CreateChildPolicyArgsLocked(args_);
|
1045
|
+
if (child_policy_ == nullptr) {
|
1046
|
+
child_policy_ = CreateChildPolicyLocked(update_args.args);
|
1047
|
+
}
|
1048
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
1049
|
+
gpr_log(GPR_INFO, "[xds_cluster_resolver_lb %p] Updating child policy %p",
|
1050
|
+
this, child_policy_.get());
|
1051
|
+
}
|
1052
|
+
child_policy_->UpdateLocked(std::move(update_args));
|
1053
|
+
}
|
1054
|
+
|
1055
|
+
grpc_channel_args* XdsClusterResolverLb::CreateChildPolicyArgsLocked(
|
1056
|
+
const grpc_channel_args* args) {
|
1057
|
+
// Inhibit client-side health checking, since the balancer does this for us.
|
1058
|
+
grpc_arg new_arg = grpc_channel_arg_integer_create(
|
1059
|
+
const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1);
|
1060
|
+
return grpc_channel_args_copy_and_add(args, &new_arg, 1);
|
1061
|
+
}
|
1062
|
+
|
1063
|
+
OrphanablePtr<LoadBalancingPolicy>
|
1064
|
+
XdsClusterResolverLb::CreateChildPolicyLocked(const grpc_channel_args* args) {
|
1065
|
+
LoadBalancingPolicy::Args lb_policy_args;
|
1066
|
+
lb_policy_args.work_serializer = work_serializer();
|
1067
|
+
lb_policy_args.args = args;
|
1068
|
+
lb_policy_args.channel_control_helper =
|
1069
|
+
absl::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
|
1070
|
+
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
1071
|
+
LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
|
1072
|
+
"priority_experimental", std::move(lb_policy_args));
|
1073
|
+
if (GPR_UNLIKELY(lb_policy == nullptr)) {
|
1074
|
+
gpr_log(GPR_ERROR,
|
1075
|
+
"[xds_cluster_resolver_lb %p] failure creating child policy", this);
|
1076
|
+
return nullptr;
|
1077
|
+
}
|
1078
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
|
1079
|
+
gpr_log(GPR_INFO,
|
1080
|
+
"[xds_cluster_resolver_lb %p]: Created new child policy %p", this,
|
1081
|
+
lb_policy.get());
|
1082
|
+
}
|
1083
|
+
// Add our interested_parties pollset_set to that of the newly created
|
1084
|
+
// child policy. This will make the child policy progress upon activity on
|
1085
|
+
// this policy, which in turn is tied to the application's call.
|
1086
|
+
grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
|
1087
|
+
interested_parties());
|
1088
|
+
return lb_policy;
|
1089
|
+
}
|
1090
|
+
|
1091
|
+
//
|
1092
|
+
// factory
|
1093
|
+
//
|
1094
|
+
|
1095
|
+
class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
|
1096
|
+
public:
|
1097
|
+
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
1098
|
+
LoadBalancingPolicy::Args args) const override {
|
1099
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
1100
|
+
RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
|
1101
|
+
if (error != GRPC_ERROR_NONE) {
|
1102
|
+
gpr_log(GPR_ERROR,
|
1103
|
+
"cannot get XdsClient to instantiate xds_cluster_resolver LB "
|
1104
|
+
"policy: %s",
|
1105
|
+
grpc_error_string(error));
|
1106
|
+
GRPC_ERROR_UNREF(error);
|
1107
|
+
return nullptr;
|
1108
|
+
}
|
1109
|
+
return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
|
1110
|
+
std::move(args));
|
1111
|
+
}
|
1112
|
+
|
1113
|
+
const char* name() const override { return kXdsClusterResolver; }
|
1114
|
+
|
1115
|
+
RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
|
1116
|
+
const Json& json, grpc_error** error) const override {
|
1117
|
+
GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
|
1118
|
+
if (json.type() == Json::Type::JSON_NULL) {
|
1119
|
+
// xds_cluster_resolver was mentioned as a policy in the deprecated
|
1120
|
+
// loadBalancingPolicy field or in the client API.
|
1121
|
+
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1122
|
+
"field:loadBalancingPolicy error:xds_cluster_resolver policy "
|
1123
|
+
"requires configuration. "
|
1124
|
+
"Please use loadBalancingConfig field of service config instead.");
|
1125
|
+
return nullptr;
|
1126
|
+
}
|
1127
|
+
std::vector<grpc_error*> error_list;
|
1128
|
+
std::vector<XdsClusterResolverLbConfig::DiscoveryMechanism>
|
1129
|
+
discovery_mechanisms;
|
1130
|
+
auto it = json.object_value().find("discoveryMechanisms");
|
1131
|
+
if (it == json.object_value().end()) {
|
1132
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1133
|
+
"field:discoveryMechanisms error:required field missing"));
|
1134
|
+
} else if (it->second.type() != Json::Type::ARRAY) {
|
1135
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1136
|
+
"field:discoveryMechanisms error:type should be array"));
|
1137
|
+
} else {
|
1138
|
+
const Json::Array& array = it->second.array_value();
|
1139
|
+
for (size_t i = 0; i < array.size(); ++i) {
|
1140
|
+
XdsClusterResolverLbConfig::DiscoveryMechanism discovery_mechanism;
|
1141
|
+
std::vector<grpc_error*> discovery_mechanism_errors =
|
1142
|
+
ParseDiscoveryMechanism(array[i], &discovery_mechanism);
|
1143
|
+
if (!discovery_mechanism_errors.empty()) {
|
1144
|
+
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1145
|
+
absl::StrCat("field:discovery_mechanism element: ", i, " error")
|
1146
|
+
.c_str());
|
1147
|
+
for (grpc_error* discovery_mechanism_error :
|
1148
|
+
discovery_mechanism_errors) {
|
1149
|
+
error = grpc_error_add_child(error, discovery_mechanism_error);
|
1150
|
+
}
|
1151
|
+
error_list.push_back(error);
|
1152
|
+
}
|
1153
|
+
discovery_mechanisms.emplace_back(std::move(discovery_mechanism));
|
1154
|
+
}
|
1155
|
+
}
|
1156
|
+
if (discovery_mechanisms.empty()) {
|
1157
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1158
|
+
"field:discovery_mechanism error:list is missing or empty"));
|
1159
|
+
}
|
1160
|
+
Json xds_lb_policy = Json::Object{
|
1161
|
+
{"ROUND_ROBIN", Json::Object()},
|
1162
|
+
};
|
1163
|
+
it = json.object_value().find("xdsLbPolicy");
|
1164
|
+
if (it != json.object_value().end()) {
|
1165
|
+
if (it->second.type() != Json::Type::ARRAY) {
|
1166
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1167
|
+
"field:xdsLbPolicy error:type should be array"));
|
1168
|
+
} else {
|
1169
|
+
const Json::Array& array = it->second.array_value();
|
1170
|
+
for (size_t i = 0; i < array.size(); ++i) {
|
1171
|
+
if (array[i].type() != Json::Type::OBJECT) {
|
1172
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1173
|
+
"field:xdsLbPolicy error:element should be of type object"));
|
1174
|
+
continue;
|
1175
|
+
}
|
1176
|
+
const Json::Object& policy = array[i].object_value();
|
1177
|
+
auto policy_it = policy.find("ROUND_ROBIN");
|
1178
|
+
if (policy_it != policy.end()) {
|
1179
|
+
if (policy_it->second.type() != Json::Type::OBJECT) {
|
1180
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1181
|
+
"field:ROUND_ROBIN error:type should be object"));
|
1182
|
+
}
|
1183
|
+
break;
|
1184
|
+
}
|
1185
|
+
policy_it = policy.find("RING_HASH");
|
1186
|
+
if (policy_it != policy.end()) {
|
1187
|
+
if (policy_it->second.type() != Json::Type::OBJECT) {
|
1188
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1189
|
+
"field:RING_HASH error:type should be object"));
|
1190
|
+
continue;
|
1191
|
+
}
|
1192
|
+
// TODO(donnadionne): Move this to a method in
|
1193
|
+
// ring_hash_experimental and call it here.
|
1194
|
+
const Json::Object& ring_hash = policy_it->second.object_value();
|
1195
|
+
xds_lb_policy = array[i];
|
1196
|
+
size_t min_ring_size = 1024;
|
1197
|
+
size_t max_ring_size = 8388608;
|
1198
|
+
auto ring_hash_it = ring_hash.find("min_ring_size");
|
1199
|
+
if (ring_hash_it == ring_hash.end()) {
|
1200
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1201
|
+
"field:min_ring_size missing"));
|
1202
|
+
} else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
|
1203
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1204
|
+
"field:min_ring_size error: should be of "
|
1205
|
+
"number"));
|
1206
|
+
} else {
|
1207
|
+
min_ring_size = gpr_parse_nonnegative_int(
|
1208
|
+
ring_hash_it->second.string_value().c_str());
|
1209
|
+
}
|
1210
|
+
ring_hash_it = ring_hash.find("max_ring_size");
|
1211
|
+
if (ring_hash_it == ring_hash.end()) {
|
1212
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1213
|
+
"field:max_ring_size missing"));
|
1214
|
+
} else if (ring_hash_it->second.type() != Json::Type::NUMBER) {
|
1215
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1216
|
+
"field:max_ring_size error: should be of "
|
1217
|
+
"number"));
|
1218
|
+
} else {
|
1219
|
+
max_ring_size = gpr_parse_nonnegative_int(
|
1220
|
+
ring_hash_it->second.string_value().c_str());
|
1221
|
+
}
|
1222
|
+
if (min_ring_size <= 0 || min_ring_size > 8388608 ||
|
1223
|
+
max_ring_size <= 0 || max_ring_size > 8388608 ||
|
1224
|
+
min_ring_size > max_ring_size) {
|
1225
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1226
|
+
"field:max_ring_size and or min_ring_size error: "
|
1227
|
+
"values need to be in the range of 1 to 8388608 "
|
1228
|
+
"and max_ring_size cannot be smaller than "
|
1229
|
+
"min_ring_size"));
|
1230
|
+
}
|
1231
|
+
ring_hash_it = ring_hash.find("hash_function");
|
1232
|
+
if (ring_hash_it == ring_hash.end()) {
|
1233
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1234
|
+
"field:hash_function missing"));
|
1235
|
+
} else if (ring_hash_it->second.type() != Json::Type::STRING) {
|
1236
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1237
|
+
"field:hash_function error: should be a "
|
1238
|
+
"string"));
|
1239
|
+
} else if (ring_hash_it->second.string_value() != "XX_HASH" &&
|
1240
|
+
ring_hash_it->second.string_value() != "MURMUR_HASH_2") {
|
1241
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1242
|
+
"field:hash_function error: unsupported "
|
1243
|
+
"hash_function"));
|
1244
|
+
}
|
1245
|
+
break;
|
1246
|
+
}
|
1247
|
+
}
|
1248
|
+
}
|
1249
|
+
}
|
1250
|
+
// Construct config.
|
1251
|
+
if (error_list.empty()) {
|
1252
|
+
return MakeRefCounted<XdsClusterResolverLbConfig>(
|
1253
|
+
std::move(discovery_mechanisms), std::move(xds_lb_policy));
|
1254
|
+
} else {
|
1255
|
+
*error = GRPC_ERROR_CREATE_FROM_VECTOR(
|
1256
|
+
"xds_cluster_resolver_experimental LB policy config", &error_list);
|
1257
|
+
return nullptr;
|
1258
|
+
}
|
1259
|
+
}
|
1260
|
+
|
1261
|
+
private:
|
1262
|
+
static std::vector<grpc_error*> ParseDiscoveryMechanism(
|
1263
|
+
const Json& json,
|
1264
|
+
XdsClusterResolverLbConfig::DiscoveryMechanism* discovery_mechanism) {
|
1265
|
+
std::vector<grpc_error*> error_list;
|
1266
|
+
if (json.type() != Json::Type::OBJECT) {
|
1267
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1268
|
+
"value should be of type object"));
|
1269
|
+
return error_list;
|
1270
|
+
}
|
1271
|
+
// Cluster name.
|
1272
|
+
auto it = json.object_value().find("clusterName");
|
1273
|
+
if (it == json.object_value().end()) {
|
1274
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1275
|
+
"field:clusterName error:required field missing"));
|
1276
|
+
} else if (it->second.type() != Json::Type::STRING) {
|
1277
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1278
|
+
"field:clusterName error:type should be string"));
|
1279
|
+
} else {
|
1280
|
+
discovery_mechanism->cluster_name = it->second.string_value();
|
1281
|
+
}
|
1282
|
+
// LRS load reporting server name.
|
1283
|
+
it = json.object_value().find("lrsLoadReportingServerName");
|
1284
|
+
if (it != json.object_value().end()) {
|
1285
|
+
if (it->second.type() != Json::Type::STRING) {
|
1286
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1287
|
+
"field:lrsLoadReportingServerName error:type should be string"));
|
1288
|
+
} else {
|
1289
|
+
discovery_mechanism->lrs_load_reporting_server_name.emplace(
|
1290
|
+
it->second.string_value());
|
1291
|
+
}
|
1292
|
+
}
|
1293
|
+
// Max concurrent requests.
|
1294
|
+
discovery_mechanism->max_concurrent_requests = 1024;
|
1295
|
+
it = json.object_value().find("max_concurrent_requests");
|
1296
|
+
if (it != json.object_value().end()) {
|
1297
|
+
if (it->second.type() != Json::Type::NUMBER) {
|
1298
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1299
|
+
"field:max_concurrent_requests error:must be of type number"));
|
1300
|
+
} else {
|
1301
|
+
discovery_mechanism->max_concurrent_requests =
|
1302
|
+
gpr_parse_nonnegative_int(it->second.string_value().c_str());
|
1303
|
+
}
|
1304
|
+
}
|
1305
|
+
// Discovery Mechanism type
|
1306
|
+
it = json.object_value().find("type");
|
1307
|
+
if (it == json.object_value().end()) {
|
1308
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1309
|
+
"field:type error:required field missing"));
|
1310
|
+
} else if (it->second.type() != Json::Type::STRING) {
|
1311
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1312
|
+
"field:type error:type should be string"));
|
1313
|
+
} else {
|
1314
|
+
if (it->second.string_value() == "EDS") {
|
1315
|
+
discovery_mechanism->type = XdsClusterResolverLbConfig::
|
1316
|
+
DiscoveryMechanism::DiscoveryMechanismType::EDS;
|
1317
|
+
} else if (it->second.string_value() == "LOGICAL_DNS") {
|
1318
|
+
discovery_mechanism->type = XdsClusterResolverLbConfig::
|
1319
|
+
DiscoveryMechanism::DiscoveryMechanismType::LOGICAL_DNS;
|
1320
|
+
} else {
|
1321
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1322
|
+
"field:type error:invalid type"));
|
1323
|
+
}
|
1324
|
+
}
|
1325
|
+
// EDS service name.
|
1326
|
+
it = json.object_value().find("edsServiceName");
|
1327
|
+
if (it != json.object_value().end()) {
|
1328
|
+
if (it->second.type() != Json::Type::STRING) {
|
1329
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1330
|
+
"field:xds_cluster_resolverServiceName error:type should be "
|
1331
|
+
"string"));
|
1332
|
+
} else {
|
1333
|
+
discovery_mechanism->eds_service_name = it->second.string_value();
|
1334
|
+
}
|
1335
|
+
}
|
1336
|
+
return error_list;
|
1337
|
+
}
|
1338
|
+
|
1339
|
+
class XdsClusterResolverChildHandler : public ChildPolicyHandler {
|
1340
|
+
public:
|
1341
|
+
XdsClusterResolverChildHandler(RefCountedPtr<XdsClient> xds_client,
|
1342
|
+
Args args)
|
1343
|
+
: ChildPolicyHandler(std::move(args),
|
1344
|
+
&grpc_lb_xds_cluster_resolver_trace),
|
1345
|
+
xds_client_(std::move(xds_client)) {}
|
1346
|
+
|
1347
|
+
bool ConfigChangeRequiresNewPolicyInstance(
|
1348
|
+
LoadBalancingPolicy::Config* old_config,
|
1349
|
+
LoadBalancingPolicy::Config* new_config) const override {
|
1350
|
+
GPR_ASSERT(old_config->name() == kXdsClusterResolver);
|
1351
|
+
GPR_ASSERT(new_config->name() == kXdsClusterResolver);
|
1352
|
+
XdsClusterResolverLbConfig* old_xds_cluster_resolver_config =
|
1353
|
+
static_cast<XdsClusterResolverLbConfig*>(old_config);
|
1354
|
+
XdsClusterResolverLbConfig* new_xds_cluster_resolver_config =
|
1355
|
+
static_cast<XdsClusterResolverLbConfig*>(new_config);
|
1356
|
+
return old_xds_cluster_resolver_config->discovery_mechanisms() !=
|
1357
|
+
new_xds_cluster_resolver_config->discovery_mechanisms();
|
1358
|
+
}
|
1359
|
+
|
1360
|
+
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
1361
|
+
const char* /*name*/, LoadBalancingPolicy::Args args) const override {
|
1362
|
+
return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
|
1363
|
+
}
|
1364
|
+
|
1365
|
+
private:
|
1366
|
+
RefCountedPtr<XdsClient> xds_client_;
|
1367
|
+
};
|
1368
|
+
};
|
1369
|
+
|
1370
|
+
} // namespace
|
1371
|
+
|
1372
|
+
} // namespace grpc_core
|
1373
|
+
|
1374
|
+
//
|
1375
|
+
// Plugin registration
|
1376
|
+
//
|
1377
|
+
|
1378
|
+
void grpc_lb_policy_xds_cluster_resolver_init() {
|
1379
|
+
grpc_core::LoadBalancingPolicyRegistry::Builder::
|
1380
|
+
RegisterLoadBalancingPolicyFactory(
|
1381
|
+
absl::make_unique<grpc_core::XdsClusterResolverLbFactory>());
|
1382
|
+
}
|
1383
|
+
|
1384
|
+
void grpc_lb_policy_xds_cluster_resolver_shutdown() {}
|