grpc 1.33.0.pre1 → 1.34.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 +342 -134
- data/include/grpc/grpc.h +1 -2
- data/include/grpc/grpc_security.h +149 -172
- data/include/grpc/impl/codegen/grpc_types.h +9 -2
- data/include/grpc/impl/codegen/port_platform.h +22 -55
- data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
- data/src/core/ext/filters/client_channel/config_selector.h +2 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
- 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/pick_first/pick_first.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
- data/src/core/ext/filters/client_channel/resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
- data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
- data/src/core/ext/filters/client_channel/server_address.h +0 -4
- data/src/core/ext/filters/client_channel/service_config.cc +3 -1
- data/src/core/ext/filters/client_channel/service_config.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
- 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/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
- 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 +254 -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 +558 -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 +133 -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 +266 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -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 +46 -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 +55 -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 +110 -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 +190 -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 +185 -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 +62 -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 +97 -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 +915 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -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 +64 -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/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -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 +48 -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 +166 -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 +105 -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 +249 -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 +152 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -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 +82 -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 +83 -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 +86 -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 +72 -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/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -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 +39 -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 +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
- data/src/core/ext/xds/certificate_provider_factory.h +7 -5
- data/src/core/ext/xds/certificate_provider_store.cc +84 -0
- data/src/core/ext/xds/certificate_provider_store.h +65 -8
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
- data/src/core/ext/xds/xds_api.cc +241 -718
- data/src/core/ext/xds/xds_api.h +50 -9
- data/src/core/ext/xds/xds_bootstrap.cc +172 -25
- data/src/core/ext/xds/xds_bootstrap.h +23 -7
- data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
- data/src/core/ext/xds/xds_certificate_provider.h +74 -0
- data/src/core/ext/xds/xds_client.cc +161 -128
- data/src/core/ext/xds/xds_client.h +12 -11
- data/src/core/ext/xds/xds_client_stats.cc +41 -4
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/lib/channel/channel_args.cc +2 -1
- data/src/core/lib/channel/channel_trace.cc +4 -2
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/handshaker.h +2 -2
- data/src/core/lib/compression/compression.cc +8 -4
- 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_data.cc +1 -0
- data/src/core/lib/gpr/cpu_iphone.cc +10 -2
- data/src/core/lib/gpr/log_linux.cc +17 -3
- data/src/core/lib/gpr/log_posix.cc +13 -1
- data/src/core/lib/gpr/log_windows.cc +16 -4
- data/src/core/lib/gpr/murmur_hash.cc +1 -1
- data/src/core/lib/gpr/string.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +3 -2
- data/src/core/lib/gpr/tls.h +4 -0
- data/src/core/lib/gpr/tls_msvc.h +2 -0
- data/src/core/lib/gpr/tls_stdcpp.h +48 -0
- data/src/core/lib/gpr/useful.h +5 -4
- data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
- 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/orphanable.h +4 -8
- data/src/core/lib/gprpp/ref_counted.h +40 -46
- data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
- 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/thd.h +2 -2
- data/src/core/lib/gprpp/thd_posix.cc +36 -36
- data/src/core/lib/http/parser.cc +46 -25
- data/src/core/lib/iomgr/error.cc +2 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
- data/src/core/lib/iomgr/exec_ctx.cc +1 -1
- data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
- data/src/core/lib/iomgr/executor/threadpool.h +3 -3
- data/src/core/lib/iomgr/parse_address.cc +84 -6
- data/src/core/lib/iomgr/parse_address.h +20 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
- data/src/core/lib/iomgr/python_util.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
- data/src/core/lib/iomgr/tcp_posix.cc +3 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
- 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 +2 -2
- data/src/core/lib/json/json_reader.cc +8 -4
- data/src/core/lib/json/json_util.h +167 -0
- data/src/core/lib/json/json_writer.cc +2 -1
- data/src/core/lib/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 +4 -0
- 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.h +3 -1
- data/src/core/lib/security/credentials/credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +3 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
- data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -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 +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
- data/src/core/lib/security/transport/security_handshaker.cc +1 -1
- 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 +2 -2
- data/src/core/lib/surface/call.cc +9 -8
- data/src/core/lib/surface/completion_queue.cc +7 -6
- data/src/core/lib/surface/server.cc +4 -2
- data/src/core/lib/surface/server.h +2 -2
- 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.h +2 -0
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +3 -3
- data/src/core/lib/transport/metadata.h +2 -2
- 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 +1 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +1 -0
- 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.h +3 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
- data/src/core/tsi/ssl_transport_security.cc +14 -7
- data/src/core/tsi/ssl_transport_security.h +3 -0
- data/src/core/tsi/transport_security.cc +4 -2
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
- data/src/ruby/lib/grpc/version.rb +1 -1
- 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_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_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/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/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 +3 -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 +340 -336
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- 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 +7 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
- 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/ssl.h +55 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
- 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/internal.h +36 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
- data/third_party/upb/upb/def.c +2169 -0
- data/third_party/upb/upb/def.h +330 -0
- data/third_party/upb/upb/def.hpp +525 -0
- data/third_party/upb/upb/reflection.c +391 -0
- data/third_party/upb/upb/reflection.h +168 -0
- data/third_party/upb/upb/text_encode.c +398 -0
- data/third_party/upb/upb/text_encode.h +35 -0
- metadata +227 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -0,0 +1,240 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2020 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "absl/functional/bind_front.h"
|
22
|
+
#include "absl/strings/str_cat.h"
|
23
|
+
|
24
|
+
#include "src/core/ext/xds/xds_certificate_provider.h"
|
25
|
+
|
26
|
+
namespace grpc_core {
|
27
|
+
|
28
|
+
namespace {
|
29
|
+
|
30
|
+
class RootCertificatesWatcher
|
31
|
+
: public grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface {
|
32
|
+
public:
|
33
|
+
// Takes a ref to \a parent instead of a raw pointer since the watcher is
|
34
|
+
// owned by the root certificate distributor and not by \a parent. Note that
|
35
|
+
// presently, the watcher is immediately deleted when
|
36
|
+
// CancelTlsCertificatesWatch() is called, but that can potentially change in
|
37
|
+
// the future.
|
38
|
+
explicit RootCertificatesWatcher(
|
39
|
+
RefCountedPtr<grpc_tls_certificate_distributor> parent)
|
40
|
+
: parent_(std::move(parent)) {}
|
41
|
+
|
42
|
+
void OnCertificatesChanged(absl::optional<absl::string_view> root_certs,
|
43
|
+
absl::optional<PemKeyCertPairList>
|
44
|
+
/* key_cert_pairs */) override {
|
45
|
+
if (root_certs.has_value()) {
|
46
|
+
parent_->SetKeyMaterials("", std::string(root_certs.value()),
|
47
|
+
absl::nullopt);
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
void OnError(grpc_error* root_cert_error,
|
52
|
+
grpc_error* identity_cert_error) override {
|
53
|
+
if (root_cert_error != GRPC_ERROR_NONE) {
|
54
|
+
parent_->SetErrorForCert("", root_cert_error /* pass the ref */,
|
55
|
+
absl::nullopt);
|
56
|
+
}
|
57
|
+
GRPC_ERROR_UNREF(identity_cert_error);
|
58
|
+
}
|
59
|
+
|
60
|
+
private:
|
61
|
+
RefCountedPtr<grpc_tls_certificate_distributor> parent_;
|
62
|
+
};
|
63
|
+
|
64
|
+
class IdentityCertificatesWatcher
|
65
|
+
: public grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface {
|
66
|
+
public:
|
67
|
+
// Takes a ref to \a parent instead of a raw pointer since the watcher is
|
68
|
+
// owned by the root certificate distributor and not by \a parent. Note that
|
69
|
+
// presently, the watcher is immediately deleted when
|
70
|
+
// CancelTlsCertificatesWatch() is called, but that can potentially change in
|
71
|
+
// the future.
|
72
|
+
explicit IdentityCertificatesWatcher(
|
73
|
+
RefCountedPtr<grpc_tls_certificate_distributor> parent)
|
74
|
+
: parent_(std::move(parent)) {}
|
75
|
+
|
76
|
+
void OnCertificatesChanged(
|
77
|
+
absl::optional<absl::string_view> /* root_certs */,
|
78
|
+
absl::optional<PemKeyCertPairList> key_cert_pairs) override {
|
79
|
+
if (key_cert_pairs.has_value()) {
|
80
|
+
parent_->SetKeyMaterials("", absl::nullopt, key_cert_pairs);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
void OnError(grpc_error* root_cert_error,
|
85
|
+
grpc_error* identity_cert_error) override {
|
86
|
+
if (identity_cert_error != GRPC_ERROR_NONE) {
|
87
|
+
parent_->SetErrorForCert("", absl::nullopt,
|
88
|
+
identity_cert_error /* pass the ref */);
|
89
|
+
}
|
90
|
+
GRPC_ERROR_UNREF(root_cert_error);
|
91
|
+
}
|
92
|
+
|
93
|
+
private:
|
94
|
+
RefCountedPtr<grpc_tls_certificate_distributor> parent_;
|
95
|
+
};
|
96
|
+
|
97
|
+
} // namespace
|
98
|
+
|
99
|
+
XdsCertificateProvider::XdsCertificateProvider(
|
100
|
+
absl::string_view root_cert_name,
|
101
|
+
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor,
|
102
|
+
absl::string_view identity_cert_name,
|
103
|
+
RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor)
|
104
|
+
: root_cert_name_(root_cert_name),
|
105
|
+
identity_cert_name_(identity_cert_name),
|
106
|
+
root_cert_distributor_(std::move(root_cert_distributor)),
|
107
|
+
identity_cert_distributor_(std::move(identity_cert_distributor)),
|
108
|
+
distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()) {
|
109
|
+
distributor_->SetWatchStatusCallback(
|
110
|
+
absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
|
111
|
+
}
|
112
|
+
|
113
|
+
void XdsCertificateProvider::UpdateRootCertNameAndDistributor(
|
114
|
+
absl::string_view root_cert_name,
|
115
|
+
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor) {
|
116
|
+
MutexLock lock(&mu_);
|
117
|
+
root_cert_name_ = std::string(root_cert_name);
|
118
|
+
if (watching_root_certs_) {
|
119
|
+
// The root certificates are being watched. Swap out the watcher.
|
120
|
+
if (root_cert_distributor_ != nullptr) {
|
121
|
+
root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
|
122
|
+
}
|
123
|
+
if (root_cert_distributor != nullptr) {
|
124
|
+
UpdateRootCertWatcher(root_cert_distributor.get());
|
125
|
+
} else {
|
126
|
+
root_cert_watcher_ = nullptr;
|
127
|
+
distributor_->SetErrorForCert(
|
128
|
+
"",
|
129
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
130
|
+
"No certificate provider available for root certificates"),
|
131
|
+
absl::nullopt);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
// Swap out the root certificate distributor
|
135
|
+
root_cert_distributor_ = std::move(root_cert_distributor);
|
136
|
+
}
|
137
|
+
|
138
|
+
void XdsCertificateProvider::UpdateIdentityCertNameAndDistributor(
|
139
|
+
absl::string_view identity_cert_name,
|
140
|
+
RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor) {
|
141
|
+
MutexLock lock(&mu_);
|
142
|
+
identity_cert_name_ = std::string(identity_cert_name);
|
143
|
+
if (watching_identity_certs_) {
|
144
|
+
// The identity certificates are being watched. Swap out the watcher.
|
145
|
+
if (identity_cert_distributor_ != nullptr) {
|
146
|
+
identity_cert_distributor_->CancelTlsCertificatesWatch(
|
147
|
+
identity_cert_watcher_);
|
148
|
+
}
|
149
|
+
if (identity_cert_distributor != nullptr) {
|
150
|
+
UpdateIdentityCertWatcher(identity_cert_distributor.get());
|
151
|
+
} else {
|
152
|
+
identity_cert_watcher_ = nullptr;
|
153
|
+
distributor_->SetErrorForCert(
|
154
|
+
"", absl::nullopt,
|
155
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
156
|
+
"No certificate provider available for identity certificates"));
|
157
|
+
}
|
158
|
+
}
|
159
|
+
// Swap out the identity certificate distributor
|
160
|
+
identity_cert_distributor_ = std::move(identity_cert_distributor);
|
161
|
+
}
|
162
|
+
|
163
|
+
void XdsCertificateProvider::WatchStatusCallback(std::string cert_name,
|
164
|
+
bool root_being_watched,
|
165
|
+
bool identity_being_watched) {
|
166
|
+
// We aren't specially handling the case where root_cert_distributor is same
|
167
|
+
// as identity_cert_distributor. Always using two separate watchers
|
168
|
+
// irrespective of the fact results in a straightforward design, and using a
|
169
|
+
// single watcher does not seem to provide any benefit other than cutting down
|
170
|
+
// on the number of callbacks.
|
171
|
+
MutexLock lock(&mu_);
|
172
|
+
if (!cert_name.empty()) {
|
173
|
+
grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
174
|
+
absl::StrCat("Illegal certificate name: \'", cert_name,
|
175
|
+
"\'. Should be empty.")
|
176
|
+
.c_str());
|
177
|
+
distributor_->SetErrorForCert(cert_name, GRPC_ERROR_REF(error),
|
178
|
+
GRPC_ERROR_REF(error));
|
179
|
+
GRPC_ERROR_UNREF(error);
|
180
|
+
return;
|
181
|
+
}
|
182
|
+
if (root_being_watched && !watching_root_certs_) {
|
183
|
+
// We need to start watching root certs.
|
184
|
+
watching_root_certs_ = true;
|
185
|
+
if (root_cert_distributor_ == nullptr) {
|
186
|
+
distributor_->SetErrorForCert(
|
187
|
+
"",
|
188
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
189
|
+
"No certificate provider available for root certificates"),
|
190
|
+
absl::nullopt);
|
191
|
+
} else {
|
192
|
+
UpdateRootCertWatcher(root_cert_distributor_.get());
|
193
|
+
}
|
194
|
+
} else if (!root_being_watched && watching_root_certs_) {
|
195
|
+
// We need to cancel root certs watch.
|
196
|
+
watching_root_certs_ = false;
|
197
|
+
if (root_cert_distributor_ != nullptr) {
|
198
|
+
root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
|
199
|
+
root_cert_watcher_ = nullptr;
|
200
|
+
}
|
201
|
+
GPR_ASSERT(root_cert_watcher_ == nullptr);
|
202
|
+
}
|
203
|
+
if (identity_being_watched && !watching_identity_certs_) {
|
204
|
+
watching_identity_certs_ = true;
|
205
|
+
if (identity_cert_distributor_ == nullptr) {
|
206
|
+
distributor_->SetErrorForCert(
|
207
|
+
"", absl::nullopt,
|
208
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
209
|
+
"No certificate provider available for identity certificates"));
|
210
|
+
} else {
|
211
|
+
UpdateIdentityCertWatcher(identity_cert_distributor_.get());
|
212
|
+
}
|
213
|
+
} else if (!identity_being_watched && watching_identity_certs_) {
|
214
|
+
watching_identity_certs_ = false;
|
215
|
+
if (identity_cert_distributor_ != nullptr) {
|
216
|
+
identity_cert_distributor_->CancelTlsCertificatesWatch(
|
217
|
+
identity_cert_watcher_);
|
218
|
+
identity_cert_watcher_ = nullptr;
|
219
|
+
}
|
220
|
+
GPR_ASSERT(identity_cert_watcher_ == nullptr);
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
void XdsCertificateProvider::UpdateRootCertWatcher(
|
225
|
+
grpc_tls_certificate_distributor* root_cert_distributor) {
|
226
|
+
auto watcher = absl::make_unique<RootCertificatesWatcher>(distributor());
|
227
|
+
root_cert_watcher_ = watcher.get();
|
228
|
+
root_cert_distributor->WatchTlsCertificates(std::move(watcher),
|
229
|
+
root_cert_name_, absl::nullopt);
|
230
|
+
}
|
231
|
+
|
232
|
+
void XdsCertificateProvider::UpdateIdentityCertWatcher(
|
233
|
+
grpc_tls_certificate_distributor* identity_cert_distributor) {
|
234
|
+
auto watcher = absl::make_unique<IdentityCertificatesWatcher>(distributor());
|
235
|
+
identity_cert_watcher_ = watcher.get();
|
236
|
+
identity_cert_distributor->WatchTlsCertificates(
|
237
|
+
std::move(watcher), absl::nullopt, identity_cert_name_);
|
238
|
+
}
|
239
|
+
|
240
|
+
} // namespace grpc_core
|
@@ -0,0 +1,74 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2020 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_EXT_XDS_XDS_CERTIFICATE_PROVIDER_H
|
20
|
+
#define GRPC_CORE_EXT_XDS_XDS_CERTIFICATE_PROVIDER_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
|
25
|
+
|
26
|
+
namespace grpc_core {
|
27
|
+
|
28
|
+
class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
29
|
+
public:
|
30
|
+
XdsCertificateProvider(
|
31
|
+
absl::string_view root_cert_name,
|
32
|
+
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor,
|
33
|
+
absl::string_view identity_cert_name,
|
34
|
+
RefCountedPtr<grpc_tls_certificate_distributor>
|
35
|
+
identity_cert_distributor);
|
36
|
+
|
37
|
+
void UpdateRootCertNameAndDistributor(
|
38
|
+
absl::string_view root_cert_name,
|
39
|
+
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor);
|
40
|
+
void UpdateIdentityCertNameAndDistributor(
|
41
|
+
absl::string_view identity_cert_name,
|
42
|
+
RefCountedPtr<grpc_tls_certificate_distributor>
|
43
|
+
identity_cert_distributor);
|
44
|
+
|
45
|
+
grpc_core::RefCountedPtr<grpc_tls_certificate_distributor> distributor()
|
46
|
+
const override {
|
47
|
+
return distributor_;
|
48
|
+
}
|
49
|
+
|
50
|
+
private:
|
51
|
+
void WatchStatusCallback(std::string cert_name, bool root_being_watched,
|
52
|
+
bool identity_being_watched);
|
53
|
+
void UpdateRootCertWatcher(
|
54
|
+
grpc_tls_certificate_distributor* root_cert_distributor);
|
55
|
+
void UpdateIdentityCertWatcher(
|
56
|
+
grpc_tls_certificate_distributor* identity_cert_distributor);
|
57
|
+
|
58
|
+
Mutex mu_;
|
59
|
+
bool watching_root_certs_ = false;
|
60
|
+
bool watching_identity_certs_ = false;
|
61
|
+
std::string root_cert_name_;
|
62
|
+
std::string identity_cert_name_;
|
63
|
+
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor_;
|
64
|
+
RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor_;
|
65
|
+
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
66
|
+
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
67
|
+
root_cert_watcher_ = nullptr;
|
68
|
+
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
69
|
+
identity_cert_watcher_ = nullptr;
|
70
|
+
};
|
71
|
+
|
72
|
+
} // namespace grpc_core
|
73
|
+
|
74
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_CERTIFICATE_PROVIDER_H
|
@@ -50,8 +50,6 @@
|
|
50
50
|
#include "src/core/lib/iomgr/sockaddr.h"
|
51
51
|
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
52
52
|
#include "src/core/lib/iomgr/timer.h"
|
53
|
-
#include "src/core/lib/security/credentials/credentials.h"
|
54
|
-
#include "src/core/lib/security/credentials/fake/fake_credentials.h"
|
55
53
|
#include "src/core/lib/slice/slice_internal.h"
|
56
54
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
57
55
|
#include "src/core/lib/surface/call.h"
|
@@ -143,8 +141,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
143
141
|
private:
|
144
142
|
class ResourceState : public InternallyRefCounted<ResourceState> {
|
145
143
|
public:
|
146
|
-
ResourceState(const std::string& type_url, const std::string& name
|
147
|
-
|
144
|
+
ResourceState(const std::string& type_url, const std::string& name,
|
145
|
+
bool sent_initial_request)
|
146
|
+
: type_url_(type_url),
|
147
|
+
name_(name),
|
148
|
+
sent_initial_request_(sent_initial_request) {
|
148
149
|
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
149
150
|
grpc_schedule_on_exec_ctx);
|
150
151
|
}
|
@@ -155,8 +156,8 @@ class XdsClient::ChannelState::AdsCallState
|
|
155
156
|
}
|
156
157
|
|
157
158
|
void Start(RefCountedPtr<AdsCallState> ads_calld) {
|
158
|
-
if (
|
159
|
-
|
159
|
+
if (sent_initial_request_) return;
|
160
|
+
sent_initial_request_ = true;
|
160
161
|
ads_calld_ = std::move(ads_calld);
|
161
162
|
Ref(DEBUG_LOCATION, "timer").release();
|
162
163
|
timer_pending_ = true;
|
@@ -229,7 +230,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
229
230
|
const std::string name_;
|
230
231
|
|
231
232
|
RefCountedPtr<AdsCallState> ads_calld_;
|
232
|
-
bool
|
233
|
+
bool sent_initial_request_;
|
233
234
|
bool timer_pending_ = false;
|
234
235
|
grpc_timer timer_;
|
235
236
|
grpc_closure timer_callback_;
|
@@ -238,8 +239,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
238
239
|
struct ResourceTypeState {
|
239
240
|
~ResourceTypeState() { GRPC_ERROR_UNREF(error); }
|
240
241
|
|
241
|
-
//
|
242
|
-
std::string version;
|
242
|
+
// Nonce and error for this resource type.
|
243
243
|
std::string nonce;
|
244
244
|
grpc_error* error = GRPC_ERROR_NONE;
|
245
245
|
|
@@ -336,7 +336,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
336
336
|
void ScheduleNextReportLocked();
|
337
337
|
static void OnNextReportTimer(void* arg, grpc_error* error);
|
338
338
|
bool OnNextReportTimerLocked(grpc_error* error);
|
339
|
-
|
339
|
+
bool SendReportLocked();
|
340
340
|
static void OnReportDone(void* arg, grpc_error* error);
|
341
341
|
bool OnReportDoneLocked(grpc_error* error);
|
342
342
|
|
@@ -431,11 +431,44 @@ class XdsClient::ChannelState::StateWatcher
|
|
431
431
|
// XdsClient::ChannelState
|
432
432
|
//
|
433
433
|
|
434
|
+
namespace {
|
435
|
+
|
436
|
+
grpc_channel* CreateXdsChannel(const XdsBootstrap::XdsServer& server) {
|
437
|
+
// Build channel args.
|
438
|
+
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
439
|
+
grpc_channel_arg_integer_create(
|
440
|
+
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
441
|
+
5 * 60 * GPR_MS_PER_SEC),
|
442
|
+
grpc_channel_arg_integer_create(
|
443
|
+
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
444
|
+
};
|
445
|
+
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
446
|
+
g_channel_args, args_to_add.data(), args_to_add.size());
|
447
|
+
// Create channel creds.
|
448
|
+
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
449
|
+
XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
|
450
|
+
server.channel_creds_config);
|
451
|
+
// Create channel.
|
452
|
+
grpc_channel* channel = grpc_secure_channel_create(
|
453
|
+
channel_creds.get(), server.server_uri.c_str(), new_args, nullptr);
|
454
|
+
grpc_channel_args_destroy(new_args);
|
455
|
+
return channel;
|
456
|
+
}
|
457
|
+
|
458
|
+
} // namespace
|
459
|
+
|
434
460
|
XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
435
|
-
|
436
|
-
: InternallyRefCounted<ChannelState>(
|
461
|
+
const XdsBootstrap::XdsServer& server)
|
462
|
+
: InternallyRefCounted<ChannelState>(
|
463
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "ChannelState"
|
464
|
+
: nullptr),
|
437
465
|
xds_client_(std::move(xds_client)),
|
438
|
-
|
466
|
+
server_(server) {
|
467
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
468
|
+
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
|
469
|
+
xds_client_.get(), server.server_uri.c_str());
|
470
|
+
}
|
471
|
+
channel_ = CreateXdsChannel(server);
|
439
472
|
GPR_ASSERT(channel_ != nullptr);
|
440
473
|
StartConnectivityWatchLocked();
|
441
474
|
}
|
@@ -634,7 +667,9 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
|
634
667
|
|
635
668
|
XdsClient::ChannelState::AdsCallState::AdsCallState(
|
636
669
|
RefCountedPtr<RetryableCall<AdsCallState>> parent)
|
637
|
-
: InternallyRefCounted<AdsCallState>(
|
670
|
+
: InternallyRefCounted<AdsCallState>(
|
671
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "AdsCallState"
|
672
|
+
: nullptr),
|
638
673
|
parent_(std::move(parent)) {
|
639
674
|
// Init the ADS call. Note that the call will progress every time there's
|
640
675
|
// activity in xds_client()->interested_parties_, which is comprised of
|
@@ -642,7 +677,7 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
642
677
|
GPR_ASSERT(xds_client() != nullptr);
|
643
678
|
// Create a call with the specified method name.
|
644
679
|
const auto& method =
|
645
|
-
|
680
|
+
chand()->server_.ShouldUseV3()
|
646
681
|
? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V3_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES
|
647
682
|
: GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_DISCOVERY_DOT_V2_DOT_AGGREGATEDDISCOVERYSERVICE_SLASH_STREAMAGGREGATEDRESOURCES;
|
648
683
|
call_ = grpc_channel_create_pollset_set_call(
|
@@ -763,7 +798,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
763
798
|
std::set<absl::string_view> resource_names =
|
764
799
|
ResourceNamesForRequest(type_url);
|
765
800
|
request_payload_slice = xds_client()->api_.CreateAdsRequest(
|
766
|
-
type_url, resource_names,
|
801
|
+
chand()->server_, type_url, resource_names,
|
802
|
+
xds_client()->resource_version_map_[type_url], state.nonce,
|
767
803
|
GRPC_ERROR_REF(state.error), !sent_initial_message_);
|
768
804
|
if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
|
769
805
|
type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
|
@@ -774,7 +810,8 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
774
810
|
gpr_log(GPR_INFO,
|
775
811
|
"[xds_client %p] sending ADS request: type=%s version=%s nonce=%s "
|
776
812
|
"error=%s resources=%s",
|
777
|
-
xds_client(), type_url.c_str(),
|
813
|
+
xds_client(), type_url.c_str(),
|
814
|
+
xds_client()->resource_version_map_[type_url].c_str(),
|
778
815
|
state.nonce.c_str(), grpc_error_string(state.error),
|
779
816
|
absl::StrJoin(resource_names, " ").c_str());
|
780
817
|
}
|
@@ -806,7 +843,8 @@ void XdsClient::ChannelState::AdsCallState::Subscribe(
|
|
806
843
|
const std::string& type_url, const std::string& name) {
|
807
844
|
auto& state = state_map_[type_url].subscribed_resources[name];
|
808
845
|
if (state == nullptr) {
|
809
|
-
state = MakeOrphanable<ResourceState>(
|
846
|
+
state = MakeOrphanable<ResourceState>(
|
847
|
+
type_url, name, !xds_client()->resource_version_map_[type_url].empty());
|
810
848
|
SendMessageLocked(type_url);
|
811
849
|
}
|
812
850
|
}
|
@@ -1170,7 +1208,8 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1170
1208
|
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1171
1209
|
AcceptEdsUpdate(std::move(result.eds_update_map));
|
1172
1210
|
}
|
1173
|
-
|
1211
|
+
xds_client()->resource_version_map_[result.type_url] =
|
1212
|
+
std::move(result.version);
|
1174
1213
|
// ACK the update.
|
1175
1214
|
SendMessageLocked(result.type_url);
|
1176
1215
|
// Start load reporting if needed.
|
@@ -1287,8 +1326,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimerLocked(
|
|
1287
1326
|
GRPC_ERROR_UNREF(error);
|
1288
1327
|
return true;
|
1289
1328
|
}
|
1290
|
-
SendReportLocked();
|
1291
|
-
return false;
|
1329
|
+
return SendReportLocked();
|
1292
1330
|
}
|
1293
1331
|
|
1294
1332
|
namespace {
|
@@ -1307,7 +1345,7 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
|
1307
1345
|
|
1308
1346
|
} // namespace
|
1309
1347
|
|
1310
|
-
|
1348
|
+
bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
1311
1349
|
// Construct snapshot from all reported stats.
|
1312
1350
|
XdsApi::ClusterLoadReportMap snapshot =
|
1313
1351
|
xds_client()->BuildLoadReportSnapshotLocked(parent_->send_all_clusters_,
|
@@ -1317,8 +1355,12 @@ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1317
1355
|
const bool old_val = last_report_counters_were_zero_;
|
1318
1356
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1319
1357
|
if (old_val && last_report_counters_were_zero_) {
|
1358
|
+
if (xds_client()->load_report_map_.empty()) {
|
1359
|
+
parent_->chand()->StopLrsCall();
|
1360
|
+
return true;
|
1361
|
+
}
|
1320
1362
|
ScheduleNextReportLocked();
|
1321
|
-
return;
|
1363
|
+
return false;
|
1322
1364
|
}
|
1323
1365
|
// Create a request that contains the snapshot.
|
1324
1366
|
grpc_slice request_payload_slice =
|
@@ -1339,6 +1381,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1339
1381
|
xds_client(), this, call_error);
|
1340
1382
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1341
1383
|
}
|
1384
|
+
return false;
|
1342
1385
|
}
|
1343
1386
|
|
1344
1387
|
void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDone(
|
@@ -1381,14 +1424,16 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
|
1381
1424
|
|
1382
1425
|
XdsClient::ChannelState::LrsCallState::LrsCallState(
|
1383
1426
|
RefCountedPtr<RetryableCall<LrsCallState>> parent)
|
1384
|
-
: InternallyRefCounted<LrsCallState>(
|
1427
|
+
: InternallyRefCounted<LrsCallState>(
|
1428
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace) ? "LrsCallState"
|
1429
|
+
: nullptr),
|
1385
1430
|
parent_(std::move(parent)) {
|
1386
1431
|
// Init the LRS call. Note that the call will progress every time there's
|
1387
1432
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1388
1433
|
// the polling entities from client_channel.
|
1389
1434
|
GPR_ASSERT(xds_client() != nullptr);
|
1390
1435
|
const auto& method =
|
1391
|
-
|
1436
|
+
chand()->server_.ShouldUseV3()
|
1392
1437
|
? GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V3_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS
|
1393
1438
|
: GRPC_MDSTR_SLASH_ENVOY_DOT_SERVICE_DOT_LOAD_STATS_DOT_V2_DOT_LOADREPORTINGSERVICE_SLASH_STREAMLOADSTATS;
|
1394
1439
|
call_ = grpc_channel_create_pollset_set_call(
|
@@ -1398,7 +1443,7 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1398
1443
|
GPR_ASSERT(call_ != nullptr);
|
1399
1444
|
// Init the request payload.
|
1400
1445
|
grpc_slice request_payload_slice =
|
1401
|
-
xds_client()->api_.CreateLrsInitialRequest();
|
1446
|
+
xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
|
1402
1447
|
send_message_payload_ =
|
1403
1448
|
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
1404
1449
|
grpc_slice_unref_internal(request_payload_slice);
|
@@ -1689,56 +1734,18 @@ grpc_millis GetRequestTimeout() {
|
|
1689
1734
|
{15000, 0, INT_MAX});
|
1690
1735
|
}
|
1691
1736
|
|
1692
|
-
grpc_channel* CreateXdsChannel(const XdsBootstrap& bootstrap,
|
1693
|
-
grpc_error** error) {
|
1694
|
-
// Build channel args.
|
1695
|
-
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
1696
|
-
grpc_channel_arg_integer_create(
|
1697
|
-
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
1698
|
-
5 * 60 * GPR_MS_PER_SEC),
|
1699
|
-
grpc_channel_arg_integer_create(
|
1700
|
-
const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
|
1701
|
-
};
|
1702
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
1703
|
-
g_channel_args, args_to_add.data(), args_to_add.size());
|
1704
|
-
// Find credentials and create channel.
|
1705
|
-
RefCountedPtr<grpc_channel_credentials> creds;
|
1706
|
-
for (const auto& channel_creds : bootstrap.server().channel_creds) {
|
1707
|
-
if (channel_creds.type == "google_default") {
|
1708
|
-
creds.reset(grpc_google_default_credentials_create(nullptr));
|
1709
|
-
break;
|
1710
|
-
}
|
1711
|
-
if (channel_creds.type == "insecure") {
|
1712
|
-
grpc_channel* channel = grpc_insecure_channel_create(
|
1713
|
-
bootstrap.server().server_uri.c_str(), new_args, nullptr);
|
1714
|
-
grpc_channel_args_destroy(new_args);
|
1715
|
-
return channel;
|
1716
|
-
}
|
1717
|
-
if (channel_creds.type == "fake") {
|
1718
|
-
creds.reset(grpc_fake_transport_security_credentials_create());
|
1719
|
-
break;
|
1720
|
-
}
|
1721
|
-
}
|
1722
|
-
if (creds == nullptr) {
|
1723
|
-
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1724
|
-
"no supported credential types found");
|
1725
|
-
return nullptr;
|
1726
|
-
}
|
1727
|
-
grpc_channel* channel = grpc_secure_channel_create(
|
1728
|
-
creds.get(), bootstrap.server().server_uri.c_str(), new_args, nullptr);
|
1729
|
-
grpc_channel_args_destroy(new_args);
|
1730
|
-
return channel;
|
1731
|
-
}
|
1732
|
-
|
1733
1737
|
} // namespace
|
1734
1738
|
|
1735
1739
|
XdsClient::XdsClient(grpc_error** error)
|
1736
|
-
: DualRefCounted<XdsClient>(
|
1740
|
+
: DualRefCounted<XdsClient>(GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)
|
1741
|
+
? "XdsClient"
|
1742
|
+
: nullptr),
|
1737
1743
|
request_timeout_(GetRequestTimeout()),
|
1738
1744
|
interested_parties_(grpc_pollset_set_create()),
|
1739
1745
|
bootstrap_(
|
1740
1746
|
XdsBootstrap::ReadFromFile(this, &grpc_xds_client_trace, error)),
|
1741
|
-
api_(this, &grpc_xds_client_trace,
|
1747
|
+
api_(this, &grpc_xds_client_trace,
|
1748
|
+
bootstrap_ == nullptr ? nullptr : bootstrap_->node()) {
|
1742
1749
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1743
1750
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
1744
1751
|
}
|
@@ -1747,19 +1754,9 @@ XdsClient::XdsClient(grpc_error** error)
|
|
1747
1754
|
this, grpc_error_string(*error));
|
1748
1755
|
return;
|
1749
1756
|
}
|
1750
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1751
|
-
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s", this,
|
1752
|
-
bootstrap_->server().server_uri.c_str());
|
1753
|
-
}
|
1754
|
-
grpc_channel* channel = CreateXdsChannel(*bootstrap_, error);
|
1755
|
-
if (*error != GRPC_ERROR_NONE) {
|
1756
|
-
gpr_log(GPR_ERROR, "[xds_client %p] failed to create xds channel: %s", this,
|
1757
|
-
grpc_error_string(*error));
|
1758
|
-
return;
|
1759
|
-
}
|
1760
1757
|
// Create ChannelState object.
|
1761
1758
|
chand_ = MakeOrphanable<ChannelState>(
|
1762
|
-
WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"),
|
1759
|
+
WeakRef(DEBUG_LOCATION, "XdsClient+ChannelState"), bootstrap_->server());
|
1763
1760
|
}
|
1764
1761
|
|
1765
1762
|
XdsClient::~XdsClient() {
|
@@ -1982,10 +1979,22 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
|
1982
1979
|
auto it = load_report_map_
|
1983
1980
|
.emplace(std::make_pair(std::move(key), LoadReportState()))
|
1984
1981
|
.first;
|
1985
|
-
|
1986
|
-
|
1987
|
-
|
1988
|
-
|
1982
|
+
LoadReportState& load_report_state = it->second;
|
1983
|
+
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
1984
|
+
if (load_report_state.drop_stats != nullptr) {
|
1985
|
+
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
1986
|
+
}
|
1987
|
+
if (cluster_drop_stats == nullptr) {
|
1988
|
+
if (load_report_state.drop_stats != nullptr) {
|
1989
|
+
load_report_state.deleted_drop_stats +=
|
1990
|
+
load_report_state.drop_stats->GetSnapshotAndReset();
|
1991
|
+
}
|
1992
|
+
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
1993
|
+
Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
|
1994
|
+
it->first.first /*cluster_name*/,
|
1995
|
+
it->first.second /*eds_service_name*/);
|
1996
|
+
load_report_state.drop_stats = cluster_drop_stats.get();
|
1997
|
+
}
|
1989
1998
|
chand_->MaybeStartLrsCall();
|
1990
1999
|
return cluster_drop_stats;
|
1991
2000
|
}
|
@@ -1995,19 +2004,18 @@ void XdsClient::RemoveClusterDropStats(
|
|
1995
2004
|
absl::string_view eds_service_name,
|
1996
2005
|
XdsClusterDropStats* cluster_drop_stats) {
|
1997
2006
|
MutexLock lock(&mu_);
|
1998
|
-
auto load_report_it = load_report_map_.find(
|
1999
|
-
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2000
|
-
if (load_report_it == load_report_map_.end()) return;
|
2001
|
-
LoadReportState& load_report_state = load_report_it->second;
|
2002
2007
|
// TODO(roth): When we add support for direct federation, use the
|
2003
2008
|
// server name specified in lrs_server.
|
2004
|
-
auto it =
|
2005
|
-
|
2006
|
-
|
2009
|
+
auto it = load_report_map_.find(
|
2010
|
+
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2011
|
+
if (it == load_report_map_.end()) return;
|
2012
|
+
LoadReportState& load_report_state = it->second;
|
2013
|
+
if (load_report_state.drop_stats == cluster_drop_stats) {
|
2014
|
+
// Record final snapshot in deleted_drop_stats, which will be
|
2007
2015
|
// added to the next load report.
|
2008
|
-
|
2009
|
-
|
2010
|
-
load_report_state.drop_stats
|
2016
|
+
load_report_state.deleted_drop_stats +=
|
2017
|
+
load_report_state.drop_stats->GetSnapshotAndReset();
|
2018
|
+
load_report_state.drop_stats = nullptr;
|
2011
2019
|
}
|
2012
2020
|
}
|
2013
2021
|
|
@@ -2026,12 +2034,24 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
|
2026
2034
|
auto it = load_report_map_
|
2027
2035
|
.emplace(std::make_pair(std::move(key), LoadReportState()))
|
2028
2036
|
.first;
|
2029
|
-
|
2030
|
-
|
2031
|
-
|
2032
|
-
|
2033
|
-
|
2034
|
-
|
2037
|
+
LoadReportState& load_report_state = it->second;
|
2038
|
+
LoadReportState::LocalityState& locality_state =
|
2039
|
+
load_report_state.locality_stats[locality];
|
2040
|
+
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
2041
|
+
if (locality_state.locality_stats != nullptr) {
|
2042
|
+
cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
|
2043
|
+
}
|
2044
|
+
if (cluster_locality_stats == nullptr) {
|
2045
|
+
if (locality_state.locality_stats != nullptr) {
|
2046
|
+
locality_state.deleted_locality_stats +=
|
2047
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
2048
|
+
}
|
2049
|
+
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
2050
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), lrs_server,
|
2051
|
+
it->first.first /*cluster_name*/, it->first.second /*eds_service_name*/,
|
2052
|
+
std::move(locality));
|
2053
|
+
locality_state.locality_stats = cluster_locality_stats.get();
|
2054
|
+
}
|
2035
2055
|
chand_->MaybeStartLrsCall();
|
2036
2056
|
return cluster_locality_stats;
|
2037
2057
|
}
|
@@ -2042,22 +2062,21 @@ void XdsClient::RemoveClusterLocalityStats(
|
|
2042
2062
|
const RefCountedPtr<XdsLocalityName>& locality,
|
2043
2063
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
2044
2064
|
MutexLock lock(&mu_);
|
2045
|
-
auto load_report_it = load_report_map_.find(
|
2046
|
-
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2047
|
-
if (load_report_it == load_report_map_.end()) return;
|
2048
|
-
LoadReportState& load_report_state = load_report_it->second;
|
2049
2065
|
// TODO(roth): When we add support for direct federation, use the
|
2050
2066
|
// server name specified in lrs_server.
|
2067
|
+
auto it = load_report_map_.find(
|
2068
|
+
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2069
|
+
if (it == load_report_map_.end()) return;
|
2070
|
+
LoadReportState& load_report_state = it->second;
|
2051
2071
|
auto locality_it = load_report_state.locality_stats.find(locality);
|
2052
2072
|
if (locality_it == load_report_state.locality_stats.end()) return;
|
2053
|
-
|
2054
|
-
|
2055
|
-
if (it != locality_set.end()) {
|
2073
|
+
LoadReportState::LocalityState& locality_state = locality_it->second;
|
2074
|
+
if (locality_state.locality_stats == cluster_locality_stats) {
|
2056
2075
|
// Record final snapshot in deleted_locality_stats, which will be
|
2057
2076
|
// added to the next load report.
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2077
|
+
locality_state.deleted_locality_stats +=
|
2078
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
2079
|
+
locality_state.locality_stats = nullptr;
|
2061
2080
|
}
|
2062
2081
|
}
|
2063
2082
|
|
@@ -2098,6 +2117,9 @@ void XdsClient::NotifyOnErrorLocked(grpc_error* error) {
|
|
2098
2117
|
|
2099
2118
|
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
2100
2119
|
bool send_all_clusters, const std::set<std::string>& clusters) {
|
2120
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2121
|
+
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2122
|
+
}
|
2101
2123
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
2102
2124
|
for (auto load_report_it = load_report_map_.begin();
|
2103
2125
|
load_report_it != load_report_map_.end();) {
|
@@ -2116,9 +2138,15 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2116
2138
|
XdsApi::ClusterLoadReport snapshot;
|
2117
2139
|
// Aggregate drop stats.
|
2118
2140
|
snapshot.dropped_requests = std::move(load_report.deleted_drop_stats);
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2141
|
+
if (load_report.drop_stats != nullptr) {
|
2142
|
+
snapshot.dropped_requests +=
|
2143
|
+
load_report.drop_stats->GetSnapshotAndReset();
|
2144
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2145
|
+
gpr_log(GPR_INFO,
|
2146
|
+
"[xds_client %p] cluster=%s eds_service_name=%s drop_stats=%p",
|
2147
|
+
this, cluster_key.first.c_str(), cluster_key.second.c_str(),
|
2148
|
+
load_report.drop_stats);
|
2149
|
+
}
|
2122
2150
|
}
|
2123
2151
|
// Aggregate locality stats.
|
2124
2152
|
for (auto it = load_report.locality_stats.begin();
|
@@ -2127,34 +2155,39 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2127
2155
|
auto& locality_state = it->second;
|
2128
2156
|
XdsClusterLocalityStats::Snapshot& locality_snapshot =
|
2129
2157
|
snapshot.locality_stats[locality_name];
|
2130
|
-
|
2131
|
-
|
2132
|
-
|
2133
|
-
|
2134
|
-
|
2135
|
-
|
2136
|
-
|
2158
|
+
locality_snapshot = std::move(locality_state.deleted_locality_stats);
|
2159
|
+
if (locality_state.locality_stats != nullptr) {
|
2160
|
+
locality_snapshot +=
|
2161
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
2162
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2163
|
+
gpr_log(GPR_INFO,
|
2164
|
+
"[xds_client %p] cluster=%s eds_service_name=%s "
|
2165
|
+
"locality=%s locality_stats=%p",
|
2166
|
+
this, cluster_key.first.c_str(), cluster_key.second.c_str(),
|
2167
|
+
locality_name->AsHumanReadableString().c_str(),
|
2168
|
+
locality_state.locality_stats);
|
2169
|
+
}
|
2137
2170
|
}
|
2138
|
-
locality_state.deleted_locality_stats.clear();
|
2139
2171
|
// If the only thing left in this entry was final snapshots from
|
2140
2172
|
// deleted locality stats objects, remove the entry.
|
2141
|
-
if (locality_state.locality_stats
|
2173
|
+
if (locality_state.locality_stats == nullptr) {
|
2142
2174
|
it = load_report.locality_stats.erase(it);
|
2143
2175
|
} else {
|
2144
2176
|
++it;
|
2145
2177
|
}
|
2146
2178
|
}
|
2179
|
+
// Compute load report interval.
|
2180
|
+
const grpc_millis now = ExecCtx::Get()->Now();
|
2181
|
+
snapshot.load_report_interval = now - load_report.last_report_time;
|
2182
|
+
load_report.last_report_time = now;
|
2183
|
+
// Record snapshot.
|
2147
2184
|
if (record_stats) {
|
2148
|
-
// Compute load report interval.
|
2149
|
-
const grpc_millis now = ExecCtx::Get()->Now();
|
2150
|
-
snapshot.load_report_interval = now - load_report.last_report_time;
|
2151
|
-
load_report.last_report_time = now;
|
2152
|
-
// Record snapshot.
|
2153
2185
|
snapshot_map[cluster_key] = std::move(snapshot);
|
2154
2186
|
}
|
2155
2187
|
// If the only thing left in this entry was final snapshots from
|
2156
2188
|
// deleted stats objects, remove the entry.
|
2157
|
-
if (load_report.locality_stats.empty() &&
|
2189
|
+
if (load_report.locality_stats.empty() &&
|
2190
|
+
load_report.drop_stats == nullptr) {
|
2158
2191
|
load_report_it = load_report_map_.erase(load_report_it);
|
2159
2192
|
} else {
|
2160
2193
|
++load_report_it;
|