grpc 1.43.1 → 1.45.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +349 -216
- data/include/grpc/event_engine/event_engine.h +2 -2
- data/include/grpc/grpc.h +40 -14
- data/include/grpc/grpc_posix.h +20 -19
- data/include/grpc/grpc_security.h +36 -50
- data/include/grpc/impl/codegen/compression_types.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +17 -8
- data/include/grpc/impl/codegen/port_platform.h +2 -2
- data/include/grpc/impl/codegen/slice.h +4 -1
- data/include/grpc/slice.h +0 -11
- data/src/core/ext/filters/client_channel/backend_metric.cc +3 -3
- data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/backup_poller.cc +12 -8
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +5 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +140 -124
- data/src/core/ext/filters/client_channel/client_channel.h +38 -37
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +6 -12
- data/src/core/ext/filters/client_channel/config_selector.h +4 -4
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +2 -2
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -15
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +32 -31
- data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +10 -13
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +4 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +99 -79
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +50 -32
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +28 -19
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +161 -112
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +28 -19
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +65 -36
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +69 -117
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +10 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +259 -120
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +136 -226
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +120 -113
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -17
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +83 -61
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +40 -39
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +185 -96
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +13 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +236 -169
- data/src/core/ext/filters/client_channel/retry_service_config.cc +16 -18
- data/src/core/ext/filters/client_channel/retry_service_config.h +18 -12
- data/src/core/ext/filters/client_channel/retry_throttle.cc +9 -23
- data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +45 -52
- data/src/core/ext/filters/client_channel/subchannel.h +7 -7
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +96 -159
- data/src/core/ext/filters/client_idle/idle_filter_state.h +2 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +15 -14
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +53 -58
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +11 -13
- data/src/core/ext/filters/fault_injection/service_config_parser.h +10 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +58 -125
- data/src/core/ext/filters/http/client_authority_filter.cc +28 -87
- data/src/core/ext/filters/http/client_authority_filter.h +23 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +11 -12
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +43 -140
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +15 -27
- data/src/core/ext/filters/http/server/http_server_filter.cc +51 -135
- data/src/core/ext/filters/max_age/max_age_filter.cc +46 -40
- data/src/core/ext/filters/message_size/message_size_filter.cc +27 -35
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -3
- data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +12 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +234 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +236 -34
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +155 -233
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +342 -281
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +70 -160
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +29 -78
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
- data/src/core/ext/transport/chttp2/transport/internal.h +6 -39
- data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -9
- data/src/core/ext/transport/chttp2/transport/writing.cc +62 -128
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +27 -75
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +114 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +402 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +119 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +453 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +165 -163
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +798 -575
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +93 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +103 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +466 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +95 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -20
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +17 -16
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +31 -23
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +90 -88
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +421 -317
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +156 -152
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +787 -571
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +27 -25
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +115 -79
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +206 -204
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +954 -662
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +33 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +29 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +127 -79
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +290 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1122 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +49 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +221 -159
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +33 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +154 -151
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +691 -499
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +39 -37
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +178 -130
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +25 -19
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +18 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +74 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +100 -98
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +449 -329
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +77 -75
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +365 -264
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +36 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +140 -105
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +675 -345
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +25 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +59 -42
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +39 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +14 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +45 -35
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +34 -24
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +31 -29
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +113 -85
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +47 -45
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +210 -151
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +48 -46
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +210 -142
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +28 -20
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +58 -54
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +282 -193
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +64 -62
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +286 -218
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +62 -42
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +12 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +54 -39
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +120 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +55 -53
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +244 -185
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +57 -55
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +260 -192
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +70 -68
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +235 -191
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +30 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +142 -112
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +435 -428
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2037 -1507
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +25 -19
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +107 -64
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +216 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +870 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +82 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +95 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +55 -40
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +119 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +203 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +184 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +192 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +126 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +29 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +26 -24
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +125 -93
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +33 -31
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +149 -105
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +165 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +53 -37
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +175 -173
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +803 -559
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +75 -52
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +368 -194
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +24 -22
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +95 -71
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +60 -58
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +266 -193
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +22 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +64 -62
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +297 -218
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +18 -16
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +73 -54
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +46 -44
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +197 -145
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +101 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +19 -17
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +91 -70
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +16 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +64 -47
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +34 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +25 -19
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +25 -19
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +21 -19
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +85 -61
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +19 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +65 -52
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +14 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +56 -43
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +21 -19
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +74 -58
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +30 -28
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +163 -125
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +34 -32
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +157 -113
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +183 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +3 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +51 -34
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +19 -17
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +80 -52
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +31 -19
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +114 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +10 -8
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +6 -5
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +100 -98
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +371 -281
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +110 -108
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +409 -298
- data/src/core/ext/upb-generated/google/api/http.upb.c +29 -27
- data/src/core/ext/upb-generated/google/api/http.upb.h +117 -89
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +32 -22
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +287 -234
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1088 -764
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +28 -18
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +6 -4
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +22 -16
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +30 -28
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +80 -64
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +28 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +40 -38
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +213 -149
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +11 -9
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +36 -26
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +276 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +20 -18
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +60 -42
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +95 -93
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +396 -285
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +15 -13
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +58 -39
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +12 -10
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +50 -35
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +55 -53
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +255 -183
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +22 -20
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +76 -57
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +46 -44
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +102 -78
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +16 -14
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +32 -22
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +9 -7
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +6 -5
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +16 -14
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +32 -22
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +15 -13
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +31 -23
- data/src/core/ext/upb-generated/validate/validate.upb.c +320 -304
- data/src/core/ext/upb-generated/validate/validate.upb.h +1114 -741
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +87 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +40 -38
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +109 -78
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +81 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +8 -6
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +27 -19
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +17 -15
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +63 -46
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +14 -12
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +31 -25
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +95 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +11 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +39 -27
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +20 -18
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +73 -54
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +12 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +43 -29
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +23 -21
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +43 -31
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +203 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +726 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +132 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +173 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +10 -8
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +33 -23
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +14 -12
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +8 -6
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +8 -6
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +20 -17
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +248 -240
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +16 -13
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +375 -371
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -13
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +15 -13
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +85 -80
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +18 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +14 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +23 -20
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +14 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +250 -221
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +18 -15
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +13 -11
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +18 -15
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +19 -16
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +18 -15
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +52 -45
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +23 -20
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +19 -16
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +19 -16
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +816 -801
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +160 -160
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +52 -37
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +15 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +18 -15
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +135 -130
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +58 -58
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +15 -11
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +169 -140
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +19 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +21 -17
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +17 -14
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +16 -13
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +20 -17
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +14 -12
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +16 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +10 -8
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +12 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +11 -8
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +11 -9
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +3 -3
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +5 -5
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/upb_utils.h +67 -0
- data/src/core/ext/xds/xds_api.cc +127 -3487
- data/src/core/ext/xds/xds_api.h +60 -615
- data/src/core/ext/xds/xds_bootstrap.cc +221 -125
- data/src/core/ext/xds/xds_bootstrap.h +31 -15
- data/src/core/ext/xds/xds_certificate_provider.h +1 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -17
- data/src/core/ext/xds/xds_channel_stack_modifier.h +4 -3
- data/src/core/ext/xds/xds_client.cc +702 -1077
- data/src/core/ext/xds/xds_client.h +101 -150
- data/src/core/ext/xds/xds_client_stats.cc +15 -15
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_cluster.cc +453 -0
- data/src/core/ext/xds/xds_cluster.h +108 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +95 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +6 -6
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.cc +11 -5
- data/src/core/ext/xds/xds_http_filters.h +4 -4
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1039 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +985 -0
- data/src/core/ext/xds/xds_route_config.h +215 -0
- data/src/core/ext/xds/xds_routing.cc +12 -9
- data/src/core/ext/xds/xds_routing.h +8 -5
- data/src/core/ext/xds/xds_server_config_fetcher.cc +162 -101
- data/src/core/lib/address_utils/parse_address.cc +20 -0
- data/src/core/lib/address_utils/parse_address.h +5 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
- data/src/core/lib/backoff/backoff.cc +8 -37
- data/src/core/lib/backoff/backoff.h +11 -11
- data/src/core/lib/channel/call_finalization.h +86 -0
- data/src/core/lib/channel/channel_args.cc +60 -1
- data/src/core/lib/channel/channel_args.h +2 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_stack.cc +10 -3
- data/src/core/lib/channel/channel_stack.h +42 -6
- data/src/core/lib/channel/channel_stack_builder.cc +66 -248
- data/src/core/lib/channel/channel_stack_builder.h +95 -147
- data/src/core/lib/channel/channel_trace.cc +3 -6
- data/src/core/lib/channel/channelz.cc +1 -0
- data/src/core/lib/channel/connected_channel.cc +9 -4
- data/src/core/lib/channel/connected_channel.h +1 -1
- data/src/core/lib/channel/context.h +11 -0
- data/src/core/lib/channel/handshaker.cc +1 -1
- data/src/core/lib/channel/handshaker.h +1 -1
- data/src/core/lib/channel/promise_based_filter.cc +669 -0
- data/src/core/lib/channel/promise_based_filter.h +423 -0
- data/src/core/lib/compression/compression.cc +20 -112
- data/src/core/lib/compression/compression_internal.cc +143 -203
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/config/core_configuration.cc +8 -2
- data/src/core/lib/config/core_configuration.h +39 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
- data/src/core/lib/event_engine/event_engine.cc +23 -8
- data/src/core/lib/event_engine/event_engine_factory.h +3 -0
- data/src/core/lib/event_engine/memory_allocator.cc +9 -13
- data/src/core/lib/event_engine/{event_engine_factory.cc → resolved_address.cc} +10 -20
- data/src/core/lib/gpr/sync_posix.cc +1 -0
- data/src/core/lib/gpr/time.cc +2 -1
- data/src/core/lib/gpr/useful.h +18 -0
- data/src/core/lib/gprpp/bitset.h +7 -0
- data/src/core/lib/gprpp/capture.h +76 -0
- data/src/core/lib/gprpp/chunked_vector.h +45 -3
- data/src/core/lib/gprpp/debug_location.h +2 -0
- data/src/core/lib/gprpp/status_helper.cc +30 -38
- data/src/core/lib/gprpp/status_helper.h +6 -19
- data/src/core/lib/gprpp/table.h +11 -0
- data/src/core/lib/gprpp/time.cc +186 -0
- data/src/core/lib/gprpp/time.h +292 -0
- data/src/core/lib/http/format_request.cc +27 -23
- data/src/core/lib/http/format_request.h +7 -6
- data/src/core/lib/http/httpcli.cc +307 -239
- data/src/core/lib/http/httpcli.h +182 -89
- data/src/core/lib/http/httpcli_security_connector.cc +62 -73
- data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
- data/src/core/lib/http/parser.h +1 -1
- data/src/core/lib/iomgr/buffer_list.h +5 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -4
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +25 -3
- data/src/core/lib/iomgr/error.cc +13 -10
- data/src/core/lib/iomgr/error.h +0 -2
- data/src/core/lib/iomgr/ev_apple.cc +6 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +8 -7
- data/src/core/lib/iomgr/ev_epollex_linux.cc +12 -9
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -7
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.h +1 -1
- data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
- data/src/core/lib/iomgr/event_engine/pollset.cc +2 -3
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +4 -3
- data/src/core/lib/iomgr/event_engine/timer.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.cc +25 -97
- data/src/core/lib/iomgr/exec_ctx.h +7 -23
- data/src/core/lib/iomgr/executor.cc +10 -1
- data/src/core/lib/iomgr/fork_posix.cc +3 -2
- data/src/core/lib/iomgr/iocp_windows.cc +9 -9
- data/src/core/lib/iomgr/iocp_windows.h +1 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.h +6 -0
- data/src/core/lib/iomgr/pollset.cc +1 -1
- data/src/core/lib/iomgr/pollset.h +4 -4
- data/src/core/lib/iomgr/pollset_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +6 -9
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +83 -67
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +0 -17
- data/src/core/lib/iomgr/tcp_client.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.h +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
- data/src/core/lib/iomgr/tcp_windows.cc +17 -10
- data/src/core/lib/iomgr/timer.cc +2 -2
- data/src/core/lib/iomgr/timer.h +11 -6
- data/src/core/lib/iomgr/timer_generic.cc +96 -77
- data/src/core/lib/iomgr/timer_manager.cc +15 -14
- data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/iomgr/work_serializer.cc +15 -10
- data/src/core/lib/json/json_util.cc +4 -4
- data/src/core/lib/json/json_util.h +2 -2
- data/src/core/lib/matchers/matchers.cc +1 -1
- data/src/core/lib/promise/activity.cc +14 -8
- data/src/core/lib/promise/activity.h +183 -142
- data/src/core/lib/promise/arena_promise.h +188 -0
- data/src/core/lib/promise/detail/basic_seq.h +92 -3
- data/src/core/lib/promise/detail/promise_factory.h +1 -1
- data/src/core/lib/promise/detail/status.h +5 -0
- data/src/core/lib/promise/loop.h +34 -8
- data/src/core/lib/promise/poll.h +6 -0
- data/src/core/lib/promise/promise.h +95 -0
- data/src/core/lib/promise/seq.h +19 -1
- data/src/core/lib/promise/sleep.cc +74 -0
- data/src/core/lib/promise/sleep.h +66 -0
- data/src/core/lib/promise/try_seq.h +157 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -31
- data/src/core/lib/resolver/resolver_registry.cc +156 -0
- data/src/core/lib/resolver/resolver_registry.h +113 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.h +0 -1
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
- data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
- data/src/core/lib/resource_quota/memory_quota.cc +118 -94
- data/src/core/lib/resource_quota/memory_quota.h +100 -64
- data/src/core/lib/security/authorization/evaluate_args.cc +26 -21
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +109 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +51 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +171 -0
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -0
- data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
- data/src/core/lib/security/credentials/call_creds_util.h +42 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -81
- data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -9
- data/src/core/lib/security/credentials/credentials.cc +2 -3
- data/src/core/lib/security/credentials/credentials.h +68 -57
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +46 -30
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +51 -33
- data/src/core/lib/security/credentials/external/external_account_credentials.h +5 -9
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +0 -1
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +33 -13
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +18 -18
- data/src/core/lib/security/credentials/fake/fake_credentials.h +14 -16
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +16 -13
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +6 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -27
- data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -9
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +13 -7
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +27 -43
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -12
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +54 -41
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +6 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +137 -158
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +52 -33
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +95 -153
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +54 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +6 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +25 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +17 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +8 -14
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +4 -12
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +6 -16
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +4 -9
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -16
- data/src/core/lib/security/security_connector/security_connector.cc +3 -15
- data/src/core/lib/security/security_connector/security_connector.h +16 -21
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/ssl_utils.cc +29 -31
- data/src/core/lib/security/security_connector/ssl_utils.h +13 -17
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +6 -6
- data/src/core/lib/security/transport/auth_filters.h +37 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +87 -358
- data/src/core/lib/security/transport/security_handshaker.cc +14 -6
- data/src/core/lib/security/transport/server_auth_filter.cc +41 -35
- data/src/core/lib/service_config/service_config.h +82 -0
- data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
- data/src/core/{ext/service_config/service_config.cc → lib/service_config/service_config_impl.cc} +20 -17
- data/src/core/{ext/service_config/service_config.h → lib/service_config/service_config_impl.h} +16 -18
- data/src/core/{ext → lib}/service_config/service_config_parser.cc +31 -27
- data/src/core/{ext → lib}/service_config/service_config_parser.h +39 -30
- data/src/core/lib/slice/slice.cc +76 -179
- data/src/core/lib/slice/slice.h +67 -24
- data/src/core/lib/slice/slice_internal.h +12 -31
- data/src/core/lib/slice/slice_refcount.cc +18 -0
- data/src/core/lib/slice/slice_refcount.h +6 -85
- data/src/core/lib/slice/slice_refcount_base.h +16 -136
- data/src/core/lib/surface/builtins.cc +6 -6
- data/src/core/lib/surface/call.cc +152 -387
- data/src/core/lib/surface/call.h +5 -5
- data/src/core/lib/surface/channel.cc +64 -71
- data/src/core/lib/surface/channel.h +10 -11
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/channel_init.h +4 -4
- data/src/core/lib/surface/completion_queue.cc +10 -9
- data/src/core/lib/surface/init.cc +78 -9
- data/src/core/lib/surface/init.h +0 -2
- data/src/core/lib/surface/lame_client.cc +2 -2
- data/src/core/lib/surface/server.cc +23 -51
- data/src/core/lib/surface/server.h +5 -5
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +9 -10
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/error_utils.cc +5 -3
- data/src/core/lib/transport/error_utils.h +2 -1
- data/src/core/lib/transport/metadata_batch.h +1010 -750
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +115 -96
- data/src/core/lib/transport/status_conversion.cc +2 -2
- data/src/core/lib/transport/status_conversion.h +1 -1
- data/src/core/lib/transport/timeout_encoding.cc +204 -67
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.cc +3 -1
- data/src/core/lib/transport/transport.h +88 -3
- data/src/core/lib/transport/transport_impl.h +13 -0
- data/src/core/lib/transport/transport_op_string.cc +5 -47
- data/src/core/lib/uri/uri_parser.cc +227 -53
- data/src/core/lib/uri/uri_parser.h +37 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +19 -87
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +27 -22
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +19 -11
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/local_transport_security.cc +3 -11
- data/src/core/tsi/local_transport_security.h +1 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
- data/src/core/tsi/ssl_transport_security.cc +105 -14
- data/src/core/tsi/ssl_transport_security.h +38 -6
- data/src/ruby/ext/grpc/extconf.rb +10 -3
- data/src/ruby/ext/grpc/rb_channel.c +5 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +20 -24
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +30 -36
- data/src/ruby/ext/grpc/rb_server.c +7 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
- data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
- data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
- data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
- data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
- data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
- data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
- data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_android.c +444 -0
- data/third_party/cares/cares/src/lib/ares_android.h +27 -0
- data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
- data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
- data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
- data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
- data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
- data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
- data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
- data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
- data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
- data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
- data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
- data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
- data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
- data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
- data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
- data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
- data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
- data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
- data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
- data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
- data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
- data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
- data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
- data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
- data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
- data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
- data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
- data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
- data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
- data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
- data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
- data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
- data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
- data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
- data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
- data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
- data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
- data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
- data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
- data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
- data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
- data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
- data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
- data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
- data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
- data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
- data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
- data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
- data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
- data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
- data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
- data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
- data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
- data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
- data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
- data/third_party/cares/cares/src/lib/config-dos.h +115 -0
- data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
- data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
- data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
- data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
- data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
- data/third_party/upb/third_party/utf8_range/naive.c +92 -0
- data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
- data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
- data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
- data/third_party/upb/upb/decode.c +526 -319
- data/third_party/upb/upb/decode.h +43 -17
- data/third_party/upb/upb/decode_fast.c +303 -301
- data/third_party/upb/upb/decode_fast.h +18 -18
- data/third_party/upb/upb/decode_internal.h +73 -56
- data/third_party/upb/upb/def.c +1863 -1078
- data/third_party/upb/upb/def.h +318 -286
- data/third_party/upb/upb/def.hpp +129 -172
- data/third_party/upb/upb/encode.c +202 -175
- data/third_party/upb/upb/encode.h +15 -17
- data/third_party/upb/upb/msg.c +144 -124
- data/third_party/upb/upb/msg.h +40 -33
- data/third_party/upb/upb/msg_internal.h +321 -272
- data/third_party/upb/upb/reflection.c +239 -199
- data/third_party/upb/upb/reflection.h +87 -67
- data/third_party/upb/upb/reflection.hpp +6 -6
- data/third_party/upb/upb/table.c +222 -142
- data/third_party/upb/upb/table_internal.h +128 -96
- data/third_party/upb/upb/text_encode.c +113 -90
- data/third_party/upb/upb/text_encode.h +10 -10
- data/third_party/upb/upb/upb.c +111 -72
- data/third_party/upb/upb/upb.h +120 -144
- data/third_party/upb/upb/upb.hpp +31 -28
- data/third_party/upb/upb/upb_internal.h +21 -11
- data/third_party/xxhash/xxhash.h +607 -352
- metadata +406 -203
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
- data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -194
- data/src/core/ext/filters/client_channel/resolver_registry.h +0 -88
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -122
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -92
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -192
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -52
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -79
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -64
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -38
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -64
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +0 -102
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +0 -306
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +0 -56
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +0 -135
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +0 -115
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +0 -371
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -67
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -67
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -75
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -69
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -140
- data/src/core/lib/compression/compression_args.h +0 -58
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
- data/src/core/lib/iomgr/iomgr_custom.h +0 -49
- data/src/core/lib/iomgr/pollset_custom.cc +0 -105
- data/src/core/lib/iomgr/pollset_custom.h +0 -37
- data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
- data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
- data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
- data/src/core/lib/iomgr/tcp_client_custom.cc +0 -146
- data/src/core/lib/iomgr/tcp_custom.cc +0 -350
- data/src/core/lib/iomgr/tcp_custom.h +0 -85
- data/src/core/lib/iomgr/tcp_server_custom.cc +0 -457
- data/src/core/lib/iomgr/timer_custom.cc +0 -96
- data/src/core/lib/iomgr/timer_custom.h +0 -43
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -173
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/slice/slice_intern.cc +0 -367
- data/src/core/lib/slice/slice_utils.h +0 -200
- data/src/core/lib/slice/static_slice.cc +0 -377
- data/src/core/lib/slice/static_slice.h +0 -300
- data/src/core/lib/surface/init_secure.cc +0 -103
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/metadata_batch.cc +0 -99
- data/src/core/lib/transport/static_metadata.cc +0 -1032
- data/src/core/lib/transport/static_metadata.h +0 -322
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
- data/third_party/cares/cares/ares_getopt.c +0 -122
- data/third_party/cares/cares/ares_getopt.h +0 -53
- data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
- data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
@@ -37,11 +37,15 @@
|
|
37
37
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
38
38
|
#include "src/core/ext/xds/xds_channel_args.h"
|
39
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
40
|
+
#include "src/core/ext/xds/xds_cluster.h"
|
41
|
+
#include "src/core/ext/xds/xds_endpoint.h"
|
40
42
|
#include "src/core/ext/xds/xds_http_filters.h"
|
43
|
+
#include "src/core/ext/xds/xds_listener.h"
|
41
44
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
42
45
|
#include "src/core/lib/backoff/backoff.h"
|
43
46
|
#include "src/core/lib/channel/channel_args.h"
|
44
47
|
#include "src/core/lib/channel/channel_stack.h"
|
48
|
+
#include "src/core/lib/config/core_configuration.h"
|
45
49
|
#include "src/core/lib/gpr/env.h"
|
46
50
|
#include "src/core/lib/gpr/string.h"
|
47
51
|
#include "src/core/lib/gprpp/memory.h"
|
@@ -50,11 +54,12 @@
|
|
50
54
|
#include "src/core/lib/gprpp/sync.h"
|
51
55
|
#include "src/core/lib/iomgr/sockaddr.h"
|
52
56
|
#include "src/core/lib/iomgr/timer.h"
|
57
|
+
#include "src/core/lib/security/credentials/channel_creds_registry.h"
|
53
58
|
#include "src/core/lib/slice/slice_internal.h"
|
54
59
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
55
60
|
#include "src/core/lib/surface/call.h"
|
56
61
|
#include "src/core/lib/surface/channel.h"
|
57
|
-
#include "src/core/lib/
|
62
|
+
#include "src/core/lib/surface/lame_client.h"
|
58
63
|
#include "src/core/lib/uri/uri_parser.h"
|
59
64
|
|
60
65
|
#define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
@@ -172,21 +177,53 @@ class XdsClient::ChannelState::AdsCallState
|
|
172
177
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
173
178
|
bool seen_response() const { return seen_response_; }
|
174
179
|
|
175
|
-
void SubscribeLocked(const
|
176
|
-
const XdsApi::ResourceName& name)
|
180
|
+
void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name)
|
177
181
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
178
|
-
void UnsubscribeLocked(const
|
179
|
-
const
|
180
|
-
bool delay_unsubscription)
|
182
|
+
void UnsubscribeLocked(const XdsResourceType* type,
|
183
|
+
const XdsResourceName& name, bool delay_unsubscription)
|
181
184
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
182
185
|
|
183
186
|
bool HasSubscribedResources() const;
|
184
187
|
|
185
188
|
private:
|
186
|
-
class
|
189
|
+
class AdsResponseParser : public XdsApi::AdsResponseParserInterface {
|
187
190
|
public:
|
188
|
-
|
189
|
-
|
191
|
+
struct Result {
|
192
|
+
const XdsResourceType* type;
|
193
|
+
std::string type_url;
|
194
|
+
std::string version;
|
195
|
+
std::string nonce;
|
196
|
+
std::vector<std::string> errors;
|
197
|
+
std::map<std::string /*authority*/, std::set<XdsResourceKey>>
|
198
|
+
resources_seen;
|
199
|
+
bool have_valid_resources = false;
|
200
|
+
};
|
201
|
+
|
202
|
+
explicit AdsResponseParser(AdsCallState* ads_call_state)
|
203
|
+
: ads_call_state_(ads_call_state) {}
|
204
|
+
|
205
|
+
absl::Status ProcessAdsResponseFields(AdsResponseFields fields) override
|
206
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
207
|
+
|
208
|
+
void ParseResource(const XdsEncodingContext& context, size_t idx,
|
209
|
+
absl::string_view type_url,
|
210
|
+
absl::string_view serialized_resource) override
|
211
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
212
|
+
|
213
|
+
Result TakeResult() { return std::move(result_); }
|
214
|
+
|
215
|
+
private:
|
216
|
+
XdsClient* xds_client() const { return ads_call_state_->xds_client(); }
|
217
|
+
|
218
|
+
AdsCallState* ads_call_state_;
|
219
|
+
const Timestamp update_time_ = ExecCtx::Get()->Now();
|
220
|
+
Result result_;
|
221
|
+
};
|
222
|
+
|
223
|
+
class ResourceTimer : public InternallyRefCounted<ResourceTimer> {
|
224
|
+
public:
|
225
|
+
ResourceTimer(const XdsResourceType* type, const XdsResourceName& name)
|
226
|
+
: type_(type), name_(name) {
|
190
227
|
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
191
228
|
grpc_schedule_on_exec_ctx);
|
192
229
|
}
|
@@ -217,7 +254,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
217
254
|
|
218
255
|
private:
|
219
256
|
static void OnTimer(void* arg, grpc_error_handle error) {
|
220
|
-
|
257
|
+
ResourceTimer* self = static_cast<ResourceTimer*>(arg);
|
221
258
|
{
|
222
259
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
223
260
|
self->OnTimerLocked(GRPC_ERROR_REF(error));
|
@@ -234,51 +271,30 @@ class XdsClient::ChannelState::AdsCallState
|
|
234
271
|
grpc_error_handle watcher_error =
|
235
272
|
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
236
273
|
"timeout obtaining resource {type=%s name=%s} from xds server",
|
237
|
-
|
238
|
-
|
239
|
-
|
274
|
+
type_->type_url(),
|
275
|
+
XdsClient::ConstructFullXdsResourceName(
|
276
|
+
name_.authority, type_->type_url(), name_.key)));
|
240
277
|
watcher_error = grpc_error_set_int(
|
241
278
|
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
242
279
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
243
|
-
gpr_log(GPR_INFO, "[xds_client %p] %s",
|
280
|
+
gpr_log(GPR_INFO, "[xds_client %p] xds server %s: %s",
|
281
|
+
ads_calld_->xds_client(),
|
282
|
+
ads_calld_->chand()->server_.server_uri.c_str(),
|
244
283
|
grpc_error_std_string(watcher_error).c_str());
|
245
284
|
}
|
246
285
|
auto& authority_state =
|
247
286
|
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
254
|
-
} else if (type_url_ == XdsApi::kRdsTypeUrl) {
|
255
|
-
RouteConfigState& state = authority_state.route_config_map[name_.id];
|
256
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
257
|
-
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
258
|
-
ads_calld_->xds_client(), state.watchers,
|
259
|
-
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
260
|
-
} else if (type_url_ == XdsApi::kCdsTypeUrl) {
|
261
|
-
ClusterState& state = authority_state.cluster_map[name_.id];
|
262
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
263
|
-
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
264
|
-
ads_calld_->xds_client(), state.watchers,
|
265
|
-
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
266
|
-
} else if (type_url_ == XdsApi::kEdsTypeUrl) {
|
267
|
-
EndpointState& state = authority_state.endpoint_map[name_.id];
|
268
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
269
|
-
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
270
|
-
ads_calld_->xds_client(), state.watchers,
|
271
|
-
GRPC_ERROR_REF(watcher_error), DEBUG_LOCATION);
|
272
|
-
} else {
|
273
|
-
GPR_UNREACHABLE_CODE(return );
|
274
|
-
}
|
275
|
-
GRPC_ERROR_UNREF(watcher_error);
|
287
|
+
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
288
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
289
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
290
|
+
ads_calld_->xds_client(), state.watchers, watcher_error,
|
291
|
+
DEBUG_LOCATION);
|
276
292
|
}
|
277
293
|
GRPC_ERROR_UNREF(error);
|
278
294
|
}
|
279
295
|
|
280
|
-
const
|
281
|
-
const
|
296
|
+
const XdsResourceType* type_;
|
297
|
+
const XdsResourceName name_;
|
282
298
|
|
283
299
|
RefCountedPtr<AdsCallState> ads_calld_;
|
284
300
|
bool timer_started_ = false;
|
@@ -296,40 +312,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
296
312
|
|
297
313
|
// Subscribed resources of this type.
|
298
314
|
std::map<std::string /*authority*/,
|
299
|
-
std::map<
|
315
|
+
std::map<XdsResourceKey, OrphanablePtr<ResourceTimer>>>
|
300
316
|
subscribed_resources;
|
301
317
|
};
|
302
318
|
|
303
|
-
void SendMessageLocked(const
|
304
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
305
|
-
|
306
|
-
void AcceptLdsUpdateLocked(
|
307
|
-
std::string version, grpc_millis update_time,
|
308
|
-
XdsApi::LdsUpdateMap lds_update_map,
|
309
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed)
|
310
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
311
|
-
void AcceptRdsUpdateLocked(std::string version, grpc_millis update_time,
|
312
|
-
XdsApi::RdsUpdateMap rds_update_map)
|
313
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
314
|
-
void AcceptCdsUpdateLocked(
|
315
|
-
std::string version, grpc_millis update_time,
|
316
|
-
XdsApi::CdsUpdateMap cds_update_map,
|
317
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed)
|
318
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
319
|
-
void AcceptEdsUpdateLocked(std::string version, grpc_millis update_time,
|
320
|
-
XdsApi::EdsUpdateMap eds_update_map)
|
321
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
322
|
-
|
323
|
-
template <typename StateMap>
|
324
|
-
void RejectAdsUpdateHelperLocked(const std::string& resource_name,
|
325
|
-
grpc_millis update_time,
|
326
|
-
const XdsApi::AdsParseResult& result,
|
327
|
-
const std::string& error_details,
|
328
|
-
StateMap* state_map)
|
329
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
330
|
-
|
331
|
-
void RejectAdsUpdateLocked(grpc_millis update_time,
|
332
|
-
const XdsApi::AdsParseResult& result)
|
319
|
+
void SendMessageLocked(const XdsResourceType* type)
|
333
320
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
334
321
|
|
335
322
|
static void OnRequestSent(void* arg, grpc_error_handle error);
|
@@ -344,9 +331,9 @@ class XdsClient::ChannelState::AdsCallState
|
|
344
331
|
|
345
332
|
bool IsCurrentCallOnChannel() const;
|
346
333
|
|
347
|
-
|
348
|
-
|
349
|
-
ResourceNamesForRequest(const
|
334
|
+
// Constructs a list of resource names of a given type for an ADS
|
335
|
+
// request. Also starts the timer for each resource if needed.
|
336
|
+
std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type);
|
350
337
|
|
351
338
|
// The owning RetryableCall<>.
|
352
339
|
RefCountedPtr<RetryableCall<AdsCallState>> parent_;
|
@@ -375,10 +362,10 @@ class XdsClient::ChannelState::AdsCallState
|
|
375
362
|
grpc_closure on_status_received_;
|
376
363
|
|
377
364
|
// Resource types for which requests need to be sent.
|
378
|
-
std::set<
|
365
|
+
std::set<const XdsResourceType*> buffered_requests_;
|
379
366
|
|
380
367
|
// State for each resource type.
|
381
|
-
std::map<
|
368
|
+
std::map<const XdsResourceType*, ResourceTypeState> state_map_;
|
382
369
|
};
|
383
370
|
|
384
371
|
// Contains an LRS call to the xds server.
|
@@ -402,7 +389,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
402
389
|
// Reports client-side load stats according to a fixed interval.
|
403
390
|
class Reporter : public InternallyRefCounted<Reporter> {
|
404
391
|
public:
|
405
|
-
Reporter(RefCountedPtr<LrsCallState> parent,
|
392
|
+
Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
|
406
393
|
: parent_(std::move(parent)), report_interval_(report_interval) {
|
407
394
|
GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
|
408
395
|
grpc_schedule_on_exec_ctx);
|
@@ -433,7 +420,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
433
420
|
RefCountedPtr<LrsCallState> parent_;
|
434
421
|
|
435
422
|
// The load reporting state.
|
436
|
-
const
|
423
|
+
const Duration report_interval_;
|
437
424
|
bool last_report_counters_were_zero_ = false;
|
438
425
|
bool next_report_timer_callback_pending_ = false;
|
439
426
|
grpc_timer next_report_timer_;
|
@@ -480,7 +467,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
480
467
|
// Load reporting state.
|
481
468
|
bool send_all_clusters_ = false;
|
482
469
|
std::set<std::string> cluster_names_; // Asked for by the LRS server.
|
483
|
-
|
470
|
+
Duration load_reporting_interval_;
|
484
471
|
OrphanablePtr<Reporter> reporter_;
|
485
472
|
};
|
486
473
|
|
@@ -503,12 +490,14 @@ class XdsClient::ChannelState::StateWatcher
|
|
503
490
|
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
504
491
|
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
505
492
|
gpr_log(GPR_INFO,
|
506
|
-
"[xds_client %p] xds channel in
|
507
|
-
"
|
508
|
-
parent_->xds_client(),
|
493
|
+
"[xds_client %p] xds channel for server %s in "
|
494
|
+
"state TRANSIENT_FAILURE: %s",
|
495
|
+
parent_->xds_client(), parent_->server_.server_uri.c_str(),
|
496
|
+
status.ToString().c_str());
|
509
497
|
parent_->xds_client_->NotifyOnErrorLocked(
|
510
|
-
|
511
|
-
"xds channel in TRANSIENT_FAILURE"
|
498
|
+
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
499
|
+
"xds channel in TRANSIENT_FAILURE, connectivity error: ",
|
500
|
+
status.ToString())));
|
512
501
|
}
|
513
502
|
}
|
514
503
|
parent_->xds_client()->work_serializer_.DrainQueue();
|
@@ -526,10 +515,10 @@ namespace {
|
|
526
515
|
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
527
516
|
const XdsBootstrap::XdsServer& server) {
|
528
517
|
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
529
|
-
|
530
|
-
|
531
|
-
return
|
532
|
-
|
518
|
+
CoreConfiguration::Get().channel_creds_registry().CreateChannelCreds(
|
519
|
+
server.channel_creds_type, server.channel_creds_config);
|
520
|
+
return grpc_channel_create(server.server_uri.c_str(), channel_creds.get(),
|
521
|
+
args);
|
533
522
|
}
|
534
523
|
|
535
524
|
} // namespace
|
@@ -553,8 +542,8 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
553
542
|
|
554
543
|
XdsClient::ChannelState::~ChannelState() {
|
555
544
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
556
|
-
gpr_log(GPR_INFO, "[xds_client %p]
|
557
|
-
this);
|
545
|
+
gpr_log(GPR_INFO, "[xds_client %p] destroying xds channel %p for server %s",
|
546
|
+
xds_client(), this, server_.server_uri.c_str());
|
558
547
|
}
|
559
548
|
grpc_channel_destroy(channel_);
|
560
549
|
xds_client_.reset(DEBUG_LOCATION, "ChannelState");
|
@@ -595,9 +584,27 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
595
584
|
WeakRef(DEBUG_LOCATION, "ChannelState+lrs")));
|
596
585
|
}
|
597
586
|
|
598
|
-
void XdsClient::ChannelState::
|
587
|
+
void XdsClient::ChannelState::StopLrsCallLocked() {
|
588
|
+
xds_client_->xds_load_report_server_map_.erase(server_);
|
589
|
+
lrs_calld_.reset();
|
590
|
+
}
|
591
|
+
|
592
|
+
namespace {
|
593
|
+
|
594
|
+
bool IsLameChannel(grpc_channel* channel) {
|
595
|
+
grpc_channel_element* elem =
|
596
|
+
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
597
|
+
return elem->filter == &grpc_lame_filter;
|
598
|
+
}
|
599
|
+
|
600
|
+
} // namespace
|
599
601
|
|
600
602
|
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
603
|
+
if (IsLameChannel(channel_)) {
|
604
|
+
xds_client()->NotifyOnErrorLocked(
|
605
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds client has a lame channel"));
|
606
|
+
return;
|
607
|
+
}
|
601
608
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
602
609
|
GPR_ASSERT(client_channel != nullptr);
|
603
610
|
watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
|
@@ -607,13 +614,16 @@ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
|
607
614
|
}
|
608
615
|
|
609
616
|
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
617
|
+
if (IsLameChannel(channel_)) {
|
618
|
+
return;
|
619
|
+
}
|
610
620
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
611
621
|
GPR_ASSERT(client_channel != nullptr);
|
612
622
|
client_channel->RemoveConnectivityWatcher(watcher_);
|
613
623
|
}
|
614
624
|
|
615
|
-
void XdsClient::ChannelState::SubscribeLocked(
|
616
|
-
|
625
|
+
void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
|
626
|
+
const XdsResourceName& name) {
|
617
627
|
if (ads_calld_ == nullptr) {
|
618
628
|
// Start the ADS call if this is the first request.
|
619
629
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -627,16 +637,16 @@ void XdsClient::ChannelState::SubscribeLocked(
|
|
627
637
|
// because when the call is restarted it will resend all necessary requests.
|
628
638
|
if (ads_calld() == nullptr) return;
|
629
639
|
// Subscribe to this resource if the ADS call is active.
|
630
|
-
ads_calld()->SubscribeLocked(
|
640
|
+
ads_calld()->SubscribeLocked(type, name);
|
631
641
|
}
|
632
642
|
|
633
|
-
void XdsClient::ChannelState::UnsubscribeLocked(
|
634
|
-
|
635
|
-
|
643
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
|
644
|
+
const XdsResourceName& name,
|
645
|
+
bool delay_unsubscription) {
|
636
646
|
if (ads_calld_ != nullptr) {
|
637
647
|
auto* calld = ads_calld_->calld();
|
638
648
|
if (calld != nullptr) {
|
639
|
-
calld->UnsubscribeLocked(
|
649
|
+
calld->UnsubscribeLocked(type, name, delay_unsubscription);
|
640
650
|
if (!calld->HasSubscribedResources()) {
|
641
651
|
ads_calld_.reset();
|
642
652
|
}
|
@@ -652,13 +662,13 @@ template <typename T>
|
|
652
662
|
XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
|
653
663
|
WeakRefCountedPtr<ChannelState> chand)
|
654
664
|
: chand_(std::move(chand)),
|
655
|
-
backoff_(
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
665
|
+
backoff_(BackOff::Options()
|
666
|
+
.set_initial_backoff(Duration::Seconds(
|
667
|
+
GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS))
|
668
|
+
.set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
|
669
|
+
.set_jitter(GRPC_XDS_RECONNECT_JITTER)
|
670
|
+
.set_max_backoff(Duration::Seconds(
|
671
|
+
GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS))) {
|
662
672
|
// Closure Initialization
|
663
673
|
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
|
664
674
|
grpc_schedule_on_exec_ctx);
|
@@ -694,10 +704,10 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
694
704
|
GPR_ASSERT(chand_->channel_ != nullptr);
|
695
705
|
GPR_ASSERT(calld_ == nullptr);
|
696
706
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
697
|
-
gpr_log(
|
698
|
-
|
699
|
-
|
700
|
-
|
707
|
+
gpr_log(
|
708
|
+
GPR_INFO,
|
709
|
+
"[xds_client %p] xds server %s: start new call from retryable call %p",
|
710
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
701
711
|
}
|
702
712
|
calld_ = MakeOrphanable<T>(
|
703
713
|
this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
|
@@ -706,14 +716,15 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
706
716
|
template <typename T>
|
707
717
|
void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
708
718
|
if (shutting_down_) return;
|
709
|
-
const
|
719
|
+
const Timestamp next_attempt_time = backoff_.NextAttemptTime();
|
710
720
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
711
|
-
|
712
|
-
std::max(next_attempt_time - ExecCtx::Get()->Now(),
|
721
|
+
Duration timeout =
|
722
|
+
std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
|
713
723
|
gpr_log(GPR_INFO,
|
714
|
-
"[xds_client %p]
|
724
|
+
"[xds_client %p] xds server %s: call attempt failed; "
|
715
725
|
"retry timer will fire in %" PRId64 "ms.",
|
716
|
-
chand()->xds_client(), chand(),
|
726
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(),
|
727
|
+
timeout.millis());
|
717
728
|
}
|
718
729
|
this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
|
719
730
|
grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
|
@@ -737,16 +748,182 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
|
737
748
|
retry_timer_callback_pending_ = false;
|
738
749
|
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
739
750
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
740
|
-
gpr_log(
|
741
|
-
|
742
|
-
|
743
|
-
|
751
|
+
gpr_log(GPR_INFO,
|
752
|
+
"[xds_client %p] xds server %s: retry timer fired (retryable "
|
753
|
+
"call: %p)",
|
754
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
744
755
|
}
|
745
756
|
StartNewCallLocked();
|
746
757
|
}
|
747
758
|
GRPC_ERROR_UNREF(error);
|
748
759
|
}
|
749
760
|
|
761
|
+
//
|
762
|
+
// XdsClient::ChannelState::AdsCallState::AdsResponseParser
|
763
|
+
//
|
764
|
+
|
765
|
+
absl::Status XdsClient::ChannelState::AdsCallState::AdsResponseParser::
|
766
|
+
ProcessAdsResponseFields(AdsResponseFields fields) {
|
767
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
768
|
+
gpr_log(
|
769
|
+
GPR_INFO,
|
770
|
+
"[xds_client %p] xds server %s: received ADS response: type_url=%s, "
|
771
|
+
"version=%s, nonce=%s, num_resources=%" PRIuPTR,
|
772
|
+
ads_call_state_->xds_client(),
|
773
|
+
ads_call_state_->chand()->server_.server_uri.c_str(),
|
774
|
+
fields.type_url.c_str(), fields.version.c_str(), fields.nonce.c_str(),
|
775
|
+
fields.num_resources);
|
776
|
+
}
|
777
|
+
result_.type =
|
778
|
+
ads_call_state_->xds_client()->GetResourceTypeLocked(fields.type_url);
|
779
|
+
if (result_.type == nullptr) {
|
780
|
+
return absl::InvalidArgumentError(
|
781
|
+
absl::StrCat("unknown resource type ", fields.type_url));
|
782
|
+
}
|
783
|
+
result_.type_url = std::move(fields.type_url);
|
784
|
+
result_.version = std::move(fields.version);
|
785
|
+
result_.nonce = std::move(fields.nonce);
|
786
|
+
return absl::OkStatus();
|
787
|
+
}
|
788
|
+
|
789
|
+
namespace {
|
790
|
+
|
791
|
+
// Build a resource metadata struct for ADS result accepting methods and CSDS.
|
792
|
+
XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
793
|
+
std::string serialized_proto, std::string version, Timestamp update_time) {
|
794
|
+
XdsApi::ResourceMetadata resource_metadata;
|
795
|
+
resource_metadata.serialized_proto = std::move(serialized_proto);
|
796
|
+
resource_metadata.update_time = update_time;
|
797
|
+
resource_metadata.version = std::move(version);
|
798
|
+
resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
|
799
|
+
return resource_metadata;
|
800
|
+
}
|
801
|
+
|
802
|
+
// Update resource_metadata for NACK.
|
803
|
+
void UpdateResourceMetadataNacked(const std::string& version,
|
804
|
+
const std::string& details,
|
805
|
+
Timestamp update_time,
|
806
|
+
XdsApi::ResourceMetadata* resource_metadata) {
|
807
|
+
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
808
|
+
resource_metadata->failed_version = version;
|
809
|
+
resource_metadata->failed_details = details;
|
810
|
+
resource_metadata->failed_update_time = update_time;
|
811
|
+
}
|
812
|
+
|
813
|
+
} // namespace
|
814
|
+
|
815
|
+
void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
816
|
+
const XdsEncodingContext& context, size_t idx, absl::string_view type_url,
|
817
|
+
absl::string_view serialized_resource) {
|
818
|
+
// Check the type_url of the resource.
|
819
|
+
bool is_v2 = false;
|
820
|
+
if (!result_.type->IsType(type_url, &is_v2)) {
|
821
|
+
result_.errors.emplace_back(
|
822
|
+
absl::StrCat("resource index ", idx, ": incorrect resource type ",
|
823
|
+
type_url, " (should be ", result_.type_url, ")"));
|
824
|
+
return;
|
825
|
+
}
|
826
|
+
// Parse the resource.
|
827
|
+
absl::StatusOr<XdsResourceType::DecodeResult> result =
|
828
|
+
result_.type->Decode(context, serialized_resource, is_v2);
|
829
|
+
if (!result.ok()) {
|
830
|
+
result_.errors.emplace_back(
|
831
|
+
absl::StrCat("resource index ", idx, ": ", result.status().ToString()));
|
832
|
+
return;
|
833
|
+
}
|
834
|
+
// Check the resource name.
|
835
|
+
auto resource_name =
|
836
|
+
XdsClient::ParseXdsResourceName(result->name, result_.type);
|
837
|
+
if (!resource_name.ok()) {
|
838
|
+
result_.errors.emplace_back(absl::StrCat(
|
839
|
+
"resource index ", idx, ": Cannot parse xDS resource name \"",
|
840
|
+
result->name, "\""));
|
841
|
+
return;
|
842
|
+
}
|
843
|
+
// Cancel resource-does-not-exist timer, if needed.
|
844
|
+
auto timer_it = ads_call_state_->state_map_.find(result_.type);
|
845
|
+
if (timer_it != ads_call_state_->state_map_.end()) {
|
846
|
+
auto it =
|
847
|
+
timer_it->second.subscribed_resources.find(resource_name->authority);
|
848
|
+
if (it != timer_it->second.subscribed_resources.end()) {
|
849
|
+
auto res_it = it->second.find(resource_name->key);
|
850
|
+
if (res_it != it->second.end()) {
|
851
|
+
res_it->second->MaybeCancelTimer();
|
852
|
+
}
|
853
|
+
}
|
854
|
+
}
|
855
|
+
// Lookup the authority in the cache.
|
856
|
+
auto authority_it =
|
857
|
+
xds_client()->authority_state_map_.find(resource_name->authority);
|
858
|
+
if (authority_it == xds_client()->authority_state_map_.end()) {
|
859
|
+
return; // Skip resource -- we don't have a subscription for it.
|
860
|
+
}
|
861
|
+
// Found authority, so look up type.
|
862
|
+
AuthorityState& authority_state = authority_it->second;
|
863
|
+
auto type_it = authority_state.resource_map.find(result_.type);
|
864
|
+
if (type_it == authority_state.resource_map.end()) {
|
865
|
+
return; // Skip resource -- we don't have a subscription for it.
|
866
|
+
}
|
867
|
+
auto& type_map = type_it->second;
|
868
|
+
// Found type, so look up resource key.
|
869
|
+
auto it = type_map.find(resource_name->key);
|
870
|
+
if (it == type_map.end()) {
|
871
|
+
return; // Skip resource -- we don't have a subscription for it.
|
872
|
+
}
|
873
|
+
ResourceState& resource_state = it->second;
|
874
|
+
// If needed, record that we've seen this resource.
|
875
|
+
if (result_.type->AllResourcesRequiredInSotW()) {
|
876
|
+
result_.resources_seen[resource_name->authority].insert(resource_name->key);
|
877
|
+
}
|
878
|
+
// Update resource state based on whether the resource is valid.
|
879
|
+
if (!result->resource.ok()) {
|
880
|
+
result_.errors.emplace_back(absl::StrCat(
|
881
|
+
"resource index ", idx, ": ", result->name,
|
882
|
+
": validation error: ", result->resource.status().ToString()));
|
883
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
884
|
+
xds_client(), resource_state.watchers,
|
885
|
+
grpc_error_set_int(
|
886
|
+
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
887
|
+
"invalid resource: ", result->resource.status().ToString())),
|
888
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
|
889
|
+
DEBUG_LOCATION);
|
890
|
+
UpdateResourceMetadataNacked(result_.version,
|
891
|
+
result->resource.status().ToString(),
|
892
|
+
update_time_, &resource_state.meta);
|
893
|
+
return;
|
894
|
+
}
|
895
|
+
// Resource is valid.
|
896
|
+
result_.have_valid_resources = true;
|
897
|
+
// If it didn't change, ignore it.
|
898
|
+
if (resource_state.resource != nullptr &&
|
899
|
+
result_.type->ResourcesEqual(resource_state.resource.get(),
|
900
|
+
result->resource->get())) {
|
901
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
902
|
+
gpr_log(GPR_INFO,
|
903
|
+
"[xds_client %p] %s resource %s identical to current, ignoring.",
|
904
|
+
xds_client(), result_.type_url.c_str(), result->name.c_str());
|
905
|
+
}
|
906
|
+
return;
|
907
|
+
}
|
908
|
+
// Update the resource state.
|
909
|
+
resource_state.resource = std::move(*result->resource);
|
910
|
+
resource_state.meta = CreateResourceMetadataAcked(
|
911
|
+
std::string(serialized_resource), result_.version, update_time_);
|
912
|
+
// Notify watchers.
|
913
|
+
auto& watchers_list = resource_state.watchers;
|
914
|
+
auto* value =
|
915
|
+
result_.type->CopyResource(resource_state.resource.get()).release();
|
916
|
+
xds_client()->work_serializer_.Schedule(
|
917
|
+
[watchers_list, value]()
|
918
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
919
|
+
for (const auto& p : watchers_list) {
|
920
|
+
p.first->OnGenericResourceChanged(value);
|
921
|
+
}
|
922
|
+
delete value;
|
923
|
+
},
|
924
|
+
DEBUG_LOCATION);
|
925
|
+
}
|
926
|
+
|
750
927
|
//
|
751
928
|
// XdsClient::ChannelState::AdsCallState
|
752
929
|
//
|
@@ -763,14 +940,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
763
940
|
// the polling entities from client_channel.
|
764
941
|
GPR_ASSERT(xds_client() != nullptr);
|
765
942
|
// Create a call with the specified method name.
|
766
|
-
const
|
943
|
+
const char* method =
|
767
944
|
chand()->server_.ShouldUseV3()
|
768
|
-
?
|
769
|
-
|
945
|
+
? "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
|
946
|
+
"StreamAggregatedResources"
|
947
|
+
: "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
|
948
|
+
"StreamAggregatedResources";
|
770
949
|
call_ = grpc_channel_create_pollset_set_call(
|
771
950
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
772
|
-
xds_client()->interested_parties_,
|
773
|
-
|
951
|
+
xds_client()->interested_parties_,
|
952
|
+
StaticSlice::FromStaticString(method).c_slice(), nullptr,
|
953
|
+
Timestamp::InfFuture(), nullptr);
|
774
954
|
GPR_ASSERT(call_ != nullptr);
|
775
955
|
// Init data associated with the call.
|
776
956
|
grpc_metadata_array_init(&initial_metadata_recv_);
|
@@ -778,9 +958,9 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
778
958
|
// Start the call.
|
779
959
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
780
960
|
gpr_log(GPR_INFO,
|
781
|
-
"[xds_client %p]
|
782
|
-
"call: %p)",
|
783
|
-
xds_client(), chand(), this, call_);
|
961
|
+
"[xds_client %p] xds server %s: starting ADS call "
|
962
|
+
"(calld: %p, call: %p)",
|
963
|
+
xds_client(), chand()->server_.server_uri.c_str(), this, call_);
|
784
964
|
}
|
785
965
|
// Create the ops.
|
786
966
|
grpc_call_error call_error;
|
@@ -804,21 +984,12 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
804
984
|
const std::string& authority = a.first;
|
805
985
|
// Skip authorities that are not using this xDS channel.
|
806
986
|
if (a.second.channel_state != chand()) continue;
|
807
|
-
for (const auto&
|
808
|
-
const
|
809
|
-
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
SubscribeLocked(XdsApi::kRdsTypeUrl, {authority, route_config_name});
|
814
|
-
}
|
815
|
-
for (const auto& c : a.second.cluster_map) {
|
816
|
-
const std::string& cluster_name = c.first;
|
817
|
-
SubscribeLocked(XdsApi::kCdsTypeUrl, {authority, cluster_name});
|
818
|
-
}
|
819
|
-
for (const auto& e : a.second.endpoint_map) {
|
820
|
-
const std::string& endpoint_name = e.first;
|
821
|
-
SubscribeLocked(XdsApi::kEdsTypeUrl, {authority, endpoint_name});
|
987
|
+
for (const auto& t : a.second.resource_map) {
|
988
|
+
const XdsResourceType* type = t.first;
|
989
|
+
for (const auto& r : t.second) {
|
990
|
+
const XdsResourceKey& resource_key = r.first;
|
991
|
+
SubscribeLocked(type, {authority, resource_key});
|
992
|
+
}
|
822
993
|
}
|
823
994
|
}
|
824
995
|
// Op: recv initial metadata.
|
@@ -883,33 +1054,29 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
|
|
883
1054
|
}
|
884
1055
|
|
885
1056
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
886
|
-
const
|
1057
|
+
const XdsResourceType* type)
|
887
1058
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
888
1059
|
// Buffer message sending if an existing message is in flight.
|
889
1060
|
if (send_message_payload_ != nullptr) {
|
890
|
-
buffered_requests_.insert(
|
1061
|
+
buffered_requests_.insert(type);
|
891
1062
|
return;
|
892
1063
|
}
|
893
|
-
auto& state = state_map_[
|
1064
|
+
auto& state = state_map_[type];
|
894
1065
|
grpc_slice request_payload_slice;
|
895
|
-
std::map<absl::string_view /*authority*/,
|
896
|
-
std::set<absl::string_view /*name*/>>
|
897
|
-
resource_map = ResourceNamesForRequest(type_url);
|
898
1066
|
request_payload_slice = xds_client()->api_.CreateAdsRequest(
|
899
|
-
chand()->server_,
|
900
|
-
chand()->
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
state_map_.erase(type_url);
|
905
|
-
}
|
1067
|
+
chand()->server_,
|
1068
|
+
chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
|
1069
|
+
chand()->resource_type_version_map_[type], state.nonce,
|
1070
|
+
ResourceNamesForRequest(type), GRPC_ERROR_REF(state.error),
|
1071
|
+
!sent_initial_message_);
|
906
1072
|
sent_initial_message_ = true;
|
907
1073
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
908
1074
|
gpr_log(GPR_INFO,
|
909
|
-
"[xds_client %p] sending ADS request: type=%s
|
910
|
-
"error=%s",
|
911
|
-
xds_client(),
|
912
|
-
|
1075
|
+
"[xds_client %p] xds server %s: sending ADS request: type=%s "
|
1076
|
+
"version=%s nonce=%s error=%s",
|
1077
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1078
|
+
std::string(type->type_url()).c_str(),
|
1079
|
+
chand()->resource_type_version_map_[type].c_str(),
|
913
1080
|
state.nonce.c_str(), grpc_error_std_string(state.error).c_str());
|
914
1081
|
}
|
915
1082
|
GRPC_ERROR_UNREF(state.error);
|
@@ -930,32 +1097,33 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
930
1097
|
grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
|
931
1098
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
932
1099
|
gpr_log(GPR_ERROR,
|
933
|
-
"[xds_client %p]
|
934
|
-
|
1100
|
+
"[xds_client %p] xds server %s: error starting ADS send_message "
|
1101
|
+
"batch on calld=%p: call_error=%d",
|
1102
|
+
xds_client(), chand()->server_.server_uri.c_str(), this,
|
1103
|
+
call_error);
|
935
1104
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
936
1105
|
}
|
937
1106
|
}
|
938
1107
|
|
939
1108
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
940
|
-
const
|
941
|
-
auto& state =
|
942
|
-
state_map_[type_url].subscribed_resources[name.authority][name.id];
|
1109
|
+
const XdsResourceType* type, const XdsResourceName& name) {
|
1110
|
+
auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
|
943
1111
|
if (state == nullptr) {
|
944
|
-
state = MakeOrphanable<
|
945
|
-
SendMessageLocked(
|
1112
|
+
state = MakeOrphanable<ResourceTimer>(type, name);
|
1113
|
+
SendMessageLocked(type);
|
946
1114
|
}
|
947
1115
|
}
|
948
1116
|
|
949
1117
|
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
950
|
-
const
|
1118
|
+
const XdsResourceType* type, const XdsResourceName& name,
|
951
1119
|
bool delay_unsubscription) {
|
952
|
-
auto& type_state_map = state_map_[
|
1120
|
+
auto& type_state_map = state_map_[type];
|
953
1121
|
auto& authority_map = type_state_map.subscribed_resources[name.authority];
|
954
|
-
authority_map.erase(name.
|
1122
|
+
authority_map.erase(name.key);
|
955
1123
|
if (authority_map.empty()) {
|
956
1124
|
type_state_map.subscribed_resources.erase(name.authority);
|
957
1125
|
}
|
958
|
-
if (!delay_unsubscription) SendMessageLocked(
|
1126
|
+
if (!delay_unsubscription) SendMessageLocked(type);
|
959
1127
|
}
|
960
1128
|
|
961
1129
|
bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
@@ -965,395 +1133,6 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
965
1133
|
return false;
|
966
1134
|
}
|
967
1135
|
|
968
|
-
namespace {
|
969
|
-
|
970
|
-
// Build a resource metadata struct for ADS result accepting methods and CSDS.
|
971
|
-
XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
972
|
-
std::string serialized_proto, std::string version,
|
973
|
-
grpc_millis update_time) {
|
974
|
-
XdsApi::ResourceMetadata resource_metadata;
|
975
|
-
resource_metadata.serialized_proto = std::move(serialized_proto);
|
976
|
-
resource_metadata.update_time = update_time;
|
977
|
-
resource_metadata.version = std::move(version);
|
978
|
-
resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
|
979
|
-
return resource_metadata;
|
980
|
-
}
|
981
|
-
|
982
|
-
} // namespace
|
983
|
-
|
984
|
-
void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
985
|
-
std::string version, grpc_millis update_time,
|
986
|
-
XdsApi::LdsUpdateMap lds_update_map,
|
987
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed) {
|
988
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
989
|
-
gpr_log(GPR_INFO,
|
990
|
-
"[xds_client %p] LDS update received containing %" PRIuPTR
|
991
|
-
" resources",
|
992
|
-
xds_client(), lds_update_map.size());
|
993
|
-
}
|
994
|
-
auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
|
995
|
-
for (auto& p : lds_update_map) {
|
996
|
-
const XdsApi::ResourceName& name = p.first;
|
997
|
-
XdsApi::LdsUpdate& lds_update = p.second.resource;
|
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
|
-
}
|
1005
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1006
|
-
gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
|
1007
|
-
XdsApi::ConstructFullResourceName(name.authority,
|
1008
|
-
XdsApi::kLdsTypeUrl, name.id)
|
1009
|
-
.c_str(),
|
1010
|
-
lds_update.ToString().c_str());
|
1011
|
-
}
|
1012
|
-
ListenerState& listener_state = xds_client()
|
1013
|
-
->authority_state_map_[name.authority]
|
1014
|
-
.listener_map[name.id];
|
1015
|
-
// Ignore identical update.
|
1016
|
-
if (listener_state.update.has_value() &&
|
1017
|
-
*listener_state.update == lds_update) {
|
1018
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1019
|
-
gpr_log(GPR_INFO,
|
1020
|
-
"[xds_client %p] LDS update for %s identical to current, "
|
1021
|
-
"ignoring.",
|
1022
|
-
xds_client(),
|
1023
|
-
XdsApi::ConstructFullResourceName(name.authority,
|
1024
|
-
XdsApi::kLdsTypeUrl, name.id)
|
1025
|
-
.c_str());
|
1026
|
-
}
|
1027
|
-
continue;
|
1028
|
-
}
|
1029
|
-
// Update the listener state.
|
1030
|
-
listener_state.update = std::move(lds_update);
|
1031
|
-
listener_state.meta = CreateResourceMetadataAcked(
|
1032
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1033
|
-
// Notify watchers.
|
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);
|
1044
|
-
}
|
1045
|
-
// For invalid resources in the update, if they are already in the
|
1046
|
-
// cache, pretend that they are present in the update, so that we
|
1047
|
-
// don't incorrectly consider them deleted below.
|
1048
|
-
for (const auto& name : resource_names_failed) {
|
1049
|
-
auto& listener_map =
|
1050
|
-
xds_client()->authority_state_map_[name.authority].listener_map;
|
1051
|
-
auto it = listener_map.find(name.id);
|
1052
|
-
if (it != listener_map.end()) {
|
1053
|
-
auto& update = it->second.update;
|
1054
|
-
if (!update.has_value()) continue;
|
1055
|
-
lds_update_map[name];
|
1056
|
-
}
|
1057
|
-
}
|
1058
|
-
// For any subscribed resource that is not present in the update,
|
1059
|
-
// remove it from the cache and notify watchers that it does not exist.
|
1060
|
-
for (const auto& a : lds_state.subscribed_resources) {
|
1061
|
-
const std::string& authority_name = a.first;
|
1062
|
-
for (const auto& p : a.second) {
|
1063
|
-
const std::string& listener_name = p.first;
|
1064
|
-
if (lds_update_map.find({authority_name, listener_name}) ==
|
1065
|
-
lds_update_map.end()) {
|
1066
|
-
ListenerState& listener_state =
|
1067
|
-
xds_client()
|
1068
|
-
->authority_state_map_[authority_name]
|
1069
|
-
.listener_map[listener_name];
|
1070
|
-
// If the resource was newly requested but has not yet been received,
|
1071
|
-
// we don't want to generate an error for the watchers, because this LDS
|
1072
|
-
// response may be in reaction to an earlier request that did not yet
|
1073
|
-
// request the new resource, so its absence from the response does not
|
1074
|
-
// necessarily indicate that the resource does not exist.
|
1075
|
-
// For that case, we rely on the request timeout instead.
|
1076
|
-
if (!listener_state.update.has_value()) continue;
|
1077
|
-
listener_state.update.reset();
|
1078
|
-
Notifier::ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
1079
|
-
xds_client(), listener_state.watchers, DEBUG_LOCATION);
|
1080
|
-
}
|
1081
|
-
}
|
1082
|
-
}
|
1083
|
-
}
|
1084
|
-
|
1085
|
-
void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
|
1086
|
-
std::string version, grpc_millis update_time,
|
1087
|
-
XdsApi::RdsUpdateMap rds_update_map) {
|
1088
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1089
|
-
gpr_log(GPR_INFO,
|
1090
|
-
"[xds_client %p] RDS update received containing %" PRIuPTR
|
1091
|
-
" resources",
|
1092
|
-
xds_client(), rds_update_map.size());
|
1093
|
-
}
|
1094
|
-
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
1095
|
-
for (auto& p : rds_update_map) {
|
1096
|
-
const XdsApi::ResourceName& name = p.first;
|
1097
|
-
XdsApi::RdsUpdate& rds_update = p.second.resource;
|
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
|
-
}
|
1105
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1106
|
-
gpr_log(GPR_INFO, "[xds_client %p] RDS resource:\n%s", xds_client(),
|
1107
|
-
rds_update.ToString().c_str());
|
1108
|
-
}
|
1109
|
-
RouteConfigState& route_config_state =
|
1110
|
-
xds_client()
|
1111
|
-
->authority_state_map_[name.authority]
|
1112
|
-
.route_config_map[name.id];
|
1113
|
-
// Ignore identical update.
|
1114
|
-
if (route_config_state.update.has_value() &&
|
1115
|
-
*route_config_state.update == rds_update) {
|
1116
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1117
|
-
gpr_log(GPR_INFO,
|
1118
|
-
"[xds_client %p] RDS resource identical to current, ignoring",
|
1119
|
-
xds_client());
|
1120
|
-
}
|
1121
|
-
continue;
|
1122
|
-
}
|
1123
|
-
// Update the cache.
|
1124
|
-
route_config_state.update = std::move(rds_update);
|
1125
|
-
route_config_state.meta = CreateResourceMetadataAcked(
|
1126
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1127
|
-
// Notify all watchers.
|
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);
|
1138
|
-
}
|
1139
|
-
}
|
1140
|
-
|
1141
|
-
void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
1142
|
-
std::string version, grpc_millis update_time,
|
1143
|
-
XdsApi::CdsUpdateMap cds_update_map,
|
1144
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed) {
|
1145
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1146
|
-
gpr_log(GPR_INFO,
|
1147
|
-
"[xds_client %p] CDS update received containing %" PRIuPTR
|
1148
|
-
" resources",
|
1149
|
-
xds_client(), cds_update_map.size());
|
1150
|
-
}
|
1151
|
-
auto& cds_state = state_map_[XdsApi::kCdsTypeUrl];
|
1152
|
-
for (auto& p : cds_update_map) {
|
1153
|
-
const XdsApi::ResourceName& name = p.first;
|
1154
|
-
XdsApi::CdsUpdate& cds_update = p.second.resource;
|
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
|
-
}
|
1162
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1163
|
-
gpr_log(GPR_INFO, "[xds_client %p] cluster=%s: %s", xds_client(),
|
1164
|
-
XdsApi::ConstructFullResourceName(name.authority,
|
1165
|
-
XdsApi::kCdsTypeUrl, name.id)
|
1166
|
-
.c_str(),
|
1167
|
-
cds_update.ToString().c_str());
|
1168
|
-
}
|
1169
|
-
ClusterState& cluster_state =
|
1170
|
-
xds_client()->authority_state_map_[name.authority].cluster_map[name.id];
|
1171
|
-
// Ignore identical update.
|
1172
|
-
if (cluster_state.update.has_value() &&
|
1173
|
-
*cluster_state.update == cds_update) {
|
1174
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1175
|
-
gpr_log(GPR_INFO,
|
1176
|
-
"[xds_client %p] CDS update identical to current, ignoring.",
|
1177
|
-
xds_client());
|
1178
|
-
}
|
1179
|
-
continue;
|
1180
|
-
}
|
1181
|
-
// Update the cluster state.
|
1182
|
-
cluster_state.update = std::move(cds_update);
|
1183
|
-
cluster_state.meta = CreateResourceMetadataAcked(
|
1184
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1185
|
-
// Notify all watchers.
|
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);
|
1196
|
-
}
|
1197
|
-
// For invalid resources in the update, if they are already in the
|
1198
|
-
// cache, pretend that they are present in the update, so that we
|
1199
|
-
// don't incorrectly consider them deleted below.
|
1200
|
-
for (const auto& name : resource_names_failed) {
|
1201
|
-
auto& cluster_map =
|
1202
|
-
xds_client()->authority_state_map_[name.authority].cluster_map;
|
1203
|
-
auto it = cluster_map.find(name.id);
|
1204
|
-
if (it != cluster_map.end()) {
|
1205
|
-
auto& update = it->second.update;
|
1206
|
-
if (!update.has_value()) continue;
|
1207
|
-
cds_update_map[name];
|
1208
|
-
}
|
1209
|
-
}
|
1210
|
-
// For any subscribed resource that is not present in the update,
|
1211
|
-
// remove it from the cache and notify watchers that it does not exist.
|
1212
|
-
for (const auto& a : cds_state.subscribed_resources) {
|
1213
|
-
const std::string& authority = a.first;
|
1214
|
-
for (const auto& p : a.second) {
|
1215
|
-
const std::string& cluster_name = p.first;
|
1216
|
-
if (cds_update_map.find({authority, cluster_name}) ==
|
1217
|
-
cds_update_map.end()) {
|
1218
|
-
ClusterState& cluster_state = xds_client()
|
1219
|
-
->authority_state_map_[authority]
|
1220
|
-
.cluster_map[cluster_name];
|
1221
|
-
// If the resource was newly requested but has not yet been received,
|
1222
|
-
// we don't want to generate an error for the watchers, because this CDS
|
1223
|
-
// response may be in reaction to an earlier request that did not yet
|
1224
|
-
// request the new resource, so its absence from the response does not
|
1225
|
-
// necessarily indicate that the resource does not exist.
|
1226
|
-
// For that case, we rely on the request timeout instead.
|
1227
|
-
if (!cluster_state.update.has_value()) continue;
|
1228
|
-
cluster_state.update.reset();
|
1229
|
-
Notifier::ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
1230
|
-
xds_client(), cluster_state.watchers, DEBUG_LOCATION);
|
1231
|
-
}
|
1232
|
-
}
|
1233
|
-
}
|
1234
|
-
}
|
1235
|
-
|
1236
|
-
void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
|
1237
|
-
std::string version, grpc_millis update_time,
|
1238
|
-
XdsApi::EdsUpdateMap eds_update_map) {
|
1239
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1240
|
-
gpr_log(GPR_INFO,
|
1241
|
-
"[xds_client %p] EDS update received containing %" PRIuPTR
|
1242
|
-
" resources",
|
1243
|
-
xds_client(), eds_update_map.size());
|
1244
|
-
}
|
1245
|
-
auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
|
1246
|
-
for (auto& p : eds_update_map) {
|
1247
|
-
const XdsApi::ResourceName& name = p.first;
|
1248
|
-
XdsApi::EdsUpdate& eds_update = p.second.resource;
|
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
|
-
}
|
1256
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1257
|
-
gpr_log(GPR_INFO, "[xds_client %p] EDS resource %s: %s", xds_client(),
|
1258
|
-
XdsApi::ConstructFullResourceName(name.authority,
|
1259
|
-
XdsApi::kCdsTypeUrl, name.id)
|
1260
|
-
.c_str(),
|
1261
|
-
eds_update.ToString().c_str());
|
1262
|
-
}
|
1263
|
-
EndpointState& endpoint_state = xds_client()
|
1264
|
-
->authority_state_map_[name.authority]
|
1265
|
-
.endpoint_map[name.id];
|
1266
|
-
// Ignore identical update.
|
1267
|
-
if (endpoint_state.update.has_value() &&
|
1268
|
-
*endpoint_state.update == eds_update) {
|
1269
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1270
|
-
gpr_log(GPR_INFO,
|
1271
|
-
"[xds_client %p] EDS update identical to current, ignoring.",
|
1272
|
-
xds_client());
|
1273
|
-
}
|
1274
|
-
continue;
|
1275
|
-
}
|
1276
|
-
// Update the cluster state.
|
1277
|
-
endpoint_state.update = std::move(eds_update);
|
1278
|
-
endpoint_state.meta = CreateResourceMetadataAcked(
|
1279
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1280
|
-
// Notify all watchers.
|
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);
|
1291
|
-
}
|
1292
|
-
}
|
1293
|
-
|
1294
|
-
namespace {
|
1295
|
-
|
1296
|
-
// Update resource_metadata for NACK.
|
1297
|
-
void UpdateResourceMetadataNacked(const std::string& version,
|
1298
|
-
const std::string& details,
|
1299
|
-
grpc_millis update_time,
|
1300
|
-
XdsApi::ResourceMetadata* resource_metadata) {
|
1301
|
-
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
1302
|
-
resource_metadata->failed_version = version;
|
1303
|
-
resource_metadata->failed_details = details;
|
1304
|
-
resource_metadata->failed_update_time = update_time;
|
1305
|
-
}
|
1306
|
-
|
1307
|
-
} // namespace
|
1308
|
-
|
1309
|
-
template <typename StateMap>
|
1310
|
-
void XdsClient::ChannelState::AdsCallState::RejectAdsUpdateHelperLocked(
|
1311
|
-
const std::string& resource_name, grpc_millis update_time,
|
1312
|
-
const XdsApi::AdsParseResult& result, const std::string& error_details,
|
1313
|
-
StateMap* state_map) {
|
1314
|
-
auto it = state_map->find(resource_name);
|
1315
|
-
if (it == state_map->end()) return;
|
1316
|
-
auto& state = it->second;
|
1317
|
-
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
1318
|
-
xds_client(), state.watchers, GRPC_ERROR_REF(result.parse_error),
|
1319
|
-
DEBUG_LOCATION);
|
1320
|
-
UpdateResourceMetadataNacked(result.version, error_details, update_time,
|
1321
|
-
&state.meta);
|
1322
|
-
}
|
1323
|
-
|
1324
|
-
void XdsClient::ChannelState::AdsCallState::RejectAdsUpdateLocked(
|
1325
|
-
grpc_millis update_time, const XdsApi::AdsParseResult& result) {
|
1326
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1327
|
-
gpr_log(GPR_INFO,
|
1328
|
-
"[xds_client %p] %s update NACKed containing %" PRIuPTR
|
1329
|
-
" invalid resources",
|
1330
|
-
xds_client(), result.type_url.c_str(),
|
1331
|
-
result.resource_names_failed.size());
|
1332
|
-
}
|
1333
|
-
std::string details = grpc_error_std_string(result.parse_error);
|
1334
|
-
for (auto& resource : result.resource_names_failed) {
|
1335
|
-
auto authority_it =
|
1336
|
-
xds_client()->authority_state_map_.find(resource.authority);
|
1337
|
-
if (authority_it == xds_client()->authority_state_map_.end()) continue;
|
1338
|
-
AuthorityState& authority_state = authority_it->second;
|
1339
|
-
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1340
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1341
|
-
&authority_state.listener_map);
|
1342
|
-
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1343
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1344
|
-
&authority_state.route_config_map);
|
1345
|
-
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1346
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1347
|
-
&authority_state.cluster_map);
|
1348
|
-
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1349
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1350
|
-
&authority_state.endpoint_map);
|
1351
|
-
} else {
|
1352
|
-
GPR_ASSERT(0);
|
1353
|
-
}
|
1354
|
-
}
|
1355
|
-
}
|
1356
|
-
|
1357
1136
|
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1358
1137
|
void* arg, grpc_error_handle error) {
|
1359
1138
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
@@ -1413,63 +1192,76 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1413
1192
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
1414
1193
|
recv_message_payload_ = nullptr;
|
1415
1194
|
// Parse and validate the response.
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
|
1420
|
-
ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
|
1421
|
-
ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
|
1195
|
+
AdsResponseParser parser(this);
|
1196
|
+
absl::Status status = xds_client()->api_.ParseAdsResponse(
|
1197
|
+
chand()->server_, response_slice, &parser);
|
1422
1198
|
grpc_slice_unref_internal(response_slice);
|
1423
|
-
if (
|
1199
|
+
if (!status.ok()) {
|
1424
1200
|
// Ignore unparsable response.
|
1425
1201
|
gpr_log(GPR_ERROR,
|
1426
|
-
"[xds_client %p]
|
1427
|
-
|
1428
|
-
|
1202
|
+
"[xds_client %p] xds server %s: error parsing ADS response (%s) "
|
1203
|
+
"-- ignoring",
|
1204
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1205
|
+
status.ToString().c_str());
|
1429
1206
|
} else {
|
1430
|
-
|
1207
|
+
AdsResponseParser::Result result = parser.TakeResult();
|
1431
1208
|
// Update nonce.
|
1432
|
-
auto& state = state_map_[result.
|
1433
|
-
state.nonce =
|
1434
|
-
// If we got an error, we'll NACK the update.
|
1435
|
-
if (result.
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1443
|
-
|
1444
|
-
GRPC_STATUS_UNAVAILABLE);
|
1209
|
+
auto& state = state_map_[result.type];
|
1210
|
+
state.nonce = result.nonce;
|
1211
|
+
// If we got an error, set state.error so that we'll NACK the update.
|
1212
|
+
if (!result.errors.empty()) {
|
1213
|
+
std::string error = absl::StrJoin(result.errors, "; ");
|
1214
|
+
gpr_log(
|
1215
|
+
GPR_ERROR,
|
1216
|
+
"[xds_client %p] xds server %s: ADS response invalid for resource "
|
1217
|
+
"type %s version %s, will NACK: nonce=%s error=%s",
|
1218
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1219
|
+
result.type_url.c_str(), result.version.c_str(), state.nonce.c_str(),
|
1220
|
+
error.c_str());
|
1445
1221
|
GRPC_ERROR_UNREF(state.error);
|
1446
|
-
state.error =
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
if (result.
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1222
|
+
state.error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(error),
|
1223
|
+
GRPC_ERROR_INT_GRPC_STATUS,
|
1224
|
+
GRPC_STATUS_UNAVAILABLE);
|
1225
|
+
}
|
1226
|
+
// Delete resources not seen in update if needed.
|
1227
|
+
if (result.type->AllResourcesRequiredInSotW()) {
|
1228
|
+
for (auto& a : xds_client()->authority_state_map_) {
|
1229
|
+
const std::string& authority = a.first;
|
1230
|
+
AuthorityState& authority_state = a.second;
|
1231
|
+
// Skip authorities that are not using this xDS channel.
|
1232
|
+
if (authority_state.channel_state != chand()) continue;
|
1233
|
+
auto seen_authority_it = result.resources_seen.find(authority);
|
1234
|
+
// Find this resource type.
|
1235
|
+
auto type_it = authority_state.resource_map.find(result.type);
|
1236
|
+
if (type_it == authority_state.resource_map.end()) continue;
|
1237
|
+
// Iterate over resource ids.
|
1238
|
+
for (auto& r : type_it->second) {
|
1239
|
+
const XdsResourceKey& resource_key = r.first;
|
1240
|
+
ResourceState& resource_state = r.second;
|
1241
|
+
if (seen_authority_it == result.resources_seen.end() ||
|
1242
|
+
seen_authority_it->second.find(resource_key) ==
|
1243
|
+
seen_authority_it->second.end()) {
|
1244
|
+
// If the resource was newly requested but has not yet been
|
1245
|
+
// received, we don't want to generate an error for the watchers,
|
1246
|
+
// because this ADS response may be in reaction to an earlier
|
1247
|
+
// request that did not yet request the new resource, so its absence
|
1248
|
+
// from the response does not necessarily indicate that the resource
|
1249
|
+
// does not exist. For that case, we rely on the request timeout
|
1250
|
+
// instead.
|
1251
|
+
if (resource_state.resource == nullptr) continue;
|
1252
|
+
resource_state.resource.reset();
|
1253
|
+
Notifier::
|
1254
|
+
ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
1255
|
+
xds_client(), resource_state.watchers, DEBUG_LOCATION);
|
1256
|
+
}
|
1257
|
+
}
|
1258
|
+
}
|
1469
1259
|
}
|
1470
|
-
|
1260
|
+
// If we had valid resources, update the version.
|
1261
|
+
if (result.have_valid_resources) {
|
1471
1262
|
seen_response_ = true;
|
1472
|
-
chand()->resource_type_version_map_[result.
|
1263
|
+
chand()->resource_type_version_map_[result.type] =
|
1264
|
+
std::move(result.version);
|
1473
1265
|
// Start load reporting if needed.
|
1474
1266
|
auto& lrs_call = chand()->lrs_calld_;
|
1475
1267
|
if (lrs_call != nullptr) {
|
@@ -1478,7 +1270,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1478
1270
|
}
|
1479
1271
|
}
|
1480
1272
|
// Send ACK or NACK.
|
1481
|
-
SendMessageLocked(result.
|
1273
|
+
SendMessageLocked(result.type);
|
1482
1274
|
}
|
1483
1275
|
if (xds_client()->shutting_down_) return true;
|
1484
1276
|
// Keep listening for updates.
|
@@ -1512,9 +1304,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1512
1304
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1513
1305
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1514
1306
|
gpr_log(GPR_INFO,
|
1515
|
-
"[xds_client %p] ADS call status received
|
1516
|
-
"
|
1517
|
-
|
1307
|
+
"[xds_client %p] xds server %s: ADS call status received "
|
1308
|
+
"(chand=%p, ads_calld=%p, call=%p): "
|
1309
|
+
"status=%d, details='%s', error='%s'",
|
1310
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1311
|
+
call_, status_code_, status_details,
|
1518
1312
|
grpc_error_std_string(error).c_str());
|
1519
1313
|
gpr_free(status_details);
|
1520
1314
|
}
|
@@ -1524,7 +1318,12 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1524
1318
|
parent_->OnCallFinishedLocked();
|
1525
1319
|
// Send error to all watchers.
|
1526
1320
|
xds_client()->NotifyOnErrorLocked(
|
1527
|
-
|
1321
|
+
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
1322
|
+
"xDS call failed: xDS server: %s, ADS call status code=%d, "
|
1323
|
+
"details='%s', error='%s'",
|
1324
|
+
chand()->server_.server_uri, status_code_,
|
1325
|
+
StringViewFromSlice(status_details_),
|
1326
|
+
grpc_error_std_string(error))));
|
1528
1327
|
}
|
1529
1328
|
GRPC_ERROR_UNREF(error);
|
1530
1329
|
}
|
@@ -1536,23 +1335,24 @@ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
|
|
1536
1335
|
return this == chand()->ads_calld_->calld();
|
1537
1336
|
}
|
1538
1337
|
|
1539
|
-
std::
|
1338
|
+
std::vector<std::string>
|
1540
1339
|
XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
1541
|
-
const
|
1542
|
-
std::
|
1543
|
-
|
1544
|
-
resource_map;
|
1545
|
-
auto it = state_map_.find(type_url);
|
1340
|
+
const XdsResourceType* type) {
|
1341
|
+
std::vector<std::string> resource_names;
|
1342
|
+
auto it = state_map_.find(type);
|
1546
1343
|
if (it != state_map_.end()) {
|
1547
1344
|
for (auto& a : it->second.subscribed_resources) {
|
1345
|
+
const std::string& authority = a.first;
|
1548
1346
|
for (auto& p : a.second) {
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1347
|
+
const XdsResourceKey& resource_key = p.first;
|
1348
|
+
resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
|
1349
|
+
authority, type->type_url(), resource_key));
|
1350
|
+
OrphanablePtr<ResourceTimer>& resource_timer = p.second;
|
1351
|
+
resource_timer->MaybeStartTimer(Ref(DEBUG_LOCATION, "ResourceTimer"));
|
1552
1352
|
}
|
1553
1353
|
}
|
1554
1354
|
}
|
1555
|
-
return
|
1355
|
+
return resource_names;
|
1556
1356
|
}
|
1557
1357
|
|
1558
1358
|
//
|
@@ -1567,7 +1367,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
|
1567
1367
|
|
1568
1368
|
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1569
1369
|
ScheduleNextReportLocked() {
|
1570
|
-
const
|
1370
|
+
const Timestamp next_report_time = ExecCtx::Get()->Now() + report_interval_;
|
1571
1371
|
grpc_timer_init(&next_report_timer_, next_report_time,
|
1572
1372
|
&on_next_report_timer_);
|
1573
1373
|
next_report_timer_callback_pending_ = true;
|
@@ -1613,15 +1413,19 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
|
1613
1413
|
bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
1614
1414
|
// Construct snapshot from all reported stats.
|
1615
1415
|
XdsApi::ClusterLoadReportMap snapshot =
|
1616
|
-
xds_client()->BuildLoadReportSnapshotLocked(parent_->
|
1416
|
+
xds_client()->BuildLoadReportSnapshotLocked(parent_->chand()->server_,
|
1417
|
+
parent_->send_all_clusters_,
|
1617
1418
|
parent_->cluster_names_);
|
1618
1419
|
// Skip client load report if the counters were all zero in the last
|
1619
1420
|
// report and they are still zero in this one.
|
1620
1421
|
const bool old_val = last_report_counters_were_zero_;
|
1621
1422
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1622
1423
|
if (old_val && last_report_counters_were_zero_) {
|
1623
|
-
|
1624
|
-
|
1424
|
+
auto it = xds_client()->xds_load_report_server_map_.find(
|
1425
|
+
parent_->chand()->server_);
|
1426
|
+
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1427
|
+
it->second.load_report_map.empty()) {
|
1428
|
+
it->second.channel_state->StopLrsCallLocked();
|
1625
1429
|
return true;
|
1626
1430
|
}
|
1627
1431
|
ScheduleNextReportLocked();
|
@@ -1642,8 +1446,10 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1642
1446
|
parent_->call_, &op, 1, &on_report_done_);
|
1643
1447
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
1644
1448
|
gpr_log(GPR_ERROR,
|
1645
|
-
"[xds_client %p]
|
1646
|
-
|
1449
|
+
"[xds_client %p] xds server %s: error starting LRS send_message "
|
1450
|
+
"batch on calld=%p: call_error=%d",
|
1451
|
+
xds_client(), parent_->chand()->server_.server_uri.c_str(), this,
|
1452
|
+
call_error);
|
1647
1453
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1648
1454
|
}
|
1649
1455
|
return false;
|
@@ -1665,8 +1471,11 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
|
1665
1471
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1666
1472
|
parent_->send_message_payload_ = nullptr;
|
1667
1473
|
// If there are no more registered stats to report, cancel the call.
|
1668
|
-
|
1669
|
-
|
1474
|
+
auto it =
|
1475
|
+
xds_client()->xds_load_report_server_map_.find(parent_->chand()->server_);
|
1476
|
+
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1477
|
+
it->second.load_report_map.empty()) {
|
1478
|
+
it->second.channel_state->StopLrsCallLocked();
|
1670
1479
|
GRPC_ERROR_UNREF(error);
|
1671
1480
|
return true;
|
1672
1481
|
}
|
@@ -1698,14 +1507,15 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1698
1507
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1699
1508
|
// the polling entities from client_channel.
|
1700
1509
|
GPR_ASSERT(xds_client() != nullptr);
|
1701
|
-
const
|
1510
|
+
const char* method =
|
1702
1511
|
chand()->server_.ShouldUseV3()
|
1703
|
-
?
|
1704
|
-
:
|
1512
|
+
? "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats"
|
1513
|
+
: "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats";
|
1705
1514
|
call_ = grpc_channel_create_pollset_set_call(
|
1706
1515
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
1707
|
-
xds_client()->interested_parties_,
|
1708
|
-
|
1516
|
+
xds_client()->interested_parties_,
|
1517
|
+
Slice::FromStaticString(method).c_slice(), nullptr,
|
1518
|
+
Timestamp::InfFuture(), nullptr);
|
1709
1519
|
GPR_ASSERT(call_ != nullptr);
|
1710
1520
|
// Init the request payload.
|
1711
1521
|
grpc_slice request_payload_slice =
|
@@ -1718,10 +1528,10 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1718
1528
|
grpc_metadata_array_init(&trailing_metadata_recv_);
|
1719
1529
|
// Start the call.
|
1720
1530
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1721
|
-
gpr_log(
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1531
|
+
gpr_log(
|
1532
|
+
GPR_INFO,
|
1533
|
+
"[xds_client %p] xds server %s: starting LRS call (calld=%p, call=%p)",
|
1534
|
+
xds_client(), chand()->server_.server_uri.c_str(), this, call_);
|
1725
1535
|
}
|
1726
1536
|
// Create the ops.
|
1727
1537
|
grpc_call_error call_error;
|
@@ -1875,14 +1685,15 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1875
1685
|
// Parse the response.
|
1876
1686
|
bool send_all_clusters = false;
|
1877
1687
|
std::set<std::string> new_cluster_names;
|
1878
|
-
|
1688
|
+
Duration new_load_reporting_interval;
|
1879
1689
|
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1880
1690
|
response_slice, &send_all_clusters, &new_cluster_names,
|
1881
1691
|
&new_load_reporting_interval);
|
1882
1692
|
if (parse_error != GRPC_ERROR_NONE) {
|
1883
1693
|
gpr_log(GPR_ERROR,
|
1884
|
-
"[xds_client %p] LRS response parsing failed
|
1885
|
-
xds_client(),
|
1694
|
+
"[xds_client %p] xds server %s: LRS response parsing failed: %s",
|
1695
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1696
|
+
grpc_error_std_string(parse_error).c_str());
|
1886
1697
|
GRPC_ERROR_UNREF(parse_error);
|
1887
1698
|
return;
|
1888
1699
|
}
|
@@ -1890,11 +1701,12 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1890
1701
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1891
1702
|
gpr_log(
|
1892
1703
|
GPR_INFO,
|
1893
|
-
"[xds_client %p] LRS response received, %" PRIuPTR
|
1704
|
+
"[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
|
1894
1705
|
" cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
|
1895
1706
|
"ms",
|
1896
|
-
xds_client(),
|
1897
|
-
|
1707
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1708
|
+
new_cluster_names.size(), send_all_clusters,
|
1709
|
+
new_load_reporting_interval.millis());
|
1898
1710
|
size_t i = 0;
|
1899
1711
|
for (const auto& name : new_cluster_names) {
|
1900
1712
|
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
@@ -1902,14 +1714,16 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1902
1714
|
}
|
1903
1715
|
}
|
1904
1716
|
if (new_load_reporting_interval <
|
1905
|
-
|
1906
|
-
|
1907
|
-
|
1717
|
+
Duration::Milliseconds(
|
1718
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
|
1719
|
+
new_load_reporting_interval = Duration::Milliseconds(
|
1720
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1908
1721
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1909
1722
|
gpr_log(GPR_INFO,
|
1910
|
-
"[xds_client %p]
|
1911
|
-
"value %dms",
|
1912
|
-
xds_client(),
|
1723
|
+
"[xds_client %p] xds server %s: increased load_report_interval "
|
1724
|
+
"to minimum value %dms",
|
1725
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1726
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1913
1727
|
}
|
1914
1728
|
}
|
1915
1729
|
// Ignore identical update.
|
@@ -1917,10 +1731,11 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1917
1731
|
cluster_names_ == new_cluster_names &&
|
1918
1732
|
load_reporting_interval_ == new_load_reporting_interval) {
|
1919
1733
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1920
|
-
gpr_log(
|
1921
|
-
|
1922
|
-
|
1923
|
-
|
1734
|
+
gpr_log(
|
1735
|
+
GPR_INFO,
|
1736
|
+
"[xds_client %p] xds server %s: incoming LRS response identical "
|
1737
|
+
"to current, ignoring.",
|
1738
|
+
xds_client(), chand()->server_.server_uri.c_str());
|
1924
1739
|
}
|
1925
1740
|
return;
|
1926
1741
|
}
|
@@ -1966,15 +1781,16 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1966
1781
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1967
1782
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1968
1783
|
gpr_log(GPR_INFO,
|
1969
|
-
"[xds_client %p] LRS call status received
|
1970
|
-
"
|
1971
|
-
|
1784
|
+
"[xds_client %p] xds server %s: LRS call status received "
|
1785
|
+
"(chand=%p, calld=%p, call=%p): "
|
1786
|
+
"status=%d, details='%s', error='%s'",
|
1787
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1788
|
+
call_, status_code_, status_details,
|
1972
1789
|
grpc_error_std_string(error).c_str());
|
1973
1790
|
gpr_free(status_details);
|
1974
1791
|
}
|
1975
1792
|
// Ignore status from a stale call.
|
1976
1793
|
if (IsCurrentCallOnChannel()) {
|
1977
|
-
GPR_ASSERT(!xds_client()->shutting_down_);
|
1978
1794
|
// Try to restart the call.
|
1979
1795
|
parent_->OnCallFinishedLocked();
|
1980
1796
|
}
|
@@ -1994,10 +1810,10 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1994
1810
|
|
1995
1811
|
namespace {
|
1996
1812
|
|
1997
|
-
|
1998
|
-
return grpc_channel_args_find_integer(
|
1813
|
+
Duration GetRequestTimeout(const grpc_channel_args* args) {
|
1814
|
+
return Duration::Milliseconds(grpc_channel_args_find_integer(
|
1999
1815
|
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
2000
|
-
{15000, 0, INT_MAX});
|
1816
|
+
{15000, 0, INT_MAX}));
|
2001
1817
|
}
|
2002
1818
|
|
2003
1819
|
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
@@ -2024,7 +1840,7 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
|
2024
1840
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
2025
1841
|
bootstrap_->certificate_providers())),
|
2026
1842
|
api_(this, &grpc_xds_client_trace, bootstrap_->node(),
|
2027
|
-
&bootstrap_->certificate_providers()) {
|
1843
|
+
&bootstrap_->certificate_providers(), &symtab_) {
|
2028
1844
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2029
1845
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
2030
1846
|
}
|
@@ -2055,24 +1871,9 @@ void XdsClient::Orphan() {
|
|
2055
1871
|
{
|
2056
1872
|
MutexLock lock(&mu_);
|
2057
1873
|
shutting_down_ = true;
|
2058
|
-
//
|
2059
|
-
|
2060
|
-
|
2061
|
-
// is possible for ADS calls to be in progress. Unreffing the loadbalancing
|
2062
|
-
// policies before those calls are done would lead to issues such as
|
2063
|
-
// https://github.com/grpc/grpc/issues/20928.
|
2064
|
-
for (auto& a : authority_state_map_) {
|
2065
|
-
a.second.channel_state.reset();
|
2066
|
-
if (!a.second.listener_map.empty()) {
|
2067
|
-
a.second.cluster_map.clear();
|
2068
|
-
a.second.endpoint_map.clear();
|
2069
|
-
}
|
2070
|
-
}
|
2071
|
-
// We clear these invalid resource watchers as cancel never came.
|
2072
|
-
invalid_listener_watchers_.clear();
|
2073
|
-
invalid_route_config_watchers_.clear();
|
2074
|
-
invalid_cluster_watchers_.clear();
|
2075
|
-
invalid_endpoint_watchers_.clear();
|
1874
|
+
// Clear cache and any remaining watchers that may not have been cancelled.
|
1875
|
+
authority_state_map_.clear();
|
1876
|
+
invalid_watchers_.clear();
|
2076
1877
|
}
|
2077
1878
|
}
|
2078
1879
|
|
@@ -2089,19 +1890,17 @@ RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
|
2089
1890
|
return channel_state;
|
2090
1891
|
}
|
2091
1892
|
|
2092
|
-
void XdsClient::
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
auto
|
2098
|
-
if (!resource.ok()) {
|
1893
|
+
void XdsClient::WatchResource(const XdsResourceType* type,
|
1894
|
+
absl::string_view name,
|
1895
|
+
RefCountedPtr<ResourceWatcherInterface> watcher) {
|
1896
|
+
ResourceWatcherInterface* w = watcher.get();
|
1897
|
+
// Lambda for handling failure cases.
|
1898
|
+
auto fail = [&](grpc_error_handle error) mutable {
|
2099
1899
|
{
|
2100
1900
|
MutexLock lock(&mu_);
|
2101
|
-
|
1901
|
+
MaybeRegisterResourceTypeLocked(type);
|
1902
|
+
invalid_watchers_[w] = watcher;
|
2102
1903
|
}
|
2103
|
-
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
2104
|
-
"Unable to parse resource name for listener %s", listener_name));
|
2105
1904
|
work_serializer_.Run(
|
2106
1905
|
// TODO(yashykt): When we move to C++14, capture watcher using
|
2107
1906
|
// std::move()
|
@@ -2109,107 +1908,50 @@ void XdsClient::WatchListenerData(
|
|
2109
1908
|
watcher->OnError(error);
|
2110
1909
|
},
|
2111
1910
|
DEBUG_LOCATION);
|
1911
|
+
};
|
1912
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
1913
|
+
if (!resource_name.ok()) {
|
1914
|
+
fail(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
1915
|
+
"Unable to parse resource name for listener %s", name)));
|
2112
1916
|
return;
|
2113
1917
|
}
|
2114
|
-
|
2115
|
-
|
2116
|
-
|
2117
|
-
|
2118
|
-
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2122
|
-
|
2123
|
-
|
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);
|
1918
|
+
// Find server to use.
|
1919
|
+
const XdsBootstrap::XdsServer* xds_server = nullptr;
|
1920
|
+
absl::string_view authority_name = resource_name->authority;
|
1921
|
+
if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
|
1922
|
+
auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
|
1923
|
+
if (authority == nullptr) {
|
1924
|
+
fail(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1925
|
+
absl::StrCat("authority \"", authority_name,
|
1926
|
+
"\" not present in bootstrap config")));
|
1927
|
+
return;
|
2135
1928
|
}
|
2136
|
-
|
2137
|
-
|
2138
|
-
if (authority_state.channel_state == nullptr) {
|
2139
|
-
authority_state.channel_state =
|
2140
|
-
GetOrCreateChannelStateLocked(bootstrap_->server());
|
1929
|
+
if (!authority->xds_servers.empty()) {
|
1930
|
+
xds_server = &authority->xds_servers[0];
|
2141
1931
|
}
|
2142
|
-
authority_state.channel_state->SubscribeLocked(XdsApi::kLdsTypeUrl,
|
2143
|
-
*resource);
|
2144
|
-
}
|
2145
|
-
work_serializer_.DrainQueue();
|
2146
|
-
}
|
2147
|
-
|
2148
|
-
void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
2149
|
-
ListenerWatcherInterface* watcher,
|
2150
|
-
bool delay_unsubscription) {
|
2151
|
-
MutexLock lock(&mu_);
|
2152
|
-
if (shutting_down_) return;
|
2153
|
-
auto resource = XdsApi::ParseResourceName(listener_name, XdsApi::IsLds);
|
2154
|
-
if (!resource.ok()) return;
|
2155
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2156
|
-
ListenerState& listener_state = authority_state.listener_map[resource->id];
|
2157
|
-
auto it = listener_state.watchers.find(watcher);
|
2158
|
-
if (it == listener_state.watchers.end()) {
|
2159
|
-
invalid_listener_watchers_.erase(watcher);
|
2160
|
-
return;
|
2161
|
-
}
|
2162
|
-
listener_state.watchers.erase(it);
|
2163
|
-
if (!listener_state.watchers.empty()) return;
|
2164
|
-
authority_state.listener_map.erase(resource->id);
|
2165
|
-
xds_server_channel_map_[bootstrap_->server()]->UnsubscribeLocked(
|
2166
|
-
XdsApi::kLdsTypeUrl, *resource, delay_unsubscription);
|
2167
|
-
if (!authority_state.HasSubscribedResources()) {
|
2168
|
-
authority_state.channel_state.reset();
|
2169
|
-
}
|
2170
|
-
}
|
2171
|
-
|
2172
|
-
void XdsClient::WatchRouteConfigData(
|
2173
|
-
absl::string_view route_config_name,
|
2174
|
-
RefCountedPtr<RouteConfigWatcherInterface> watcher) {
|
2175
|
-
std::string route_config_name_str = std::string(route_config_name);
|
2176
|
-
RouteConfigWatcherInterface* w = watcher.get();
|
2177
|
-
auto resource = XdsApi::ParseResourceName(route_config_name, XdsApi::IsRds);
|
2178
|
-
if (!resource.ok()) {
|
2179
|
-
{
|
2180
|
-
MutexLock lock(&mu_);
|
2181
|
-
invalid_route_config_watchers_[w] = watcher;
|
2182
|
-
}
|
2183
|
-
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2184
|
-
absl::StrFormat("Unable to parse resource name for route config %s",
|
2185
|
-
route_config_name));
|
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);
|
2193
|
-
return;
|
2194
1932
|
}
|
1933
|
+
if (xds_server == nullptr) xds_server = &bootstrap_->server();
|
2195
1934
|
{
|
2196
1935
|
MutexLock lock(&mu_);
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
1936
|
+
MaybeRegisterResourceTypeLocked(type);
|
1937
|
+
AuthorityState& authority_state =
|
1938
|
+
authority_state_map_[resource_name->authority];
|
1939
|
+
ResourceState& resource_state =
|
1940
|
+
authority_state.resource_map[type][resource_name->key];
|
1941
|
+
resource_state.watchers[w] = watcher;
|
1942
|
+
// If we already have a cached value for the resource, notify the new
|
1943
|
+
// watcher immediately.
|
1944
|
+
if (resource_state.resource != nullptr) {
|
2204
1945
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2205
1946
|
gpr_log(GPR_INFO,
|
2206
|
-
"[xds_client %p] returning cached
|
2207
|
-
|
1947
|
+
"[xds_client %p] returning cached listener data for %s", this,
|
1948
|
+
std::string(name).c_str());
|
2208
1949
|
}
|
2209
|
-
auto
|
1950
|
+
auto* value = type->CopyResource(resource_state.resource.get()).release();
|
2210
1951
|
work_serializer_.Schedule(
|
2211
|
-
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2212
|
-
watcher->
|
1952
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1953
|
+
watcher->OnGenericResourceChanged(value);
|
1954
|
+
delete value;
|
2213
1955
|
},
|
2214
1956
|
DEBUG_LOCATION);
|
2215
1957
|
}
|
@@ -2217,205 +1959,136 @@ void XdsClient::WatchRouteConfigData(
|
|
2217
1959
|
// needed.
|
2218
1960
|
if (authority_state.channel_state == nullptr) {
|
2219
1961
|
authority_state.channel_state =
|
2220
|
-
GetOrCreateChannelStateLocked(
|
1962
|
+
GetOrCreateChannelStateLocked(*xds_server);
|
2221
1963
|
}
|
2222
|
-
authority_state.channel_state->SubscribeLocked(
|
2223
|
-
*resource);
|
1964
|
+
authority_state.channel_state->SubscribeLocked(type, *resource_name);
|
2224
1965
|
}
|
2225
1966
|
work_serializer_.DrainQueue();
|
2226
1967
|
}
|
2227
1968
|
|
2228
|
-
void XdsClient::
|
2229
|
-
|
2230
|
-
|
1969
|
+
void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
1970
|
+
absl::string_view name,
|
1971
|
+
ResourceWatcherInterface* watcher,
|
1972
|
+
bool delay_unsubscription) {
|
1973
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
2231
1974
|
MutexLock lock(&mu_);
|
2232
|
-
if (
|
2233
|
-
|
2234
|
-
if (!resource.ok()) return;
|
2235
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2236
|
-
RouteConfigState& route_config_state =
|
2237
|
-
authority_state.route_config_map[resource->id];
|
2238
|
-
auto it = route_config_state.watchers.find(watcher);
|
2239
|
-
if (it == route_config_state.watchers.end()) {
|
2240
|
-
invalid_route_config_watchers_.erase(watcher);
|
1975
|
+
if (!resource_name.ok()) {
|
1976
|
+
invalid_watchers_.erase(watcher);
|
2241
1977
|
return;
|
2242
1978
|
}
|
2243
|
-
route_config_state.watchers.erase(it);
|
2244
|
-
if (!route_config_state.watchers.empty()) return;
|
2245
|
-
authority_state.route_config_map.erase(resource->id);
|
2246
|
-
xds_server_channel_map_[bootstrap_->server()]->UnsubscribeLocked(
|
2247
|
-
XdsApi::kRdsTypeUrl, *resource, delay_unsubscription);
|
2248
|
-
if (!authority_state.HasSubscribedResources()) {
|
2249
|
-
authority_state.channel_state.reset();
|
2250
|
-
}
|
2251
|
-
}
|
2252
|
-
|
2253
|
-
void XdsClient::WatchClusterData(
|
2254
|
-
absl::string_view cluster_name,
|
2255
|
-
RefCountedPtr<ClusterWatcherInterface> watcher) {
|
2256
|
-
std::string cluster_name_str = std::string(cluster_name);
|
2257
|
-
ClusterWatcherInterface* w = watcher.get();
|
2258
|
-
auto resource = XdsApi::ParseResourceName(cluster_name, XdsApi::IsCds);
|
2259
|
-
if (!resource.ok()) {
|
2260
|
-
{
|
2261
|
-
MutexLock lock(&mu_);
|
2262
|
-
invalid_cluster_watchers_[w] = watcher;
|
2263
|
-
}
|
2264
|
-
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
2265
|
-
"Unable to parse resource name for cluster %s", cluster_name));
|
2266
|
-
work_serializer_.Run([watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
2267
|
-
work_serializer_) { watcher->OnError(error); },
|
2268
|
-
DEBUG_LOCATION);
|
2269
|
-
return;
|
2270
|
-
}
|
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);
|
2292
|
-
}
|
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);
|
2301
|
-
}
|
2302
|
-
work_serializer_.DrainQueue();
|
2303
|
-
}
|
2304
|
-
|
2305
|
-
void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
2306
|
-
ClusterWatcherInterface* watcher,
|
2307
|
-
bool delay_unsubscription) {
|
2308
|
-
MutexLock lock(&mu_);
|
2309
1979
|
if (shutting_down_) return;
|
2310
|
-
|
2311
|
-
|
2312
|
-
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
if (
|
2321
|
-
|
2322
|
-
|
2323
|
-
|
2324
|
-
if
|
2325
|
-
|
2326
|
-
|
2327
|
-
|
2328
|
-
|
2329
|
-
|
2330
|
-
|
2331
|
-
|
2332
|
-
|
2333
|
-
EndpointWatcherInterface* w = watcher.get();
|
2334
|
-
auto resource = XdsApi::ParseResourceName(eds_service_name, XdsApi::IsEds);
|
2335
|
-
if (!resource.ok()) {
|
2336
|
-
{
|
2337
|
-
MutexLock lock(&mu_);
|
2338
|
-
invalid_endpoint_watchers_[w] = watcher;
|
2339
|
-
}
|
2340
|
-
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2341
|
-
absl::StrFormat("Unable to parse resource name for endpoint service %s",
|
2342
|
-
eds_service_name));
|
2343
|
-
work_serializer_.Run([watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
2344
|
-
work_serializer_) { watcher->OnError(error); },
|
2345
|
-
DEBUG_LOCATION);
|
2346
|
-
return;
|
2347
|
-
}
|
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());
|
1980
|
+
// Find authority.
|
1981
|
+
auto authority_it = authority_state_map_.find(resource_name->authority);
|
1982
|
+
if (authority_it == authority_state_map_.end()) return;
|
1983
|
+
AuthorityState& authority_state = authority_it->second;
|
1984
|
+
// Find type map.
|
1985
|
+
auto type_it = authority_state.resource_map.find(type);
|
1986
|
+
if (type_it == authority_state.resource_map.end()) return;
|
1987
|
+
auto& type_map = type_it->second;
|
1988
|
+
// Find resource key.
|
1989
|
+
auto resource_it = type_map.find(resource_name->key);
|
1990
|
+
if (resource_it == type_map.end()) return;
|
1991
|
+
ResourceState& resource_state = resource_it->second;
|
1992
|
+
// Remove watcher.
|
1993
|
+
resource_state.watchers.erase(watcher);
|
1994
|
+
// Clean up empty map entries, if any.
|
1995
|
+
if (resource_state.watchers.empty()) {
|
1996
|
+
authority_state.channel_state->UnsubscribeLocked(type, *resource_name,
|
1997
|
+
delay_unsubscription);
|
1998
|
+
type_map.erase(resource_it);
|
1999
|
+
if (type_map.empty()) {
|
2000
|
+
authority_state.resource_map.erase(type_it);
|
2001
|
+
if (authority_state.resource_map.empty()) {
|
2002
|
+
authority_state.channel_state.reset();
|
2360
2003
|
}
|
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);
|
2367
2004
|
}
|
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);
|
2376
2005
|
}
|
2377
|
-
work_serializer_.DrainQueue();
|
2378
2006
|
}
|
2379
2007
|
|
2380
|
-
void XdsClient::
|
2381
|
-
|
2382
|
-
|
2383
|
-
|
2384
|
-
|
2385
|
-
auto resource = XdsApi::ParseResourceName(eds_service_name, XdsApi::IsEds);
|
2386
|
-
if (!resource.ok()) return;
|
2387
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2388
|
-
EndpointState& endpoint_state = authority_state.endpoint_map[resource->id];
|
2389
|
-
auto it = endpoint_state.watchers.find(watcher);
|
2390
|
-
if (it == endpoint_state.watchers.end()) {
|
2391
|
-
invalid_endpoint_watchers_.erase(watcher);
|
2008
|
+
void XdsClient::MaybeRegisterResourceTypeLocked(
|
2009
|
+
const XdsResourceType* resource_type) {
|
2010
|
+
auto it = resource_types_.find(resource_type->type_url());
|
2011
|
+
if (it != resource_types_.end()) {
|
2012
|
+
GPR_ASSERT(it->second == resource_type);
|
2392
2013
|
return;
|
2393
2014
|
}
|
2394
|
-
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2398
|
-
|
2399
|
-
|
2400
|
-
|
2401
|
-
|
2015
|
+
resource_types_.emplace(resource_type->type_url(), resource_type);
|
2016
|
+
v2_resource_types_.emplace(resource_type->v2_type_url(), resource_type);
|
2017
|
+
resource_type->InitUpbSymtab(symtab_.ptr());
|
2018
|
+
}
|
2019
|
+
|
2020
|
+
const XdsResourceType* XdsClient::GetResourceTypeLocked(
|
2021
|
+
absl::string_view resource_type) {
|
2022
|
+
auto it = resource_types_.find(resource_type);
|
2023
|
+
if (it != resource_types_.end()) return it->second;
|
2024
|
+
auto it2 = v2_resource_types_.find(resource_type);
|
2025
|
+
if (it2 != v2_resource_types_.end()) return it2->second;
|
2026
|
+
return nullptr;
|
2027
|
+
}
|
2028
|
+
|
2029
|
+
absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
2030
|
+
absl::string_view name, const XdsResourceType* type) {
|
2031
|
+
// Old-style names use the empty string for authority.
|
2032
|
+
// authority is prefixed with "old:" to indicate that it's an old-style name.
|
2033
|
+
if (!absl::StartsWith(name, "xdstp:")) {
|
2034
|
+
return XdsResourceName{"old:", {std::string(name), {}}};
|
2035
|
+
}
|
2036
|
+
// New style name. Parse URI.
|
2037
|
+
auto uri = URI::Parse(name);
|
2038
|
+
if (!uri.ok()) return uri.status();
|
2039
|
+
// Split the resource type off of the path to get the id.
|
2040
|
+
std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
|
2041
|
+
absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
|
2042
|
+
if (!type->IsType(path_parts.first, nullptr)) {
|
2043
|
+
return absl::InvalidArgumentError(
|
2044
|
+
"xdstp URI path must indicate valid xDS resource type");
|
2045
|
+
}
|
2046
|
+
// Canonicalize order of query params.
|
2047
|
+
std::vector<URI::QueryParam> query_params;
|
2048
|
+
for (const auto& p : uri->query_parameter_map()) {
|
2049
|
+
query_params.emplace_back(
|
2050
|
+
URI::QueryParam{std::string(p.first), std::string(p.second)});
|
2051
|
+
}
|
2052
|
+
return XdsResourceName{
|
2053
|
+
absl::StrCat("xdstp:", uri->authority()),
|
2054
|
+
{std::string(path_parts.second), std::move(query_params)}};
|
2055
|
+
}
|
2056
|
+
|
2057
|
+
std::string XdsClient::ConstructFullXdsResourceName(
|
2058
|
+
absl::string_view authority, absl::string_view resource_type,
|
2059
|
+
const XdsResourceKey& key) {
|
2060
|
+
if (absl::ConsumePrefix(&authority, "xdstp:")) {
|
2061
|
+
auto uri = URI::Create("xdstp", std::string(authority),
|
2062
|
+
absl::StrCat("/", resource_type, "/", key.id),
|
2063
|
+
key.query_params, /*fragment=*/"");
|
2064
|
+
GPR_ASSERT(uri.ok());
|
2065
|
+
return uri->ToString();
|
2066
|
+
}
|
2067
|
+
// Old-style name.
|
2068
|
+
return key.id;
|
2402
2069
|
}
|
2403
2070
|
|
2404
2071
|
RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
2405
|
-
|
2072
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2406
2073
|
absl::string_view eds_service_name) {
|
2407
|
-
|
2408
|
-
// server name specified in lrs_server.
|
2074
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2409
2075
|
auto key =
|
2410
2076
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2411
2077
|
MutexLock lock(&mu_);
|
2412
|
-
// We jump through some hoops here to make sure that the
|
2413
|
-
//
|
2078
|
+
// We jump through some hoops here to make sure that the const
|
2079
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2080
|
+
// stored in the XdsClusterDropStats object point to the
|
2081
|
+
// XdsBootstrap::XdsServer and strings
|
2414
2082
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2415
|
-
auto
|
2416
|
-
|
2417
|
-
|
2418
|
-
|
2083
|
+
auto server_it =
|
2084
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2085
|
+
if (server_it->second.channel_state == nullptr) {
|
2086
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2087
|
+
}
|
2088
|
+
auto load_report_it = server_it->second.load_report_map
|
2089
|
+
.emplace(std::move(key), LoadReportState())
|
2090
|
+
.first;
|
2091
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2419
2092
|
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
2420
2093
|
if (load_report_state.drop_stats != nullptr) {
|
2421
2094
|
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
@@ -2426,31 +2099,26 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
|
2426
2099
|
load_report_state.drop_stats->GetSnapshotAndReset();
|
2427
2100
|
}
|
2428
2101
|
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
2429
|
-
Ref(DEBUG_LOCATION, "DropStats"),
|
2430
|
-
|
2431
|
-
|
2102
|
+
Ref(DEBUG_LOCATION, "DropStats"), server_it->first,
|
2103
|
+
load_report_it->first.first /*cluster_name*/,
|
2104
|
+
load_report_it->first.second /*eds_service_name*/);
|
2432
2105
|
load_report_state.drop_stats = cluster_drop_stats.get();
|
2433
2106
|
}
|
2434
|
-
|
2435
|
-
GPR_ASSERT(resource.ok());
|
2436
|
-
auto a = authority_state_map_.find(resource->authority);
|
2437
|
-
if (a != authority_state_map_.end()) {
|
2438
|
-
a->second.channel_state->MaybeStartLrsCall();
|
2439
|
-
}
|
2107
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2440
2108
|
return cluster_drop_stats;
|
2441
2109
|
}
|
2442
2110
|
|
2443
2111
|
void XdsClient::RemoveClusterDropStats(
|
2444
|
-
|
2112
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2445
2113
|
absl::string_view eds_service_name,
|
2446
2114
|
XdsClusterDropStats* cluster_drop_stats) {
|
2447
2115
|
MutexLock lock(&mu_);
|
2448
|
-
|
2449
|
-
|
2450
|
-
auto
|
2116
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2117
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2118
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2451
2119
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2452
|
-
if (
|
2453
|
-
LoadReportState& load_report_state =
|
2120
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2121
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2454
2122
|
if (load_report_state.drop_stats == cluster_drop_stats) {
|
2455
2123
|
// Record final snapshot in deleted_drop_stats, which will be
|
2456
2124
|
// added to the next load report.
|
@@ -2461,21 +2129,27 @@ void XdsClient::RemoveClusterDropStats(
|
|
2461
2129
|
}
|
2462
2130
|
|
2463
2131
|
RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
2464
|
-
|
2132
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2465
2133
|
absl::string_view eds_service_name,
|
2466
2134
|
RefCountedPtr<XdsLocalityName> locality) {
|
2467
|
-
|
2468
|
-
// server name specified in lrs_server.
|
2135
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2469
2136
|
auto key =
|
2470
2137
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2471
2138
|
MutexLock lock(&mu_);
|
2472
|
-
// We jump through some hoops here to make sure that the
|
2473
|
-
//
|
2139
|
+
// We jump through some hoops here to make sure that the const
|
2140
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2141
|
+
// stored in the XdsClusterDropStats object point to the
|
2142
|
+
// XdsBootstrap::XdsServer and strings
|
2474
2143
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2475
|
-
auto
|
2476
|
-
|
2477
|
-
|
2478
|
-
|
2144
|
+
auto server_it =
|
2145
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2146
|
+
if (server_it->second.channel_state == nullptr) {
|
2147
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2148
|
+
}
|
2149
|
+
auto load_report_it = server_it->second.load_report_map
|
2150
|
+
.emplace(std::move(key), LoadReportState())
|
2151
|
+
.first;
|
2152
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2479
2153
|
LoadReportState::LocalityState& locality_state =
|
2480
2154
|
load_report_state.locality_stats[locality];
|
2481
2155
|
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
@@ -2488,32 +2162,27 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
|
2488
2162
|
locality_state.locality_stats->GetSnapshotAndReset();
|
2489
2163
|
}
|
2490
2164
|
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
2491
|
-
Ref(DEBUG_LOCATION, "LocalityStats"),
|
2492
|
-
|
2493
|
-
std::move(locality));
|
2165
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
|
2166
|
+
load_report_it->first.first /*cluster_name*/,
|
2167
|
+
load_report_it->first.second /*eds_service_name*/, std::move(locality));
|
2494
2168
|
locality_state.locality_stats = cluster_locality_stats.get();
|
2495
2169
|
}
|
2496
|
-
|
2497
|
-
GPR_ASSERT(resource.ok());
|
2498
|
-
auto a = authority_state_map_.find(resource->authority);
|
2499
|
-
if (a != authority_state_map_.end()) {
|
2500
|
-
a->second.channel_state->MaybeStartLrsCall();
|
2501
|
-
}
|
2170
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2502
2171
|
return cluster_locality_stats;
|
2503
2172
|
}
|
2504
2173
|
|
2505
2174
|
void XdsClient::RemoveClusterLocalityStats(
|
2506
|
-
|
2175
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2507
2176
|
absl::string_view eds_service_name,
|
2508
2177
|
const RefCountedPtr<XdsLocalityName>& locality,
|
2509
2178
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
2510
2179
|
MutexLock lock(&mu_);
|
2511
|
-
|
2512
|
-
|
2513
|
-
auto
|
2180
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2181
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2182
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2514
2183
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2515
|
-
if (
|
2516
|
-
LoadReportState& load_report_state =
|
2184
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2185
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2517
2186
|
auto locality_it = load_report_state.locality_stats.find(locality);
|
2518
2187
|
if (locality_it == load_report_state.locality_stats.end()) return;
|
2519
2188
|
LoadReportState::LocalityState& locality_state = locality_it->second;
|
@@ -2534,67 +2203,40 @@ void XdsClient::ResetBackoff() {
|
|
2534
2203
|
}
|
2535
2204
|
|
2536
2205
|
void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
|
2537
|
-
std::set<RefCountedPtr<
|
2538
|
-
|
2539
|
-
|
2540
|
-
|
2541
|
-
|
2542
|
-
|
2543
|
-
|
2544
|
-
for (const auto& q : listener_state.watchers) {
|
2545
|
-
listener_watchers.insert(q.second);
|
2546
|
-
}
|
2547
|
-
}
|
2548
|
-
for (const auto& p : a.second.route_config_map) {
|
2549
|
-
const RouteConfigState& route_config_state = p.second;
|
2550
|
-
for (const auto& q : route_config_state.watchers) {
|
2551
|
-
route_config_watchers.insert(q.second);
|
2552
|
-
}
|
2553
|
-
}
|
2554
|
-
for (const auto& p : a.second.cluster_map) {
|
2555
|
-
const ClusterState& cluster_state = p.second;
|
2556
|
-
for (const auto& q : cluster_state.watchers) {
|
2557
|
-
cluster_watchers.insert(q.second);
|
2558
|
-
}
|
2559
|
-
}
|
2560
|
-
for (const auto& p : a.second.endpoint_map) {
|
2561
|
-
const EndpointState& endpoint_state = p.second;
|
2562
|
-
for (const auto& q : endpoint_state.watchers) {
|
2563
|
-
endpoint_watchers.insert(q.second);
|
2206
|
+
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
2207
|
+
for (const auto& a : authority_state_map_) { // authority
|
2208
|
+
for (const auto& t : a.second.resource_map) { // type
|
2209
|
+
for (const auto& r : t.second) { // resource id
|
2210
|
+
for (const auto& w : r.second.watchers) { // watchers
|
2211
|
+
watchers.insert(w.second);
|
2212
|
+
}
|
2564
2213
|
}
|
2565
2214
|
}
|
2566
2215
|
}
|
2567
2216
|
work_serializer_.Schedule(
|
2568
|
-
// TODO(yashykt): When we move to C++14, capture
|
2217
|
+
// TODO(yashykt): When we move to C++14, capture watchers using
|
2569
2218
|
// std::move()
|
2570
|
-
[
|
2571
|
-
|
2572
|
-
|
2573
|
-
|
2574
|
-
|
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
|
-
},
|
2219
|
+
[watchers, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2220
|
+
for (const auto& watcher : watchers) {
|
2221
|
+
watcher->OnError(GRPC_ERROR_REF(error));
|
2222
|
+
}
|
2223
|
+
GRPC_ERROR_UNREF(error);
|
2224
|
+
},
|
2587
2225
|
DEBUG_LOCATION);
|
2588
2226
|
}
|
2589
2227
|
|
2590
2228
|
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
2591
|
-
|
2229
|
+
const XdsBootstrap::XdsServer& xds_server, bool send_all_clusters,
|
2230
|
+
const std::set<std::string>& clusters) {
|
2592
2231
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2593
2232
|
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2594
2233
|
}
|
2595
2234
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
2596
|
-
|
2597
|
-
|
2235
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2236
|
+
if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
|
2237
|
+
auto& load_report_map = server_it->second.load_report_map;
|
2238
|
+
for (auto load_report_it = load_report_map.begin();
|
2239
|
+
load_report_it != load_report_map.end();) {
|
2598
2240
|
// Cluster key is cluster and EDS service name.
|
2599
2241
|
const auto& cluster_key = load_report_it->first;
|
2600
2242
|
LoadReportState& load_report = load_report_it->second;
|
@@ -2649,7 +2291,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2649
2291
|
}
|
2650
2292
|
}
|
2651
2293
|
// Compute load report interval.
|
2652
|
-
const
|
2294
|
+
const Timestamp now = ExecCtx::Get()->Now();
|
2653
2295
|
snapshot.load_report_interval = now - load_report.last_report_time;
|
2654
2296
|
load_report.last_report_time = now;
|
2655
2297
|
// Record snapshot.
|
@@ -2660,7 +2302,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2660
2302
|
// deleted stats objects, remove the entry.
|
2661
2303
|
if (load_report.locality_stats.empty() &&
|
2662
2304
|
load_report.drop_stats == nullptr) {
|
2663
|
-
load_report_it =
|
2305
|
+
load_report_it = load_report_map.erase(load_report_it);
|
2664
2306
|
} else {
|
2665
2307
|
++load_report_it;
|
2666
2308
|
}
|
@@ -2671,35 +2313,18 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2671
2313
|
std::string XdsClient::DumpClientConfigBinary() {
|
2672
2314
|
MutexLock lock(&mu_);
|
2673
2315
|
XdsApi::ResourceTypeMetadataMap resource_type_metadata_map;
|
2674
|
-
auto&
|
2675
|
-
auto& rds_map = resource_type_metadata_map[XdsApi::kRdsTypeUrl];
|
2676
|
-
auto& cds_map = resource_type_metadata_map[XdsApi::kCdsTypeUrl];
|
2677
|
-
auto& eds_map = resource_type_metadata_map[XdsApi::kEdsTypeUrl];
|
2678
|
-
for (auto& a : authority_state_map_) {
|
2316
|
+
for (const auto& a : authority_state_map_) { // authority
|
2679
2317
|
const std::string& authority = a.first;
|
2680
|
-
|
2681
|
-
|
2682
|
-
|
2683
|
-
|
2684
|
-
|
2685
|
-
|
2686
|
-
|
2687
|
-
|
2688
|
-
|
2689
|
-
|
2690
|
-
authority, XdsApi::kRdsTypeUrl, route_config_name)] = &p.second.meta;
|
2691
|
-
}
|
2692
|
-
// Collect resource metadata from clusters
|
2693
|
-
for (auto& p : a.second.cluster_map) {
|
2694
|
-
const std::string& cluster_name = p.first;
|
2695
|
-
cds_map[XdsApi::ConstructFullResourceName(authority, XdsApi::kCdsTypeUrl,
|
2696
|
-
cluster_name)] = &p.second.meta;
|
2697
|
-
}
|
2698
|
-
// Collect resource metadata from endpoints
|
2699
|
-
for (auto& p : a.second.endpoint_map) {
|
2700
|
-
const std::string& endpoint_name = p.first;
|
2701
|
-
eds_map[XdsApi::ConstructFullResourceName(
|
2702
|
-
authority, XdsApi::kEdsTypeUrl, endpoint_name)] = &p.second.meta;
|
2318
|
+
for (const auto& t : a.second.resource_map) { // type
|
2319
|
+
const XdsResourceType* type = t.first;
|
2320
|
+
auto& resource_metadata_map =
|
2321
|
+
resource_type_metadata_map[type->type_url()];
|
2322
|
+
for (const auto& r : t.second) { // resource id
|
2323
|
+
const XdsResourceKey& resource_key = r.first;
|
2324
|
+
const ResourceState& resource_state = r.second;
|
2325
|
+
resource_metadata_map[ConstructFullXdsResourceName(
|
2326
|
+
authority, type->type_url(), resource_key)] = &resource_state.meta;
|
2327
|
+
}
|
2703
2328
|
}
|
2704
2329
|
}
|
2705
2330
|
// Assemble config dump messages
|