grpc 1.31.0.pre1 → 1.33.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 +693 -16022
- data/include/grpc/grpc.h +0 -5
- data/include/grpc/grpc_security.h +47 -14
- data/include/grpc/impl/codegen/README.md +22 -0
- data/include/grpc/impl/codegen/grpc_types.h +0 -5
- data/include/grpc/impl/codegen/port_platform.h +6 -1
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +264 -186
- data/src/core/ext/filters/client_channel/client_channel.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
- data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
- data/src/core/ext/filters/client_channel/config_selector.h +34 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +48 -35
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +9 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +126 -119
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +21 -15
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +32 -13
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -32
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +26 -16
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +207 -129
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +453 -255
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +571 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +727 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +602 -58
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -39
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +4 -3
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +49 -47
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +5 -9
- data/src/core/ext/filters/client_channel/server_address.cc +120 -7
- data/src/core/ext/filters/client_channel/server_address.h +48 -21
- data/src/core/ext/filters/client_channel/service_config.cc +16 -13
- data/src/core/ext/filters/client_channel/service_config.h +7 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/service_config_parser.cc +8 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +8 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +64 -23
- data/src/core/ext/filters/client_channel/subchannel.h +16 -4
- data/src/core/ext/filters/client_channel/subchannel_interface.h +44 -0
- data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +19 -25
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +6 -6
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -287
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +11 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +10 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +10 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +17 -30
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -5
- data/src/core/ext/transport/inproc/inproc_transport.cc +12 -12
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +244 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +766 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +458 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1635 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +124 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +379 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +310 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +103 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +351 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +241 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +752 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +176 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +645 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
- data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +85 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
- data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +128 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +467 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +155 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +539 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +178 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +616 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +900 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3290 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +139 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +364 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1336 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +110 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +387 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +76 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +214 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +147 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +570 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +139 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +449 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
- data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
- data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -8
- data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
- data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
- data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +242 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +753 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +36 -36
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +57 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +28 -0
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +53 -0
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +129 -0
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +77 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +36 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +85 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +160 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +84 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
- data/src/core/ext/upb-generated/validate/validate.upb.h +1 -1
- data/src/core/ext/xds/certificate_provider_factory.h +59 -0
- data/src/core/ext/xds/certificate_provider_registry.cc +103 -0
- data/src/core/ext/xds/certificate_provider_registry.h +57 -0
- data/src/core/ext/xds/certificate_provider_store.h +50 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +377 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +102 -0
- data/src/core/ext/xds/xds_api.cc +2596 -0
- data/src/core/ext/xds/xds_api.h +397 -0
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +44 -2
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +9 -6
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +541 -785
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +114 -93
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +20 -14
- data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +36 -8
- data/src/core/lib/channel/channel_args.h +0 -1
- data/src/core/lib/channel/channelz.cc +24 -60
- data/src/core/lib/channel/channelz.h +12 -20
- data/src/core/lib/channel/channelz_registry.cc +15 -12
- data/src/core/lib/channel/channelz_registry.h +3 -0
- data/src/core/lib/gpr/sync_posix.cc +2 -8
- data/src/core/lib/gpr/time_precise.cc +2 -0
- data/src/core/lib/gpr/time_precise.h +6 -2
- data/src/core/lib/gprpp/dual_ref_counted.h +336 -0
- data/src/core/lib/gprpp/ref_counted.h +51 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +153 -0
- data/src/core/lib/iomgr/endpoint.cc +5 -1
- data/src/core/lib/iomgr/endpoint.h +7 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +36 -11
- data/src/core/lib/iomgr/ev_posix.cc +0 -2
- data/src/core/lib/iomgr/exec_ctx.h +10 -8
- data/src/core/lib/iomgr/iomgr.cc +0 -10
- data/src/core/lib/iomgr/iomgr.h +0 -10
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr_utils.cc +2 -1
- data/src/core/lib/iomgr/sockaddr_utils.h +2 -1
- data/src/core/lib/iomgr/tcp_custom.cc +32 -16
- data/src/core/lib/iomgr/tcp_posix.cc +31 -13
- data/src/core/lib/iomgr/tcp_windows.cc +26 -10
- data/src/core/lib/json/json_util.cc +58 -0
- data/src/core/lib/json/json_util.h +37 -0
- data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
- data/src/core/lib/security/authorization/authorization_engine.h +84 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
- data/src/core/lib/security/authorization/evaluate_args.h +59 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
- data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
- data/src/core/lib/security/certificate_provider.h +60 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +56 -38
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +321 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +214 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +45 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +51 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -12
- data/src/core/lib/security/security_connector/ssl_utils.h +5 -0
- data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
- data/src/core/lib/surface/call.cc +12 -12
- data/src/core/lib/surface/call.h +2 -1
- data/src/core/lib/surface/channel.cc +37 -51
- data/src/core/lib/surface/channel.h +18 -3
- data/src/core/lib/surface/completion_queue.cc +10 -272
- data/src/core/lib/surface/completion_queue.h +0 -8
- data/src/core/lib/surface/init.cc +27 -12
- data/src/core/lib/surface/server.cc +1066 -1244
- data/src/core/lib/surface/server.h +363 -87
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.cc +38 -0
- data/src/core/lib/transport/authority_override.h +32 -0
- data/src/core/lib/transport/bdp_estimator.h +2 -1
- data/src/core/lib/transport/connectivity_state.cc +18 -13
- data/src/core/lib/transport/connectivity_state.h +20 -8
- data/src/core/lib/transport/error_utils.cc +13 -0
- data/src/core/lib/transport/error_utils.h +6 -0
- data/src/core/lib/transport/metadata.cc +11 -1
- data/src/core/lib/transport/static_metadata.cc +295 -276
- data/src/core/lib/transport/static_metadata.h +80 -73
- data/src/core/lib/transport/transport.h +7 -0
- data/src/core/lib/uri/uri_parser.cc +23 -21
- data/src/core/lib/uri/uri_parser.h +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +22 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -2
- data/src/ruby/bin/math_services_pb.rb +4 -4
- data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +7 -7
- data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
- data/src/ruby/spec/channel_credentials_spec.rb +10 -0
- data/src/ruby/spec/generic/active_call_spec.rb +19 -8
- data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
- data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +20 -0
- data/src/ruby/spec/user_agent_spec.rb +74 -0
- data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
- data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
- data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
- data/third_party/abseil-cpp/absl/status/status.cc +447 -0
- data/third_party/abseil-cpp/absl/status/status.h +428 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
- data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
- data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
- data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
- data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
- data/third_party/abseil-cpp/absl/types/variant.h +861 -0
- data/third_party/boringssl-with-bazel/err_data.c +475 -467
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +0 -6
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +9 -43
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +30 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -15
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +543 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +237 -0
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +44 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +221 -49
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +64 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +7 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +21 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +24 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +29 -35
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +13 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +10 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +55 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +12 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +4 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +48 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +26 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +199 -78
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +52 -43
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +18 -18
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +13 -9
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +8 -9
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +10 -0
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +4 -8
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +7 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
- data/third_party/re2/re2/bitmap256.h +117 -0
- data/third_party/re2/re2/bitstate.cc +385 -0
- data/third_party/re2/re2/compile.cc +1279 -0
- data/third_party/re2/re2/dfa.cc +2130 -0
- data/third_party/re2/re2/filtered_re2.cc +121 -0
- data/third_party/re2/re2/filtered_re2.h +109 -0
- data/third_party/re2/re2/mimics_pcre.cc +197 -0
- data/third_party/re2/re2/nfa.cc +713 -0
- data/third_party/re2/re2/onepass.cc +623 -0
- data/third_party/re2/re2/parse.cc +2464 -0
- data/third_party/re2/re2/perl_groups.cc +119 -0
- data/third_party/re2/re2/pod_array.h +55 -0
- data/third_party/re2/re2/prefilter.cc +710 -0
- data/third_party/re2/re2/prefilter.h +108 -0
- data/third_party/re2/re2/prefilter_tree.cc +407 -0
- data/third_party/re2/re2/prefilter_tree.h +139 -0
- data/third_party/re2/re2/prog.cc +988 -0
- data/third_party/re2/re2/prog.h +436 -0
- data/third_party/re2/re2/re2.cc +1362 -0
- data/third_party/re2/re2/re2.h +1002 -0
- data/third_party/re2/re2/regexp.cc +980 -0
- data/third_party/re2/re2/regexp.h +659 -0
- data/third_party/re2/re2/set.cc +154 -0
- data/third_party/re2/re2/set.h +80 -0
- data/third_party/re2/re2/simplify.cc +657 -0
- data/third_party/re2/re2/sparse_array.h +392 -0
- data/third_party/re2/re2/sparse_set.h +264 -0
- data/third_party/re2/re2/stringpiece.cc +65 -0
- data/third_party/re2/re2/stringpiece.h +210 -0
- data/third_party/re2/re2/tostring.cc +351 -0
- data/third_party/re2/re2/unicode_casefold.cc +582 -0
- data/third_party/re2/re2/unicode_casefold.h +78 -0
- data/third_party/re2/re2/unicode_groups.cc +6269 -0
- data/third_party/re2/re2/unicode_groups.h +67 -0
- data/third_party/re2/re2/walker-inl.h +246 -0
- data/third_party/re2/util/benchmark.h +156 -0
- data/third_party/re2/util/flags.h +26 -0
- data/third_party/re2/util/logging.h +109 -0
- data/third_party/re2/util/malloc_counter.h +19 -0
- data/third_party/re2/util/mix.h +41 -0
- data/third_party/re2/util/mutex.h +148 -0
- data/third_party/re2/util/pcre.cc +1025 -0
- data/third_party/re2/util/pcre.h +681 -0
- data/third_party/re2/util/rune.cc +260 -0
- data/third_party/re2/util/strutil.cc +149 -0
- data/third_party/re2/util/strutil.h +21 -0
- data/third_party/re2/util/test.h +50 -0
- data/third_party/re2/util/utf.h +44 -0
- data/third_party/re2/util/util.h +42 -0
- data/third_party/upb/upb/decode.c +64 -15
- data/third_party/upb/upb/encode.c +2 -2
- data/third_party/upb/upb/msg.h +2 -2
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +0 -11
- data/third_party/upb/upb/table.int.h +0 -9
- data/third_party/upb/upb/upb.c +16 -14
- data/third_party/upb/upb/upb.h +26 -0
- data/third_party/upb/upb/upb.hpp +2 -0
- metadata +340 -153
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -528
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1142
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -2110
- data/src/core/ext/filters/client_channel/xds/xds_api.h +0 -345
- data/src/core/ext/filters/client_channel/xds/xds_channel.h +0 -46
- data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +0 -106
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -429
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -198
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -388
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1453
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -226
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -323
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -334
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -79
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -891
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -328
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -71
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -649
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -693
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -536
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -88
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -386
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -224
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -273
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -332
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -415
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -538
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -204
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -32
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -2984
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -135
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -52
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -732
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1167
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -49
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -136
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -145
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -86
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -111
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -61
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -250
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -29
- data/src/core/lib/security/transport/target_authority_table.cc +0 -75
- data/src/core/lib/security/transport/target_authority_table.h +0 -40
- data/src/core/lib/slice/slice_hash_table.h +0 -199
- data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
@@ -32,14 +32,16 @@
|
|
32
32
|
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
|
33
33
|
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
34
34
|
#include "src/core/ext/filters/client_channel/server_address.h"
|
35
|
-
#include "src/core/ext/
|
36
|
-
#include "src/core/ext/
|
37
|
-
#include "src/core/ext/
|
35
|
+
#include "src/core/ext/xds/xds_channel_args.h"
|
36
|
+
#include "src/core/ext/xds/xds_client.h"
|
37
|
+
#include "src/core/ext/xds/xds_client_stats.h"
|
38
38
|
#include "src/core/lib/channel/channel_args.h"
|
39
|
+
#include "src/core/lib/gpr/string.h"
|
39
40
|
#include "src/core/lib/gprpp/orphanable.h"
|
40
41
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
41
42
|
#include "src/core/lib/iomgr/timer.h"
|
42
43
|
#include "src/core/lib/iomgr/work_serializer.h"
|
44
|
+
#include "src/core/lib/transport/error_utils.h"
|
43
45
|
#include "src/core/lib/uri/uri_parser.h"
|
44
46
|
|
45
47
|
#define GRPC_EDS_DEFAULT_FALLBACK_TIMEOUT 10000
|
@@ -52,18 +54,22 @@ namespace {
|
|
52
54
|
|
53
55
|
constexpr char kEds[] = "eds_experimental";
|
54
56
|
|
57
|
+
const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
|
58
|
+
|
55
59
|
// Config for EDS LB policy.
|
56
60
|
class EdsLbConfig : public LoadBalancingPolicy::Config {
|
57
61
|
public:
|
58
62
|
EdsLbConfig(std::string cluster_name, std::string eds_service_name,
|
59
63
|
absl::optional<std::string> lrs_load_reporting_server_name,
|
60
|
-
Json locality_picking_policy, Json endpoint_picking_policy
|
64
|
+
Json locality_picking_policy, Json endpoint_picking_policy,
|
65
|
+
uint32_t max_concurrent_requests)
|
61
66
|
: cluster_name_(std::move(cluster_name)),
|
62
67
|
eds_service_name_(std::move(eds_service_name)),
|
63
68
|
lrs_load_reporting_server_name_(
|
64
69
|
std::move(lrs_load_reporting_server_name)),
|
65
70
|
locality_picking_policy_(std::move(locality_picking_policy)),
|
66
|
-
endpoint_picking_policy_(std::move(endpoint_picking_policy))
|
71
|
+
endpoint_picking_policy_(std::move(endpoint_picking_policy)),
|
72
|
+
max_concurrent_requests_(max_concurrent_requests) {}
|
67
73
|
|
68
74
|
const char* name() const override { return kEds; }
|
69
75
|
|
@@ -78,6 +84,9 @@ class EdsLbConfig : public LoadBalancingPolicy::Config {
|
|
78
84
|
const Json& endpoint_picking_policy() const {
|
79
85
|
return endpoint_picking_policy_;
|
80
86
|
}
|
87
|
+
const uint32_t max_concurrent_requests() const {
|
88
|
+
return max_concurrent_requests_;
|
89
|
+
}
|
81
90
|
|
82
91
|
private:
|
83
92
|
std::string cluster_name_;
|
@@ -85,12 +94,13 @@ class EdsLbConfig : public LoadBalancingPolicy::Config {
|
|
85
94
|
absl::optional<std::string> lrs_load_reporting_server_name_;
|
86
95
|
Json locality_picking_policy_;
|
87
96
|
Json endpoint_picking_policy_;
|
97
|
+
uint32_t max_concurrent_requests_;
|
88
98
|
};
|
89
99
|
|
90
100
|
// EDS LB policy.
|
91
101
|
class EdsLb : public LoadBalancingPolicy {
|
92
102
|
public:
|
93
|
-
|
103
|
+
EdsLb(RefCountedPtr<XdsClient> xds_client, Args args);
|
94
104
|
|
95
105
|
const char* name() const override { return kEds; }
|
96
106
|
|
@@ -98,7 +108,80 @@ class EdsLb : public LoadBalancingPolicy {
|
|
98
108
|
void ResetBackoffLocked() override;
|
99
109
|
|
100
110
|
private:
|
101
|
-
class
|
111
|
+
class XdsLocalityAttribute : public ServerAddress::AttributeInterface {
|
112
|
+
public:
|
113
|
+
explicit XdsLocalityAttribute(RefCountedPtr<XdsLocalityName> locality_name)
|
114
|
+
: locality_name_(std::move(locality_name)) {}
|
115
|
+
|
116
|
+
RefCountedPtr<XdsLocalityName> locality_name() const {
|
117
|
+
return locality_name_;
|
118
|
+
}
|
119
|
+
|
120
|
+
std::unique_ptr<AttributeInterface> Copy() const override {
|
121
|
+
return absl::make_unique<XdsLocalityAttribute>(locality_name_->Ref());
|
122
|
+
}
|
123
|
+
|
124
|
+
int Cmp(const AttributeInterface* other) const override {
|
125
|
+
const auto* other_locality_attr =
|
126
|
+
static_cast<const XdsLocalityAttribute*>(other);
|
127
|
+
return locality_name_->Compare(*other_locality_attr->locality_name_);
|
128
|
+
}
|
129
|
+
|
130
|
+
std::string ToString() const override {
|
131
|
+
return locality_name_->AsHumanReadableString();
|
132
|
+
}
|
133
|
+
|
134
|
+
private:
|
135
|
+
RefCountedPtr<XdsLocalityName> locality_name_;
|
136
|
+
};
|
137
|
+
|
138
|
+
class StatsSubchannelWrapper : public DelegatingSubchannel {
|
139
|
+
public:
|
140
|
+
StatsSubchannelWrapper(
|
141
|
+
RefCountedPtr<SubchannelInterface> wrapped_subchannel,
|
142
|
+
RefCountedPtr<XdsClusterLocalityStats> locality_stats)
|
143
|
+
: DelegatingSubchannel(std::move(wrapped_subchannel)),
|
144
|
+
locality_stats_(std::move(locality_stats)) {}
|
145
|
+
|
146
|
+
XdsClusterLocalityStats* locality_stats() const {
|
147
|
+
return locality_stats_.get();
|
148
|
+
}
|
149
|
+
|
150
|
+
private:
|
151
|
+
RefCountedPtr<XdsClusterLocalityStats> locality_stats_;
|
152
|
+
};
|
153
|
+
|
154
|
+
class EndpointWatcher : public XdsClient::EndpointWatcherInterface {
|
155
|
+
public:
|
156
|
+
explicit EndpointWatcher(RefCountedPtr<EdsLb> parent)
|
157
|
+
: parent_(std::move(parent)) {}
|
158
|
+
void OnEndpointChanged(XdsApi::EdsUpdate update) override {
|
159
|
+
new Notifier(parent_, std::move(update));
|
160
|
+
}
|
161
|
+
void OnError(grpc_error* error) override { new Notifier(parent_, error); }
|
162
|
+
void OnResourceDoesNotExist() override { new Notifier(parent_); }
|
163
|
+
|
164
|
+
private:
|
165
|
+
class Notifier {
|
166
|
+
public:
|
167
|
+
Notifier(RefCountedPtr<EdsLb> parent, XdsApi::EdsUpdate update);
|
168
|
+
Notifier(RefCountedPtr<EdsLb> parent, grpc_error* error);
|
169
|
+
explicit Notifier(RefCountedPtr<EdsLb> parent);
|
170
|
+
|
171
|
+
private:
|
172
|
+
enum Type { kUpdate, kError, kDoesNotExist };
|
173
|
+
|
174
|
+
static void RunInExecCtx(void* arg, grpc_error* error);
|
175
|
+
void RunInWorkSerializer(grpc_error* error);
|
176
|
+
|
177
|
+
RefCountedPtr<EdsLb> parent_;
|
178
|
+
grpc_closure closure_;
|
179
|
+
XdsApi::EdsUpdate update_;
|
180
|
+
Type type_;
|
181
|
+
};
|
182
|
+
|
183
|
+
RefCountedPtr<EdsLb> parent_;
|
184
|
+
};
|
102
185
|
|
103
186
|
// A simple wrapper for ref-counting a picker from the child policy.
|
104
187
|
class ChildPickerWrapper : public RefCounted<ChildPickerWrapper> {
|
@@ -112,16 +195,18 @@ class EdsLb : public LoadBalancingPolicy {
|
|
112
195
|
};
|
113
196
|
|
114
197
|
// A picker that handles drops.
|
115
|
-
class
|
198
|
+
class EdsPicker : public SubchannelPicker {
|
116
199
|
public:
|
117
|
-
explicit
|
200
|
+
explicit EdsPicker(RefCountedPtr<EdsLb> eds_policy);
|
118
201
|
|
119
202
|
PickResult Pick(PickArgs args) override;
|
120
203
|
|
121
204
|
private:
|
122
|
-
RefCountedPtr<
|
205
|
+
RefCountedPtr<EdsLb> eds_policy_;
|
206
|
+
RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
|
123
207
|
RefCountedPtr<XdsClusterDropStats> drop_stats_;
|
124
208
|
RefCountedPtr<ChildPickerWrapper> child_picker_;
|
209
|
+
uint32_t max_concurrent_requests_;
|
125
210
|
};
|
126
211
|
|
127
212
|
class Helper : public ChannelControlHelper {
|
@@ -132,8 +217,8 @@ class EdsLb : public LoadBalancingPolicy {
|
|
132
217
|
~Helper() { eds_policy_.reset(DEBUG_LOCATION, "Helper"); }
|
133
218
|
|
134
219
|
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
135
|
-
const grpc_channel_args& args) override;
|
136
|
-
void UpdateState(grpc_connectivity_state state,
|
220
|
+
ServerAddress address, const grpc_channel_args& args) override;
|
221
|
+
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
137
222
|
std::unique_ptr<SubchannelPicker> picker) override;
|
138
223
|
// This is a no-op, because we get the addresses from the xds
|
139
224
|
// client, which is a watch-based API.
|
@@ -149,9 +234,13 @@ class EdsLb : public LoadBalancingPolicy {
|
|
149
234
|
|
150
235
|
void ShutdownLocked() override;
|
151
236
|
|
237
|
+
void OnEndpointChanged(XdsApi::EdsUpdate update);
|
238
|
+
void OnError(grpc_error* error);
|
239
|
+
void OnResourceDoesNotExist();
|
240
|
+
|
152
241
|
void MaybeDestroyChildPolicyLocked();
|
153
242
|
|
154
|
-
void UpdatePriorityList(XdsApi::
|
243
|
+
void UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list);
|
155
244
|
void UpdateChildPolicyLocked();
|
156
245
|
OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
|
157
246
|
const grpc_channel_args* args);
|
@@ -159,11 +248,11 @@ class EdsLb : public LoadBalancingPolicy {
|
|
159
248
|
RefCountedPtr<Config> CreateChildPolicyConfigLocked();
|
160
249
|
grpc_channel_args* CreateChildPolicyArgsLocked(
|
161
250
|
const grpc_channel_args* args_in);
|
162
|
-
void
|
251
|
+
void MaybeUpdateEdsPickerLocked();
|
163
252
|
|
164
253
|
// Caller must ensure that config_ is set before calling.
|
165
254
|
const absl::string_view GetEdsResourceName() const {
|
166
|
-
if (
|
255
|
+
if (!is_xds_uri_) return server_name_;
|
167
256
|
if (!config_->eds_service_name().empty()) {
|
168
257
|
return config_->eds_service_name();
|
169
258
|
}
|
@@ -174,17 +263,13 @@ class EdsLb : public LoadBalancingPolicy {
|
|
174
263
|
// for LRS load reporting.
|
175
264
|
// Caller must ensure that config_ is set before calling.
|
176
265
|
std::pair<absl::string_view, absl::string_view> GetLrsClusterKey() const {
|
177
|
-
if (
|
266
|
+
if (!is_xds_uri_) return {server_name_, nullptr};
|
178
267
|
return {config_->cluster_name(), config_->eds_service_name()};
|
179
268
|
}
|
180
269
|
|
181
|
-
XdsClient* xds_client() const {
|
182
|
-
return xds_client_from_channel_ != nullptr ? xds_client_from_channel_.get()
|
183
|
-
: xds_client_.get();
|
184
|
-
}
|
185
|
-
|
186
270
|
// Server name from target URI.
|
187
271
|
std::string server_name_;
|
272
|
+
bool is_xds_uri_;
|
188
273
|
|
189
274
|
// Current channel args and config from the resolver.
|
190
275
|
const grpc_channel_args* args_ = nullptr;
|
@@ -194,53 +279,57 @@ class EdsLb : public LoadBalancingPolicy {
|
|
194
279
|
bool shutting_down_ = false;
|
195
280
|
|
196
281
|
// The xds client and endpoint watcher.
|
197
|
-
|
198
|
-
// xds_client_from_channel_; if we create it ourselves, we store it in
|
199
|
-
// xds_client_.
|
200
|
-
RefCountedPtr<XdsClient> xds_client_from_channel_;
|
201
|
-
OrphanablePtr<XdsClient> xds_client_;
|
282
|
+
RefCountedPtr<XdsClient> xds_client_;
|
202
283
|
// A pointer to the endpoint watcher, to be used when cancelling the watch.
|
203
284
|
// Note that this is not owned, so this pointer must never be derefernced.
|
204
285
|
EndpointWatcher* endpoint_watcher_ = nullptr;
|
205
286
|
// The latest data from the endpoint watcher.
|
206
|
-
XdsApi::
|
287
|
+
XdsApi::EdsUpdate::PriorityList priority_list_;
|
207
288
|
// State used to retain child policy names for priority policy.
|
208
289
|
std::vector<size_t /*child_number*/> priority_child_numbers_;
|
209
290
|
|
210
|
-
RefCountedPtr<XdsApi::DropConfig> drop_config_;
|
291
|
+
RefCountedPtr<XdsApi::EdsUpdate::DropConfig> drop_config_;
|
211
292
|
RefCountedPtr<XdsClusterDropStats> drop_stats_;
|
293
|
+
// Current concurrent number of requests;
|
294
|
+
Atomic<uint32_t> concurrent_requests_{0};
|
212
295
|
|
213
296
|
OrphanablePtr<LoadBalancingPolicy> child_policy_;
|
214
297
|
|
215
298
|
// The latest state and picker returned from the child policy.
|
216
299
|
grpc_connectivity_state child_state_;
|
300
|
+
absl::Status child_status_;
|
217
301
|
RefCountedPtr<ChildPickerWrapper> child_picker_;
|
218
302
|
};
|
219
303
|
|
220
304
|
//
|
221
|
-
// EdsLb::
|
305
|
+
// EdsLb::EdsPicker
|
222
306
|
//
|
223
307
|
|
224
|
-
EdsLb::
|
225
|
-
:
|
226
|
-
drop_stats_(
|
227
|
-
child_picker_(
|
308
|
+
EdsLb::EdsPicker::EdsPicker(RefCountedPtr<EdsLb> eds_policy)
|
309
|
+
: eds_policy_(std::move(eds_policy)),
|
310
|
+
drop_stats_(eds_policy_->drop_stats_),
|
311
|
+
child_picker_(eds_policy_->child_picker_),
|
312
|
+
max_concurrent_requests_(
|
313
|
+
eds_policy_->config_->max_concurrent_requests()) {
|
228
314
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
229
|
-
gpr_log(GPR_INFO, "[edslb %p] constructed new drop picker %p",
|
230
|
-
this);
|
315
|
+
gpr_log(GPR_INFO, "[edslb %p] constructed new drop picker %p",
|
316
|
+
eds_policy_.get(), this);
|
231
317
|
}
|
232
318
|
}
|
233
319
|
|
234
|
-
EdsLb::PickResult EdsLb::
|
235
|
-
//
|
236
|
-
|
237
|
-
if (
|
238
|
-
|
320
|
+
EdsLb::PickResult EdsLb::EdsPicker::Pick(PickArgs args) {
|
321
|
+
// Check and see if we exceeded the max concurrent requests count.
|
322
|
+
uint32_t current = eds_policy_->concurrent_requests_.FetchAdd(1);
|
323
|
+
if (current >= max_concurrent_requests_) {
|
324
|
+
eds_policy_->concurrent_requests_.FetchSub(1);
|
325
|
+
if (drop_stats_ != nullptr) {
|
326
|
+
drop_stats_->AddUncategorizedDrops();
|
327
|
+
}
|
239
328
|
PickResult result;
|
240
329
|
result.type = PickResult::PICK_COMPLETE;
|
241
330
|
return result;
|
242
331
|
}
|
243
|
-
// If we're not dropping
|
332
|
+
// If we're not dropping the call, we should always have a child picker.
|
244
333
|
if (child_picker_ == nullptr) { // Should never happen.
|
245
334
|
PickResult result;
|
246
335
|
result.type = PickResult::PICK_FAILED;
|
@@ -248,10 +337,56 @@ EdsLb::PickResult EdsLb::DropPicker::Pick(PickArgs args) {
|
|
248
337
|
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
249
338
|
"eds drop picker not given any child picker"),
|
250
339
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
|
340
|
+
eds_policy_->concurrent_requests_.FetchSub(1);
|
251
341
|
return result;
|
252
342
|
}
|
253
343
|
// Not dropping, so delegate to child's picker.
|
254
|
-
|
344
|
+
PickResult result = child_picker_->Pick(args);
|
345
|
+
if (result.type == result.PICK_COMPLETE && result.subchannel != nullptr) {
|
346
|
+
XdsClusterLocalityStats* locality_stats = nullptr;
|
347
|
+
if (drop_stats_ != nullptr) { // If load reporting is enabled.
|
348
|
+
auto* subchannel_wrapper =
|
349
|
+
static_cast<StatsSubchannelWrapper*>(result.subchannel.get());
|
350
|
+
// Handle load reporting.
|
351
|
+
locality_stats = subchannel_wrapper->locality_stats()->Ref().release();
|
352
|
+
// Record a call started.
|
353
|
+
locality_stats->AddCallStarted();
|
354
|
+
// Unwrap subchannel to pass back up the stack.
|
355
|
+
result.subchannel = subchannel_wrapper->wrapped_subchannel();
|
356
|
+
}
|
357
|
+
// Intercept the recv_trailing_metadata op to record call completion.
|
358
|
+
EdsLb* eds_policy = static_cast<EdsLb*>(
|
359
|
+
eds_policy_->Ref(DEBUG_LOCATION, "DropPickPicker+call").release());
|
360
|
+
auto original_recv_trailing_metadata_ready =
|
361
|
+
result.recv_trailing_metadata_ready;
|
362
|
+
result.recv_trailing_metadata_ready =
|
363
|
+
// Note: This callback does not run in either the control plane
|
364
|
+
// work serializer or in the data plane mutex.
|
365
|
+
[locality_stats, original_recv_trailing_metadata_ready, eds_policy](
|
366
|
+
grpc_error* error, MetadataInterface* metadata,
|
367
|
+
CallState* call_state) {
|
368
|
+
// Record call completion for load reporting.
|
369
|
+
if (locality_stats != nullptr) {
|
370
|
+
const bool call_failed = error != GRPC_ERROR_NONE;
|
371
|
+
locality_stats->AddCallFinished(call_failed);
|
372
|
+
locality_stats->Unref(DEBUG_LOCATION, "LocalityStats+call");
|
373
|
+
}
|
374
|
+
// Decrement number of calls in flight.
|
375
|
+
eds_policy->concurrent_requests_.FetchSub(1);
|
376
|
+
eds_policy->Unref(DEBUG_LOCATION, "DropPickPicker+call");
|
377
|
+
// Invoke the original recv_trailing_metadata_ready callback, if any.
|
378
|
+
if (original_recv_trailing_metadata_ready != nullptr) {
|
379
|
+
original_recv_trailing_metadata_ready(error, metadata, call_state);
|
380
|
+
}
|
381
|
+
};
|
382
|
+
} else {
|
383
|
+
// TODO(roth): We should ideally also record call failures here in the case
|
384
|
+
// where a pick fails. This is challenging, because we don't know which
|
385
|
+
// picks are for wait_for_ready RPCs or how many times we'll return a
|
386
|
+
// failure for the same wait_for_ready RPC.
|
387
|
+
eds_policy_->concurrent_requests_.FetchSub(1);
|
388
|
+
}
|
389
|
+
return result;
|
255
390
|
}
|
256
391
|
|
257
392
|
//
|
@@ -259,26 +394,53 @@ EdsLb::PickResult EdsLb::DropPicker::Pick(PickArgs args) {
|
|
259
394
|
//
|
260
395
|
|
261
396
|
RefCountedPtr<SubchannelInterface> EdsLb::Helper::CreateSubchannel(
|
262
|
-
const grpc_channel_args& args) {
|
397
|
+
ServerAddress address, const grpc_channel_args& args) {
|
263
398
|
if (eds_policy_->shutting_down_) return nullptr;
|
264
|
-
|
399
|
+
// If load reporting is enabled, wrap the subchannel such that it
|
400
|
+
// includes the locality stats object, which will be used by the EdsPicker.
|
401
|
+
if (eds_policy_->config_->lrs_load_reporting_server_name().has_value()) {
|
402
|
+
RefCountedPtr<XdsLocalityName> locality_name;
|
403
|
+
auto* attribute = address.GetAttribute(kXdsLocalityNameAttributeKey);
|
404
|
+
if (attribute != nullptr) {
|
405
|
+
const auto* locality_attr =
|
406
|
+
static_cast<const XdsLocalityAttribute*>(attribute);
|
407
|
+
locality_name = locality_attr->locality_name();
|
408
|
+
}
|
409
|
+
RefCountedPtr<XdsClusterLocalityStats> locality_stats =
|
410
|
+
eds_policy_->xds_client_->AddClusterLocalityStats(
|
411
|
+
*eds_policy_->config_->lrs_load_reporting_server_name(),
|
412
|
+
eds_policy_->config_->cluster_name(),
|
413
|
+
eds_policy_->config_->eds_service_name(), std::move(locality_name));
|
414
|
+
return MakeRefCounted<StatsSubchannelWrapper>(
|
415
|
+
eds_policy_->channel_control_helper()->CreateSubchannel(
|
416
|
+
std::move(address), args),
|
417
|
+
std::move(locality_stats));
|
418
|
+
}
|
419
|
+
// Load reporting not enabled, so don't wrap the subchannel.
|
420
|
+
return eds_policy_->channel_control_helper()->CreateSubchannel(
|
421
|
+
std::move(address), args);
|
265
422
|
}
|
266
423
|
|
267
424
|
void EdsLb::Helper::UpdateState(grpc_connectivity_state state,
|
425
|
+
const absl::Status& status,
|
268
426
|
std::unique_ptr<SubchannelPicker> picker) {
|
269
427
|
if (eds_policy_->shutting_down_ || eds_policy_->child_policy_ == nullptr) {
|
270
428
|
return;
|
271
429
|
}
|
272
430
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
273
|
-
gpr_log(GPR_INFO,
|
274
|
-
|
431
|
+
gpr_log(GPR_INFO,
|
432
|
+
"[edslb %p] child policy updated state=%s (%s) "
|
433
|
+
"picker=%p",
|
434
|
+
eds_policy_.get(), ConnectivityStateName(state),
|
435
|
+
status.ToString().c_str(), picker.get());
|
275
436
|
}
|
276
437
|
// Save the state and picker.
|
277
438
|
eds_policy_->child_state_ = state;
|
439
|
+
eds_policy_->child_status_ = status;
|
278
440
|
eds_policy_->child_picker_ =
|
279
441
|
MakeRefCounted<ChildPickerWrapper>(std::move(picker));
|
280
|
-
// Wrap the picker in a
|
281
|
-
eds_policy_->
|
442
|
+
// Wrap the picker in a EdsPicker and pass it up.
|
443
|
+
eds_policy_->MaybeUpdateEdsPickerLocked();
|
282
444
|
}
|
283
445
|
|
284
446
|
void EdsLb::Helper::AddTraceEvent(TraceSeverity severity,
|
@@ -288,111 +450,94 @@ void EdsLb::Helper::AddTraceEvent(TraceSeverity severity,
|
|
288
450
|
}
|
289
451
|
|
290
452
|
//
|
291
|
-
// EdsLb::EndpointWatcher
|
453
|
+
// EdsLb::EndpointWatcher::Notifier
|
292
454
|
//
|
293
455
|
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
456
|
+
EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent,
|
457
|
+
XdsApi::EdsUpdate update)
|
458
|
+
: parent_(std::move(parent)), update_(std::move(update)), type_(kUpdate) {
|
459
|
+
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
460
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
461
|
+
}
|
298
462
|
|
299
|
-
|
463
|
+
EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent,
|
464
|
+
grpc_error* error)
|
465
|
+
: parent_(std::move(parent)), type_(kError) {
|
466
|
+
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
467
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, error);
|
468
|
+
}
|
300
469
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
// Update the drop config.
|
307
|
-
const bool drop_config_changed =
|
308
|
-
eds_policy_->drop_config_ == nullptr ||
|
309
|
-
*eds_policy_->drop_config_ != *update.drop_config;
|
310
|
-
if (drop_config_changed) {
|
311
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
312
|
-
gpr_log(GPR_INFO, "[edslb %p] Updating drop config", eds_policy_.get());
|
313
|
-
}
|
314
|
-
eds_policy_->drop_config_ = std::move(update.drop_config);
|
315
|
-
eds_policy_->MaybeUpdateDropPickerLocked();
|
316
|
-
} else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
317
|
-
gpr_log(GPR_INFO, "[edslb %p] Drop config unchanged, ignoring",
|
318
|
-
eds_policy_.get());
|
319
|
-
}
|
320
|
-
// Update priority and locality info.
|
321
|
-
if (eds_policy_->child_policy_ == nullptr ||
|
322
|
-
eds_policy_->priority_list_update_ != update.priority_list_update) {
|
323
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
324
|
-
gpr_log(GPR_INFO, "[edslb %p] Updating priority list",
|
325
|
-
eds_policy_.get());
|
326
|
-
}
|
327
|
-
eds_policy_->UpdatePriorityList(std::move(update.priority_list_update));
|
328
|
-
} else if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
329
|
-
gpr_log(GPR_INFO, "[edslb %p] Priority list unchanged, ignoring",
|
330
|
-
eds_policy_.get());
|
331
|
-
}
|
332
|
-
}
|
333
|
-
|
334
|
-
void OnError(grpc_error* error) override {
|
335
|
-
gpr_log(GPR_ERROR, "[edslb %p] xds watcher reported error: %s",
|
336
|
-
eds_policy_.get(), grpc_error_string(error));
|
337
|
-
// Go into TRANSIENT_FAILURE if we have not yet created the child
|
338
|
-
// policy (i.e., we have not yet received data from xds). Otherwise,
|
339
|
-
// we keep running with the data we had previously.
|
340
|
-
if (eds_policy_->child_policy_ == nullptr) {
|
341
|
-
eds_policy_->channel_control_helper()->UpdateState(
|
342
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
343
|
-
absl::make_unique<TransientFailurePicker>(error));
|
344
|
-
} else {
|
345
|
-
GRPC_ERROR_UNREF(error);
|
346
|
-
}
|
347
|
-
}
|
470
|
+
EdsLb::EndpointWatcher::Notifier::Notifier(RefCountedPtr<EdsLb> parent)
|
471
|
+
: parent_(std::move(parent)), type_(kDoesNotExist) {
|
472
|
+
GRPC_CLOSURE_INIT(&closure_, &RunInExecCtx, this, nullptr);
|
473
|
+
ExecCtx::Run(DEBUG_LOCATION, &closure_, GRPC_ERROR_NONE);
|
474
|
+
}
|
348
475
|
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
absl::make_unique<TransientFailurePicker>(
|
357
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
358
|
-
"EDS resource does not exist")));
|
359
|
-
eds_policy_->MaybeDestroyChildPolicyLocked();
|
360
|
-
}
|
476
|
+
void EdsLb::EndpointWatcher::Notifier::RunInExecCtx(void* arg,
|
477
|
+
grpc_error* error) {
|
478
|
+
Notifier* self = static_cast<Notifier*>(arg);
|
479
|
+
GRPC_ERROR_REF(error);
|
480
|
+
self->parent_->work_serializer()->Run(
|
481
|
+
[self, error]() { self->RunInWorkSerializer(error); }, DEBUG_LOCATION);
|
482
|
+
}
|
361
483
|
|
362
|
-
|
363
|
-
|
364
|
-
|
484
|
+
void EdsLb::EndpointWatcher::Notifier::RunInWorkSerializer(grpc_error* error) {
|
485
|
+
switch (type_) {
|
486
|
+
case kUpdate:
|
487
|
+
parent_->OnEndpointChanged(std::move(update_));
|
488
|
+
break;
|
489
|
+
case kError:
|
490
|
+
parent_->OnError(error);
|
491
|
+
break;
|
492
|
+
case kDoesNotExist:
|
493
|
+
parent_->OnResourceDoesNotExist();
|
494
|
+
break;
|
495
|
+
};
|
496
|
+
delete this;
|
497
|
+
}
|
365
498
|
|
366
499
|
//
|
367
500
|
// EdsLb public methods
|
368
501
|
//
|
369
502
|
|
370
|
-
EdsLb::EdsLb(Args args)
|
371
|
-
: LoadBalancingPolicy(std::move(args)),
|
372
|
-
xds_client_from_channel_(XdsClient::GetFromChannelArgs(*args.args)) {
|
503
|
+
EdsLb::EdsLb(RefCountedPtr<XdsClient> xds_client, Args args)
|
504
|
+
: LoadBalancingPolicy(std::move(args)), xds_client_(std::move(xds_client)) {
|
373
505
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
374
|
-
gpr_log(GPR_INFO, "[edslb %p] created -- xds client
|
375
|
-
|
506
|
+
gpr_log(GPR_INFO, "[edslb %p] created -- using xds client %p", this,
|
507
|
+
xds_client_.get());
|
376
508
|
}
|
377
509
|
// Record server name.
|
378
|
-
const
|
379
|
-
|
510
|
+
const char* server_uri =
|
511
|
+
grpc_channel_args_find_string(args.args, GRPC_ARG_SERVER_URI);
|
380
512
|
GPR_ASSERT(server_uri != nullptr);
|
381
513
|
grpc_uri* uri = grpc_uri_parse(server_uri, true);
|
382
514
|
GPR_ASSERT(uri->path[0] != '\0');
|
383
515
|
server_name_ = uri->path[0] == '/' ? uri->path + 1 : uri->path;
|
516
|
+
is_xds_uri_ = strcmp(uri->scheme, "xds") == 0;
|
384
517
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
385
|
-
gpr_log(GPR_INFO, "[edslb %p] server name from channel: %s",
|
386
|
-
server_name_.c_str());
|
518
|
+
gpr_log(GPR_INFO, "[edslb %p] server name from channel (is_xds_uri=%d): %s",
|
519
|
+
this, is_xds_uri_, server_name_.c_str());
|
387
520
|
}
|
388
521
|
grpc_uri_destroy(uri);
|
522
|
+
// EDS-only flow.
|
523
|
+
if (!is_xds_uri_) {
|
524
|
+
// Setup channelz linkage.
|
525
|
+
channelz::ChannelNode* parent_channelz_node =
|
526
|
+
grpc_channel_args_find_pointer<channelz::ChannelNode>(
|
527
|
+
args.args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
528
|
+
if (parent_channelz_node != nullptr) {
|
529
|
+
xds_client_->AddChannelzLinkage(parent_channelz_node);
|
530
|
+
}
|
531
|
+
// Couple polling.
|
532
|
+
grpc_pollset_set_add_pollset_set(xds_client_->interested_parties(),
|
533
|
+
interested_parties());
|
534
|
+
}
|
389
535
|
}
|
390
536
|
|
391
537
|
EdsLb::~EdsLb() {
|
392
538
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
393
|
-
gpr_log(GPR_INFO, "[edslb %p] destroying
|
539
|
+
gpr_log(GPR_INFO, "[edslb %p] destroying eds LB policy", this);
|
394
540
|
}
|
395
|
-
grpc_channel_args_destroy(args_);
|
396
541
|
}
|
397
542
|
|
398
543
|
void EdsLb::ShutdownLocked() {
|
@@ -405,22 +550,31 @@ void EdsLb::ShutdownLocked() {
|
|
405
550
|
child_picker_.reset();
|
406
551
|
MaybeDestroyChildPolicyLocked();
|
407
552
|
drop_stats_.reset();
|
408
|
-
// Cancel
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
if (config_ != nullptr) {
|
414
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
415
|
-
gpr_log(GPR_INFO, "[edslb %p] cancelling xds watch for %s", this,
|
416
|
-
std::string(GetEdsResourceName()).c_str());
|
417
|
-
}
|
418
|
-
xds_client()->CancelEndpointDataWatch(GetEdsResourceName(),
|
419
|
-
endpoint_watcher_);
|
553
|
+
// Cancel watcher.
|
554
|
+
if (endpoint_watcher_ != nullptr) {
|
555
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
556
|
+
gpr_log(GPR_INFO, "[edslb %p] cancelling xds watch for %s", this,
|
557
|
+
std::string(GetEdsResourceName()).c_str());
|
420
558
|
}
|
421
|
-
|
559
|
+
xds_client_->CancelEndpointDataWatch(GetEdsResourceName(),
|
560
|
+
endpoint_watcher_);
|
422
561
|
}
|
423
|
-
|
562
|
+
if (!is_xds_uri_) {
|
563
|
+
// Remove channelz linkage.
|
564
|
+
channelz::ChannelNode* parent_channelz_node =
|
565
|
+
grpc_channel_args_find_pointer<channelz::ChannelNode>(
|
566
|
+
args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
567
|
+
if (parent_channelz_node != nullptr) {
|
568
|
+
xds_client_->RemoveChannelzLinkage(parent_channelz_node);
|
569
|
+
}
|
570
|
+
// Decouple polling.
|
571
|
+
grpc_pollset_set_del_pollset_set(xds_client_->interested_parties(),
|
572
|
+
interested_parties());
|
573
|
+
}
|
574
|
+
xds_client_.reset(DEBUG_LOCATION, "EdsLb");
|
575
|
+
// Destroy channel args.
|
576
|
+
grpc_channel_args_destroy(args_);
|
577
|
+
args_ = nullptr;
|
424
578
|
}
|
425
579
|
|
426
580
|
void EdsLb::MaybeDestroyChildPolicyLocked() {
|
@@ -443,33 +597,24 @@ void EdsLb::UpdateLocked(UpdateArgs args) {
|
|
443
597
|
grpc_channel_args_destroy(args_);
|
444
598
|
args_ = args.args;
|
445
599
|
args.args = nullptr;
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
nullptr /* service config watcher */, *args_, &error);
|
453
|
-
// TODO(roth): If we decide that we care about EDS-only mode, add
|
454
|
-
// proper error handling here.
|
455
|
-
GPR_ASSERT(error == GRPC_ERROR_NONE);
|
456
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
457
|
-
gpr_log(GPR_INFO, "[edslb %p] Created xds client %p", this,
|
458
|
-
xds_client_.get());
|
459
|
-
}
|
460
|
-
}
|
461
|
-
}
|
600
|
+
const bool lrs_server_changed =
|
601
|
+
is_initial_update || config_->lrs_load_reporting_server_name() !=
|
602
|
+
old_config->lrs_load_reporting_server_name();
|
603
|
+
const bool max_concurrent_requests_changed =
|
604
|
+
is_initial_update || config_->max_concurrent_requests() !=
|
605
|
+
old_config->max_concurrent_requests();
|
462
606
|
// Update drop stats for load reporting if needed.
|
463
|
-
if (
|
464
|
-
old_config->lrs_load_reporting_server_name()) {
|
607
|
+
if (lrs_server_changed) {
|
465
608
|
drop_stats_.reset();
|
466
609
|
if (config_->lrs_load_reporting_server_name().has_value()) {
|
467
610
|
const auto key = GetLrsClusterKey();
|
468
|
-
drop_stats_ =
|
611
|
+
drop_stats_ = xds_client_->AddClusterDropStats(
|
469
612
|
config_->lrs_load_reporting_server_name().value(),
|
470
613
|
key.first /*cluster_name*/, key.second /*eds_service_name*/);
|
471
614
|
}
|
472
|
-
|
615
|
+
}
|
616
|
+
if (lrs_server_changed || max_concurrent_requests_changed) {
|
617
|
+
MaybeUpdateEdsPickerLocked();
|
473
618
|
}
|
474
619
|
// Update child policy if needed.
|
475
620
|
// Note that this comes after updating drop_stats_, since we want that
|
@@ -484,53 +629,89 @@ void EdsLb::UpdateLocked(UpdateArgs args) {
|
|
484
629
|
auto watcher = absl::make_unique<EndpointWatcher>(
|
485
630
|
Ref(DEBUG_LOCATION, "EndpointWatcher"));
|
486
631
|
endpoint_watcher_ = watcher.get();
|
487
|
-
|
632
|
+
xds_client_->WatchEndpointData(GetEdsResourceName(), std::move(watcher));
|
488
633
|
}
|
489
634
|
}
|
490
635
|
|
491
636
|
void EdsLb::ResetBackoffLocked() {
|
492
637
|
// When the XdsClient is instantiated in the resolver instead of in this
|
493
|
-
// LB policy, this is done via the resolver, so we don't need to do it
|
494
|
-
|
495
|
-
if (xds_client_ != nullptr) xds_client_->ResetBackoff();
|
638
|
+
// LB policy, this is done via the resolver, so we don't need to do it here.
|
639
|
+
if (!is_xds_uri_ && xds_client_ != nullptr) xds_client_->ResetBackoff();
|
496
640
|
if (child_policy_ != nullptr) {
|
497
641
|
child_policy_->ResetBackoffLocked();
|
498
642
|
}
|
499
643
|
}
|
500
644
|
|
645
|
+
void EdsLb::OnEndpointChanged(XdsApi::EdsUpdate update) {
|
646
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_eds_trace)) {
|
647
|
+
gpr_log(GPR_INFO, "[edslb %p] Received EDS update from xds client", this);
|
648
|
+
}
|
649
|
+
// Update the drop config.
|
650
|
+
drop_config_ = std::move(update.drop_config);
|
651
|
+
// If priority list is empty, add a single priority, just so that we
|
652
|
+
// have a child in which to create the eds_drop policy.
|
653
|
+
if (update.priorities.empty()) update.priorities.emplace_back();
|
654
|
+
// Update child policy.
|
655
|
+
UpdatePriorityList(std::move(update.priorities));
|
656
|
+
}
|
657
|
+
|
658
|
+
void EdsLb::OnError(grpc_error* error) {
|
659
|
+
gpr_log(GPR_ERROR, "[edslb %p] xds watcher reported error: %s", this,
|
660
|
+
grpc_error_string(error));
|
661
|
+
// Go into TRANSIENT_FAILURE if we have not yet created the child
|
662
|
+
// policy (i.e., we have not yet received data from xds). Otherwise,
|
663
|
+
// we keep running with the data we had previously.
|
664
|
+
if (child_policy_ == nullptr) {
|
665
|
+
channel_control_helper()->UpdateState(
|
666
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
|
667
|
+
absl::make_unique<TransientFailurePicker>(error));
|
668
|
+
} else {
|
669
|
+
GRPC_ERROR_UNREF(error);
|
670
|
+
}
|
671
|
+
}
|
672
|
+
|
673
|
+
void EdsLb::OnResourceDoesNotExist() {
|
674
|
+
gpr_log(
|
675
|
+
GPR_ERROR,
|
676
|
+
"[edslb %p] EDS resource does not exist -- reporting TRANSIENT_FAILURE",
|
677
|
+
this);
|
678
|
+
grpc_error* error = grpc_error_set_int(
|
679
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("EDS resource does not exist"),
|
680
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
681
|
+
channel_control_helper()->UpdateState(
|
682
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
|
683
|
+
absl::make_unique<TransientFailurePicker>(error));
|
684
|
+
MaybeDestroyChildPolicyLocked();
|
685
|
+
}
|
686
|
+
|
501
687
|
//
|
502
688
|
// child policy-related methods
|
503
689
|
//
|
504
690
|
|
505
|
-
void EdsLb::UpdatePriorityList(
|
506
|
-
XdsApi::PriorityListUpdate priority_list_update) {
|
691
|
+
void EdsLb::UpdatePriorityList(XdsApi::EdsUpdate::PriorityList priority_list) {
|
507
692
|
// Build some maps from locality to child number and the reverse from
|
508
|
-
// the old data in
|
693
|
+
// the old data in priority_list_ and priority_child_numbers_.
|
509
694
|
std::map<XdsLocalityName*, size_t /*child_number*/, XdsLocalityName::Less>
|
510
695
|
locality_child_map;
|
511
696
|
std::map<size_t, std::set<XdsLocalityName*>> child_locality_map;
|
512
|
-
for (
|
513
|
-
++priority) {
|
514
|
-
auto* locality_map = priority_list_update_.Find(priority);
|
515
|
-
GPR_ASSERT(locality_map != nullptr);
|
697
|
+
for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
|
516
698
|
size_t child_number = priority_child_numbers_[priority];
|
517
|
-
|
518
|
-
|
699
|
+
const auto& localities = priority_list_[priority].localities;
|
700
|
+
for (const auto& p : localities) {
|
701
|
+
XdsLocalityName* locality_name = p.first;
|
519
702
|
locality_child_map[locality_name] = child_number;
|
520
703
|
child_locality_map[child_number].insert(locality_name);
|
521
704
|
}
|
522
705
|
}
|
523
706
|
// Construct new list of children.
|
524
707
|
std::vector<size_t> priority_child_numbers;
|
525
|
-
for (
|
526
|
-
|
527
|
-
auto* locality_map = priority_list_update.Find(priority);
|
528
|
-
GPR_ASSERT(locality_map != nullptr);
|
708
|
+
for (size_t priority = 0; priority < priority_list.size(); ++priority) {
|
709
|
+
const auto& localities = priority_list[priority].localities;
|
529
710
|
absl::optional<size_t> child_number;
|
530
711
|
// If one of the localities in this priority already existed, reuse its
|
531
712
|
// child number.
|
532
|
-
for (const auto& p :
|
533
|
-
XdsLocalityName* locality_name = p.first
|
713
|
+
for (const auto& p : localities) {
|
714
|
+
XdsLocalityName* locality_name = p.first;
|
534
715
|
if (!child_number.has_value()) {
|
535
716
|
auto it = locality_child_map.find(locality_name);
|
536
717
|
if (it != locality_child_map.end()) {
|
@@ -564,7 +745,7 @@ void EdsLb::UpdatePriorityList(
|
|
564
745
|
priority_child_numbers.push_back(*child_number);
|
565
746
|
}
|
566
747
|
// Save update.
|
567
|
-
|
748
|
+
priority_list_ = std::move(priority_list);
|
568
749
|
priority_child_numbers_ = std::move(priority_child_numbers);
|
569
750
|
// Update child policy.
|
570
751
|
UpdateChildPolicyLocked();
|
@@ -572,23 +753,23 @@ void EdsLb::UpdatePriorityList(
|
|
572
753
|
|
573
754
|
ServerAddressList EdsLb::CreateChildPolicyAddressesLocked() {
|
574
755
|
ServerAddressList addresses;
|
575
|
-
for (
|
576
|
-
|
756
|
+
for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
|
757
|
+
const auto& localities = priority_list_[priority].localities;
|
577
758
|
std::string priority_child_name =
|
578
759
|
absl::StrCat("child", priority_child_numbers_[priority]);
|
579
|
-
const auto
|
580
|
-
GPR_ASSERT(locality_map != nullptr);
|
581
|
-
for (const auto& p : locality_map->localities) {
|
760
|
+
for (const auto& p : localities) {
|
582
761
|
const auto& locality_name = p.first;
|
583
762
|
const auto& locality = p.second;
|
584
763
|
std::vector<std::string> hierarchical_path = {
|
585
764
|
priority_child_name, locality_name->AsHumanReadableString()};
|
586
|
-
for (
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
765
|
+
for (const auto& endpoint : locality.endpoints) {
|
766
|
+
addresses.emplace_back(
|
767
|
+
endpoint
|
768
|
+
.WithAttribute(kHierarchicalPathAttributeKey,
|
769
|
+
MakeHierarchicalPathAttribute(hierarchical_path))
|
770
|
+
.WithAttribute(kXdsLocalityNameAttributeKey,
|
771
|
+
absl::make_unique<XdsLocalityAttribute>(
|
772
|
+
locality_name->Ref())));
|
592
773
|
}
|
593
774
|
}
|
594
775
|
}
|
@@ -597,15 +778,14 @@ ServerAddressList EdsLb::CreateChildPolicyAddressesLocked() {
|
|
597
778
|
|
598
779
|
RefCountedPtr<LoadBalancingPolicy::Config>
|
599
780
|
EdsLb::CreateChildPolicyConfigLocked() {
|
781
|
+
const auto lrs_key = GetLrsClusterKey();
|
600
782
|
Json::Object priority_children;
|
601
783
|
Json::Array priority_priorities;
|
602
|
-
for (
|
603
|
-
|
604
|
-
const auto* locality_map = priority_list_update_.Find(priority);
|
605
|
-
GPR_ASSERT(locality_map != nullptr);
|
784
|
+
for (size_t priority = 0; priority < priority_list_.size(); ++priority) {
|
785
|
+
const auto& localities = priority_list_[priority].localities;
|
606
786
|
Json::Object weighted_targets;
|
607
|
-
for (const auto& p :
|
608
|
-
XdsLocalityName* locality_name = p.first
|
787
|
+
for (const auto& p : localities) {
|
788
|
+
XdsLocalityName* locality_name = p.first;
|
609
789
|
const auto& locality = p.second;
|
610
790
|
// Construct JSON object containing locality name.
|
611
791
|
Json::Object locality_name_json;
|
@@ -618,45 +798,49 @@ EdsLb::CreateChildPolicyConfigLocked() {
|
|
618
798
|
if (!locality_name->sub_zone().empty()) {
|
619
799
|
locality_name_json["subzone"] = locality_name->sub_zone();
|
620
800
|
}
|
621
|
-
// Construct endpoint-picking policy.
|
622
|
-
// Wrap it in the LRS policy if load reporting is enabled.
|
623
|
-
Json endpoint_picking_policy;
|
624
|
-
if (config_->lrs_load_reporting_server_name().has_value()) {
|
625
|
-
const auto key = GetLrsClusterKey();
|
626
|
-
Json::Object lrs_config = {
|
627
|
-
{"clusterName", std::string(key.first)},
|
628
|
-
{"locality", std::move(locality_name_json)},
|
629
|
-
{"lrsLoadReportingServerName",
|
630
|
-
config_->lrs_load_reporting_server_name().value()},
|
631
|
-
{"childPolicy", config_->endpoint_picking_policy()},
|
632
|
-
};
|
633
|
-
if (!key.second.empty()) {
|
634
|
-
lrs_config["edsServiceName"] = std::string(key.second);
|
635
|
-
}
|
636
|
-
endpoint_picking_policy = Json::Array{Json::Object{
|
637
|
-
{"lrs_experimental", std::move(lrs_config)},
|
638
|
-
}};
|
639
|
-
} else {
|
640
|
-
endpoint_picking_policy = config_->endpoint_picking_policy();
|
641
|
-
}
|
642
801
|
// Add weighted target entry.
|
643
802
|
weighted_targets[locality_name->AsHumanReadableString()] = Json::Object{
|
644
803
|
{"weight", locality.lb_weight},
|
645
|
-
{"childPolicy",
|
804
|
+
{"childPolicy", config_->endpoint_picking_policy()},
|
646
805
|
};
|
647
806
|
}
|
648
|
-
//
|
649
|
-
|
650
|
-
std::string child_name = absl::StrCat("child", child_number);
|
651
|
-
priority_priorities.emplace_back(child_name);
|
807
|
+
// Construct locality-picking policy.
|
808
|
+
// Start with field from our config and add the "targets" field.
|
652
809
|
Json locality_picking_config = config_->locality_picking_policy();
|
653
810
|
Json::Object& config =
|
654
811
|
*(*locality_picking_config.mutable_array())[0].mutable_object();
|
655
812
|
auto it = config.begin();
|
656
813
|
GPR_ASSERT(it != config.end());
|
657
814
|
(*it->second.mutable_object())["targets"] = std::move(weighted_targets);
|
815
|
+
// Wrap it in the drop policy.
|
816
|
+
Json::Array drop_categories;
|
817
|
+
for (const auto& category : drop_config_->drop_category_list()) {
|
818
|
+
drop_categories.push_back(Json::Object{
|
819
|
+
{"category", category.name},
|
820
|
+
{"requests_per_million", category.parts_per_million},
|
821
|
+
});
|
822
|
+
}
|
823
|
+
Json::Object eds_drop_config = {
|
824
|
+
{"clusterName", std::string(lrs_key.first)},
|
825
|
+
{"childPolicy", std::move(locality_picking_config)},
|
826
|
+
{"dropCategories", std::move(drop_categories)},
|
827
|
+
};
|
828
|
+
if (!lrs_key.second.empty()) {
|
829
|
+
eds_drop_config["edsServiceName"] = std::string(lrs_key.second);
|
830
|
+
}
|
831
|
+
if (config_->lrs_load_reporting_server_name().has_value()) {
|
832
|
+
eds_drop_config["lrsLoadReportingServerName"] =
|
833
|
+
config_->lrs_load_reporting_server_name().value();
|
834
|
+
}
|
835
|
+
Json locality_picking_policy = Json::Array{Json::Object{
|
836
|
+
{"eds_drop_experimental", std::move(eds_drop_config)},
|
837
|
+
}};
|
838
|
+
// Add priority entry.
|
839
|
+
const size_t child_number = priority_child_numbers_[priority];
|
840
|
+
std::string child_name = absl::StrCat("child", child_number);
|
841
|
+
priority_priorities.emplace_back(child_name);
|
658
842
|
priority_children[child_name] = Json::Object{
|
659
|
-
{"config", std::move(
|
843
|
+
{"config", std::move(locality_picking_policy)},
|
660
844
|
};
|
661
845
|
}
|
662
846
|
Json json = Json::Array{Json::Object{
|
@@ -688,7 +872,7 @@ EdsLb::CreateChildPolicyConfigLocked() {
|
|
688
872
|
error),
|
689
873
|
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL);
|
690
874
|
channel_control_helper()->UpdateState(
|
691
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE,
|
875
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_to_absl_status(error),
|
692
876
|
absl::make_unique<TransientFailurePicker>(error));
|
693
877
|
return nullptr;
|
694
878
|
}
|
@@ -714,9 +898,11 @@ void EdsLb::UpdateChildPolicyLocked() {
|
|
714
898
|
|
715
899
|
grpc_channel_args* EdsLb::CreateChildPolicyArgsLocked(
|
716
900
|
const grpc_channel_args* args) {
|
717
|
-
|
901
|
+
grpc_arg args_to_add[] = {
|
718
902
|
// A channel arg indicating if the target is a backend inferred from an
|
719
903
|
// xds load balancer.
|
904
|
+
// TODO(roth): This isn't needed with the new fallback design.
|
905
|
+
// Remove as part of implementing the new fallback functionality.
|
720
906
|
grpc_channel_arg_integer_create(
|
721
907
|
const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_XDS_LOAD_BALANCER),
|
722
908
|
1),
|
@@ -725,18 +911,8 @@ grpc_channel_args* EdsLb::CreateChildPolicyArgsLocked(
|
|
725
911
|
grpc_channel_arg_integer_create(
|
726
912
|
const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
|
727
913
|
};
|
728
|
-
|
729
|
-
|
730
|
-
args_to_add.emplace_back(xds_client_->MakeChannelArg());
|
731
|
-
} else if (!config_->lrs_load_reporting_server_name().has_value()) {
|
732
|
-
// Remove XdsClient from channel args, so that its presence doesn't
|
733
|
-
// prevent us from sharing subchannels between channels.
|
734
|
-
// If load reporting is enabled, this happens in the LRS policy instead.
|
735
|
-
args_to_remove.push_back(GRPC_ARG_XDS_CLIENT);
|
736
|
-
}
|
737
|
-
return grpc_channel_args_copy_and_add_and_remove(
|
738
|
-
args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
|
739
|
-
args_to_add.size());
|
914
|
+
return grpc_channel_args_copy_and_add(args, args_to_add,
|
915
|
+
GPR_ARRAY_SIZE(args_to_add));
|
740
916
|
}
|
741
917
|
|
742
918
|
OrphanablePtr<LoadBalancingPolicy> EdsLb::CreateChildPolicyLocked(
|
@@ -765,18 +941,12 @@ OrphanablePtr<LoadBalancingPolicy> EdsLb::CreateChildPolicyLocked(
|
|
765
941
|
return lb_policy;
|
766
942
|
}
|
767
943
|
|
768
|
-
void EdsLb::
|
769
|
-
// If we're dropping all calls, report READY, regardless of what (or
|
770
|
-
// whether) the child has reported.
|
771
|
-
if (drop_config_ != nullptr && drop_config_->drop_all()) {
|
772
|
-
channel_control_helper()->UpdateState(GRPC_CHANNEL_READY,
|
773
|
-
absl::make_unique<DropPicker>(this));
|
774
|
-
return;
|
775
|
-
}
|
944
|
+
void EdsLb::MaybeUpdateEdsPickerLocked() {
|
776
945
|
// Update only if we have a child picker.
|
777
946
|
if (child_picker_ != nullptr) {
|
778
|
-
channel_control_helper()->UpdateState(
|
779
|
-
|
947
|
+
channel_control_helper()->UpdateState(
|
948
|
+
child_state_, child_status_,
|
949
|
+
absl::make_unique<EdsPicker>(Ref(DEBUG_LOCATION, "EdsPicker")));
|
780
950
|
}
|
781
951
|
}
|
782
952
|
|
@@ -788,7 +958,17 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
|
|
788
958
|
public:
|
789
959
|
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
790
960
|
LoadBalancingPolicy::Args args) const override {
|
791
|
-
|
961
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
962
|
+
RefCountedPtr<XdsClient> xds_client = XdsClient::GetOrCreate(&error);
|
963
|
+
if (error != GRPC_ERROR_NONE) {
|
964
|
+
gpr_log(GPR_ERROR,
|
965
|
+
"cannot get XdsClient to instantiate eds LB policy: %s",
|
966
|
+
grpc_error_string(error));
|
967
|
+
GRPC_ERROR_UNREF(error);
|
968
|
+
return nullptr;
|
969
|
+
}
|
970
|
+
return MakeOrphanable<EdsChildHandler>(std::move(xds_client),
|
971
|
+
std::move(args));
|
792
972
|
}
|
793
973
|
|
794
974
|
const char* name() const override { return kEds; }
|
@@ -882,13 +1062,25 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
|
|
882
1062
|
"endpointPickingPolicy", &parse_error, 1));
|
883
1063
|
GRPC_ERROR_UNREF(parse_error);
|
884
1064
|
}
|
1065
|
+
// Max concurrent requests.
|
1066
|
+
uint32_t max_concurrent_requests = 1024;
|
1067
|
+
it = json.object_value().find("max_concurrent_requests");
|
1068
|
+
if (it != json.object_value().end()) {
|
1069
|
+
if (it->second.type() != Json::Type::NUMBER) {
|
1070
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1071
|
+
"field:max_concurrent_requests error:must be of type number"));
|
1072
|
+
} else {
|
1073
|
+
max_concurrent_requests =
|
1074
|
+
gpr_parse_nonnegative_int(it->second.string_value().c_str());
|
1075
|
+
}
|
1076
|
+
}
|
885
1077
|
// Construct config.
|
886
1078
|
if (error_list.empty()) {
|
887
1079
|
return MakeRefCounted<EdsLbConfig>(
|
888
1080
|
std::move(cluster_name), std::move(eds_service_name),
|
889
1081
|
std::move(lrs_load_reporting_server_name),
|
890
1082
|
std::move(locality_picking_policy),
|
891
|
-
std::move(endpoint_picking_policy));
|
1083
|
+
std::move(endpoint_picking_policy), max_concurrent_requests);
|
892
1084
|
} else {
|
893
1085
|
*error = GRPC_ERROR_CREATE_FROM_VECTOR(
|
894
1086
|
"eds_experimental LB policy config", &error_list);
|
@@ -899,8 +1091,9 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
|
|
899
1091
|
private:
|
900
1092
|
class EdsChildHandler : public ChildPolicyHandler {
|
901
1093
|
public:
|
902
|
-
EdsChildHandler(
|
903
|
-
: ChildPolicyHandler(std::move(args),
|
1094
|
+
EdsChildHandler(RefCountedPtr<XdsClient> xds_client, Args args)
|
1095
|
+
: ChildPolicyHandler(std::move(args), &grpc_lb_eds_trace),
|
1096
|
+
xds_client_(std::move(xds_client)) {}
|
904
1097
|
|
905
1098
|
bool ConfigChangeRequiresNewPolicyInstance(
|
906
1099
|
LoadBalancingPolicy::Config* old_config,
|
@@ -911,13 +1104,18 @@ class EdsLbFactory : public LoadBalancingPolicyFactory {
|
|
911
1104
|
EdsLbConfig* new_eds_config = static_cast<EdsLbConfig*>(new_config);
|
912
1105
|
return old_eds_config->cluster_name() != new_eds_config->cluster_name() ||
|
913
1106
|
old_eds_config->eds_service_name() !=
|
914
|
-
new_eds_config->eds_service_name()
|
1107
|
+
new_eds_config->eds_service_name() ||
|
1108
|
+
old_eds_config->lrs_load_reporting_server_name() !=
|
1109
|
+
new_eds_config->lrs_load_reporting_server_name();
|
915
1110
|
}
|
916
1111
|
|
917
1112
|
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
918
1113
|
const char* name, LoadBalancingPolicy::Args args) const override {
|
919
|
-
return MakeOrphanable<EdsLb>(std::move(args));
|
1114
|
+
return MakeOrphanable<EdsLb>(xds_client_, std::move(args));
|
920
1115
|
}
|
1116
|
+
|
1117
|
+
private:
|
1118
|
+
RefCountedPtr<XdsClient> xds_client_;
|
921
1119
|
};
|
922
1120
|
};
|
923
1121
|
|