grpc 1.32.0 → 1.36.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +1086 -3054
- data/etc/roots.pem +257 -573
- data/include/grpc/compression.h +1 -1
- data/include/grpc/grpc.h +15 -7
- data/include/grpc/grpc_security.h +227 -171
- 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 -8
- data/include/grpc/impl/codegen/log.h +0 -2
- data/include/grpc/impl/codegen/port_platform.h +22 -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 +2788 -1535
- data/src/core/ext/filters/client_channel/client_channel.h +0 -6
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.cc +0 -4
- data/src/core/ext/filters/client_channel/config_selector.h +40 -8
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
- 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 +6 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +6 -7
- 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 +4 -3
- 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 +204 -195
- 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 +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +58 -26
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +14 -34
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +478 -145
- 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/xds_cluster_impl.cc +810 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +722 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1384 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/resolver.cc +4 -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 +43 -59
- 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 +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +443 -17
- 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 +362 -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 +566 -366
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +28 -0
- 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 +29 -74
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +12 -10
- 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 +86 -0
- data/src/core/ext/filters/client_channel/server_address.h +52 -36
- data/src/core/ext/filters/client_channel/service_config.cc +18 -13
- data/src/core/ext/filters/client_channel/service_config.h +8 -5
- data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
- 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 +53 -66
- data/src/core/ext/filters/client_channel/subchannel.h +14 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -5
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
- 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/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 +3 -2
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -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 +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
- 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 +26 -14
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +226 -95
- 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 +28 -42
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +13 -3
- 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_parser.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/internal.h +5 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +18 -3
- 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/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 +52 -33
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +199 -34
- 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 +171 -98
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +625 -202
- 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 +36 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +133 -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 +70 -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 +31 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +107 -47
- 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 +53 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +149 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +74 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +248 -43
- 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 +63 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +254 -60
- 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 +42 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +126 -0
- 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 +49 -27
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +204 -48
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +47 -26
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +181 -48
- 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/rbac/v3/rbac.upb.c +21 -17
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +96 -33
- 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 +352 -199
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1334 -443
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +8 -7
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +34 -10
- 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/network/http_connection_manager/v3/http_connection_manager.upb.c +129 -80
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +525 -166
- 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 +26 -24
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +121 -64
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +29 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +70 -29
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +296 -63
- 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 -34
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +188 -75
- 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/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/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 +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +22 -3
- 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 +242 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +830 -0
- 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 +31 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +64 -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/validate/validate.upb.c +64 -64
- data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
- 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/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/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 +228 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -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/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 +938 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +285 -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/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +504 -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/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/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/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/{upb-generated/gogoproto/gogo.upb.h → upbdefs-generated/envoy/type/v3/http.upbdefs.h} +10 -9
- 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/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 +61 -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.cc +87 -0
- data/src/core/ext/xds/certificate_provider_store.h +112 -0
- 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 +1149 -1058
- data/src/core/ext/xds/xds_api.h +215 -144
- data/src/core/ext/xds/xds_bootstrap.cc +228 -62
- data/src/core/ext/xds/xds_bootstrap.h +35 -12
- 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_channel_args.h +6 -3
- data/src/core/ext/xds/xds_client.cc +620 -495
- data/src/core/ext/xds/xds_client.h +121 -58
- data/src/core/ext/xds/xds_client_stats.cc +61 -17
- data/src/core/ext/xds/xds_client_stats.h +35 -7
- data/src/core/ext/xds/xds_server_config_fetcher.cc +267 -0
- data/src/core/lib/channel/channel_args.cc +9 -8
- data/src/core/lib/channel/channel_args.h +0 -1
- 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 +23 -59
- data/src/core/lib/channel/channelz.h +13 -22
- data/src/core/lib/channel/channelz_registry.cc +12 -11
- data/src/core/lib/channel/channelz_registry.h +3 -1
- data/src/core/lib/channel/handshaker.cc +4 -7
- data/src/core/lib/channel/handshaker.h +3 -3
- 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/time.cc +12 -12
- data/src/core/lib/gpr/time_precise.cc +5 -2
- data/src/core/lib/gpr/time_precise.h +6 -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/dual_ref_counted.h +331 -0
- 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 +91 -68
- data/src/core/lib/gprpp/ref_counted_ptr.h +166 -7
- 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 +2 -2
- 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/call_combiner.cc +8 -5
- data/src/core/lib/iomgr/combiner.cc +2 -1
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -5
- data/src/core/lib/iomgr/error.cc +17 -12
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +10 -7
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
- 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/exec_ctx.cc +1 -1
- data/src/core/lib/iomgr/exec_ctx.h +16 -12
- 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 +4 -4
- data/src/core/lib/iomgr/sockaddr_utils.cc +11 -11
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -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 +16 -12
- data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
- data/src/core/lib/iomgr/timer_custom.cc +5 -5
- data/src/core/lib/iomgr/timer_generic.cc +3 -3
- data/src/core/lib/iomgr/timer_manager.cc +2 -2
- 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_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.cc +58 -0
- data/src/core/lib/json/json_util.h +204 -0
- data/src/core/lib/json/json_writer.cc +2 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/authorization/matchers.cc +339 -0
- data/src/core/lib/security/authorization/matchers.h +158 -0
- data/src/core/lib/security/authorization/mock_cel/activation.h +1 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +13 -7
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
- 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 +346 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +213 -0
- 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 +244 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +69 -0
- 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 +9 -13
- 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 +5 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +19 -19
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +354 -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 +4 -6
- 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 +7 -8
- 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 +25 -41
- data/src/core/lib/surface/channel.h +9 -3
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +30 -24
- data/src/core/lib/surface/completion_queue.h +16 -16
- data/src/core/lib/surface/init.cc +45 -29
- data/src/core/lib/surface/lame_client.cc +20 -46
- data/src/core/lib/surface/lame_client.h +4 -0
- data/src/core/lib/surface/server.cc +66 -20
- data/src/core/lib/surface/server.h +42 -7
- 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/bdp_estimator.h +2 -1
- data/src/core/lib/transport/byte_stream.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +11 -9
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +16 -2
- data/src/core/lib/transport/metadata.h +2 -2
- data/src/core/lib/transport/metadata_batch.h +4 -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 +47 -20
- 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 +18 -21
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -47
- 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 +7 -4
- 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 +75 -58
- 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 +1 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -16
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +70 -40
- 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/pb/codegen/package_option_spec.rb +2 -6
- 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/flat_hash_set.h +2 -1
- 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 -720
- 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 -20
- 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/{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/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/ec_extra/ec_asn1.c +2 -17
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +4 -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/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/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/digest/digest.c +2 -0
- 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 +128 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
- 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 +107 -54
- 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 +112 -36
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +63 -9
- 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 +118 -49
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
- 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 +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- 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 +8 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +27 -21
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -1
- 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 +32 -11
- 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 +4 -4
- 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 +42 -25
- 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 +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +28 -40
- 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 +38 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
- 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 +32 -28
- 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 +42 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
- 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_purp.c +55 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -7
- 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 -546
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +15 -7
- 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 +21 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +62 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -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 +16 -3
- 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 +106 -27
- 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 +42 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +462 -163
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +593 -440
- 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 +22 -21
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +13 -23
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +11 -6
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +82 -26
- 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_cipher.cc +8 -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 +537 -34
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +59 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +194 -58
- 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/json_decode.c +1443 -0
- data/third_party/upb/upb/json_decode.h +23 -0
- data/third_party/upb/upb/json_encode.c +713 -0
- data/third_party/upb/upb/json_encode.h +36 -0
- 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
- metadata +309 -63
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -946
- data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -537
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1141
- 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 -354
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -142
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
- data/src/core/ext/xds/xds_channel.h +0 -46
- data/src/core/ext/xds/xds_channel_secure.cc +0 -103
- data/src/core/lib/gprpp/map.h +0 -53
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
- 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
- data/third_party/upb/upb/port.c +0 -26
@@ -17,10 +17,13 @@
|
|
17
17
|
#ifndef GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
|
18
18
|
#define GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H
|
19
19
|
|
20
|
-
// Boolean channel arg indicating whether the target is an xds server.
|
21
|
-
#define GRPC_ARG_ADDRESS_IS_XDS_SERVER "grpc.address_is_xds_server"
|
22
|
-
|
23
20
|
// Pointer channel arg containing a ref to the XdsClient object.
|
24
21
|
#define GRPC_ARG_XDS_CLIENT "grpc.xds_client"
|
25
22
|
|
23
|
+
// Timeout in milliseconds to wait for a resource to be returned from
|
24
|
+
// the xds server before assuming that it does not exist.
|
25
|
+
// The default is 15 seconds.
|
26
|
+
#define GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS \
|
27
|
+
"grpc.xds_resource_does_not_exist_timeout_ms"
|
28
|
+
|
26
29
|
#endif /* GRPC_CORE_EXT_XDS_XDS_CHANNEL_ARGS_H */
|
@@ -35,7 +35,6 @@
|
|
35
35
|
#include "src/core/ext/filters/client_channel/client_channel.h"
|
36
36
|
#include "src/core/ext/filters/client_channel/service_config.h"
|
37
37
|
#include "src/core/ext/xds/xds_api.h"
|
38
|
-
#include "src/core/ext/xds/xds_channel.h"
|
39
38
|
#include "src/core/ext/xds/xds_channel_args.h"
|
40
39
|
#include "src/core/ext/xds/xds_client.h"
|
41
40
|
#include "src/core/ext/xds/xds_client_stats.h"
|
@@ -43,7 +42,6 @@
|
|
43
42
|
#include "src/core/lib/channel/channel_args.h"
|
44
43
|
#include "src/core/lib/channel/channel_stack.h"
|
45
44
|
#include "src/core/lib/gpr/string.h"
|
46
|
-
#include "src/core/lib/gprpp/map.h"
|
47
45
|
#include "src/core/lib/gprpp/memory.h"
|
48
46
|
#include "src/core/lib/gprpp/orphanable.h"
|
49
47
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -51,7 +49,6 @@
|
|
51
49
|
#include "src/core/lib/iomgr/sockaddr.h"
|
52
50
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
53
51
|
#include "src/core/lib/iomgr/timer.h"
|
54
|
-
#include "src/core/lib/iomgr/work_serializer.h"
|
55
52
|
#include "src/core/lib/slice/slice_internal.h"
|
56
53
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
57
54
|
#include "src/core/lib/surface/call.h"
|
@@ -68,6 +65,16 @@
|
|
68
65
|
namespace grpc_core {
|
69
66
|
|
70
67
|
TraceFlag grpc_xds_client_trace(false, "xds_client");
|
68
|
+
TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
|
69
|
+
|
70
|
+
namespace {
|
71
|
+
|
72
|
+
Mutex* g_mu = nullptr;
|
73
|
+
const grpc_channel_args* g_channel_args = nullptr;
|
74
|
+
XdsClient* g_xds_client = nullptr;
|
75
|
+
char* g_fallback_bootstrap_config = nullptr;
|
76
|
+
|
77
|
+
} // namespace
|
71
78
|
|
72
79
|
//
|
73
80
|
// Internal class declarations
|
@@ -135,22 +142,25 @@ class XdsClient::ChannelState::AdsCallState
|
|
135
142
|
private:
|
136
143
|
class ResourceState : public InternallyRefCounted<ResourceState> {
|
137
144
|
public:
|
138
|
-
ResourceState(const std::string& type_url, const std::string& name
|
139
|
-
|
145
|
+
ResourceState(const std::string& type_url, const std::string& name,
|
146
|
+
bool sent_initial_request)
|
147
|
+
: type_url_(type_url),
|
148
|
+
name_(name),
|
149
|
+
sent_initial_request_(sent_initial_request) {
|
140
150
|
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
141
151
|
grpc_schedule_on_exec_ctx);
|
142
152
|
}
|
143
153
|
|
144
154
|
void Orphan() override {
|
145
155
|
Finish();
|
146
|
-
Unref();
|
156
|
+
Unref(DEBUG_LOCATION, "Orphan");
|
147
157
|
}
|
148
158
|
|
149
159
|
void Start(RefCountedPtr<AdsCallState> ads_calld) {
|
150
|
-
if (
|
151
|
-
|
160
|
+
if (sent_initial_request_) return;
|
161
|
+
sent_initial_request_ = true;
|
152
162
|
ads_calld_ = std::move(ads_calld);
|
153
|
-
Ref().release();
|
163
|
+
Ref(DEBUG_LOCATION, "timer").release();
|
154
164
|
timer_pending_ = true;
|
155
165
|
grpc_timer_init(
|
156
166
|
&timer_,
|
@@ -168,9 +178,12 @@ class XdsClient::ChannelState::AdsCallState
|
|
168
178
|
private:
|
169
179
|
static void OnTimer(void* arg, grpc_error* error) {
|
170
180
|
ResourceState* self = static_cast<ResourceState*>(arg);
|
171
|
-
|
172
|
-
|
173
|
-
|
181
|
+
{
|
182
|
+
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
183
|
+
self->OnTimerLocked(GRPC_ERROR_REF(error));
|
184
|
+
}
|
185
|
+
self->ads_calld_.reset();
|
186
|
+
self->Unref(DEBUG_LOCATION, "timer");
|
174
187
|
}
|
175
188
|
|
176
189
|
void OnTimerLocked(grpc_error* error) {
|
@@ -185,27 +198,32 @@ class XdsClient::ChannelState::AdsCallState
|
|
185
198
|
gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
|
186
199
|
grpc_error_string(watcher_error));
|
187
200
|
}
|
188
|
-
if (type_url_ == XdsApi::kLdsTypeUrl
|
189
|
-
|
190
|
-
|
201
|
+
if (type_url_ == XdsApi::kLdsTypeUrl) {
|
202
|
+
ListenerState& state = ads_calld_->xds_client()->listener_map_[name_];
|
203
|
+
for (const auto& p : state.watchers) {
|
204
|
+
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
205
|
+
}
|
206
|
+
} else if (type_url_ == XdsApi::kRdsTypeUrl) {
|
207
|
+
RouteConfigState& state =
|
208
|
+
ads_calld_->xds_client()->route_config_map_[name_];
|
209
|
+
for (const auto& p : state.watchers) {
|
210
|
+
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
211
|
+
}
|
191
212
|
} else if (type_url_ == XdsApi::kCdsTypeUrl) {
|
192
213
|
ClusterState& state = ads_calld_->xds_client()->cluster_map_[name_];
|
193
214
|
for (const auto& p : state.watchers) {
|
194
215
|
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
195
216
|
}
|
196
|
-
GRPC_ERROR_UNREF(watcher_error);
|
197
217
|
} else if (type_url_ == XdsApi::kEdsTypeUrl) {
|
198
218
|
EndpointState& state = ads_calld_->xds_client()->endpoint_map_[name_];
|
199
219
|
for (const auto& p : state.watchers) {
|
200
220
|
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
201
221
|
}
|
202
|
-
GRPC_ERROR_UNREF(watcher_error);
|
203
222
|
} else {
|
204
223
|
GPR_UNREACHABLE_CODE(return );
|
205
224
|
}
|
225
|
+
GRPC_ERROR_UNREF(watcher_error);
|
206
226
|
}
|
207
|
-
ads_calld_.reset();
|
208
|
-
Unref();
|
209
227
|
GRPC_ERROR_UNREF(error);
|
210
228
|
}
|
211
229
|
|
@@ -213,7 +231,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
213
231
|
const std::string name_;
|
214
232
|
|
215
233
|
RefCountedPtr<AdsCallState> ads_calld_;
|
216
|
-
bool
|
234
|
+
bool sent_initial_request_;
|
217
235
|
bool timer_pending_ = false;
|
218
236
|
grpc_timer timer_;
|
219
237
|
grpc_closure timer_callback_;
|
@@ -222,8 +240,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
222
240
|
struct ResourceTypeState {
|
223
241
|
~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
|
224
242
|
|
225
|
-
//
|
226
|
-
std::string version;
|
243
|
+
// Nonce and error for this resource type.
|
227
244
|
std::string nonce;
|
228
245
|
grpc_error* error = GRPC_ERROR_NONE;
|
229
246
|
|
@@ -234,15 +251,15 @@ class XdsClient::ChannelState::AdsCallState
|
|
234
251
|
|
235
252
|
void SendMessageLocked(const std::string& type_url);
|
236
253
|
|
237
|
-
void AcceptLdsUpdate(
|
238
|
-
void AcceptRdsUpdate(
|
254
|
+
void AcceptLdsUpdate(XdsApi::LdsUpdateMap lds_update_map);
|
255
|
+
void AcceptRdsUpdate(XdsApi::RdsUpdateMap rds_update_map);
|
239
256
|
void AcceptCdsUpdate(XdsApi::CdsUpdateMap cds_update_map);
|
240
257
|
void AcceptEdsUpdate(XdsApi::EdsUpdateMap eds_update_map);
|
241
258
|
|
242
259
|
static void OnRequestSent(void* arg, grpc_error* error);
|
243
260
|
void OnRequestSentLocked(grpc_error* error);
|
244
261
|
static void OnResponseReceived(void* arg, grpc_error* error);
|
245
|
-
|
262
|
+
bool OnResponseReceivedLocked();
|
246
263
|
static void OnStatusReceived(void* arg, grpc_error* error);
|
247
264
|
void OnStatusReceivedLocked(grpc_error* error);
|
248
265
|
|
@@ -319,10 +336,10 @@ class XdsClient::ChannelState::LrsCallState
|
|
319
336
|
private:
|
320
337
|
void ScheduleNextReportLocked();
|
321
338
|
static void OnNextReportTimer(void* arg, grpc_error* error);
|
322
|
-
|
323
|
-
|
339
|
+
bool OnNextReportTimerLocked(grpc_error* error);
|
340
|
+
bool SendReportLocked();
|
324
341
|
static void OnReportDone(void* arg, grpc_error* error);
|
325
|
-
|
342
|
+
bool OnReportDoneLocked(grpc_error* error);
|
326
343
|
|
327
344
|
bool IsCurrentReporterOnCall() const {
|
328
345
|
return this == parent_->reporter_.get();
|
@@ -344,7 +361,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
344
361
|
static void OnInitialRequestSent(void* arg, grpc_error* error);
|
345
362
|
void OnInitialRequestSentLocked();
|
346
363
|
static void OnResponseReceived(void* arg, grpc_error* error);
|
347
|
-
|
364
|
+
bool OnResponseReceivedLocked();
|
348
365
|
static void OnStatusReceived(void* arg, grpc_error* error);
|
349
366
|
void OnStatusReceivedLocked(grpc_error* error);
|
350
367
|
|
@@ -389,13 +406,12 @@ class XdsClient::ChannelState::StateWatcher
|
|
389
406
|
: public AsyncConnectivityStateWatcherInterface {
|
390
407
|
public:
|
391
408
|
explicit StateWatcher(RefCountedPtr<ChannelState> parent)
|
392
|
-
:
|
393
|
-
parent->xds_client()->work_serializer_),
|
394
|
-
parent_(std::move(parent)) {}
|
409
|
+
: parent_(std::move(parent)) {}
|
395
410
|
|
396
411
|
private:
|
397
412
|
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
398
413
|
const absl::Status& status) override {
|
414
|
+
MutexLock lock(&parent_->xds_client_->mu_);
|
399
415
|
if (!parent_->shutting_down_ &&
|
400
416
|
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
401
417
|
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
@@ -403,8 +419,9 @@ class XdsClient::ChannelState::StateWatcher
|
|
403
419
|
"[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
|
404
420
|
"status_message:(%s)",
|
405
421
|
parent_->xds_client(), status.ToString().c_str());
|
406
|
-
parent_->xds_client()->
|
407
|
-
|
422
|
+
parent_->xds_client()->NotifyOnErrorLocked(
|
423
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
424
|
+
"xds channel in TRANSIENT_FAILURE"));
|
408
425
|
}
|
409
426
|
}
|
410
427
|
|
@@ -417,69 +434,43 @@ class XdsClient::ChannelState::StateWatcher
|
|
417
434
|
|
418
435
|
namespace {
|
419
436
|
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
GRPC_ARG_SERVICE_CONFIG,
|
429
|
-
// The channel arg for the server URI, since that will be different for
|
430
|
-
// the xds channel than for the parent channel. The client channel
|
431
|
-
// factory will re-add this arg with the right value.
|
432
|
-
GRPC_ARG_SERVER_URI,
|
433
|
-
// The xds channel should use the authority indicated by the target
|
434
|
-
// authority table (see \a ModifyXdsChannelArgs),
|
435
|
-
// as opposed to the authority from the parent channel.
|
436
|
-
GRPC_ARG_DEFAULT_AUTHORITY,
|
437
|
-
// Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the xds channel should be
|
438
|
-
// treated as a stand-alone channel and not inherit this argument from the
|
439
|
-
// args of the parent channel.
|
440
|
-
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
|
441
|
-
// Don't want to pass down channelz node from parent; the balancer
|
442
|
-
// channel will get its own.
|
443
|
-
GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
444
|
-
// Keepalive interval. We are explicitly setting our own value below.
|
445
|
-
GRPC_ARG_KEEPALIVE_TIME_MS,
|
437
|
+
grpc_channel* CreateXdsChannel(const XdsBootstrap::XdsServer& server) {
|
438
|
+
// Build channel args.
|
439
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
440
|
+
grpc_channel_arg_integer_create(
|
441
|
+
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
442
|
+
5 * 60 * GPR_MS_PER_SEC),
|
443
|
+
grpc_channel_arg_integer_create(
|
444
|
+
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
446
445
|
};
|
447
|
-
|
448
|
-
|
449
|
-
//
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
//
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
// The parent channel's channelz uuid.
|
459
|
-
channelz::ChannelNode* channelz_node = nullptr;
|
460
|
-
const grpc_arg* arg =
|
461
|
-
grpc_channel_args_find(&args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
462
|
-
if (arg != nullptr && arg->type == GRPC_ARG_POINTER &&
|
463
|
-
arg->value.pointer.p != nullptr) {
|
464
|
-
channelz_node = static_cast<channelz::ChannelNode*>(arg->value.pointer.p);
|
465
|
-
args_to_add.emplace_back(
|
466
|
-
channelz::MakeParentUuidArg(channelz_node->uuid()));
|
467
|
-
}
|
468
|
-
// Construct channel args.
|
469
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
470
|
-
&args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
|
471
|
-
args_to_add.size());
|
472
|
-
// Make any necessary modifications for security.
|
473
|
-
return ModifyXdsChannelArgs(new_args);
|
446
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
447
|
+
g_channel_args, args_to_add.data(), args_to_add.size());
|
448
|
+
// Create channel creds.
|
449
|
+
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
450
|
+
XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
|
451
|
+
server.channel_creds_config);
|
452
|
+
// Create channel.
|
453
|
+
grpc_channel* channel = grpc_secure_channel_create(
|
454
|
+
channel_creds.get(), server.server_uri.c_str(), new_args, nullptr);
|
455
|
+
grpc_channel_args_destroy(new_args);
|
456
|
+
return channel;
|
474
457
|
}
|
475
458
|
|
476
459
|
} // namespace
|
477
460
|
|
478
|
-
XdsClient::ChannelState::ChannelState(
|
479
|
-
|
480
|
-
: InternallyRefCounted<ChannelState>(
|
461
|
+
XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
462
|
+
const XdsBootstrap::XdsServer& server)
|
463
|
+
: InternallyRefCounted<ChannelState>(
|
464
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
|
465
|
+
? "ChannelState"
|
466
|
+
: nullptr),
|
481
467
|
xds_client_(std::move(xds_client)),
|
482
|
-
|
468
|
+
server_(server) {
|
469
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
470
|
+
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
|
471
|
+
xds_client_.get(), server.server_uri.c_str());
|
472
|
+
}
|
473
|
+
channel_ = CreateXdsChannel(server);
|
483
474
|
GPR_ASSERT(channel_ != nullptr);
|
484
475
|
StartConnectivityWatchLocked();
|
485
476
|
}
|
@@ -490,6 +481,7 @@ XdsClient::ChannelState::~ChannelState() {
|
|
490
481
|
this);
|
491
482
|
}
|
492
483
|
grpc_channel_destroy(channel_);
|
484
|
+
xds_client_.reset(DEBUG_LOCATION, "ChannelState");
|
493
485
|
}
|
494
486
|
|
495
487
|
void XdsClient::ChannelState::Orphan() {
|
@@ -526,7 +518,7 @@ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
|
526
518
|
grpc_channel_element* client_channel_elem =
|
527
519
|
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel_));
|
528
520
|
GPR_ASSERT(client_channel_elem->filter == &grpc_client_channel_filter);
|
529
|
-
watcher_ = new StateWatcher(Ref());
|
521
|
+
watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "ChannelState+watch"));
|
530
522
|
grpc_client_channel_start_connectivity_watch(
|
531
523
|
client_channel_elem, GRPC_CHANNEL_IDLE,
|
532
524
|
OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
|
@@ -561,8 +553,11 @@ void XdsClient::ChannelState::Unsubscribe(const std::string& type_url,
|
|
561
553
|
const std::string& name,
|
562
554
|
bool delay_unsubscription) {
|
563
555
|
if (ads_calld_ != nullptr) {
|
564
|
-
ads_calld_->calld()
|
565
|
-
if (
|
556
|
+
auto* calld = ads_calld_->calld();
|
557
|
+
if (calld != nullptr) {
|
558
|
+
calld->Unsubscribe(type_url, name, delay_unsubscription);
|
559
|
+
if (!calld->HasSubscribedResources()) ads_calld_.reset();
|
560
|
+
}
|
566
561
|
}
|
567
562
|
}
|
568
563
|
|
@@ -645,9 +640,11 @@ template <typename T>
|
|
645
640
|
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
646
641
|
void* arg, grpc_error* error) {
|
647
642
|
RetryableCall* calld = static_cast<RetryableCall*>(arg);
|
648
|
-
|
649
|
-
|
650
|
-
|
643
|
+
{
|
644
|
+
MutexLock lock(&calld->chand_->xds_client()->mu_);
|
645
|
+
calld->OnRetryTimerLocked(GRPC_ERROR_REF(error));
|
646
|
+
}
|
647
|
+
calld->Unref(DEBUG_LOCATION, "RetryableCall+retry_timer_done");
|
651
648
|
}
|
652
649
|
|
653
650
|
template <typename T>
|
@@ -663,7 +660,6 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
|
663
660
|
}
|
664
661
|
StartNewCallLocked();
|
665
662
|
}
|
666
|
-
this->Unref(DEBUG_LOCATION, "RetryableCall+retry_timer_done");
|
667
663
|
GRPC_ERROR_UNREF(error);
|
668
664
|
}
|
669
665
|
|
@@ -673,16 +669,18 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
|
673
669
|
|
674
670
|
XdsClient::ChannelState::AdsCallState::AdsCallState(
|
675
671
|
RefCountedPtr<RetryableCall<AdsCallState>> parent)
|
676
|
-
: InternallyRefCounted<AdsCallState>(
|
672
|
+
: InternallyRefCounted<AdsCallState>(
|
673
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
|
674
|
+
? "AdsCallState"
|
675
|
+
: nullptr),
|
677
676
|
parent_(std::move(parent)) {
|
678
677
|
// Init the ADS call. Note that the call will progress every time there's
|
679
678
|
// activity in xds_client()->interested_parties_, which is comprised of
|
680
679
|
// the polling entities from client_channel.
|
681
680
|
GPR_ASSERT(xds_client() != nullptr);
|
682
|
-
GPR_ASSERT(!xds_client()->server_name_.empty());
|
683
681
|
// Create a call with the specified method name.
|
684
682
|
const auto& method =
|
685
|
-
|
683
|
+
chand()->server_.ShouldUseV3()
|
686
684
|
? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V3_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES
|
687
685
|
: GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES;
|
688
686
|
call_ = grpc_channel_create_pollset_set_call(
|
@@ -712,19 +710,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
712
710
|
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
|
713
711
|
op->reserved = nullptr;
|
714
712
|
op++;
|
715
|
-
call_error = grpc_call_start_batch_and_execute(
|
716
|
-
|
713
|
+
call_error = grpc_call_start_batch_and_execute(
|
714
|
+
call_, ops, static_cast<size_t>(op - ops), nullptr);
|
717
715
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
718
716
|
// Op: send request message.
|
719
717
|
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
720
718
|
grpc_schedule_on_exec_ctx);
|
721
|
-
|
722
|
-
Subscribe(XdsApi::kLdsTypeUrl,
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
xds_client()->lds_result_->route_config_name);
|
727
|
-
}
|
719
|
+
for (const auto& p : xds_client()->listener_map_) {
|
720
|
+
Subscribe(XdsApi::kLdsTypeUrl, std::string(p.first));
|
721
|
+
}
|
722
|
+
for (const auto& p : xds_client()->route_config_map_) {
|
723
|
+
Subscribe(XdsApi::kRdsTypeUrl, std::string(p.first));
|
728
724
|
}
|
729
725
|
for (const auto& p : xds_client()->cluster_map_) {
|
730
726
|
Subscribe(XdsApi::kCdsTypeUrl, std::string(p.first));
|
@@ -749,8 +745,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
749
745
|
Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
|
750
746
|
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
|
751
747
|
grpc_schedule_on_exec_ctx);
|
752
|
-
call_error = grpc_call_start_batch_and_execute(
|
753
|
-
|
748
|
+
call_error = grpc_call_start_batch_and_execute(
|
749
|
+
call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
|
754
750
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
755
751
|
// Op: recv server status.
|
756
752
|
op = ops;
|
@@ -766,8 +762,8 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
766
762
|
// unreffed.
|
767
763
|
GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
|
768
764
|
grpc_schedule_on_exec_ctx);
|
769
|
-
call_error = grpc_call_start_batch_and_execute(
|
770
|
-
|
765
|
+
call_error = grpc_call_start_batch_and_execute(
|
766
|
+
call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
|
771
767
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
772
768
|
}
|
773
769
|
|
@@ -805,7 +801,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
805
801
|
std::set<absl::string_view> resource_names =
|
806
802
|
ResourceNamesForRequest(type_url);
|
807
803
|
request_payload_slice = xds_client()->api_.CreateAdsRequest(
|
808
|
-
type_url, resource_names,
|
804
|
+
chand()->server_, type_url, resource_names,
|
805
|
+
xds_client()->resource_version_map_[type_url], state.nonce,
|
809
806
|
GRPC_ERROR_REF(state.error), !sent_initial_message_);
|
810
807
|
if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
|
811
808
|
type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
|
@@ -816,7 +813,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
816
813
|
gpr_log(GPR_INFO,
|
817
814
|
"[xds_client %p] sending ADS request: type=%s version=%s nonce=%s "
|
818
815
|
"error=%s resources=%s",
|
819
|
-
xds_client(), type_url.c_str(),
|
816
|
+
xds_client(), type_url.c_str(),
|
817
|
+
xds_client()->resource_version_map_[type_url].c_str(),
|
820
818
|
state.nonce.c_str(), grpc_error_string(state.error),
|
821
819
|
absl::StrJoin(resource_names, " ").c_str());
|
822
820
|
}
|
@@ -848,7 +846,8 @@ void XdsClient::ChannelState::AdsCallState::Subscribe(
|
|
848
846
|
const std::string& type_url, const std::string& name) {
|
849
847
|
auto& state = state_map_[type_url].subscribed_resources[name];
|
850
848
|
if (state == nullptr) {
|
851
|
-
state = MakeOrphanable<ResourceState>(
|
849
|
+
state = MakeOrphanable<ResourceState>(
|
850
|
+
type_url, name, !xds_client()->resource_version_map_[type_url].empty());
|
852
851
|
SendMessageLocked(type_url);
|
853
852
|
}
|
854
853
|
}
|
@@ -868,118 +867,132 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
868
867
|
}
|
869
868
|
|
870
869
|
void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdate(
|
871
|
-
|
872
|
-
if (!lds_update.has_value()) {
|
873
|
-
gpr_log(GPR_INFO,
|
874
|
-
"[xds_client %p] LDS update does not include requested resource",
|
875
|
-
xds_client());
|
876
|
-
if (xds_client()->lds_result_.has_value() &&
|
877
|
-
!xds_client()->lds_result_->route_config_name.empty()) {
|
878
|
-
Unsubscribe(XdsApi::kRdsTypeUrl,
|
879
|
-
xds_client()->lds_result_->route_config_name,
|
880
|
-
/*delay_unsubscription=*/false);
|
881
|
-
xds_client()->rds_result_.reset();
|
882
|
-
}
|
883
|
-
xds_client()->lds_result_.reset();
|
884
|
-
xds_client()->listener_watcher_->OnResourceDoesNotExist();
|
885
|
-
return;
|
886
|
-
}
|
870
|
+
XdsApi::LdsUpdateMap lds_update_map) {
|
887
871
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
888
872
|
gpr_log(GPR_INFO,
|
889
|
-
"[xds_client %p] LDS update received
|
890
|
-
|
891
|
-
(
|
892
|
-
? lds_update->route_config_name.c_str()
|
893
|
-
: "<inlined>"));
|
894
|
-
if (lds_update->rds_update.has_value()) {
|
895
|
-
gpr_log(GPR_INFO, "RouteConfiguration: %s",
|
896
|
-
lds_update->rds_update->ToString().c_str());
|
897
|
-
}
|
873
|
+
"[xds_client %p] LDS update received containing %" PRIuPTR
|
874
|
+
" resources",
|
875
|
+
xds_client(), lds_update_map.size());
|
898
876
|
}
|
899
877
|
auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
878
|
+
std::set<std::string> rds_resource_names_seen;
|
879
|
+
for (auto& p : lds_update_map) {
|
880
|
+
const std::string& listener_name = p.first;
|
881
|
+
XdsApi::LdsUpdate& lds_update = p.second;
|
882
|
+
auto& state = lds_state.subscribed_resources[listener_name];
|
883
|
+
if (state != nullptr) state->Finish();
|
904
884
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
905
|
-
gpr_log(GPR_INFO,
|
906
|
-
|
907
|
-
|
885
|
+
gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
|
886
|
+
listener_name.c_str(), lds_update.ToString().c_str());
|
887
|
+
}
|
888
|
+
// Record the RDS resource names seen.
|
889
|
+
if (!lds_update.route_config_name.empty()) {
|
890
|
+
rds_resource_names_seen.insert(lds_update.route_config_name);
|
891
|
+
}
|
892
|
+
// Ignore identical update.
|
893
|
+
ListenerState& listener_state = xds_client()->listener_map_[listener_name];
|
894
|
+
if (listener_state.update.has_value() &&
|
895
|
+
*listener_state.update == lds_update) {
|
896
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
897
|
+
gpr_log(GPR_INFO,
|
898
|
+
"[xds_client %p] LDS update for %s identical to current, "
|
899
|
+
"ignoring.",
|
900
|
+
xds_client(), listener_name.c_str());
|
901
|
+
}
|
902
|
+
continue;
|
903
|
+
}
|
904
|
+
// Update the listener state.
|
905
|
+
listener_state.update = std::move(lds_update);
|
906
|
+
// Notify watchers.
|
907
|
+
for (const auto& p : listener_state.watchers) {
|
908
|
+
p.first->OnListenerChanged(*listener_state.update);
|
908
909
|
}
|
909
|
-
return;
|
910
910
|
}
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
}
|
930
|
-
|
911
|
+
// For any subscribed resource that is not present in the update,
|
912
|
+
// remove it from the cache and notify watchers that it does not exist.
|
913
|
+
for (const auto& p : lds_state.subscribed_resources) {
|
914
|
+
const std::string& listener_name = p.first;
|
915
|
+
if (lds_update_map.find(listener_name) == lds_update_map.end()) {
|
916
|
+
ListenerState& listener_state =
|
917
|
+
xds_client()->listener_map_[listener_name];
|
918
|
+
// If the resource was newly requested but has not yet been received,
|
919
|
+
// we don't want to generate an error for the watchers, because this LDS
|
920
|
+
// response may be in reaction to an earlier request that did not yet
|
921
|
+
// request the new resource, so its absence from the response does not
|
922
|
+
// necessarily indicate that the resource does not exist.
|
923
|
+
// For that case, we rely on the request timeout instead.
|
924
|
+
if (!listener_state.update.has_value()) continue;
|
925
|
+
listener_state.update.reset();
|
926
|
+
for (const auto& p : listener_state.watchers) {
|
927
|
+
p.first->OnResourceDoesNotExist();
|
928
|
+
}
|
929
|
+
}
|
930
|
+
}
|
931
|
+
// For any RDS resource that is no longer referred to by any LDS
|
932
|
+
// resources, remove it from the cache and notify watchers that it
|
933
|
+
// does not exist.
|
934
|
+
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
935
|
+
for (const auto& p : rds_state.subscribed_resources) {
|
936
|
+
const std::string& rds_resource_name = p.first;
|
937
|
+
if (rds_resource_names_seen.find(rds_resource_name) ==
|
938
|
+
rds_resource_names_seen.end()) {
|
939
|
+
RouteConfigState& route_config_state =
|
940
|
+
xds_client()->route_config_map_[rds_resource_name];
|
941
|
+
route_config_state.update.reset();
|
942
|
+
for (const auto& p : route_config_state.watchers) {
|
943
|
+
p.first->OnResourceDoesNotExist();
|
944
|
+
}
|
931
945
|
}
|
932
|
-
} else {
|
933
|
-
// Send RDS request for dynamic resolution.
|
934
|
-
Subscribe(XdsApi::kRdsTypeUrl,
|
935
|
-
xds_client()->lds_result_->route_config_name);
|
936
946
|
}
|
937
947
|
}
|
938
948
|
|
939
949
|
void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdate(
|
940
|
-
|
941
|
-
if (!rds_update.has_value()) {
|
942
|
-
gpr_log(GPR_INFO,
|
943
|
-
"[xds_client %p] RDS update does not include requested resource",
|
944
|
-
xds_client());
|
945
|
-
xds_client()->rds_result_.reset();
|
946
|
-
xds_client()->listener_watcher_->OnResourceDoesNotExist();
|
947
|
-
return;
|
948
|
-
}
|
950
|
+
XdsApi::RdsUpdateMap rds_update_map) {
|
949
951
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
950
|
-
gpr_log(GPR_INFO,
|
951
|
-
|
952
|
+
gpr_log(GPR_INFO,
|
953
|
+
"[xds_client %p] RDS update received containing %" PRIuPTR
|
954
|
+
" resources",
|
955
|
+
xds_client(), rds_update_map.size());
|
952
956
|
}
|
953
957
|
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
954
|
-
auto&
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
if (xds_client()->rds_result_ == rds_update) {
|
958
|
+
for (auto& p : rds_update_map) {
|
959
|
+
const std::string& route_config_name = p.first;
|
960
|
+
XdsApi::RdsUpdate& rds_update = p.second;
|
961
|
+
auto& state = rds_state.subscribed_resources[route_config_name];
|
962
|
+
if (state != nullptr) state->Finish();
|
960
963
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
961
|
-
gpr_log(GPR_INFO,
|
962
|
-
|
963
|
-
|
964
|
+
gpr_log(GPR_INFO, "[xds_client %p] RDS resource:\n%s", xds_client(),
|
965
|
+
rds_update.ToString().c_str());
|
966
|
+
}
|
967
|
+
RouteConfigState& route_config_state =
|
968
|
+
xds_client()->route_config_map_[route_config_name];
|
969
|
+
// Ignore identical update.
|
970
|
+
if (route_config_state.update.has_value() &&
|
971
|
+
*route_config_state.update == rds_update) {
|
972
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
973
|
+
gpr_log(GPR_INFO,
|
974
|
+
"[xds_client %p] RDS resource identical to current, ignoring",
|
975
|
+
xds_client());
|
976
|
+
}
|
977
|
+
continue;
|
978
|
+
}
|
979
|
+
// Update the cache.
|
980
|
+
route_config_state.update = std::move(rds_update);
|
981
|
+
// Notify all watchers.
|
982
|
+
for (const auto& p : route_config_state.watchers) {
|
983
|
+
p.first->OnRouteConfigChanged(*route_config_state.update);
|
964
984
|
}
|
965
|
-
return;
|
966
|
-
}
|
967
|
-
xds_client()->rds_result_ = std::move(rds_update);
|
968
|
-
// Notify the watcher.
|
969
|
-
const XdsApi::RdsUpdate::VirtualHost* vhost =
|
970
|
-
xds_client()->rds_result_->FindVirtualHostForDomain(
|
971
|
-
xds_client()->server_name_);
|
972
|
-
if (vhost == nullptr) {
|
973
|
-
xds_client()->listener_watcher_->OnError(
|
974
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
975
|
-
"no VirtualHost found for domain"));
|
976
|
-
} else {
|
977
|
-
xds_client()->listener_watcher_->OnListenerChanged(vhost->routes);
|
978
985
|
}
|
979
986
|
}
|
980
987
|
|
981
988
|
void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
982
989
|
XdsApi::CdsUpdateMap cds_update_map) {
|
990
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
991
|
+
gpr_log(GPR_INFO,
|
992
|
+
"[xds_client %p] CDS update received containing %" PRIuPTR
|
993
|
+
" resources",
|
994
|
+
xds_client(), cds_update_map.size());
|
995
|
+
}
|
983
996
|
auto& cds_state = state_map_[XdsApi::kCdsTypeUrl];
|
984
997
|
std::set<std::string> eds_resource_names_seen;
|
985
998
|
for (auto& p : cds_update_map) {
|
@@ -988,13 +1001,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
988
1001
|
auto& state = cds_state.subscribed_resources[cluster_name];
|
989
1002
|
if (state != nullptr) state->Finish();
|
990
1003
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
991
|
-
gpr_log(GPR_INFO,
|
992
|
-
|
993
|
-
"eds_service_name=%s, lrs_load_reporting_server_name=%s",
|
994
|
-
xds_client(), cluster_name, cds_update.eds_service_name.c_str(),
|
995
|
-
cds_update.lrs_load_reporting_server_name.has_value()
|
996
|
-
? cds_update.lrs_load_reporting_server_name.value().c_str()
|
997
|
-
: "(N/A)");
|
1004
|
+
gpr_log(GPR_INFO, "[xds_client %p] cluster=%s: %s", xds_client(),
|
1005
|
+
cluster_name, cds_update.ToString().c_str());
|
998
1006
|
}
|
999
1007
|
// Record the EDS resource names seen.
|
1000
1008
|
eds_resource_names_seen.insert(cds_update.eds_service_name.empty()
|
@@ -1003,9 +1011,7 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
1003
1011
|
// Ignore identical update.
|
1004
1012
|
ClusterState& cluster_state = xds_client()->cluster_map_[cluster_name];
|
1005
1013
|
if (cluster_state.update.has_value() &&
|
1006
|
-
|
1007
|
-
cds_update.lrs_load_reporting_server_name ==
|
1008
|
-
cluster_state.update->lrs_load_reporting_server_name) {
|
1014
|
+
*cluster_state.update == cds_update) {
|
1009
1015
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1010
1016
|
gpr_log(GPR_INFO,
|
1011
1017
|
"[xds_client %p] CDS update identical to current, ignoring.",
|
@@ -1059,6 +1065,12 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdate(
|
|
1059
1065
|
|
1060
1066
|
void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
1061
1067
|
XdsApi::EdsUpdateMap eds_update_map) {
|
1068
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1069
|
+
gpr_log(GPR_INFO,
|
1070
|
+
"[xds_client %p] EDS update received containing %" PRIuPTR
|
1071
|
+
" resources",
|
1072
|
+
xds_client(), eds_update_map.size());
|
1073
|
+
}
|
1062
1074
|
auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
|
1063
1075
|
for (auto& p : eds_update_map) {
|
1064
1076
|
const char* eds_service_name = p.first.c_str();
|
@@ -1066,71 +1078,20 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
|
1066
1078
|
auto& state = eds_state.subscribed_resources[eds_service_name];
|
1067
1079
|
if (state != nullptr) state->Finish();
|
1068
1080
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1069
|
-
gpr_log(GPR_INFO,
|
1070
|
-
|
1071
|
-
" priorities and %" PRIuPTR
|
1072
|
-
" drop categories received (drop_all=%d)",
|
1073
|
-
xds_client(), eds_update.priority_list_update.size(),
|
1074
|
-
eds_update.drop_config->drop_category_list().size(),
|
1075
|
-
eds_update.drop_config->drop_all());
|
1076
|
-
for (size_t priority = 0;
|
1077
|
-
priority < eds_update.priority_list_update.size(); ++priority) {
|
1078
|
-
const auto* locality_map_update = eds_update.priority_list_update.Find(
|
1079
|
-
static_cast<uint32_t>(priority));
|
1080
|
-
gpr_log(GPR_INFO,
|
1081
|
-
"[xds_client %p] Priority %" PRIuPTR " contains %" PRIuPTR
|
1082
|
-
" localities",
|
1083
|
-
xds_client(), priority, locality_map_update->size());
|
1084
|
-
size_t locality_count = 0;
|
1085
|
-
for (const auto& p : locality_map_update->localities) {
|
1086
|
-
const auto& locality = p.second;
|
1087
|
-
gpr_log(GPR_INFO,
|
1088
|
-
"[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
|
1089
|
-
" %s has weight %d, contains %" PRIuPTR " server addresses",
|
1090
|
-
xds_client(), priority, locality_count,
|
1091
|
-
locality.name->AsHumanReadableString().c_str(),
|
1092
|
-
locality.lb_weight, locality.serverlist.size());
|
1093
|
-
for (size_t i = 0; i < locality.serverlist.size(); ++i) {
|
1094
|
-
std::string ipport = grpc_sockaddr_to_string(
|
1095
|
-
&locality.serverlist[i].address(), false);
|
1096
|
-
gpr_log(GPR_INFO,
|
1097
|
-
"[xds_client %p] Priority %" PRIuPTR ", locality %" PRIuPTR
|
1098
|
-
" %s, server address %" PRIuPTR ": %s",
|
1099
|
-
xds_client(), priority, locality_count,
|
1100
|
-
locality.name->AsHumanReadableString().c_str(), i,
|
1101
|
-
ipport.c_str());
|
1102
|
-
}
|
1103
|
-
++locality_count;
|
1104
|
-
}
|
1105
|
-
}
|
1106
|
-
for (size_t i = 0;
|
1107
|
-
i < eds_update.drop_config->drop_category_list().size(); ++i) {
|
1108
|
-
const XdsApi::DropConfig::DropCategory& drop_category =
|
1109
|
-
eds_update.drop_config->drop_category_list()[i];
|
1110
|
-
gpr_log(GPR_INFO,
|
1111
|
-
"[xds_client %p] Drop category %s has drop rate %d per million",
|
1112
|
-
xds_client(), drop_category.name.c_str(),
|
1113
|
-
drop_category.parts_per_million);
|
1114
|
-
}
|
1081
|
+
gpr_log(GPR_INFO, "[xds_client %p] EDS resource %s: %s", xds_client(),
|
1082
|
+
eds_service_name, eds_update.ToString().c_str());
|
1115
1083
|
}
|
1116
1084
|
EndpointState& endpoint_state =
|
1117
1085
|
xds_client()->endpoint_map_[eds_service_name];
|
1118
1086
|
// Ignore identical update.
|
1119
|
-
if (endpoint_state.update.has_value()
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
*prev_update.drop_config != *eds_update.drop_config;
|
1126
|
-
if (!priority_list_changed && !drop_config_changed) {
|
1127
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1128
|
-
gpr_log(GPR_INFO,
|
1129
|
-
"[xds_client %p] EDS update identical to current, ignoring.",
|
1130
|
-
xds_client());
|
1131
|
-
}
|
1132
|
-
continue;
|
1087
|
+
if (endpoint_state.update.has_value() &&
|
1088
|
+
*endpoint_state.update == eds_update) {
|
1089
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1090
|
+
gpr_log(GPR_INFO,
|
1091
|
+
"[xds_client %p] EDS update identical to current, ignoring.",
|
1092
|
+
xds_client());
|
1133
1093
|
}
|
1094
|
+
continue;
|
1134
1095
|
}
|
1135
1096
|
// Update the cluster state.
|
1136
1097
|
endpoint_state.update = std::move(eds_update);
|
@@ -1144,10 +1105,11 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdate(
|
|
1144
1105
|
void XdsClient::ChannelState::AdsCallState::OnRequestSent(void* arg,
|
1145
1106
|
grpc_error* error) {
|
1146
1107
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1108
|
+
{
|
1109
|
+
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1110
|
+
ads_calld->OnRequestSentLocked(GRPC_ERROR_REF(error));
|
1111
|
+
}
|
1112
|
+
ads_calld->Unref(DEBUG_LOCATION, "ADS+OnRequestSentLocked");
|
1151
1113
|
}
|
1152
1114
|
|
1153
1115
|
void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
@@ -1171,22 +1133,24 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
|
1171
1133
|
buffered_requests_.erase(it);
|
1172
1134
|
}
|
1173
1135
|
}
|
1174
|
-
Unref(DEBUG_LOCATION, "ADS+OnRequestSentLocked");
|
1175
1136
|
GRPC_ERROR_UNREF(error);
|
1176
1137
|
}
|
1177
1138
|
|
1178
1139
|
void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
1179
1140
|
void* arg, grpc_error* /* error */) {
|
1180
1141
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1181
|
-
|
1182
|
-
|
1142
|
+
bool done;
|
1143
|
+
{
|
1144
|
+
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1145
|
+
done = ads_calld->OnResponseReceivedLocked();
|
1146
|
+
}
|
1147
|
+
if (done) ads_calld->Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
|
1183
1148
|
}
|
1184
1149
|
|
1185
|
-
|
1150
|
+
bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
1186
1151
|
// Empty payload means the call was cancelled.
|
1187
1152
|
if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
|
1188
|
-
|
1189
|
-
return;
|
1153
|
+
return true;
|
1190
1154
|
}
|
1191
1155
|
// Read the response.
|
1192
1156
|
grpc_byte_buffer_reader bbr;
|
@@ -1197,7 +1161,7 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1197
1161
|
recv_message_payload_ = nullptr;
|
1198
1162
|
// Parse and validate the response.
|
1199
1163
|
XdsApi::AdsParseResult result = xds_client()->api_.ParseAdsResponse(
|
1200
|
-
response_slice,
|
1164
|
+
response_slice, ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
|
1201
1165
|
ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
|
1202
1166
|
ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
|
1203
1167
|
ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
|
@@ -1227,15 +1191,16 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1227
1191
|
seen_response_ = true;
|
1228
1192
|
// Accept the ADS response according to the type_url.
|
1229
1193
|
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1230
|
-
AcceptLdsUpdate(std::move(result.
|
1194
|
+
AcceptLdsUpdate(std::move(result.lds_update_map));
|
1231
1195
|
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1232
|
-
AcceptRdsUpdate(std::move(result.
|
1196
|
+
AcceptRdsUpdate(std::move(result.rds_update_map));
|
1233
1197
|
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1234
1198
|
AcceptCdsUpdate(std::move(result.cds_update_map));
|
1235
1199
|
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1236
1200
|
AcceptEdsUpdate(std::move(result.eds_update_map));
|
1237
1201
|
}
|
1238
|
-
|
1202
|
+
xds_client()->resource_version_map_[result.type_url] =
|
1203
|
+
std::move(result.version);
|
1239
1204
|
// ACK the update.
|
1240
1205
|
SendMessageLocked(result.type_url);
|
1241
1206
|
// Start load reporting if needed.
|
@@ -1246,10 +1211,7 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1246
1211
|
}
|
1247
1212
|
}
|
1248
1213
|
}
|
1249
|
-
if (xds_client()->shutting_down_)
|
1250
|
-
Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked+xds_shutdown");
|
1251
|
-
return;
|
1252
|
-
}
|
1214
|
+
if (xds_client()->shutting_down_) return true;
|
1253
1215
|
// Keep listening for updates.
|
1254
1216
|
grpc_op op;
|
1255
1217
|
memset(&op, 0, sizeof(op));
|
@@ -1262,15 +1224,17 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1262
1224
|
const grpc_call_error call_error =
|
1263
1225
|
grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
|
1264
1226
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1227
|
+
return false;
|
1265
1228
|
}
|
1266
1229
|
|
1267
1230
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
1268
1231
|
void* arg, grpc_error* error) {
|
1269
1232
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1233
|
+
{
|
1234
|
+
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1235
|
+
ads_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1236
|
+
}
|
1237
|
+
ads_calld->Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
|
1274
1238
|
}
|
1275
1239
|
|
1276
1240
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
@@ -1289,10 +1253,9 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1289
1253
|
// Try to restart the call.
|
1290
1254
|
parent_->OnCallFinishedLocked();
|
1291
1255
|
// Send error to all watchers.
|
1292
|
-
xds_client()->
|
1256
|
+
xds_client()->NotifyOnErrorLocked(
|
1293
1257
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds call failed"));
|
1294
1258
|
}
|
1295
|
-
Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
|
1296
1259
|
GRPC_ERROR_UNREF(error);
|
1297
1260
|
}
|
1298
1261
|
|
@@ -1312,7 +1275,7 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
|
1312
1275
|
for (auto& p : it->second.subscribed_resources) {
|
1313
1276
|
resource_names.insert(p.first);
|
1314
1277
|
OrphanablePtr<ResourceState>& state = p.second;
|
1315
|
-
state->Start(Ref());
|
1278
|
+
state->Start(Ref(DEBUG_LOCATION, "ResourceState"));
|
1316
1279
|
}
|
1317
1280
|
}
|
1318
1281
|
return resource_names;
|
@@ -1339,21 +1302,22 @@ void XdsClient::ChannelState::LrsCallState::Reporter::
|
|
1339
1302
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer(
|
1340
1303
|
void* arg, grpc_error* error) {
|
1341
1304
|
Reporter* self = static_cast<Reporter*>(arg);
|
1342
|
-
|
1343
|
-
|
1344
|
-
|
1345
|
-
|
1305
|
+
bool done;
|
1306
|
+
{
|
1307
|
+
MutexLock lock(&self->xds_client()->mu_);
|
1308
|
+
done = self->OnNextReportTimerLocked(GRPC_ERROR_REF(error));
|
1309
|
+
}
|
1310
|
+
if (done) self->Unref(DEBUG_LOCATION, "Reporter+timer");
|
1346
1311
|
}
|
1347
1312
|
|
1348
|
-
|
1313
|
+
bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
|
1349
1314
|
grpc_error* error) {
|
1350
1315
|
next_report_timer_callback_pending_ = false;
|
1351
1316
|
if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
|
1352
|
-
|
1353
|
-
|
1354
|
-
SendReportLocked();
|
1317
|
+
GRPC_ERROR_UNREF(error);
|
1318
|
+
return true;
|
1355
1319
|
}
|
1356
|
-
|
1320
|
+
return SendReportLocked();
|
1357
1321
|
}
|
1358
1322
|
|
1359
1323
|
namespace {
|
@@ -1361,9 +1325,7 @@ namespace {
|
|
1361
1325
|
bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
1362
1326
|
for (const auto& p : snapshot) {
|
1363
1327
|
const XdsApi::ClusterLoadReport& cluster_snapshot = p.second;
|
1364
|
-
|
1365
|
-
if (q.second > 0) return false;
|
1366
|
-
}
|
1328
|
+
if (!cluster_snapshot.dropped_requests.IsZero()) return false;
|
1367
1329
|
for (const auto& q : cluster_snapshot.locality_stats) {
|
1368
1330
|
const XdsClusterLocalityStats::Snapshot& locality_snapshot = q.second;
|
1369
1331
|
if (!locality_snapshot.IsZero()) return false;
|
@@ -1374,17 +1336,22 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
|
1374
1336
|
|
1375
1337
|
} // namespace
|
1376
1338
|
|
1377
|
-
|
1339
|
+
bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
1378
1340
|
// Construct snapshot from all reported stats.
|
1379
|
-
XdsApi::ClusterLoadReportMap snapshot =
|
1380
|
-
parent_->send_all_clusters_,
|
1341
|
+
XdsApi::ClusterLoadReportMap snapshot =
|
1342
|
+
xds_client()->BuildLoadReportSnapshotLocked(parent_->send_all_clusters_,
|
1343
|
+
parent_->cluster_names_);
|
1381
1344
|
// Skip client load report if the counters were all zero in the last
|
1382
1345
|
// report and they are still zero in this one.
|
1383
1346
|
const bool old_val = last_report_counters_were_zero_;
|
1384
1347
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1385
1348
|
if (old_val && last_report_counters_were_zero_) {
|
1349
|
+
if (xds_client()->load_report_map_.empty()) {
|
1350
|
+
parent_->chand()->StopLrsCall();
|
1351
|
+
return true;
|
1352
|
+
}
|
1386
1353
|
ScheduleNextReportLocked();
|
1387
|
-
return;
|
1354
|
+
return false;
|
1388
1355
|
}
|
1389
1356
|
// Create a request that contains the snapshot.
|
1390
1357
|
grpc_slice request_payload_slice =
|
@@ -1405,37 +1372,41 @@ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1405
1372
|
xds_client(), this, call_error);
|
1406
1373
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1407
1374
|
}
|
1375
|
+
return false;
|
1408
1376
|
}
|
1409
1377
|
|
1410
1378
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
1411
1379
|
void* arg, grpc_error* error) {
|
1412
1380
|
Reporter* self = static_cast<Reporter*>(arg);
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1381
|
+
bool done;
|
1382
|
+
{
|
1383
|
+
MutexLock lock(&self->xds_client()->mu_);
|
1384
|
+
done = self->OnReportDoneLocked(GRPC_ERROR_REF(error));
|
1385
|
+
}
|
1386
|
+
if (done) self->Unref(DEBUG_LOCATION, "Reporter+report_done");
|
1416
1387
|
}
|
1417
1388
|
|
1418
|
-
|
1389
|
+
bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
1419
1390
|
grpc_error* error) {
|
1420
1391
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1421
1392
|
parent_->send_message_payload_ = nullptr;
|
1422
1393
|
// If there are no more registered stats to report, cancel the call.
|
1423
1394
|
if (xds_client()->load_report_map_.empty()) {
|
1424
1395
|
parent_->chand()->StopLrsCall();
|
1425
|
-
|
1426
|
-
return;
|
1396
|
+
GRPC_ERROR_UNREF(error);
|
1397
|
+
return true;
|
1427
1398
|
}
|
1428
1399
|
if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
|
1400
|
+
GRPC_ERROR_UNREF(error);
|
1429
1401
|
// If this reporter is no longer the current one on the call, the reason
|
1430
1402
|
// might be that it was orphaned for a new one due to config update.
|
1431
1403
|
if (!IsCurrentReporterOnCall()) {
|
1432
1404
|
parent_->MaybeStartReportingLocked();
|
1433
1405
|
}
|
1434
|
-
|
1435
|
-
} else {
|
1436
|
-
ScheduleNextReportLocked();
|
1406
|
+
return true;
|
1437
1407
|
}
|
1438
|
-
|
1408
|
+
ScheduleNextReportLocked();
|
1409
|
+
return false;
|
1439
1410
|
}
|
1440
1411
|
|
1441
1412
|
//
|
@@ -1444,15 +1415,17 @@ void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
|
1444
1415
|
|
1445
1416
|
XdsClient::ChannelState::LrsCallState::LrsCallState(
|
1446
1417
|
RefCountedPtr<RetryableCall<LrsCallState>> parent)
|
1447
|
-
: InternallyRefCounted<LrsCallState>(
|
1418
|
+
: InternallyRefCounted<LrsCallState>(
|
1419
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace)
|
1420
|
+
? "LrsCallState"
|
1421
|
+
: nullptr),
|
1448
1422
|
parent_(std::move(parent)) {
|
1449
1423
|
// Init the LRS call. Note that the call will progress every time there's
|
1450
1424
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1451
1425
|
// the polling entities from client_channel.
|
1452
1426
|
GPR_ASSERT(xds_client() != nullptr);
|
1453
|
-
GPR_ASSERT(!xds_client()->server_name_.empty());
|
1454
1427
|
const auto& method =
|
1455
|
-
|
1428
|
+
chand()->server_.ShouldUseV3()
|
1456
1429
|
? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V3_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS
|
1457
1430
|
: GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS;
|
1458
1431
|
call_ = grpc_channel_create_pollset_set_call(
|
@@ -1462,7 +1435,7 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1462
1435
|
GPR_ASSERT(call_ != nullptr);
|
1463
1436
|
// Init the request payload.
|
1464
1437
|
grpc_slice request_payload_slice =
|
1465
|
-
xds_client()->api_.CreateLrsInitialRequest(
|
1438
|
+
xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
|
1466
1439
|
send_message_payload_ =
|
1467
1440
|
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
1468
1441
|
grpc_slice_unref_internal(request_payload_slice);
|
@@ -1498,8 +1471,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1498
1471
|
Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
|
1499
1472
|
GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
|
1500
1473
|
grpc_schedule_on_exec_ctx);
|
1501
|
-
call_error = grpc_call_start_batch_and_execute(
|
1502
|
-
|
1474
|
+
call_error = grpc_call_start_batch_and_execute(
|
1475
|
+
call_, ops, static_cast<size_t>(op - ops), &on_initial_request_sent_);
|
1503
1476
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1504
1477
|
// Op: recv initial metadata.
|
1505
1478
|
op = ops;
|
@@ -1518,8 +1491,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1518
1491
|
Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
|
1519
1492
|
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
|
1520
1493
|
grpc_schedule_on_exec_ctx);
|
1521
|
-
call_error = grpc_call_start_batch_and_execute(
|
1522
|
-
|
1494
|
+
call_error = grpc_call_start_batch_and_execute(
|
1495
|
+
call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
|
1523
1496
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1524
1497
|
// Op: recv server status.
|
1525
1498
|
op = ops;
|
@@ -1535,8 +1508,8 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1535
1508
|
// unreffed.
|
1536
1509
|
GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
|
1537
1510
|
grpc_schedule_on_exec_ctx);
|
1538
|
-
call_error = grpc_call_start_batch_and_execute(
|
1539
|
-
|
1511
|
+
call_error = grpc_call_start_batch_and_execute(
|
1512
|
+
call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
|
1540
1513
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1541
1514
|
}
|
1542
1515
|
|
@@ -1586,9 +1559,11 @@ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
|
1586
1559
|
void XdsClient::ChannelState::LrsCallState::OnInitialRequestSent(
|
1587
1560
|
void* arg, grpc_error* /*error*/) {
|
1588
1561
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1589
|
-
|
1590
|
-
|
1591
|
-
|
1562
|
+
{
|
1563
|
+
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
1564
|
+
lrs_calld->OnInitialRequestSentLocked();
|
1565
|
+
}
|
1566
|
+
lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked");
|
1592
1567
|
}
|
1593
1568
|
|
1594
1569
|
void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
|
@@ -1596,21 +1571,23 @@ void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
|
|
1596
1571
|
grpc_byte_buffer_destroy(send_message_payload_);
|
1597
1572
|
send_message_payload_ = nullptr;
|
1598
1573
|
MaybeStartReportingLocked();
|
1599
|
-
Unref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked");
|
1600
1574
|
}
|
1601
1575
|
|
1602
1576
|
void XdsClient::ChannelState::LrsCallState::OnResponseReceived(
|
1603
1577
|
void* arg, grpc_error* /*error*/) {
|
1604
1578
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1605
|
-
|
1606
|
-
|
1579
|
+
bool done;
|
1580
|
+
{
|
1581
|
+
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
1582
|
+
done = lrs_calld->OnResponseReceivedLocked();
|
1583
|
+
}
|
1584
|
+
if (done) lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked");
|
1607
1585
|
}
|
1608
1586
|
|
1609
|
-
|
1587
|
+
bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
1610
1588
|
// Empty payload means the call was cancelled.
|
1611
1589
|
if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
|
1612
|
-
|
1613
|
-
return;
|
1590
|
+
return true;
|
1614
1591
|
}
|
1615
1592
|
// Read the response.
|
1616
1593
|
grpc_byte_buffer_reader bbr;
|
@@ -1683,10 +1660,7 @@ void XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1683
1660
|
MaybeStartReportingLocked();
|
1684
1661
|
}();
|
1685
1662
|
grpc_slice_unref_internal(response_slice);
|
1686
|
-
if (xds_client()->shutting_down_)
|
1687
|
-
Unref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked+xds_shutdown");
|
1688
|
-
return;
|
1689
|
-
}
|
1663
|
+
if (xds_client()->shutting_down_) return true;
|
1690
1664
|
// Keep listening for LRS config updates.
|
1691
1665
|
grpc_op op;
|
1692
1666
|
memset(&op, 0, sizeof(op));
|
@@ -1699,15 +1673,17 @@ void XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1699
1673
|
const grpc_call_error call_error =
|
1700
1674
|
grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
|
1701
1675
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1676
|
+
return false;
|
1702
1677
|
}
|
1703
1678
|
|
1704
1679
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1705
1680
|
void* arg, grpc_error* error) {
|
1706
1681
|
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1707
|
-
|
1708
|
-
|
1709
|
-
|
1710
|
-
|
1682
|
+
{
|
1683
|
+
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
1684
|
+
lrs_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1685
|
+
}
|
1686
|
+
lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnStatusReceivedLocked");
|
1711
1687
|
}
|
1712
1688
|
|
1713
1689
|
void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
@@ -1728,7 +1704,6 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1728
1704
|
// Try to restart the call.
|
1729
1705
|
parent_->OnCallFinishedLocked();
|
1730
1706
|
}
|
1731
|
-
Unref(DEBUG_LOCATION, "LRS+OnStatusReceivedLocked");
|
1732
1707
|
GRPC_ERROR_UNREF(error);
|
1733
1708
|
}
|
1734
1709
|
|
@@ -1745,28 +1720,28 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1745
1720
|
|
1746
1721
|
namespace {
|
1747
1722
|
|
1748
|
-
grpc_millis GetRequestTimeout(
|
1723
|
+
grpc_millis GetRequestTimeout() {
|
1749
1724
|
return grpc_channel_args_find_integer(
|
1750
|
-
|
1725
|
+
g_channel_args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
1751
1726
|
{15000, 0, INT_MAX});
|
1752
1727
|
}
|
1753
1728
|
|
1754
1729
|
} // namespace
|
1755
1730
|
|
1756
|
-
XdsClient::XdsClient(
|
1757
|
-
|
1758
|
-
|
1759
|
-
|
1760
|
-
|
1761
|
-
|
1762
|
-
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
|
1731
|
+
XdsClient::XdsClient(grpc_error** error)
|
1732
|
+
: DualRefCounted<XdsClient>(
|
1733
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
|
1734
|
+
: nullptr),
|
1735
|
+
request_timeout_(GetRequestTimeout()),
|
1736
|
+
interested_parties_(grpc_pollset_set_create()),
|
1737
|
+
bootstrap_(XdsBootstrap::Create(this, &grpc_xds_client_trace,
|
1738
|
+
g_fallback_bootstrap_config, error)),
|
1739
|
+
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
1740
|
+
bootstrap_ == nullptr
|
1741
|
+
? CertificateProviderStore::PluginDefinitionMap()
|
1742
|
+
: bootstrap_->certificate_providers())),
|
1743
|
+
api_(this, &grpc_xds_client_trace,
|
1744
|
+
bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
|
1770
1745
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1771
1746
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
1772
1747
|
}
|
@@ -1775,58 +1750,150 @@ XdsClient::XdsClient(std::shared_ptr<WorkSerializer> work_serializer,
|
|
1775
1750
|
this, grpc_error_string(*error));
|
1776
1751
|
return;
|
1777
1752
|
}
|
1778
|
-
|
1779
|
-
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s", this,
|
1780
|
-
bootstrap_->server().server_uri.c_str());
|
1781
|
-
}
|
1782
|
-
grpc_channel_args* new_args = BuildXdsChannelArgs(channel_args);
|
1783
|
-
grpc_channel* channel = CreateXdsChannel(*bootstrap_, *new_args, error);
|
1784
|
-
grpc_channel_args_destroy(new_args);
|
1785
|
-
if (*error != GRPC_ERROR_NONE) {
|
1786
|
-
gpr_log(GPR_ERROR, "[xds_client %p] failed to create xds channel: %s", this,
|
1787
|
-
grpc_error_string(*error));
|
1788
|
-
return;
|
1789
|
-
}
|
1753
|
+
// Create ChannelState object.
|
1790
1754
|
chand_ = MakeOrphanable<ChannelState>(
|
1791
|
-
|
1792
|
-
if (listener_watcher_ != nullptr) {
|
1793
|
-
chand_->Subscribe(XdsApi::kLdsTypeUrl, std::string(server_name));
|
1794
|
-
}
|
1755
|
+
WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
|
1795
1756
|
}
|
1796
1757
|
|
1797
1758
|
XdsClient::~XdsClient() {
|
1798
1759
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1799
1760
|
gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
|
1800
1761
|
}
|
1762
|
+
grpc_pollset_set_destroy(interested_parties_);
|
1763
|
+
}
|
1764
|
+
|
1765
|
+
void XdsClient::AddChannelzLinkage(
|
1766
|
+
channelz::ChannelNode* parent_channelz_node) {
|
1767
|
+
channelz::ChannelNode* xds_channelz_node =
|
1768
|
+
grpc_channel_get_channelz_node(chand_->channel());
|
1769
|
+
if (xds_channelz_node != nullptr) {
|
1770
|
+
parent_channelz_node->AddChildChannel(xds_channelz_node->uuid());
|
1771
|
+
}
|
1772
|
+
}
|
1773
|
+
|
1774
|
+
void XdsClient::RemoveChannelzLinkage(
|
1775
|
+
channelz::ChannelNode* parent_channelz_node) {
|
1776
|
+
channelz::ChannelNode* xds_channelz_node =
|
1777
|
+
grpc_channel_get_channelz_node(chand_->channel());
|
1778
|
+
if (xds_channelz_node != nullptr) {
|
1779
|
+
parent_channelz_node->RemoveChildChannel(xds_channelz_node->uuid());
|
1780
|
+
}
|
1801
1781
|
}
|
1802
1782
|
|
1803
1783
|
void XdsClient::Orphan() {
|
1804
1784
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1805
1785
|
gpr_log(GPR_INFO, "[xds_client %p] shutting down xds client", this);
|
1806
1786
|
}
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
cluster_map_
|
1817
|
-
|
1787
|
+
{
|
1788
|
+
MutexLock lock(g_mu);
|
1789
|
+
if (g_xds_client == this) g_xds_client = nullptr;
|
1790
|
+
}
|
1791
|
+
{
|
1792
|
+
MutexLock lock(&mu_);
|
1793
|
+
shutting_down_ = true;
|
1794
|
+
// Orphan ChannelState object.
|
1795
|
+
chand_.reset();
|
1796
|
+
// We do not clear cluster_map_ and endpoint_map_ if the xds client was
|
1797
|
+
// created by the XdsResolver because the maps contain refs for watchers
|
1798
|
+
// which in turn hold refs to the loadbalancing policies. At this point, it
|
1799
|
+
// is possible for ADS calls to be in progress. Unreffing the loadbalancing
|
1800
|
+
// policies before those calls are done would lead to issues such as
|
1801
|
+
// https://github.com/grpc/grpc/issues/20928.
|
1802
|
+
if (!listener_map_.empty()) {
|
1803
|
+
cluster_map_.clear();
|
1804
|
+
endpoint_map_.clear();
|
1805
|
+
}
|
1806
|
+
}
|
1807
|
+
}
|
1808
|
+
|
1809
|
+
void XdsClient::WatchListenerData(
|
1810
|
+
absl::string_view listener_name,
|
1811
|
+
std::unique_ptr<ListenerWatcherInterface> watcher) {
|
1812
|
+
std::string listener_name_str = std::string(listener_name);
|
1813
|
+
MutexLock lock(&mu_);
|
1814
|
+
ListenerState& listener_state = listener_map_[listener_name_str];
|
1815
|
+
ListenerWatcherInterface* w = watcher.get();
|
1816
|
+
listener_state.watchers[w] = std::move(watcher);
|
1817
|
+
// If we've already received an LDS update, notify the new watcher
|
1818
|
+
// immediately.
|
1819
|
+
if (listener_state.update.has_value()) {
|
1820
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1821
|
+
gpr_log(GPR_INFO, "[xds_client %p] returning cached listener data for %s",
|
1822
|
+
this, listener_name_str.c_str());
|
1823
|
+
}
|
1824
|
+
w->OnListenerChanged(*listener_state.update);
|
1825
|
+
}
|
1826
|
+
chand_->Subscribe(XdsApi::kLdsTypeUrl, listener_name_str);
|
1827
|
+
}
|
1828
|
+
|
1829
|
+
void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
1830
|
+
ListenerWatcherInterface* watcher,
|
1831
|
+
bool delay_unsubscription) {
|
1832
|
+
MutexLock lock(&mu_);
|
1833
|
+
if (shutting_down_) return;
|
1834
|
+
std::string listener_name_str = std::string(listener_name);
|
1835
|
+
ListenerState& listener_state = listener_map_[listener_name_str];
|
1836
|
+
auto it = listener_state.watchers.find(watcher);
|
1837
|
+
if (it != listener_state.watchers.end()) {
|
1838
|
+
listener_state.watchers.erase(it);
|
1839
|
+
if (listener_state.watchers.empty()) {
|
1840
|
+
listener_map_.erase(listener_name_str);
|
1841
|
+
chand_->Unsubscribe(XdsApi::kLdsTypeUrl, listener_name_str,
|
1842
|
+
delay_unsubscription);
|
1843
|
+
}
|
1844
|
+
}
|
1845
|
+
}
|
1846
|
+
|
1847
|
+
void XdsClient::WatchRouteConfigData(
|
1848
|
+
absl::string_view route_config_name,
|
1849
|
+
std::unique_ptr<RouteConfigWatcherInterface> watcher) {
|
1850
|
+
std::string route_config_name_str = std::string(route_config_name);
|
1851
|
+
MutexLock lock(&mu_);
|
1852
|
+
RouteConfigState& route_config_state =
|
1853
|
+
route_config_map_[route_config_name_str];
|
1854
|
+
RouteConfigWatcherInterface* w = watcher.get();
|
1855
|
+
route_config_state.watchers[w] = std::move(watcher);
|
1856
|
+
// If we've already received an RDS update, notify the new watcher
|
1857
|
+
// immediately.
|
1858
|
+
if (route_config_state.update.has_value()) {
|
1859
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1860
|
+
gpr_log(GPR_INFO,
|
1861
|
+
"[xds_client %p] returning cached route config data for %s", this,
|
1862
|
+
route_config_name_str.c_str());
|
1863
|
+
}
|
1864
|
+
w->OnRouteConfigChanged(*route_config_state.update);
|
1865
|
+
}
|
1866
|
+
chand_->Subscribe(XdsApi::kRdsTypeUrl, route_config_name_str);
|
1867
|
+
}
|
1868
|
+
|
1869
|
+
void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
1870
|
+
RouteConfigWatcherInterface* watcher,
|
1871
|
+
bool delay_unsubscription) {
|
1872
|
+
MutexLock lock(&mu_);
|
1873
|
+
if (shutting_down_) return;
|
1874
|
+
std::string route_config_name_str = std::string(route_config_name);
|
1875
|
+
RouteConfigState& route_config_state =
|
1876
|
+
route_config_map_[route_config_name_str];
|
1877
|
+
auto it = route_config_state.watchers.find(watcher);
|
1878
|
+
if (it != route_config_state.watchers.end()) {
|
1879
|
+
route_config_state.watchers.erase(it);
|
1880
|
+
if (route_config_state.watchers.empty()) {
|
1881
|
+
route_config_map_.erase(route_config_name_str);
|
1882
|
+
chand_->Unsubscribe(XdsApi::kRdsTypeUrl, route_config_name_str,
|
1883
|
+
delay_unsubscription);
|
1884
|
+
}
|
1818
1885
|
}
|
1819
|
-
Unref(DEBUG_LOCATION, "XdsClient::Orphan()");
|
1820
1886
|
}
|
1821
1887
|
|
1822
1888
|
void XdsClient::WatchClusterData(
|
1823
1889
|
absl::string_view cluster_name,
|
1824
1890
|
std::unique_ptr<ClusterWatcherInterface> watcher) {
|
1825
1891
|
std::string cluster_name_str = std::string(cluster_name);
|
1892
|
+
MutexLock lock(&mu_);
|
1826
1893
|
ClusterState& cluster_state = cluster_map_[cluster_name_str];
|
1827
1894
|
ClusterWatcherInterface* w = watcher.get();
|
1828
1895
|
cluster_state.watchers[w] = std::move(watcher);
|
1829
|
-
// If we've already received
|
1896
|
+
// If we've already received a CDS update, notify the new watcher
|
1830
1897
|
// immediately.
|
1831
1898
|
if (cluster_state.update.has_value()) {
|
1832
1899
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -1841,6 +1908,7 @@ void XdsClient::WatchClusterData(
|
|
1841
1908
|
void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
1842
1909
|
ClusterWatcherInterface* watcher,
|
1843
1910
|
bool delay_unsubscription) {
|
1911
|
+
MutexLock lock(&mu_);
|
1844
1912
|
if (shutting_down_) return;
|
1845
1913
|
std::string cluster_name_str = std::string(cluster_name);
|
1846
1914
|
ClusterState& cluster_state = cluster_map_[cluster_name_str];
|
@@ -1859,6 +1927,7 @@ void XdsClient::WatchEndpointData(
|
|
1859
1927
|
absl::string_view eds_service_name,
|
1860
1928
|
std::unique_ptr<EndpointWatcherInterface> watcher) {
|
1861
1929
|
std::string eds_service_name_str = std::string(eds_service_name);
|
1930
|
+
MutexLock lock(&mu_);
|
1862
1931
|
EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
|
1863
1932
|
EndpointWatcherInterface* w = watcher.get();
|
1864
1933
|
endpoint_state.watchers[w] = std::move(watcher);
|
@@ -1877,6 +1946,7 @@ void XdsClient::WatchEndpointData(
|
|
1877
1946
|
void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
1878
1947
|
EndpointWatcherInterface* watcher,
|
1879
1948
|
bool delay_unsubscription) {
|
1949
|
+
MutexLock lock(&mu_);
|
1880
1950
|
if (shutting_down_) return;
|
1881
1951
|
std::string eds_service_name_str = std::string(eds_service_name);
|
1882
1952
|
EndpointState& endpoint_state = endpoint_map_[eds_service_name_str];
|
@@ -1898,16 +1968,29 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
|
1898
1968
|
// server name specified in lrs_server.
|
1899
1969
|
auto key =
|
1900
1970
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
1971
|
+
MutexLock lock(&mu_);
|
1901
1972
|
// We jump through some hoops here to make sure that the absl::string_views
|
1902
1973
|
// stored in the XdsClusterDropStats object point to the strings
|
1903
1974
|
// in the load_report_map_ key, so that they have the same lifetime.
|
1904
1975
|
auto it = load_report_map_
|
1905
1976
|
.emplace(std::make_pair(std::move(key), LoadReportState()))
|
1906
1977
|
.first;
|
1907
|
-
|
1908
|
-
|
1909
|
-
|
1910
|
-
|
1978
|
+
LoadReportState& load_report_state = it->second;
|
1979
|
+
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
1980
|
+
if (load_report_state.drop_stats != nullptr) {
|
1981
|
+
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
1982
|
+
}
|
1983
|
+
if (cluster_drop_stats == nullptr) {
|
1984
|
+
if (load_report_state.drop_stats != nullptr) {
|
1985
|
+
load_report_state.deleted_drop_stats +=
|
1986
|
+
load_report_state.drop_stats->GetSnapshotAndReset();
|
1987
|
+
}
|
1988
|
+
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
1989
|
+
Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
|
1990
|
+
it->first.first /*cluster_name*/,
|
1991
|
+
it->first.second /*eds_service_name*/);
|
1992
|
+
load_report_state.drop_stats = cluster_drop_stats.get();
|
1993
|
+
}
|
1911
1994
|
chand_->MaybeStartLrsCall();
|
1912
1995
|
return cluster_drop_stats;
|
1913
1996
|
}
|
@@ -1916,20 +1999,19 @@ void XdsClient::RemoveClusterDropStats(
|
|
1916
1999
|
absl::string_view /*lrs_server*/, absl::string_view cluster_name,
|
1917
2000
|
absl::string_view eds_service_name,
|
1918
2001
|
XdsClusterDropStats* cluster_drop_stats) {
|
1919
|
-
|
1920
|
-
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
1921
|
-
if (load_report_it == load_report_map_.end()) return;
|
1922
|
-
LoadReportState& load_report_state = load_report_it->second;
|
2002
|
+
MutexLock lock(&mu_);
|
1923
2003
|
// TODO(roth): When we add support for direct federation, use the
|
1924
2004
|
// server name specified in lrs_server.
|
1925
|
-
auto it =
|
1926
|
-
|
1927
|
-
|
2005
|
+
auto it = load_report_map_.find(
|
2006
|
+
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2007
|
+
if (it == load_report_map_.end()) return;
|
2008
|
+
LoadReportState& load_report_state = it->second;
|
2009
|
+
if (load_report_state.drop_stats == cluster_drop_stats) {
|
2010
|
+
// Record final snapshot in deleted_drop_stats, which will be
|
1928
2011
|
// added to the next load report.
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1932
|
-
load_report_state.drop_stats.erase(it);
|
2012
|
+
load_report_state.deleted_drop_stats +=
|
2013
|
+
load_report_state.drop_stats->GetSnapshotAndReset();
|
2014
|
+
load_report_state.drop_stats = nullptr;
|
1933
2015
|
}
|
1934
2016
|
}
|
1935
2017
|
|
@@ -1941,18 +2023,31 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
|
1941
2023
|
// server name specified in lrs_server.
|
1942
2024
|
auto key =
|
1943
2025
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2026
|
+
MutexLock lock(&mu_);
|
1944
2027
|
// We jump through some hoops here to make sure that the absl::string_views
|
1945
2028
|
// stored in the XdsClusterLocalityStats object point to the strings
|
1946
2029
|
// in the load_report_map_ key, so that they have the same lifetime.
|
1947
2030
|
auto it = load_report_map_
|
1948
2031
|
.emplace(std::make_pair(std::move(key), LoadReportState()))
|
1949
2032
|
.first;
|
1950
|
-
|
1951
|
-
|
1952
|
-
|
1953
|
-
|
1954
|
-
|
1955
|
-
|
2033
|
+
LoadReportState& load_report_state = it->second;
|
2034
|
+
LoadReportState::LocalityState& locality_state =
|
2035
|
+
load_report_state.locality_stats[locality];
|
2036
|
+
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
2037
|
+
if (locality_state.locality_stats != nullptr) {
|
2038
|
+
cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
|
2039
|
+
}
|
2040
|
+
if (cluster_locality_stats == nullptr) {
|
2041
|
+
if (locality_state.locality_stats != nullptr) {
|
2042
|
+
locality_state.deleted_locality_stats +=
|
2043
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
2044
|
+
}
|
2045
|
+
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
2046
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
|
2047
|
+
it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
|
2048
|
+
std::move(locality));
|
2049
|
+
locality_state.locality_stats = cluster_locality_stats.get();
|
2050
|
+
}
|
1956
2051
|
chand_->MaybeStartLrsCall();
|
1957
2052
|
return cluster_locality_stats;
|
1958
2053
|
}
|
@@ -1962,33 +2057,65 @@ void XdsClient::RemoveClusterLocalityStats(
|
|
1962
2057
|
absl::string_view eds_service_name,
|
1963
2058
|
const RefCountedPtr<XdsLocalityName>& locality,
|
1964
2059
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
1965
|
-
|
1966
|
-
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
1967
|
-
if (load_report_it == load_report_map_.end()) return;
|
1968
|
-
LoadReportState& load_report_state = load_report_it->second;
|
2060
|
+
MutexLock lock(&mu_);
|
1969
2061
|
// TODO(roth): When we add support for direct federation, use the
|
1970
2062
|
// server name specified in lrs_server.
|
2063
|
+
auto it = load_report_map_.find(
|
2064
|
+
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2065
|
+
if (it == load_report_map_.end()) return;
|
2066
|
+
LoadReportState& load_report_state = it->second;
|
1971
2067
|
auto locality_it = load_report_state.locality_stats.find(locality);
|
1972
2068
|
if (locality_it == load_report_state.locality_stats.end()) return;
|
1973
|
-
|
1974
|
-
|
1975
|
-
if (it != locality_set.end()) {
|
2069
|
+
LoadReportState::LocalityState& locality_state = locality_it->second;
|
2070
|
+
if (locality_state.locality_stats == cluster_locality_stats) {
|
1976
2071
|
// Record final snapshot in deleted_locality_stats, which will be
|
1977
2072
|
// added to the next load report.
|
1978
|
-
|
1979
|
-
|
1980
|
-
|
2073
|
+
locality_state.deleted_locality_stats +=
|
2074
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
2075
|
+
locality_state.locality_stats = nullptr;
|
1981
2076
|
}
|
1982
2077
|
}
|
1983
2078
|
|
1984
2079
|
void XdsClient::ResetBackoff() {
|
2080
|
+
MutexLock lock(&mu_);
|
1985
2081
|
if (chand_ != nullptr) {
|
1986
2082
|
grpc_channel_reset_connect_backoff(chand_->channel());
|
1987
2083
|
}
|
1988
2084
|
}
|
1989
2085
|
|
1990
|
-
|
2086
|
+
void XdsClient::NotifyOnErrorLocked(grpc_error* error) {
|
2087
|
+
for (const auto& p : listener_map_) {
|
2088
|
+
const ListenerState& listener_state = p.second;
|
2089
|
+
for (const auto& p : listener_state.watchers) {
|
2090
|
+
p.first->OnError(GRPC_ERROR_REF(error));
|
2091
|
+
}
|
2092
|
+
}
|
2093
|
+
for (const auto& p : route_config_map_) {
|
2094
|
+
const RouteConfigState& route_config_state = p.second;
|
2095
|
+
for (const auto& p : route_config_state.watchers) {
|
2096
|
+
p.first->OnError(GRPC_ERROR_REF(error));
|
2097
|
+
}
|
2098
|
+
}
|
2099
|
+
for (const auto& p : cluster_map_) {
|
2100
|
+
const ClusterState& cluster_state = p.second;
|
2101
|
+
for (const auto& p : cluster_state.watchers) {
|
2102
|
+
p.first->OnError(GRPC_ERROR_REF(error));
|
2103
|
+
}
|
2104
|
+
}
|
2105
|
+
for (const auto& p : endpoint_map_) {
|
2106
|
+
const EndpointState& endpoint_state = p.second;
|
2107
|
+
for (const auto& p : endpoint_state.watchers) {
|
2108
|
+
p.first->OnError(GRPC_ERROR_REF(error));
|
2109
|
+
}
|
2110
|
+
}
|
2111
|
+
GRPC_ERROR_UNREF(error);
|
2112
|
+
}
|
2113
|
+
|
2114
|
+
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
1991
2115
|
bool send_all_clusters, const std::set<std::string>& clusters) {
|
2116
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2117
|
+
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2118
|
+
}
|
1992
2119
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
1993
2120
|
for (auto load_report_it = load_report_map_.begin();
|
1994
2121
|
load_report_it != load_report_map_.end();) {
|
@@ -2007,9 +2134,14 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshot(
|
|
2007
2134
|
XdsApi::ClusterLoadReport snapshot;
|
2008
2135
|
// Aggregate drop stats.
|
2009
2136
|
snapshot.dropped_requests = std::move(load_report.deleted_drop_stats);
|
2010
|
-
|
2011
|
-
|
2012
|
-
|
2137
|
+
if (load_report.drop_stats != nullptr) {
|
2138
|
+
snapshot.dropped_requests +=
|
2139
|
+
load_report.drop_stats->GetSnapshotAndReset();
|
2140
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2141
|
+
gpr_log(GPR_INFO,
|
2142
|
+
"[xds_client %p] cluster=%s eds_service_name=%s drop_stats=%p",
|
2143
|
+
this, cluster_key.first.c_str(), cluster_key.second.c_str(),
|
2144
|
+
load_report.drop_stats);
|
2013
2145
|
}
|
2014
2146
|
}
|
2015
2147
|
// Aggregate locality stats.
|
@@ -2019,34 +2151,39 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshot(
|
|
2019
2151
|
auto& locality_state = it->second;
|
2020
2152
|
XdsClusterLocalityStats::Snapshot& locality_snapshot =
|
2021
2153
|
snapshot.locality_stats[locality_name];
|
2022
|
-
|
2023
|
-
|
2024
|
-
|
2025
|
-
|
2026
|
-
|
2027
|
-
|
2028
|
-
|
2154
|
+
locality_snapshot = std::move(locality_state.deleted_locality_stats);
|
2155
|
+
if (locality_state.locality_stats != nullptr) {
|
2156
|
+
locality_snapshot +=
|
2157
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
2158
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2159
|
+
gpr_log(GPR_INFO,
|
2160
|
+
"[xds_client %p] cluster=%s eds_service_name=%s "
|
2161
|
+
"locality=%s locality_stats=%p",
|
2162
|
+
this, cluster_key.first.c_str(), cluster_key.second.c_str(),
|
2163
|
+
locality_name->AsHumanReadableString().c_str(),
|
2164
|
+
locality_state.locality_stats);
|
2165
|
+
}
|
2029
2166
|
}
|
2030
|
-
locality_state.deleted_locality_stats.clear();
|
2031
2167
|
// If the only thing left in this entry was final snapshots from
|
2032
2168
|
// deleted locality stats objects, remove the entry.
|
2033
|
-
if (locality_state.locality_stats
|
2169
|
+
if (locality_state.locality_stats == nullptr) {
|
2034
2170
|
it = load_report.locality_stats.erase(it);
|
2035
2171
|
} else {
|
2036
2172
|
++it;
|
2037
2173
|
}
|
2038
2174
|
}
|
2175
|
+
// Compute load report interval.
|
2176
|
+
const grpc_millis now = ExecCtx::Get()->Now();
|
2177
|
+
snapshot.load_report_interval = now - load_report.last_report_time;
|
2178
|
+
load_report.last_report_time = now;
|
2179
|
+
// Record snapshot.
|
2039
2180
|
if (record_stats) {
|
2040
|
-
// Compute load report interval.
|
2041
|
-
const grpc_millis now = ExecCtx::Get()->Now();
|
2042
|
-
snapshot.load_report_interval = now - load_report.last_report_time;
|
2043
|
-
load_report.last_report_time = now;
|
2044
|
-
// Record snapshot.
|
2045
2181
|
snapshot_map[cluster_key] = std::move(snapshot);
|
2046
2182
|
}
|
2047
2183
|
// If the only thing left in this entry was final snapshots from
|
2048
2184
|
// deleted stats objects, remove the entry.
|
2049
|
-
if (load_report.locality_stats.empty() &&
|
2185
|
+
if (load_report.locality_stats.empty() &&
|
2186
|
+
load_report.drop_stats == nullptr) {
|
2050
2187
|
load_report_it = load_report_map_.erase(load_report_it);
|
2051
2188
|
} else {
|
2052
2189
|
++load_report_it;
|
@@ -2055,60 +2192,48 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshot(
|
|
2055
2192
|
return snapshot_map;
|
2056
2193
|
}
|
2057
2194
|
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2061
|
-
}
|
2062
|
-
for (const auto& p : cluster_map_) {
|
2063
|
-
const ClusterState& cluster_state = p.second;
|
2064
|
-
for (const auto& p : cluster_state.watchers) {
|
2065
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
2066
|
-
}
|
2067
|
-
}
|
2068
|
-
for (const auto& p : endpoint_map_) {
|
2069
|
-
const EndpointState& endpoint_state = p.second;
|
2070
|
-
for (const auto& p : endpoint_state.watchers) {
|
2071
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
2072
|
-
}
|
2073
|
-
}
|
2074
|
-
GRPC_ERROR_UNREF(error);
|
2075
|
-
}
|
2195
|
+
//
|
2196
|
+
// accessors for global state
|
2197
|
+
//
|
2076
2198
|
|
2077
|
-
void
|
2078
|
-
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2079
|
-
xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
|
2080
|
-
return p;
|
2081
|
-
}
|
2199
|
+
void XdsClientGlobalInit() { g_mu = new Mutex; }
|
2082
2200
|
|
2083
|
-
void
|
2084
|
-
|
2085
|
-
|
2201
|
+
void XdsClientGlobalShutdown() {
|
2202
|
+
delete g_mu;
|
2203
|
+
g_mu = nullptr;
|
2204
|
+
gpr_free(g_fallback_bootstrap_config);
|
2205
|
+
g_fallback_bootstrap_config = nullptr;
|
2086
2206
|
}
|
2087
2207
|
|
2088
|
-
|
2208
|
+
RefCountedPtr<XdsClient> XdsClient::GetOrCreate(grpc_error** error) {
|
2209
|
+
MutexLock lock(g_mu);
|
2210
|
+
if (g_xds_client != nullptr) {
|
2211
|
+
auto xds_client = g_xds_client->RefIfNonZero();
|
2212
|
+
if (xds_client != nullptr) return xds_client;
|
2213
|
+
}
|
2214
|
+
auto xds_client = MakeRefCounted<XdsClient>(error);
|
2215
|
+
g_xds_client = xds_client.get();
|
2216
|
+
return xds_client;
|
2217
|
+
}
|
2089
2218
|
|
2090
|
-
|
2091
|
-
XdsClient::ChannelArgCopy, XdsClient::ChannelArgDestroy,
|
2092
|
-
XdsClient::ChannelArgCmp};
|
2219
|
+
namespace internal {
|
2093
2220
|
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
&XdsClient::kXdsClientVtable);
|
2221
|
+
void SetXdsChannelArgsForTest(grpc_channel_args* args) {
|
2222
|
+
MutexLock lock(g_mu);
|
2223
|
+
g_channel_args = args;
|
2098
2224
|
}
|
2099
2225
|
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
|
2104
|
-
if (xds_client != nullptr) return xds_client->Ref();
|
2105
|
-
return nullptr;
|
2226
|
+
void UnsetGlobalXdsClientForTest() {
|
2227
|
+
MutexLock lock(g_mu);
|
2228
|
+
g_xds_client = nullptr;
|
2106
2229
|
}
|
2107
2230
|
|
2108
|
-
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2231
|
+
void SetXdsFallbackBootstrapConfig(const char* config) {
|
2232
|
+
MutexLock lock(g_mu);
|
2233
|
+
gpr_free(g_fallback_bootstrap_config);
|
2234
|
+
g_fallback_bootstrap_config = gpr_strdup(config);
|
2112
2235
|
}
|
2113
2236
|
|
2237
|
+
} // namespace internal
|
2238
|
+
|
2114
2239
|
} // namespace grpc_core
|