grpc 1.42.0 → 1.43.1
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 +85 -34
- data/include/grpc/event_engine/event_engine.h +37 -13
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -11
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc_security.h +276 -145
- data/include/grpc/grpc_security_constants.h +1 -14
- data/include/grpc/impl/codegen/port_platform.h +7 -3
- data/src/core/ext/filters/client_channel/backend_metric.cc +6 -7
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +81 -40
- data/src/core/ext/filters/client_channel/client_channel.h +5 -4
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +4 -4
- data/src/core/ext/filters/client_channel/health/health_check_client.h +1 -1
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +12 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +27 -80
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +82 -34
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +47 -91
- data/src/core/ext/filters/client_channel/lb_policy.h +75 -59
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +8 -12
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +6 -12
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +222 -294
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -7
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +4 -4
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -30
- data/src/core/ext/filters/http/http_filters_plugin.cc +3 -5
- data/src/core/ext/filters/http/server/http_server_filter.cc +11 -28
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +265 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -20
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +8 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +6 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +54 -79
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +53 -62
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
- data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +83 -19
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +33 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +66 -92
- data/src/core/ext/transport/chttp2/transport/internal.h +8 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +16 -7
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
- 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 +107 -82
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +253 -218
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +162 -128
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +89 -71
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +117 -93
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +93 -75
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +503 -440
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
- data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
- data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +26 -13
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +2 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
- data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +54 -9
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +17 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +13 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +24 -12
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +19 -7
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +27 -15
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +18 -7
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +28 -15
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +2 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +16 -5
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +2 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +2 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +2 -53
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +2 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +2 -111
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +2 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +2 -2
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +2 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +2 -9
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +2 -7
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +2 -7
- data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_api.cc +409 -304
- data/src/core/ext/xds/xds_api.h +3 -1
- data/src/core/ext/xds/xds_bootstrap.cc +6 -3
- data/src/core/ext/xds/xds_certificate_provider.h +1 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +3 -4
- data/src/core/ext/xds/xds_client.cc +395 -291
- data/src/core/ext/xds/xds_client.h +47 -38
- data/src/core/ext/xds/xds_routing.cc +247 -0
- data/src/core/ext/xds/xds_routing.h +98 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +975 -261
- data/src/core/lib/avl/avl.h +389 -88
- data/src/core/lib/backoff/backoff.cc +2 -2
- data/src/core/lib/channel/channel_args.cc +17 -17
- data/src/core/lib/channel/channel_args.h +11 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_stack_builder.cc +0 -2
- data/src/core/lib/channel/channel_trace.cc +6 -6
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/compression/compression_args.cc +7 -5
- data/src/core/lib/compression/compression_args.h +6 -4
- data/src/core/lib/config/core_configuration.cc +3 -1
- data/src/core/lib/config/core_configuration.h +11 -0
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/event_engine.cc +0 -13
- data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
- data/src/core/lib/event_engine/event_engine_factory.h +33 -0
- data/src/core/lib/event_engine/memory_allocator.cc +70 -0
- data/src/core/lib/gpr/tls.h +6 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -3
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/status_helper.h +1 -1
- data/src/core/lib/gprpp/table.h +13 -1
- data/src/core/lib/http/httpcli.cc +30 -26
- data/src/core/lib/http/httpcli.h +14 -12
- data/src/core/lib/iomgr/buffer_list.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +13 -13
- data/src/core/lib/iomgr/call_combiner.cc +2 -3
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/event_engine/endpoint.cc +2 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +5 -25
- data/src/core/lib/iomgr/event_engine/resolver.cc +3 -2
- data/src/core/lib/iomgr/event_engine/tcp.cc +7 -5
- data/src/core/lib/iomgr/event_engine/timer.cc +4 -3
- data/src/core/lib/iomgr/exec_ctx.h +11 -11
- data/src/core/lib/iomgr/executor.cc +12 -15
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +2 -4
- data/src/core/lib/iomgr/tcp_client.h +1 -3
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -9
- data/src/core/lib/iomgr/tcp_client_custom.cc +4 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -23
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +1 -10
- data/src/core/lib/iomgr/tcp_custom.cc +9 -36
- data/src/core/lib/iomgr/tcp_custom.h +0 -1
- data/src/core/lib/iomgr/tcp_posix.cc +28 -33
- data/src/core/lib/iomgr/tcp_posix.h +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +4 -6
- data/src/core/lib/iomgr/tcp_server.h +6 -8
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -15
- data/src/core/lib/iomgr/tcp_server_posix.cc +18 -22
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_windows.cc +5 -12
- data/src/core/lib/iomgr/tcp_windows.cc +2 -7
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +1 -1
- data/src/core/lib/iomgr/work_serializer.cc +115 -44
- data/src/core/lib/iomgr/work_serializer.h +16 -4
- data/src/core/lib/json/json_reader.cc +83 -35
- data/src/core/lib/json/json_util.cc +1 -1
- data/src/core/lib/promise/activity.cc +115 -0
- data/src/core/lib/promise/activity.h +499 -0
- data/src/core/lib/promise/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +407 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +44 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/loop.h +108 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +60 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +71 -0
- data/src/core/lib/resource_quota/api.cc +108 -0
- data/src/core/lib/resource_quota/api.h +41 -0
- data/src/core/lib/resource_quota/memory_quota.cc +454 -0
- data/src/core/lib/resource_quota/memory_quota.h +421 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +58 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +13 -19
- data/src/core/lib/security/authorization/evaluate_args.h +2 -1
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +3 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +11 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -10
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +3 -4
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +4 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -22
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +11 -90
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +19 -82
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +3 -4
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +10 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +344 -195
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -41
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/slice/percent_encoding.cc +30 -86
- data/src/core/lib/slice/percent_encoding.h +5 -11
- data/src/core/lib/slice/slice.cc +7 -7
- data/src/core/lib/slice/slice.h +341 -0
- data/src/core/lib/slice/slice_buffer.cc +4 -0
- data/src/core/lib/slice/slice_intern.cc +1 -1
- data/src/core/lib/slice/slice_refcount.h +5 -1
- data/src/core/lib/slice/slice_refcount_base.h +19 -11
- data/src/core/lib/slice/static_slice.cc +331 -483
- data/src/core/lib/slice/static_slice.h +101 -132
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +85 -59
- data/src/core/lib/surface/channel.cc +4 -29
- data/src/core/lib/surface/channel.h +2 -12
- data/src/core/lib/surface/completion_queue.cc +2 -2
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +24 -17
- data/src/core/lib/surface/server.cc +22 -22
- data/src/core/lib/surface/server.h +8 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.cc +4 -0
- data/src/core/lib/transport/metadata.h +4 -4
- data/src/core/lib/transport/metadata_batch.cc +5 -0
- data/src/core/lib/transport/metadata_batch.h +174 -99
- data/src/core/lib/transport/parsed_metadata.cc +35 -0
- data/src/core/lib/transport/parsed_metadata.h +180 -61
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +529 -614
- data/src/core/lib/transport/static_metadata.h +0 -18
- data/src/core/lib/transport/transport.cc +4 -26
- data/src/core/lib/transport/transport.h +0 -1
- data/src/core/lib/transport/transport_op_string.cc +1 -1
- data/src/core/lib/uri/uri_parser.cc +19 -19
- data/src/core/lib/uri/uri_parser.h +2 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/local_transport_security.cc +15 -15
- data/src/core/tsi/ssl_transport_security.cc +30 -1
- data/src/core/tsi/ssl_transport_security.h +1 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -10
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +9 -15
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
- data/third_party/abseil-cpp/absl/status/status.cc +9 -17
- data/third_party/abseil-cpp/absl/status/status.h +19 -15
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
- data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +67 -36
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +17 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +3 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +6 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
- data/third_party/upb/upb/decode.c +309 -178
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/decode_internal.h +1 -0
- data/third_party/upb/upb/def.c +330 -85
- data/third_party/upb/upb/def.h +45 -14
- data/third_party/upb/upb/def.hpp +17 -4
- data/third_party/upb/upb/encode.c +100 -40
- data/third_party/upb/upb/msg.c +22 -9
- data/third_party/upb/upb/msg_internal.h +90 -8
- data/third_party/upb/upb/reflection.c +98 -58
- data/third_party/upb/upb/reflection.h +6 -2
- data/third_party/upb/upb/text_encode.c +3 -3
- data/third_party/upb/upb/upb.c +8 -0
- metadata +116 -56
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/gprpp/match.h +0 -73
- data/src/core/lib/gprpp/overload.h +0 -59
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -78,6 +78,43 @@ char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
|
78
78
|
|
79
79
|
} // namespace
|
80
80
|
|
81
|
+
class XdsClient::Notifier {
|
82
|
+
public:
|
83
|
+
// Helper template function to invoke `OnError()` on a list of watchers \a
|
84
|
+
// watchers_list within \a work_serializer. Works with all 4 resource types.
|
85
|
+
template <class T>
|
86
|
+
static void ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
87
|
+
XdsClient* xds_client, const T& watchers_list, grpc_error_handle error,
|
88
|
+
const DebugLocation& location) {
|
89
|
+
xds_client->work_serializer_.Schedule(
|
90
|
+
[watchers_list, error]()
|
91
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
92
|
+
for (const auto& p : watchers_list) {
|
93
|
+
p.first->OnError(GRPC_ERROR_REF(error));
|
94
|
+
}
|
95
|
+
GRPC_ERROR_UNREF(error);
|
96
|
+
},
|
97
|
+
location);
|
98
|
+
}
|
99
|
+
|
100
|
+
// Helper template function to invoke `OnResourceDoesNotExist()` on a list of
|
101
|
+
// watchers \a watchers_list within \a work_serializer. Works with all 4
|
102
|
+
// resource types.
|
103
|
+
template <class T>
|
104
|
+
static void ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
105
|
+
XdsClient* xds_client, const T& watchers_list,
|
106
|
+
const DebugLocation& location) {
|
107
|
+
xds_client->work_serializer_.Schedule(
|
108
|
+
[watchers_list]()
|
109
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
110
|
+
for (const auto& p : watchers_list) {
|
111
|
+
p.first->OnResourceDoesNotExist();
|
112
|
+
}
|
113
|
+
},
|
114
|
+
location);
|
115
|
+
}
|
116
|
+
};
|
117
|
+
|
81
118
|
//
|
82
119
|
// Internal class declarations
|
83
120
|
//
|
@@ -136,10 +173,10 @@ class XdsClient::ChannelState::AdsCallState
|
|
136
173
|
bool seen_response() const { return seen_response_; }
|
137
174
|
|
138
175
|
void SubscribeLocked(const std::string& type_url,
|
139
|
-
const XdsApi::ResourceName&
|
176
|
+
const XdsApi::ResourceName& name)
|
140
177
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
141
178
|
void UnsubscribeLocked(const std::string& type_url,
|
142
|
-
const XdsApi::ResourceName&
|
179
|
+
const XdsApi::ResourceName& name,
|
143
180
|
bool delay_unsubscription)
|
144
181
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
145
182
|
|
@@ -148,24 +185,20 @@ class XdsClient::ChannelState::AdsCallState
|
|
148
185
|
private:
|
149
186
|
class ResourceState : public InternallyRefCounted<ResourceState> {
|
150
187
|
public:
|
151
|
-
ResourceState(const std::string& type_url,
|
152
|
-
|
153
|
-
bool sent_initial_request)
|
154
|
-
: type_url_(type_url),
|
155
|
-
resource_(resource),
|
156
|
-
sent_initial_request_(sent_initial_request) {
|
188
|
+
ResourceState(const std::string& type_url, const XdsApi::ResourceName& name)
|
189
|
+
: type_url_(type_url), name_(name) {
|
157
190
|
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
158
191
|
grpc_schedule_on_exec_ctx);
|
159
192
|
}
|
160
193
|
|
161
194
|
void Orphan() override {
|
162
|
-
|
195
|
+
MaybeCancelTimer();
|
163
196
|
Unref(DEBUG_LOCATION, "Orphan");
|
164
197
|
}
|
165
198
|
|
166
|
-
void
|
167
|
-
if (
|
168
|
-
|
199
|
+
void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld) {
|
200
|
+
if (timer_started_) return;
|
201
|
+
timer_started_ = true;
|
169
202
|
ads_calld_ = std::move(ads_calld);
|
170
203
|
Ref(DEBUG_LOCATION, "timer").release();
|
171
204
|
timer_pending_ = true;
|
@@ -175,7 +208,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
175
208
|
&timer_callback_);
|
176
209
|
}
|
177
210
|
|
178
|
-
void
|
211
|
+
void MaybeCancelTimer() {
|
179
212
|
if (timer_pending_) {
|
180
213
|
grpc_timer_cancel(&timer_);
|
181
214
|
timer_pending_ = false;
|
@@ -189,6 +222,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
189
222
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
190
223
|
self->OnTimerLocked(GRPC_ERROR_REF(error));
|
191
224
|
}
|
225
|
+
self->ads_calld_->xds_client()->work_serializer_.DrainQueue();
|
192
226
|
self->ads_calld_.reset();
|
193
227
|
self->Unref(DEBUG_LOCATION, "timer");
|
194
228
|
}
|
@@ -201,8 +235,8 @@ class XdsClient::ChannelState::AdsCallState
|
|
201
235
|
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
202
236
|
"timeout obtaining resource {type=%s name=%s} from xds server",
|
203
237
|
type_url_,
|
204
|
-
XdsApi::ConstructFullResourceName(
|
205
|
-
|
238
|
+
XdsApi::ConstructFullResourceName(name_.authority, type_url_,
|
239
|
+
name_.id)));
|
206
240
|
watcher_error = grpc_error_set_int(
|
207
241
|
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
208
242
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
@@ -210,32 +244,31 @@ class XdsClient::ChannelState::AdsCallState
|
|
210
244
|
grpc_error_std_string(watcher_error).c_str());
|
211
245
|
}
|
212
246
|
auto& authority_state =
|
213
|
-
ads_calld_->xds_client()->authority_state_map_[
|
247
|
+
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
214
248
|
if (type_url_ == XdsApi::kLdsTypeUrl) {
|
215
|
-
ListenerState& state = authority_state.listener_map[
|
249
|
+
ListenerState& state = authority_state.listener_map[name_.id];
|
216
250
|
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
217
|
-
|
218
|
-
|
219
|
-
|
251
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
252
|
+
ads_calld_->xds_client(), state.watchers,
|
253
|
+
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
220
254
|
} else if (type_url_ == XdsApi::kRdsTypeUrl) {
|
221
|
-
RouteConfigState& state =
|
222
|
-
authority_state.route_config_map[resource_.id];
|
255
|
+
RouteConfigState& state = authority_state.route_config_map[name_.id];
|
223
256
|
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
224
|
-
|
225
|
-
|
226
|
-
|
257
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
258
|
+
ads_calld_->xds_client(), state.watchers,
|
259
|
+
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
227
260
|
} else if (type_url_ == XdsApi::kCdsTypeUrl) {
|
228
|
-
ClusterState& state = authority_state.cluster_map[
|
261
|
+
ClusterState& state = authority_state.cluster_map[name_.id];
|
229
262
|
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
230
|
-
|
231
|
-
|
232
|
-
|
263
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
264
|
+
ads_calld_->xds_client(), state.watchers,
|
265
|
+
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
233
266
|
} else if (type_url_ == XdsApi::kEdsTypeUrl) {
|
234
|
-
EndpointState& state = authority_state.endpoint_map[
|
267
|
+
EndpointState& state = authority_state.endpoint_map[name_.id];
|
235
268
|
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
236
|
-
|
237
|
-
|
238
|
-
|
269
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
270
|
+
ads_calld_->xds_client(), state.watchers,
|
271
|
+
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
239
272
|
} else {
|
240
273
|
GPR_UNREACHABLE_CODE(return );
|
241
274
|
}
|
@@ -245,10 +278,10 @@ class XdsClient::ChannelState::AdsCallState
|
|
245
278
|
}
|
246
279
|
|
247
280
|
const std::string type_url_;
|
248
|
-
const XdsApi::ResourceName
|
281
|
+
const XdsApi::ResourceName name_;
|
249
282
|
|
250
283
|
RefCountedPtr<AdsCallState> ads_calld_;
|
251
|
-
bool
|
284
|
+
bool timer_started_ = false;
|
252
285
|
bool timer_pending_ = false;
|
253
286
|
grpc_timer timer_;
|
254
287
|
grpc_closure timer_callback_;
|
@@ -464,18 +497,21 @@ class XdsClient::ChannelState::StateWatcher
|
|
464
497
|
private:
|
465
498
|
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
466
499
|
const absl::Status& status) override {
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
500
|
+
{
|
501
|
+
MutexLock lock(&parent_->xds_client_->mu_);
|
502
|
+
if (!parent_->shutting_down_ &&
|
503
|
+
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
504
|
+
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
505
|
+
gpr_log(GPR_INFO,
|
506
|
+
"[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
|
507
|
+
"status_message:(%s)",
|
508
|
+
parent_->xds_client(), status.ToString().c_str());
|
509
|
+
parent_->xds_client_->NotifyOnErrorLocked(
|
510
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
511
|
+
"xds channel in TRANSIENT_FAILURE"));
|
512
|
+
}
|
478
513
|
}
|
514
|
+
parent_->xds_client()->work_serializer_.DrainQueue();
|
479
515
|
}
|
480
516
|
|
481
517
|
WeakRefCountedPtr<ChannelState> parent_;
|
@@ -577,7 +613,7 @@ void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
|
577
613
|
}
|
578
614
|
|
579
615
|
void XdsClient::ChannelState::SubscribeLocked(
|
580
|
-
const std::string& type_url, const XdsApi::ResourceName&
|
616
|
+
const std::string& type_url, const XdsApi::ResourceName& name) {
|
581
617
|
if (ads_calld_ == nullptr) {
|
582
618
|
// Start the ADS call if this is the first request.
|
583
619
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -591,16 +627,16 @@ void XdsClient::ChannelState::SubscribeLocked(
|
|
591
627
|
// because when the call is restarted it will resend all necessary requests.
|
592
628
|
if (ads_calld() == nullptr) return;
|
593
629
|
// Subscribe to this resource if the ADS call is active.
|
594
|
-
ads_calld()->SubscribeLocked(type_url,
|
630
|
+
ads_calld()->SubscribeLocked(type_url, name);
|
595
631
|
}
|
596
632
|
|
597
633
|
void XdsClient::ChannelState::UnsubscribeLocked(
|
598
|
-
const std::string& type_url, const XdsApi::ResourceName&
|
634
|
+
const std::string& type_url, const XdsApi::ResourceName& name,
|
599
635
|
bool delay_unsubscription) {
|
600
636
|
if (ads_calld_ != nullptr) {
|
601
637
|
auto* calld = ads_calld_->calld();
|
602
638
|
if (calld != nullptr) {
|
603
|
-
calld->UnsubscribeLocked(type_url,
|
639
|
+
calld->UnsubscribeLocked(type_url, name, delay_unsubscription);
|
604
640
|
if (!calld->HasSubscribedResources()) {
|
605
641
|
ads_calld_.reset();
|
606
642
|
}
|
@@ -901,25 +937,23 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
901
937
|
}
|
902
938
|
|
903
939
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
904
|
-
const std::string& type_url, const XdsApi::ResourceName&
|
905
|
-
auto& state =
|
906
|
-
|
940
|
+
const std::string& type_url, const XdsApi::ResourceName& name) {
|
941
|
+
auto& state =
|
942
|
+
state_map_[type_url].subscribed_resources[name.authority][name.id];
|
907
943
|
if (state == nullptr) {
|
908
|
-
state = MakeOrphanable<ResourceState>(
|
909
|
-
type_url, resource,
|
910
|
-
!chand()->resource_type_version_map_[type_url].empty());
|
944
|
+
state = MakeOrphanable<ResourceState>(type_url, name);
|
911
945
|
SendMessageLocked(type_url);
|
912
946
|
}
|
913
947
|
}
|
914
948
|
|
915
949
|
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
916
|
-
const std::string& type_url, const XdsApi::ResourceName&
|
950
|
+
const std::string& type_url, const XdsApi::ResourceName& name,
|
917
951
|
bool delay_unsubscription) {
|
918
952
|
auto& type_state_map = state_map_[type_url];
|
919
|
-
auto& authority_map = type_state_map.subscribed_resources[
|
920
|
-
authority_map.erase(
|
953
|
+
auto& authority_map = type_state_map.subscribed_resources[name.authority];
|
954
|
+
authority_map.erase(name.id);
|
921
955
|
if (authority_map.empty()) {
|
922
|
-
type_state_map.subscribed_resources.erase(
|
956
|
+
type_state_map.subscribed_resources.erase(name.authority);
|
923
957
|
}
|
924
958
|
if (!delay_unsubscription) SendMessageLocked(type_url);
|
925
959
|
}
|
@@ -958,29 +992,26 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
|
958
992
|
xds_client(), lds_update_map.size());
|
959
993
|
}
|
960
994
|
auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
|
961
|
-
std::set<std::string> rds_resource_names_seen;
|
962
995
|
for (auto& p : lds_update_map) {
|
963
|
-
const XdsApi::ResourceName&
|
996
|
+
const XdsApi::ResourceName& name = p.first;
|
964
997
|
XdsApi::LdsUpdate& lds_update = p.second.resource;
|
965
|
-
auto
|
966
|
-
|
967
|
-
|
998
|
+
auto it = lds_state.subscribed_resources.find(name.authority);
|
999
|
+
if (it != lds_state.subscribed_resources.end()) {
|
1000
|
+
auto res_it = it->second.find(name.id);
|
1001
|
+
if (res_it != it->second.end()) {
|
1002
|
+
res_it->second->MaybeCancelTimer();
|
1003
|
+
}
|
1004
|
+
}
|
968
1005
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
969
1006
|
gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
|
970
|
-
XdsApi::ConstructFullResourceName(
|
971
|
-
|
1007
|
+
XdsApi::ConstructFullResourceName(name.authority,
|
1008
|
+
XdsApi::kLdsTypeUrl, name.id)
|
972
1009
|
.c_str(),
|
973
1010
|
lds_update.ToString().c_str());
|
974
1011
|
}
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
lds_update.http_connection_manager.route_config_name);
|
979
|
-
}
|
980
|
-
ListenerState& listener_state =
|
981
|
-
xds_client()
|
982
|
-
->authority_state_map_[resource.authority]
|
983
|
-
.listener_map[resource.id];
|
1012
|
+
ListenerState& listener_state = xds_client()
|
1013
|
+
->authority_state_map_[name.authority]
|
1014
|
+
.listener_map[name.id];
|
984
1015
|
// Ignore identical update.
|
985
1016
|
if (listener_state.update.has_value() &&
|
986
1017
|
*listener_state.update == lds_update) {
|
@@ -989,8 +1020,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
|
989
1020
|
"[xds_client %p] LDS update for %s identical to current, "
|
990
1021
|
"ignoring.",
|
991
1022
|
xds_client(),
|
992
|
-
XdsApi::ConstructFullResourceName(
|
993
|
-
|
1023
|
+
XdsApi::ConstructFullResourceName(name.authority,
|
1024
|
+
XdsApi::kLdsTypeUrl, name.id)
|
994
1025
|
.c_str());
|
995
1026
|
}
|
996
1027
|
continue;
|
@@ -1000,25 +1031,28 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
|
1000
1031
|
listener_state.meta = CreateResourceMetadataAcked(
|
1001
1032
|
std::move(p.second.serialized_proto), version, update_time);
|
1002
1033
|
// Notify watchers.
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1034
|
+
auto& watchers_list = listener_state.watchers;
|
1035
|
+
auto& value = listener_state.update.value();
|
1036
|
+
xds_client()->work_serializer_.Schedule(
|
1037
|
+
[watchers_list, value]()
|
1038
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
1039
|
+
for (const auto& p : watchers_list) {
|
1040
|
+
p.first->OnListenerChanged(value);
|
1041
|
+
}
|
1042
|
+
},
|
1043
|
+
DEBUG_LOCATION);
|
1006
1044
|
}
|
1007
1045
|
// For invalid resources in the update, if they are already in the
|
1008
1046
|
// cache, pretend that they are present in the update, so that we
|
1009
1047
|
// don't incorrectly consider them deleted below.
|
1010
|
-
for (const auto&
|
1048
|
+
for (const auto& name : resource_names_failed) {
|
1011
1049
|
auto& listener_map =
|
1012
|
-
xds_client()->authority_state_map_[
|
1013
|
-
auto it = listener_map.find(
|
1050
|
+
xds_client()->authority_state_map_[name.authority].listener_map;
|
1051
|
+
auto it = listener_map.find(name.id);
|
1014
1052
|
if (it != listener_map.end()) {
|
1015
1053
|
auto& update = it->second.update;
|
1016
1054
|
if (!update.has_value()) continue;
|
1017
|
-
lds_update_map[
|
1018
|
-
if (!update->http_connection_manager.route_config_name.empty()) {
|
1019
|
-
rds_resource_names_seen.insert(
|
1020
|
-
update->http_connection_manager.route_config_name);
|
1021
|
-
}
|
1055
|
+
lds_update_map[name];
|
1022
1056
|
}
|
1023
1057
|
}
|
1024
1058
|
// For any subscribed resource that is not present in the update,
|
@@ -1041,31 +1075,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
|
1041
1075
|
// For that case, we rely on the request timeout instead.
|
1042
1076
|
if (!listener_state.update.has_value()) continue;
|
1043
1077
|
listener_state.update.reset();
|
1044
|
-
|
1045
|
-
|
1046
|
-
}
|
1047
|
-
}
|
1048
|
-
}
|
1049
|
-
}
|
1050
|
-
// For any RDS resource that is no longer referred to by any LDS
|
1051
|
-
// resources, remove it from the cache and notify watchers that it
|
1052
|
-
// does not exist.
|
1053
|
-
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
1054
|
-
for (const auto& a : rds_state.subscribed_resources) {
|
1055
|
-
const std::string& authority_name = a.first;
|
1056
|
-
for (const auto& p : a.second) {
|
1057
|
-
const std::string& listener_name = p.first;
|
1058
|
-
if (rds_resource_names_seen.find(XdsApi::ConstructFullResourceName(
|
1059
|
-
authority_name, XdsApi::kRdsTypeUrl, listener_name)) ==
|
1060
|
-
rds_resource_names_seen.end()) {
|
1061
|
-
RouteConfigState& route_config_state =
|
1062
|
-
xds_client()
|
1063
|
-
->authority_state_map_[authority_name]
|
1064
|
-
.route_config_map[listener_name];
|
1065
|
-
route_config_state.update.reset();
|
1066
|
-
for (const auto& p : route_config_state.watchers) {
|
1067
|
-
p.first->OnResourceDoesNotExist();
|
1068
|
-
}
|
1078
|
+
Notifier::ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
1079
|
+
xds_client(), listener_state.watchers, DEBUG_LOCATION);
|
1069
1080
|
}
|
1070
1081
|
}
|
1071
1082
|
}
|
@@ -1082,19 +1093,23 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
|
|
1082
1093
|
}
|
1083
1094
|
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
1084
1095
|
for (auto& p : rds_update_map) {
|
1085
|
-
const XdsApi::ResourceName&
|
1096
|
+
const XdsApi::ResourceName& name = p.first;
|
1086
1097
|
XdsApi::RdsUpdate& rds_update = p.second.resource;
|
1087
|
-
auto
|
1088
|
-
|
1089
|
-
|
1098
|
+
auto it = rds_state.subscribed_resources.find(name.authority);
|
1099
|
+
if (it != rds_state.subscribed_resources.end()) {
|
1100
|
+
auto res_it = it->second.find(name.id);
|
1101
|
+
if (res_it != it->second.end()) {
|
1102
|
+
res_it->second->MaybeCancelTimer();
|
1103
|
+
}
|
1104
|
+
}
|
1090
1105
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1091
1106
|
gpr_log(GPR_INFO, "[xds_client %p] RDS resource:\n%s", xds_client(),
|
1092
1107
|
rds_update.ToString().c_str());
|
1093
1108
|
}
|
1094
1109
|
RouteConfigState& route_config_state =
|
1095
1110
|
xds_client()
|
1096
|
-
->authority_state_map_[
|
1097
|
-
.route_config_map[
|
1111
|
+
->authority_state_map_[name.authority]
|
1112
|
+
.route_config_map[name.id];
|
1098
1113
|
// Ignore identical update.
|
1099
1114
|
if (route_config_state.update.has_value() &&
|
1100
1115
|
*route_config_state.update == rds_update) {
|
@@ -1110,9 +1125,16 @@ void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
|
|
1110
1125
|
route_config_state.meta = CreateResourceMetadataAcked(
|
1111
1126
|
std::move(p.second.serialized_proto), version, update_time);
|
1112
1127
|
// Notify all watchers.
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1128
|
+
auto& watchers_list = route_config_state.watchers;
|
1129
|
+
auto& value = route_config_state.update.value();
|
1130
|
+
xds_client()->work_serializer_.Schedule(
|
1131
|
+
[watchers_list, value]()
|
1132
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
1133
|
+
for (const auto& p : watchers_list) {
|
1134
|
+
p.first->OnRouteConfigChanged(value);
|
1135
|
+
}
|
1136
|
+
},
|
1137
|
+
DEBUG_LOCATION);
|
1116
1138
|
}
|
1117
1139
|
}
|
1118
1140
|
|
@@ -1127,29 +1149,25 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
|
1127
1149
|
xds_client(), cds_update_map.size());
|
1128
1150
|
}
|
1129
1151
|
auto& cds_state = state_map_[XdsApi::kCdsTypeUrl];
|
1130
|
-
std::set<std::string> eds_resource_names_seen;
|
1131
1152
|
for (auto& p : cds_update_map) {
|
1132
|
-
const XdsApi::ResourceName&
|
1153
|
+
const XdsApi::ResourceName& name = p.first;
|
1133
1154
|
XdsApi::CdsUpdate& cds_update = p.second.resource;
|
1134
|
-
auto
|
1135
|
-
|
1136
|
-
|
1155
|
+
auto it = cds_state.subscribed_resources.find(name.authority);
|
1156
|
+
if (it != cds_state.subscribed_resources.end()) {
|
1157
|
+
auto res_it = it->second.find(name.id);
|
1158
|
+
if (res_it != it->second.end()) {
|
1159
|
+
res_it->second->MaybeCancelTimer();
|
1160
|
+
}
|
1161
|
+
}
|
1137
1162
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1138
1163
|
gpr_log(GPR_INFO, "[xds_client %p] cluster=%s: %s", xds_client(),
|
1139
|
-
XdsApi::ConstructFullResourceName(
|
1140
|
-
|
1164
|
+
XdsApi::ConstructFullResourceName(name.authority,
|
1165
|
+
XdsApi::kCdsTypeUrl, name.id)
|
1141
1166
|
.c_str(),
|
1142
1167
|
cds_update.ToString().c_str());
|
1143
1168
|
}
|
1144
|
-
|
1145
|
-
|
1146
|
-
cds_update.eds_service_name.empty()
|
1147
|
-
? XdsApi::ConstructFullResourceName(
|
1148
|
-
resource.authority, XdsApi::kCdsTypeUrl, resource.id)
|
1149
|
-
: cds_update.eds_service_name);
|
1150
|
-
ClusterState& cluster_state = xds_client()
|
1151
|
-
->authority_state_map_[resource.authority]
|
1152
|
-
.cluster_map[resource.id];
|
1169
|
+
ClusterState& cluster_state =
|
1170
|
+
xds_client()->authority_state_map_[name.authority].cluster_map[name.id];
|
1153
1171
|
// Ignore identical update.
|
1154
1172
|
if (cluster_state.update.has_value() &&
|
1155
1173
|
*cluster_state.update == cds_update) {
|
@@ -1165,26 +1183,28 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
|
1165
1183
|
cluster_state.meta = CreateResourceMetadataAcked(
|
1166
1184
|
std::move(p.second.serialized_proto), version, update_time);
|
1167
1185
|
// Notify all watchers.
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1186
|
+
auto& watchers_list = cluster_state.watchers;
|
1187
|
+
auto& value = cluster_state.update.value();
|
1188
|
+
xds_client()->work_serializer_.Schedule(
|
1189
|
+
[watchers_list, value]()
|
1190
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
1191
|
+
for (const auto& p : watchers_list) {
|
1192
|
+
p.first->OnClusterChanged(value);
|
1193
|
+
}
|
1194
|
+
},
|
1195
|
+
DEBUG_LOCATION);
|
1171
1196
|
}
|
1172
1197
|
// For invalid resources in the update, if they are already in the
|
1173
1198
|
// cache, pretend that they are present in the update, so that we
|
1174
1199
|
// don't incorrectly consider them deleted below.
|
1175
|
-
for (const auto&
|
1200
|
+
for (const auto& name : resource_names_failed) {
|
1176
1201
|
auto& cluster_map =
|
1177
|
-
xds_client()->authority_state_map_[
|
1178
|
-
auto it = cluster_map.find(
|
1202
|
+
xds_client()->authority_state_map_[name.authority].cluster_map;
|
1203
|
+
auto it = cluster_map.find(name.id);
|
1179
1204
|
if (it != cluster_map.end()) {
|
1180
1205
|
auto& update = it->second.update;
|
1181
1206
|
if (!update.has_value()) continue;
|
1182
|
-
cds_update_map[
|
1183
|
-
eds_resource_names_seen.insert(
|
1184
|
-
update->eds_service_name.empty()
|
1185
|
-
? XdsApi::ConstructFullResourceName(
|
1186
|
-
resource.authority, XdsApi::kCdsTypeUrl, resource.id)
|
1187
|
-
: update->eds_service_name);
|
1207
|
+
cds_update_map[name];
|
1188
1208
|
}
|
1189
1209
|
}
|
1190
1210
|
// For any subscribed resource that is not present in the update,
|
@@ -1206,30 +1226,8 @@ void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
|
1206
1226
|
// For that case, we rely on the request timeout instead.
|
1207
1227
|
if (!cluster_state.update.has_value()) continue;
|
1208
1228
|
cluster_state.update.reset();
|
1209
|
-
|
1210
|
-
|
1211
|
-
}
|
1212
|
-
}
|
1213
|
-
}
|
1214
|
-
}
|
1215
|
-
// For any EDS resource that is no longer referred to by any CDS
|
1216
|
-
// resources, remove it from the cache and notify watchers that it
|
1217
|
-
// does not exist.
|
1218
|
-
auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
|
1219
|
-
for (const auto& a : eds_state.subscribed_resources) {
|
1220
|
-
const std::string& authority = a.first;
|
1221
|
-
for (const auto& p : a.second) {
|
1222
|
-
const std::string& eds_resource_name = p.first;
|
1223
|
-
if (eds_resource_names_seen.find(XdsApi::ConstructFullResourceName(
|
1224
|
-
authority, XdsApi::kEdsTypeUrl, eds_resource_name)) ==
|
1225
|
-
eds_resource_names_seen.end()) {
|
1226
|
-
EndpointState& endpoint_state = xds_client()
|
1227
|
-
->authority_state_map_[authority]
|
1228
|
-
.endpoint_map[eds_resource_name];
|
1229
|
-
endpoint_state.update.reset();
|
1230
|
-
for (const auto& p : endpoint_state.watchers) {
|
1231
|
-
p.first->OnResourceDoesNotExist();
|
1232
|
-
}
|
1229
|
+
Notifier::ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
1230
|
+
xds_client(), cluster_state.watchers, DEBUG_LOCATION);
|
1233
1231
|
}
|
1234
1232
|
}
|
1235
1233
|
}
|
@@ -1246,22 +1244,25 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
|
|
1246
1244
|
}
|
1247
1245
|
auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
|
1248
1246
|
for (auto& p : eds_update_map) {
|
1249
|
-
const XdsApi::ResourceName&
|
1247
|
+
const XdsApi::ResourceName& name = p.first;
|
1250
1248
|
XdsApi::EdsUpdate& eds_update = p.second.resource;
|
1251
|
-
auto
|
1252
|
-
|
1253
|
-
|
1249
|
+
auto it = eds_state.subscribed_resources.find(name.authority);
|
1250
|
+
if (it != eds_state.subscribed_resources.end()) {
|
1251
|
+
auto res_it = it->second.find(name.id);
|
1252
|
+
if (res_it != it->second.end()) {
|
1253
|
+
res_it->second->MaybeCancelTimer();
|
1254
|
+
}
|
1255
|
+
}
|
1254
1256
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1255
1257
|
gpr_log(GPR_INFO, "[xds_client %p] EDS resource %s: %s", xds_client(),
|
1256
|
-
XdsApi::ConstructFullResourceName(
|
1257
|
-
|
1258
|
+
XdsApi::ConstructFullResourceName(name.authority,
|
1259
|
+
XdsApi::kCdsTypeUrl, name.id)
|
1258
1260
|
.c_str(),
|
1259
1261
|
eds_update.ToString().c_str());
|
1260
1262
|
}
|
1261
|
-
EndpointState& endpoint_state =
|
1262
|
-
|
1263
|
-
|
1264
|
-
.endpoint_map[resource.id];
|
1263
|
+
EndpointState& endpoint_state = xds_client()
|
1264
|
+
->authority_state_map_[name.authority]
|
1265
|
+
.endpoint_map[name.id];
|
1265
1266
|
// Ignore identical update.
|
1266
1267
|
if (endpoint_state.update.has_value() &&
|
1267
1268
|
*endpoint_state.update == eds_update) {
|
@@ -1277,9 +1278,16 @@ void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
|
|
1277
1278
|
endpoint_state.meta = CreateResourceMetadataAcked(
|
1278
1279
|
std::move(p.second.serialized_proto), version, update_time);
|
1279
1280
|
// Notify all watchers.
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1281
|
+
auto& watchers_list = endpoint_state.watchers;
|
1282
|
+
auto& value = endpoint_state.update.value();
|
1283
|
+
xds_client()->work_serializer_.Schedule(
|
1284
|
+
[watchers_list, value]()
|
1285
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
1286
|
+
for (const auto& p : watchers_list) {
|
1287
|
+
p.first->OnEndpointChanged(value);
|
1288
|
+
}
|
1289
|
+
},
|
1290
|
+
DEBUG_LOCATION);
|
1283
1291
|
}
|
1284
1292
|
}
|
1285
1293
|
|
@@ -1306,9 +1314,9 @@ void XdsClient::ChannelState::AdsCallState::RejectAdsUpdateHelperLocked(
|
|
1306
1314
|
auto it = state_map->find(resource_name);
|
1307
1315
|
if (it == state_map->end()) return;
|
1308
1316
|
auto& state = it->second;
|
1309
|
-
|
1310
|
-
|
1311
|
-
|
1317
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
1318
|
+
xds_client(), state.watchers, GRPC_ERROR_REF(result.parse_error),
|
1319
|
+
DEBUG_LOCATION);
|
1312
1320
|
UpdateResourceMetadataNacked(result.version, error_details, update_time,
|
1313
1321
|
&state.meta);
|
1314
1322
|
}
|
@@ -1388,6 +1396,7 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
|
1388
1396
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1389
1397
|
done = ads_calld->OnResponseReceivedLocked();
|
1390
1398
|
}
|
1399
|
+
ads_calld->xds_client()->work_serializer_.DrainQueue();
|
1391
1400
|
if (done) ads_calld->Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
|
1392
1401
|
}
|
1393
1402
|
|
@@ -1418,7 +1427,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1418
1427
|
xds_client(), grpc_error_std_string(result.parse_error).c_str());
|
1419
1428
|
GRPC_ERROR_UNREF(result.parse_error);
|
1420
1429
|
} else {
|
1421
|
-
grpc_millis update_time =
|
1430
|
+
grpc_millis update_time = ExecCtx::Get()->Now();
|
1422
1431
|
// Update nonce.
|
1423
1432
|
auto& state = state_map_[result.type_url];
|
1424
1433
|
state.nonce = std::move(result.nonce);
|
@@ -1494,6 +1503,7 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
|
1494
1503
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1495
1504
|
ads_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1496
1505
|
}
|
1506
|
+
ads_calld->xds_client()->work_serializer_.DrainQueue();
|
1497
1507
|
ads_calld->Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
|
1498
1508
|
}
|
1499
1509
|
|
@@ -1538,7 +1548,7 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
|
1538
1548
|
for (auto& p : a.second) {
|
1539
1549
|
resource_map[a.first].insert(p.first);
|
1540
1550
|
OrphanablePtr<ResourceState>& state = p.second;
|
1541
|
-
state->
|
1551
|
+
state->MaybeStartTimer(Ref(DEBUG_LOCATION, "ResourceState"));
|
1542
1552
|
}
|
1543
1553
|
}
|
1544
1554
|
}
|
@@ -2081,37 +2091,58 @@ RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
|
2081
2091
|
|
2082
2092
|
void XdsClient::WatchListenerData(
|
2083
2093
|
absl::string_view listener_name,
|
2084
|
-
|
2094
|
+
RefCountedPtr<ListenerWatcherInterface> watcher) {
|
2085
2095
|
std::string listener_name_str = std::string(listener_name);
|
2086
|
-
MutexLock lock(&mu_);
|
2087
2096
|
ListenerWatcherInterface* w = watcher.get();
|
2088
2097
|
auto resource = XdsApi::ParseResourceName(listener_name, XdsApi::IsLds);
|
2089
2098
|
if (!resource.ok()) {
|
2090
|
-
|
2099
|
+
{
|
2100
|
+
MutexLock lock(&mu_);
|
2101
|
+
invalid_listener_watchers_[w] = watcher;
|
2102
|
+
}
|
2091
2103
|
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
2092
2104
|
"Unable to parse resource name for listener %s", listener_name));
|
2093
|
-
|
2105
|
+
work_serializer_.Run(
|
2106
|
+
// TODO(yashykt): When we move to C++14, capture watcher using
|
2107
|
+
// std::move()
|
2108
|
+
[watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2109
|
+
watcher->OnError(error);
|
2110
|
+
},
|
2111
|
+
DEBUG_LOCATION);
|
2094
2112
|
return;
|
2095
2113
|
}
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2114
|
+
{
|
2115
|
+
MutexLock lock(&mu_);
|
2116
|
+
AuthorityState& authority_state = authority_state_map_[resource->authority];
|
2117
|
+
ListenerState& listener_state = authority_state.listener_map[resource->id];
|
2118
|
+
listener_state.watchers[w] = watcher;
|
2119
|
+
// If we've already received an LDS update, notify the new watcher
|
2120
|
+
// immediately.
|
2121
|
+
if (listener_state.update.has_value()) {
|
2122
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2123
|
+
gpr_log(GPR_INFO,
|
2124
|
+
"[xds_client %p] returning cached listener data for %s", this,
|
2125
|
+
listener_name_str.c_str());
|
2126
|
+
}
|
2127
|
+
auto& value = listener_state.update.value();
|
2128
|
+
work_serializer_.Schedule(
|
2129
|
+
// TODO(yashykt): When we move to C++14, capture watcher using
|
2130
|
+
// std::move()
|
2131
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2132
|
+
watcher->OnListenerChanged(value);
|
2133
|
+
},
|
2134
|
+
DEBUG_LOCATION);
|
2105
2135
|
}
|
2106
|
-
|
2107
|
-
|
2108
|
-
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2136
|
+
// If the authority doesn't yet have a channel, set it, creating it if
|
2137
|
+
// needed.
|
2138
|
+
if (authority_state.channel_state == nullptr) {
|
2139
|
+
authority_state.channel_state =
|
2140
|
+
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2141
|
+
}
|
2142
|
+
authority_state.channel_state->SubscribeLocked(XdsApi::kLdsTypeUrl,
|
2143
|
+
*resource);
|
2112
2144
|
}
|
2113
|
-
|
2114
|
-
*resource);
|
2145
|
+
work_serializer_.DrainQueue();
|
2115
2146
|
}
|
2116
2147
|
|
2117
2148
|
void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
@@ -2140,40 +2171,58 @@ void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
|
2140
2171
|
|
2141
2172
|
void XdsClient::WatchRouteConfigData(
|
2142
2173
|
absl::string_view route_config_name,
|
2143
|
-
|
2174
|
+
RefCountedPtr<RouteConfigWatcherInterface> watcher) {
|
2144
2175
|
std::string route_config_name_str = std::string(route_config_name);
|
2145
|
-
MutexLock lock(&mu_);
|
2146
2176
|
RouteConfigWatcherInterface* w = watcher.get();
|
2147
2177
|
auto resource = XdsApi::ParseResourceName(route_config_name, XdsApi::IsRds);
|
2148
2178
|
if (!resource.ok()) {
|
2149
|
-
|
2179
|
+
{
|
2180
|
+
MutexLock lock(&mu_);
|
2181
|
+
invalid_route_config_watchers_[w] = watcher;
|
2182
|
+
}
|
2150
2183
|
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2151
2184
|
absl::StrFormat("Unable to parse resource name for route config %s",
|
2152
2185
|
route_config_name));
|
2153
|
-
|
2186
|
+
work_serializer_.Run(
|
2187
|
+
// TODO(yashykt): When we move to C++14, capture watcher using
|
2188
|
+
// std::move()
|
2189
|
+
[watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2190
|
+
watcher->OnError(error);
|
2191
|
+
},
|
2192
|
+
DEBUG_LOCATION);
|
2154
2193
|
return;
|
2155
2194
|
}
|
2156
|
-
|
2157
|
-
|
2158
|
-
|
2159
|
-
|
2160
|
-
|
2161
|
-
|
2162
|
-
|
2163
|
-
|
2164
|
-
|
2165
|
-
|
2166
|
-
|
2195
|
+
{
|
2196
|
+
MutexLock lock(&mu_);
|
2197
|
+
auto& authority_state = authority_state_map_[resource->authority];
|
2198
|
+
RouteConfigState& route_config_state =
|
2199
|
+
authority_state.route_config_map[resource->id];
|
2200
|
+
route_config_state.watchers[w] = watcher;
|
2201
|
+
// If we've already received an RDS update, notify the new watcher
|
2202
|
+
// immediately.
|
2203
|
+
if (route_config_state.update.has_value()) {
|
2204
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2205
|
+
gpr_log(GPR_INFO,
|
2206
|
+
"[xds_client %p] returning cached route config data for %s",
|
2207
|
+
this, route_config_name_str.c_str());
|
2208
|
+
}
|
2209
|
+
auto& value = route_config_state.update.value();
|
2210
|
+
work_serializer_.Schedule(
|
2211
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2212
|
+
watcher->OnRouteConfigChanged(value);
|
2213
|
+
},
|
2214
|
+
DEBUG_LOCATION);
|
2167
2215
|
}
|
2168
|
-
|
2169
|
-
|
2170
|
-
|
2171
|
-
|
2172
|
-
|
2173
|
-
|
2216
|
+
// If the authority doesn't yet have a channel, set it, creating it if
|
2217
|
+
// needed.
|
2218
|
+
if (authority_state.channel_state == nullptr) {
|
2219
|
+
authority_state.channel_state =
|
2220
|
+
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2221
|
+
}
|
2222
|
+
authority_state.channel_state->SubscribeLocked(XdsApi::kRdsTypeUrl,
|
2223
|
+
*resource);
|
2174
2224
|
}
|
2175
|
-
|
2176
|
-
*resource);
|
2225
|
+
work_serializer_.DrainQueue();
|
2177
2226
|
}
|
2178
2227
|
|
2179
2228
|
void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
@@ -2203,37 +2252,54 @@ void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
|
2203
2252
|
|
2204
2253
|
void XdsClient::WatchClusterData(
|
2205
2254
|
absl::string_view cluster_name,
|
2206
|
-
|
2255
|
+
RefCountedPtr<ClusterWatcherInterface> watcher) {
|
2207
2256
|
std::string cluster_name_str = std::string(cluster_name);
|
2208
|
-
MutexLock lock(&mu_);
|
2209
2257
|
ClusterWatcherInterface* w = watcher.get();
|
2210
2258
|
auto resource = XdsApi::ParseResourceName(cluster_name, XdsApi::IsCds);
|
2211
2259
|
if (!resource.ok()) {
|
2212
|
-
|
2260
|
+
{
|
2261
|
+
MutexLock lock(&mu_);
|
2262
|
+
invalid_cluster_watchers_[w] = watcher;
|
2263
|
+
}
|
2213
2264
|
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
2214
2265
|
"Unable to parse resource name for cluster %s", cluster_name));
|
2215
|
-
|
2266
|
+
work_serializer_.Run([watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
2267
|
+
work_serializer_) { watcher->OnError(error); },
|
2268
|
+
DEBUG_LOCATION);
|
2216
2269
|
return;
|
2217
2270
|
}
|
2218
|
-
|
2219
|
-
|
2220
|
-
|
2221
|
-
|
2222
|
-
|
2223
|
-
|
2224
|
-
|
2225
|
-
|
2226
|
-
|
2271
|
+
{
|
2272
|
+
MutexLock lock(&mu_);
|
2273
|
+
auto& authority_state = authority_state_map_[resource->authority];
|
2274
|
+
ClusterState& cluster_state = authority_state.cluster_map[resource->id];
|
2275
|
+
cluster_state.watchers[w] = watcher;
|
2276
|
+
// If we've already received a CDS update, notify the new watcher
|
2277
|
+
// immediately.
|
2278
|
+
if (cluster_state.update.has_value()) {
|
2279
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2280
|
+
gpr_log(GPR_INFO,
|
2281
|
+
"[xds_client %p] returning cached cluster data for %s", this,
|
2282
|
+
cluster_name_str.c_str());
|
2283
|
+
}
|
2284
|
+
auto& value = cluster_state.update.value();
|
2285
|
+
work_serializer_.Schedule(
|
2286
|
+
// TODO(yashykt): When we move to C++14, capture watcher using
|
2287
|
+
// std::move()
|
2288
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2289
|
+
watcher->OnClusterChanged(value);
|
2290
|
+
},
|
2291
|
+
DEBUG_LOCATION);
|
2227
2292
|
}
|
2228
|
-
|
2229
|
-
|
2230
|
-
|
2231
|
-
|
2232
|
-
|
2233
|
-
|
2293
|
+
// If the authority doesn't yet have a channel, set it, creating it if
|
2294
|
+
// needed.
|
2295
|
+
if (authority_state.channel_state == nullptr) {
|
2296
|
+
authority_state.channel_state =
|
2297
|
+
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2298
|
+
}
|
2299
|
+
authority_state.channel_state->SubscribeLocked(XdsApi::kCdsTypeUrl,
|
2300
|
+
*resource);
|
2234
2301
|
}
|
2235
|
-
|
2236
|
-
*resource);
|
2302
|
+
work_serializer_.DrainQueue();
|
2237
2303
|
}
|
2238
2304
|
|
2239
2305
|
void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
@@ -2262,38 +2328,53 @@ void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
|
2262
2328
|
|
2263
2329
|
void XdsClient::WatchEndpointData(
|
2264
2330
|
absl::string_view eds_service_name,
|
2265
|
-
|
2331
|
+
RefCountedPtr<EndpointWatcherInterface> watcher) {
|
2266
2332
|
std::string eds_service_name_str = std::string(eds_service_name);
|
2267
|
-
MutexLock lock(&mu_);
|
2268
2333
|
EndpointWatcherInterface* w = watcher.get();
|
2269
2334
|
auto resource = XdsApi::ParseResourceName(eds_service_name, XdsApi::IsEds);
|
2270
2335
|
if (!resource.ok()) {
|
2271
|
-
|
2336
|
+
{
|
2337
|
+
MutexLock lock(&mu_);
|
2338
|
+
invalid_endpoint_watchers_[w] = watcher;
|
2339
|
+
}
|
2272
2340
|
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2273
2341
|
absl::StrFormat("Unable to parse resource name for endpoint service %s",
|
2274
2342
|
eds_service_name));
|
2275
|
-
|
2343
|
+
work_serializer_.Run([watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
2344
|
+
work_serializer_) { watcher->OnError(error); },
|
2345
|
+
DEBUG_LOCATION);
|
2276
2346
|
return;
|
2277
2347
|
}
|
2278
|
-
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2284
|
-
|
2285
|
-
|
2286
|
-
|
2348
|
+
{
|
2349
|
+
MutexLock lock(&mu_);
|
2350
|
+
auto& authority_state = authority_state_map_[resource->authority];
|
2351
|
+
EndpointState& endpoint_state = authority_state.endpoint_map[resource->id];
|
2352
|
+
endpoint_state.watchers[w] = watcher;
|
2353
|
+
// If we've already received an EDS update, notify the new watcher
|
2354
|
+
// immediately.
|
2355
|
+
if (endpoint_state.update.has_value()) {
|
2356
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2357
|
+
gpr_log(GPR_INFO,
|
2358
|
+
"[xds_client %p] returning cached endpoint data for %s", this,
|
2359
|
+
eds_service_name_str.c_str());
|
2360
|
+
}
|
2361
|
+
auto& value = endpoint_state.update.value();
|
2362
|
+
work_serializer_.Schedule(
|
2363
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2364
|
+
watcher->OnEndpointChanged(value);
|
2365
|
+
},
|
2366
|
+
DEBUG_LOCATION);
|
2287
2367
|
}
|
2288
|
-
|
2289
|
-
|
2290
|
-
|
2291
|
-
|
2292
|
-
|
2293
|
-
|
2368
|
+
// If the authority doesn't yet have a channel, set it, creating it if
|
2369
|
+
// needed.
|
2370
|
+
if (authority_state.channel_state == nullptr) {
|
2371
|
+
authority_state.channel_state =
|
2372
|
+
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2373
|
+
}
|
2374
|
+
authority_state.channel_state->SubscribeLocked(XdsApi::kEdsTypeUrl,
|
2375
|
+
*resource);
|
2294
2376
|
}
|
2295
|
-
|
2296
|
-
*resource);
|
2377
|
+
work_serializer_.DrainQueue();
|
2297
2378
|
}
|
2298
2379
|
|
2299
2380
|
void XdsClient::CancelEndpointDataWatch(absl::string_view eds_service_name,
|
@@ -2453,33 +2534,57 @@ void XdsClient::ResetBackoff() {
|
|
2453
2534
|
}
|
2454
2535
|
|
2455
2536
|
void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
|
2537
|
+
std::set<RefCountedPtr<ListenerWatcherInterface>> listener_watchers;
|
2538
|
+
std::set<RefCountedPtr<RouteConfigWatcherInterface>> route_config_watchers;
|
2539
|
+
std::set<RefCountedPtr<ClusterWatcherInterface>> cluster_watchers;
|
2540
|
+
std::set<RefCountedPtr<EndpointWatcherInterface>> endpoint_watchers;
|
2456
2541
|
for (const auto& a : authority_state_map_) {
|
2457
2542
|
for (const auto& p : a.second.listener_map) {
|
2458
2543
|
const ListenerState& listener_state = p.second;
|
2459
|
-
for (const auto&
|
2460
|
-
|
2544
|
+
for (const auto& q : listener_state.watchers) {
|
2545
|
+
listener_watchers.insert(q.second);
|
2461
2546
|
}
|
2462
2547
|
}
|
2463
2548
|
for (const auto& p : a.second.route_config_map) {
|
2464
2549
|
const RouteConfigState& route_config_state = p.second;
|
2465
|
-
for (const auto&
|
2466
|
-
|
2550
|
+
for (const auto& q : route_config_state.watchers) {
|
2551
|
+
route_config_watchers.insert(q.second);
|
2467
2552
|
}
|
2468
2553
|
}
|
2469
2554
|
for (const auto& p : a.second.cluster_map) {
|
2470
2555
|
const ClusterState& cluster_state = p.second;
|
2471
|
-
for (const auto&
|
2472
|
-
|
2556
|
+
for (const auto& q : cluster_state.watchers) {
|
2557
|
+
cluster_watchers.insert(q.second);
|
2473
2558
|
}
|
2474
2559
|
}
|
2475
2560
|
for (const auto& p : a.second.endpoint_map) {
|
2476
2561
|
const EndpointState& endpoint_state = p.second;
|
2477
|
-
for (const auto&
|
2478
|
-
|
2562
|
+
for (const auto& q : endpoint_state.watchers) {
|
2563
|
+
endpoint_watchers.insert(q.second);
|
2479
2564
|
}
|
2480
2565
|
}
|
2481
2566
|
}
|
2482
|
-
|
2567
|
+
work_serializer_.Schedule(
|
2568
|
+
// TODO(yashykt): When we move to C++14, capture *_watchers using
|
2569
|
+
// std::move()
|
2570
|
+
[listener_watchers, route_config_watchers, cluster_watchers,
|
2571
|
+
endpoint_watchers, error]()
|
2572
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2573
|
+
for (const auto& watcher : listener_watchers) {
|
2574
|
+
watcher->OnError(GRPC_ERROR_REF(error));
|
2575
|
+
}
|
2576
|
+
for (const auto& watcher : route_config_watchers) {
|
2577
|
+
watcher->OnError(GRPC_ERROR_REF(error));
|
2578
|
+
}
|
2579
|
+
for (const auto& watcher : cluster_watchers) {
|
2580
|
+
watcher->OnError(GRPC_ERROR_REF(error));
|
2581
|
+
}
|
2582
|
+
for (const auto& watcher : endpoint_watchers) {
|
2583
|
+
watcher->OnError(GRPC_ERROR_REF(error));
|
2584
|
+
}
|
2585
|
+
GRPC_ERROR_UNREF(error);
|
2586
|
+
},
|
2587
|
+
DEBUG_LOCATION);
|
2483
2588
|
}
|
2484
2589
|
|
2485
2590
|
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
@@ -2625,7 +2730,7 @@ namespace {
|
|
2625
2730
|
std::string GetBootstrapContents(const char* fallback_config,
|
2626
2731
|
grpc_error_handle* error) {
|
2627
2732
|
// First, try GRPC_XDS_BOOTSTRAP env var.
|
2628
|
-
|
2733
|
+
UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
2629
2734
|
if (path != nullptr) {
|
2630
2735
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2631
2736
|
gpr_log(GPR_INFO,
|
@@ -2642,8 +2747,7 @@ std::string GetBootstrapContents(const char* fallback_config,
|
|
2642
2747
|
return contents_str;
|
2643
2748
|
}
|
2644
2749
|
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
2645
|
-
|
2646
|
-
gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2750
|
+
UniquePtr<char> env_config(gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2647
2751
|
if (env_config != nullptr) {
|
2648
2752
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2649
2753
|
gpr_log(GPR_INFO,
|