grpc 1.43.1 → 1.46.2
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 +369 -229
- 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 +24 -21
- 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/channel_idle/channel_idle_filter.cc +309 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +122 -0
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +5 -5
- 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 +302 -219
- data/src/core/ext/filters/client_channel/client_channel.h +40 -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 +126 -582
- data/src/core/ext/filters/client_channel/health/health_check_client.h +24 -160
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +10 -13
- data/src/core/ext/filters/client_channel/http_proxy.cc +88 -110
- data/src/core/ext/filters/client_channel/http_proxy.h +17 -0
- 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 +199 -150
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +121 -73
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +162 -122
- 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 +98 -63
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +79 -67
- 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 +19 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +282 -385
- 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 +287 -313
- 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 +92 -255
- 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/polling_resolver.cc +201 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +106 -0
- 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 +284 -148
- 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 +253 -171
- 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 +48 -55
- data/src/core/ext/filters/client_channel/subchannel.h +7 -7
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +544 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +214 -0
- 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 +155 -400
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +24 -1
- 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 +81 -528
- data/src/core/ext/filters/http/client/http_client_filter.h +21 -4
- data/src/core/ext/filters/http/client_authority_filter.cc +31 -95
- data/src/core/ext/filters/http/client_authority_filter.h +24 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +20 -18
- 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 +27 -225
- 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.cc +2 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +76 -198
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +235 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +239 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +278 -245
- 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/frame_settings.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +338 -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 +10 -41
- data/src/core/ext/transport/chttp2/transport/parsing.cc +11 -9
- data/src/core/ext/transport/chttp2/transport/writing.cc +81 -136
- 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 +117 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +182 -176
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1248 -685
- 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 +151 -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 +160 -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 +124 -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 +102 -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 +97 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -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 +103 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +14 -12
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +49 -16
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +49 -23
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +98 -96
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +669 -386
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +185 -173
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1269 -664
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +34 -26
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +200 -91
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +252 -238
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1670 -827
- 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 +42 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +49 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +272 -99
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +54 -50
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +354 -190
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +11 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +45 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +157 -154
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1068 -582
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +87 -42
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +525 -167
- 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 +38 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +11 -29
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +41 -101
- 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 +151 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +108 -104
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +768 -410
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +115 -84
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +736 -349
- 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 +57 -31
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +162 -108
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +992 -397
- 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 +28 -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 +83 -49
- 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 +75 -34
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +15 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +93 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +11 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +46 -26
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +34 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +194 -109
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +51 -48
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +349 -190
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +49 -47
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +357 -188
- 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 +34 -21
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +72 -61
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +504 -260
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +77 -69
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +560 -301
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +19 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +104 -49
- 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 +66 -41
- 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 +136 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +58 -55
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +413 -235
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +62 -60
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +406 -237
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +82 -76
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +562 -294
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +37 -31
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +271 -142
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +503 -475
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3642 -1901
- 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 +148 -72
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -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 +88 -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 +103 -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 +77 -46
- 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 +134 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -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 +94 -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 +213 -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 +218 -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 +146 -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 +34 -24
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +29 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +188 -113
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +36 -34
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +260 -132
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +16 -14
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +86 -43
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +229 -198
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1553 -734
- 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 +87 -58
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +554 -235
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +26 -24
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +156 -87
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +98 -71
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +622 -263
- 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 +160 -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 +67 -65
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +474 -256
- 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 +107 -62
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +51 -49
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +347 -186
- 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 +112 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +20 -18
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -82
- 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 +214 -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 +99 -57
- 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 +50 -31
- 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 +48 -27
- 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 +38 -24
- 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 +117 -69
- 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 +123 -65
- 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 +85 -53
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +150 -83
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +32 -30
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +230 -146
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +36 -34
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +235 -131
- 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 +201 -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 +139 -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 +62 -36
- 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 +98 -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 +40 -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 +127 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +8 -6
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +22 -6
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +109 -103
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +720 -382
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +120 -112
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +795 -402
- data/src/core/ext/upb-generated/google/api/http.upb.c +29 -27
- data/src/core/ext/upb-generated/google/api/http.upb.h +216 -115
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -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 +38 -22
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +291 -237
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2076 -1030
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +36 -20
- 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 +31 -29
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +177 -93
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +9 -7
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +36 -20
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +40 -38
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +240 -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 +52 -30
- 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 +319 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +21 -19
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +103 -48
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +102 -96
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +685 -359
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +16 -13
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +76 -41
- 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 +56 -35
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +57 -55
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +383 -219
- 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 +115 -63
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +36 -34
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +189 -78
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +14 -12
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +53 -22
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +7 -5
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +15 -6
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +14 -12
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +55 -24
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +13 -11
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +49 -23
- data/src/core/ext/upb-generated/validate/validate.upb.c +339 -312
- data/src/core/ext/upb-generated/validate/validate.upb.h +2726 -1180
- 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 +278 -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 +108 -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 +46 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +34 -32
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +171 -80
- 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 +99 -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 +30 -19
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +18 -16
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +98 -55
- 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 +53 -30
- 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 +103 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +12 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +55 -30
- 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 +130 -70
- 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 +58 -30
- 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 +101 -46
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -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 +143 -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 +218 -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 +42 -24
- 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 +58 -51
- 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 +385 -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 +23 -16
- 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 +138 -101
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -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 +22 -34
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
- 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 +177 -166
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -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 +153 -147
- 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 +36 -27
- 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 +826 -803
- 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 +197 -172
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -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 +217 -199
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -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/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -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/certificate_provider_store.cc +8 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- 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 +147 -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.cc +2 -0
- data/src/core/ext/xds/xds_certificate_provider.h +9 -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 +750 -1135
- data/src/core/ext/xds/xds_client.h +111 -153
- 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_cluster_specifier_plugin.cc +142 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -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 +371 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -7
- 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 +1122 -0
- data/src/core/ext/xds/xds_route_config.h +218 -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 +179 -123
- 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/avl/avl.h +68 -5
- 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/call_tracer.h +4 -1
- data/src/core/lib/channel/channel_args.cc +161 -23
- data/src/core/lib/channel/channel_args.h +210 -7
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -8
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
- data/src/core/lib/channel/channel_stack.cc +10 -3
- data/src/core/lib/channel/channel_stack.h +39 -6
- data/src/core/lib/channel/channel_stack_builder.cc +23 -270
- data/src/core/lib/channel/channel_stack_builder.h +118 -149
- data/src/core/lib/channel/channel_stack_builder_impl.cc +102 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- 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 +2 -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 +1002 -0
- data/src/core/lib/channel/promise_based_filter.h +437 -0
- data/src/core/lib/compression/compression.cc +20 -112
- data/src/core/lib/compression/compression_internal.cc +137 -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/debug/stats_data.cc +2 -6
- data/src/core/lib/debug/stats_data.h +18 -21
- data/src/core/{ext/filters/max_age/max_age_filter.h → lib/event_engine/default_event_engine_factory.cc} +11 -10
- 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/tls.h +1 -0
- data/src/core/lib/gpr/useful.h +18 -0
- data/src/core/lib/gprpp/bitset.h +19 -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/cpp_impl_of.h +4 -0
- data/src/core/lib/gprpp/debug_location.h +2 -0
- data/src/core/lib/gprpp/match.h +73 -0
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/ref_counted.h +2 -0
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/status_helper.cc +48 -40
- 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 +198 -0
- data/src/core/lib/gprpp/time.h +292 -0
- data/src/core/lib/http/format_request.cc +28 -25
- 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 +64 -75
- data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
- data/src/core/lib/http/parser.cc +80 -9
- data/src/core/lib/http/parser.h +15 -2
- 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_poll_posix.cc +7 -7
- data/src/core/lib/iomgr/ev_posix.cc +9 -10
- 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 +2 -1
- 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 -11
- 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 +4 -4
- 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 +95 -36
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -17
- 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 +5 -5
- 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/call_push_pull.h +144 -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 +6 -0
- data/src/core/lib/promise/intra_activity_waiter.h +49 -0
- data/src/core/lib/promise/latch.h +104 -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.cc +5 -30
- data/src/core/lib/resource_quota/api.h +1 -2
- 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/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- 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 +106 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -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 +9 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
- data/src/core/lib/security/credentials/alts/alts_credentials.h +10 -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 +24 -83
- data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -10
- data/src/core/lib/security/credentials/credentials.cc +2 -3
- data/src/core/lib/security/credentials/credentials.h +74 -80
- 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 +23 -27
- data/src/core/lib/security/credentials/fake/fake_credentials.h +22 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +20 -13
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +21 -28
- data/src/core/lib/security/credentials/iam/iam_credentials.h +15 -9
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +25 -26
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +32 -44
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -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.cc +6 -6
- data/src/core/lib/security/credentials/local/local_credentials.h +10 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +146 -159
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +60 -33
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +96 -152
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +56 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +7 -14
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +14 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +49 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +8 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +42 -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 +67 -80
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +9 -6
- data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +48 -50
- data/src/core/lib/security/credentials/xds/xds_credentials.h +37 -6
- 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 +10 -18
- data/src/core/lib/security/security_connector/security_connector.cc +3 -15
- data/src/core/lib/security/security_connector/security_connector.h +25 -21
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +10 -13
- 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 +25 -15
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +6 -6
- data/src/core/lib/security/transport/auth_filters.h +38 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +97 -360
- data/src/core/lib/security/transport/secure_endpoint.cc +198 -129
- data/src/core/lib/security/transport/secure_endpoint.h +1 -1
- data/src/core/lib/security/transport/security_handshaker.cc +20 -10
- 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 +1091 -1206
- data/src/core/lib/surface/call.h +5 -19
- data/src/core/lib/surface/channel.cc +65 -71
- data/src/core/lib/surface/channel.h +10 -11
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +3 -7
- 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 +25 -64
- data/src/core/lib/surface/server.h +6 -7
- 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/byte_stream.cc +2 -0
- 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 +1014 -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 +103 -3
- data/src/core/lib/transport/transport_impl.h +14 -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 +21 -91
- 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 +21 -13
- 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 +180 -52
- data/src/core/tsi/ssl_transport_security.h +46 -8
- data/src/core/tsi/transport_security_interface.h +2 -0
- 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/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- 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 +542 -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 +1926 -1078
- data/third_party/upb/upb/def.h +329 -288
- data/third_party/upb/upb/def.hpp +129 -172
- data/third_party/upb/upb/encode.c +208 -175
- data/third_party/upb/upb/encode.h +15 -17
- data/third_party/upb/upb/json_encode.c +776 -0
- data/third_party/upb/upb/json_encode.h +62 -0
- data/third_party/upb/upb/msg.c +142 -124
- data/third_party/upb/upb/msg.h +39 -33
- data/third_party/upb/upb/msg_internal.h +342 -280
- data/third_party/upb/upb/port_def.inc +8 -0
- data/third_party/upb/upb/port_undef.inc +1 -0
- 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 +231 -147
- data/third_party/upb/upb/table_internal.h +129 -95
- 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 +157 -151
- 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
- data/third_party/zlib/crc32.c +966 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +78 -30
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +5 -3
- data/third_party/zlib/gzread.c +5 -7
- data/third_party/zlib/gzwrite.c +25 -13
- data/third_party/zlib/infback.c +2 -1
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +39 -8
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/trees.c +27 -48
- data/third_party/zlib/zlib.h +123 -100
- data/third_party/zlib/zutil.c +2 -2
- data/third_party/zlib/zutil.h +12 -9
- metadata +440 -216
- 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/filters/client_idle/client_idle_filter.cc +0 -264
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
- 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/ev_epollex_linux.cc +0 -1654
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- 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/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- 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/sys_epoll_wrapper.h +0 -30
- 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,16 @@
|
|
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_cluster_specifier_plugin.h"
|
42
|
+
#include "src/core/ext/xds/xds_endpoint.h"
|
40
43
|
#include "src/core/ext/xds/xds_http_filters.h"
|
44
|
+
#include "src/core/ext/xds/xds_listener.h"
|
41
45
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
42
46
|
#include "src/core/lib/backoff/backoff.h"
|
43
47
|
#include "src/core/lib/channel/channel_args.h"
|
44
48
|
#include "src/core/lib/channel/channel_stack.h"
|
49
|
+
#include "src/core/lib/config/core_configuration.h"
|
45
50
|
#include "src/core/lib/gpr/env.h"
|
46
51
|
#include "src/core/lib/gpr/string.h"
|
47
52
|
#include "src/core/lib/gprpp/memory.h"
|
@@ -50,11 +55,12 @@
|
|
50
55
|
#include "src/core/lib/gprpp/sync.h"
|
51
56
|
#include "src/core/lib/iomgr/sockaddr.h"
|
52
57
|
#include "src/core/lib/iomgr/timer.h"
|
58
|
+
#include "src/core/lib/security/credentials/channel_creds_registry.h"
|
53
59
|
#include "src/core/lib/slice/slice_internal.h"
|
54
60
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
55
61
|
#include "src/core/lib/surface/call.h"
|
56
62
|
#include "src/core/lib/surface/channel.h"
|
57
|
-
#include "src/core/lib/
|
63
|
+
#include "src/core/lib/surface/lame_client.h"
|
58
64
|
#include "src/core/lib/uri/uri_parser.h"
|
59
65
|
|
60
66
|
#define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
@@ -78,43 +84,6 @@ char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
|
78
84
|
|
79
85
|
} // namespace
|
80
86
|
|
81
|
-
class XdsClient::Notifier {
|
82
|
-
public:
|
83
|
-
// Helper template function to invoke `OnError()` on a list of watchers \a
|
84
|
-
// watchers_list within \a work_serializer. Works with all 4 resource types.
|
85
|
-
template <class T>
|
86
|
-
static void ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
87
|
-
XdsClient* xds_client, const T& watchers_list, grpc_error_handle error,
|
88
|
-
const DebugLocation& location) {
|
89
|
-
xds_client->work_serializer_.Schedule(
|
90
|
-
[watchers_list, error]()
|
91
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
92
|
-
for (const auto& p : watchers_list) {
|
93
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
94
|
-
}
|
95
|
-
GRPC_ERROR_UNREF(error);
|
96
|
-
},
|
97
|
-
location);
|
98
|
-
}
|
99
|
-
|
100
|
-
// Helper template function to invoke `OnResourceDoesNotExist()` on a list of
|
101
|
-
// watchers \a watchers_list within \a work_serializer. Works with all 4
|
102
|
-
// resource types.
|
103
|
-
template <class T>
|
104
|
-
static void ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
105
|
-
XdsClient* xds_client, const T& watchers_list,
|
106
|
-
const DebugLocation& location) {
|
107
|
-
xds_client->work_serializer_.Schedule(
|
108
|
-
[watchers_list]()
|
109
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
110
|
-
for (const auto& p : watchers_list) {
|
111
|
-
p.first->OnResourceDoesNotExist();
|
112
|
-
}
|
113
|
-
},
|
114
|
-
location);
|
115
|
-
}
|
116
|
-
};
|
117
|
-
|
118
87
|
//
|
119
88
|
// Internal class declarations
|
120
89
|
//
|
@@ -172,21 +141,54 @@ class XdsClient::ChannelState::AdsCallState
|
|
172
141
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
173
142
|
bool seen_response() const { return seen_response_; }
|
174
143
|
|
175
|
-
void SubscribeLocked(const
|
176
|
-
|
144
|
+
void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name,
|
145
|
+
bool delay_send)
|
177
146
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
178
|
-
void UnsubscribeLocked(const
|
179
|
-
const
|
180
|
-
bool delay_unsubscription)
|
147
|
+
void UnsubscribeLocked(const XdsResourceType* type,
|
148
|
+
const XdsResourceName& name, bool delay_unsubscription)
|
181
149
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
182
150
|
|
183
151
|
bool HasSubscribedResources() const;
|
184
152
|
|
185
153
|
private:
|
186
|
-
class
|
154
|
+
class AdsResponseParser : public XdsApi::AdsResponseParserInterface {
|
187
155
|
public:
|
188
|
-
|
189
|
-
|
156
|
+
struct Result {
|
157
|
+
const XdsResourceType* type;
|
158
|
+
std::string type_url;
|
159
|
+
std::string version;
|
160
|
+
std::string nonce;
|
161
|
+
std::vector<std::string> errors;
|
162
|
+
std::map<std::string /*authority*/, std::set<XdsResourceKey>>
|
163
|
+
resources_seen;
|
164
|
+
bool have_valid_resources = false;
|
165
|
+
};
|
166
|
+
|
167
|
+
explicit AdsResponseParser(AdsCallState* ads_call_state)
|
168
|
+
: ads_call_state_(ads_call_state) {}
|
169
|
+
|
170
|
+
absl::Status ProcessAdsResponseFields(AdsResponseFields fields) override
|
171
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
172
|
+
|
173
|
+
void ParseResource(const XdsEncodingContext& context, size_t idx,
|
174
|
+
absl::string_view type_url,
|
175
|
+
absl::string_view serialized_resource) override
|
176
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
177
|
+
|
178
|
+
Result TakeResult() { return std::move(result_); }
|
179
|
+
|
180
|
+
private:
|
181
|
+
XdsClient* xds_client() const { return ads_call_state_->xds_client(); }
|
182
|
+
|
183
|
+
AdsCallState* ads_call_state_;
|
184
|
+
const Timestamp update_time_ = ExecCtx::Get()->Now();
|
185
|
+
Result result_;
|
186
|
+
};
|
187
|
+
|
188
|
+
class ResourceTimer : public InternallyRefCounted<ResourceTimer> {
|
189
|
+
public:
|
190
|
+
ResourceTimer(const XdsResourceType* type, const XdsResourceName& name)
|
191
|
+
: type_(type), name_(name) {
|
190
192
|
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
191
193
|
grpc_schedule_on_exec_ctx);
|
192
194
|
}
|
@@ -217,7 +219,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
217
219
|
|
218
220
|
private:
|
219
221
|
static void OnTimer(void* arg, grpc_error_handle error) {
|
220
|
-
|
222
|
+
ResourceTimer* self = static_cast<ResourceTimer*>(arg);
|
221
223
|
{
|
222
224
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
223
225
|
self->OnTimerLocked(GRPC_ERROR_REF(error));
|
@@ -231,54 +233,29 @@ class XdsClient::ChannelState::AdsCallState
|
|
231
233
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
232
234
|
if (error == GRPC_ERROR_NONE && timer_pending_) {
|
233
235
|
timer_pending_ = false;
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
name_.id)));
|
240
|
-
watcher_error = grpc_error_set_int(
|
241
|
-
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
236
|
+
absl::Status watcher_error = absl::UnavailableError(absl::StrFormat(
|
237
|
+
"timeout obtaining resource {type=%s name=%s} from xds server",
|
238
|
+
type_->type_url(),
|
239
|
+
XdsClient::ConstructFullXdsResourceName(
|
240
|
+
name_.authority, type_->type_url(), name_.key)));
|
242
241
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
243
|
-
gpr_log(GPR_INFO, "[xds_client %p] %s",
|
244
|
-
|
242
|
+
gpr_log(GPR_INFO, "[xds_client %p] xds server %s: %s",
|
243
|
+
ads_calld_->xds_client(),
|
244
|
+
ads_calld_->chand()->server_.server_uri.c_str(),
|
245
|
+
watcher_error.ToString().c_str());
|
245
246
|
}
|
246
247
|
auto& authority_state =
|
247
248
|
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
ads_calld_->xds_client(), state.watchers,
|
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);
|
249
|
+
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
250
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
251
|
+
ads_calld_->xds_client()->NotifyWatchersOnErrorLocked(state.watchers,
|
252
|
+
watcher_error);
|
276
253
|
}
|
277
254
|
GRPC_ERROR_UNREF(error);
|
278
255
|
}
|
279
256
|
|
280
|
-
const
|
281
|
-
const
|
257
|
+
const XdsResourceType* type_;
|
258
|
+
const XdsResourceName name_;
|
282
259
|
|
283
260
|
RefCountedPtr<AdsCallState> ads_calld_;
|
284
261
|
bool timer_started_ = false;
|
@@ -296,40 +273,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
296
273
|
|
297
274
|
// Subscribed resources of this type.
|
298
275
|
std::map<std::string /*authority*/,
|
299
|
-
std::map<
|
276
|
+
std::map<XdsResourceKey, OrphanablePtr<ResourceTimer>>>
|
300
277
|
subscribed_resources;
|
301
278
|
};
|
302
279
|
|
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)
|
280
|
+
void SendMessageLocked(const XdsResourceType* type)
|
333
281
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
334
282
|
|
335
283
|
static void OnRequestSent(void* arg, grpc_error_handle error);
|
@@ -344,9 +292,9 @@ class XdsClient::ChannelState::AdsCallState
|
|
344
292
|
|
345
293
|
bool IsCurrentCallOnChannel() const;
|
346
294
|
|
347
|
-
|
348
|
-
|
349
|
-
ResourceNamesForRequest(const
|
295
|
+
// Constructs a list of resource names of a given type for an ADS
|
296
|
+
// request. Also starts the timer for each resource if needed.
|
297
|
+
std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type);
|
350
298
|
|
351
299
|
// The owning RetryableCall<>.
|
352
300
|
RefCountedPtr<RetryableCall<AdsCallState>> parent_;
|
@@ -375,10 +323,10 @@ class XdsClient::ChannelState::AdsCallState
|
|
375
323
|
grpc_closure on_status_received_;
|
376
324
|
|
377
325
|
// Resource types for which requests need to be sent.
|
378
|
-
std::set<
|
326
|
+
std::set<const XdsResourceType*> buffered_requests_;
|
379
327
|
|
380
328
|
// State for each resource type.
|
381
|
-
std::map<
|
329
|
+
std::map<const XdsResourceType*, ResourceTypeState> state_map_;
|
382
330
|
};
|
383
331
|
|
384
332
|
// Contains an LRS call to the xds server.
|
@@ -402,7 +350,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
402
350
|
// Reports client-side load stats according to a fixed interval.
|
403
351
|
class Reporter : public InternallyRefCounted<Reporter> {
|
404
352
|
public:
|
405
|
-
Reporter(RefCountedPtr<LrsCallState> parent,
|
353
|
+
Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
|
406
354
|
: parent_(std::move(parent)), report_interval_(report_interval) {
|
407
355
|
GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
|
408
356
|
grpc_schedule_on_exec_ctx);
|
@@ -433,7 +381,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
433
381
|
RefCountedPtr<LrsCallState> parent_;
|
434
382
|
|
435
383
|
// The load reporting state.
|
436
|
-
const
|
384
|
+
const Duration report_interval_;
|
437
385
|
bool last_report_counters_were_zero_ = false;
|
438
386
|
bool next_report_timer_callback_pending_ = false;
|
439
387
|
grpc_timer next_report_timer_;
|
@@ -480,7 +428,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
480
428
|
// Load reporting state.
|
481
429
|
bool send_all_clusters_ = false;
|
482
430
|
std::set<std::string> cluster_names_; // Asked for by the LRS server.
|
483
|
-
|
431
|
+
Duration load_reporting_interval_;
|
484
432
|
OrphanablePtr<Reporter> reporter_;
|
485
433
|
};
|
486
434
|
|
@@ -503,12 +451,14 @@ class XdsClient::ChannelState::StateWatcher
|
|
503
451
|
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
504
452
|
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
505
453
|
gpr_log(GPR_INFO,
|
506
|
-
"[xds_client %p] xds channel in
|
507
|
-
"
|
508
|
-
parent_->xds_client(),
|
454
|
+
"[xds_client %p] xds channel for server %s in "
|
455
|
+
"state TRANSIENT_FAILURE: %s",
|
456
|
+
parent_->xds_client(), parent_->server_.server_uri.c_str(),
|
457
|
+
status.ToString().c_str());
|
509
458
|
parent_->xds_client_->NotifyOnErrorLocked(
|
510
|
-
|
511
|
-
"xds channel in TRANSIENT_FAILURE"
|
459
|
+
absl::UnavailableError(absl::StrCat(
|
460
|
+
"xds channel in TRANSIENT_FAILURE, connectivity error: ",
|
461
|
+
status.ToString())));
|
512
462
|
}
|
513
463
|
}
|
514
464
|
parent_->xds_client()->work_serializer_.DrainQueue();
|
@@ -526,10 +476,10 @@ namespace {
|
|
526
476
|
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
527
477
|
const XdsBootstrap::XdsServer& server) {
|
528
478
|
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
529
|
-
|
530
|
-
|
531
|
-
return
|
532
|
-
|
479
|
+
CoreConfiguration::Get().channel_creds_registry().CreateChannelCreds(
|
480
|
+
server.channel_creds_type, server.channel_creds_config);
|
481
|
+
return grpc_channel_create(server.server_uri.c_str(), channel_creds.get(),
|
482
|
+
args);
|
533
483
|
}
|
534
484
|
|
535
485
|
} // namespace
|
@@ -553,8 +503,8 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
553
503
|
|
554
504
|
XdsClient::ChannelState::~ChannelState() {
|
555
505
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
556
|
-
gpr_log(GPR_INFO, "[xds_client %p]
|
557
|
-
this);
|
506
|
+
gpr_log(GPR_INFO, "[xds_client %p] destroying xds channel %p for server %s",
|
507
|
+
xds_client(), this, server_.server_uri.c_str());
|
558
508
|
}
|
559
509
|
grpc_channel_destroy(channel_);
|
560
510
|
xds_client_.reset(DEBUG_LOCATION, "ChannelState");
|
@@ -595,9 +545,27 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
595
545
|
WeakRef(DEBUG_LOCATION, "ChannelState+lrs")));
|
596
546
|
}
|
597
547
|
|
598
|
-
void XdsClient::ChannelState::
|
548
|
+
void XdsClient::ChannelState::StopLrsCallLocked() {
|
549
|
+
xds_client_->xds_load_report_server_map_.erase(server_);
|
550
|
+
lrs_calld_.reset();
|
551
|
+
}
|
552
|
+
|
553
|
+
namespace {
|
554
|
+
|
555
|
+
bool IsLameChannel(grpc_channel* channel) {
|
556
|
+
grpc_channel_element* elem =
|
557
|
+
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
558
|
+
return elem->filter == &grpc_lame_filter;
|
559
|
+
}
|
560
|
+
|
561
|
+
} // namespace
|
599
562
|
|
600
563
|
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
564
|
+
if (IsLameChannel(channel_)) {
|
565
|
+
xds_client()->NotifyOnErrorLocked(
|
566
|
+
absl::UnavailableError("xds client has a lame channel"));
|
567
|
+
return;
|
568
|
+
}
|
601
569
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
602
570
|
GPR_ASSERT(client_channel != nullptr);
|
603
571
|
watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
|
@@ -607,13 +575,16 @@ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
|
607
575
|
}
|
608
576
|
|
609
577
|
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
578
|
+
if (IsLameChannel(channel_)) {
|
579
|
+
return;
|
580
|
+
}
|
610
581
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
611
582
|
GPR_ASSERT(client_channel != nullptr);
|
612
583
|
client_channel->RemoveConnectivityWatcher(watcher_);
|
613
584
|
}
|
614
585
|
|
615
|
-
void XdsClient::ChannelState::SubscribeLocked(
|
616
|
-
|
586
|
+
void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
|
587
|
+
const XdsResourceName& name) {
|
617
588
|
if (ads_calld_ == nullptr) {
|
618
589
|
// Start the ADS call if this is the first request.
|
619
590
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -627,16 +598,16 @@ void XdsClient::ChannelState::SubscribeLocked(
|
|
627
598
|
// because when the call is restarted it will resend all necessary requests.
|
628
599
|
if (ads_calld() == nullptr) return;
|
629
600
|
// Subscribe to this resource if the ADS call is active.
|
630
|
-
ads_calld()->SubscribeLocked(
|
601
|
+
ads_calld()->SubscribeLocked(type, name, /*delay_send=*/false);
|
631
602
|
}
|
632
603
|
|
633
|
-
void XdsClient::ChannelState::UnsubscribeLocked(
|
634
|
-
|
635
|
-
|
604
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
|
605
|
+
const XdsResourceName& name,
|
606
|
+
bool delay_unsubscription) {
|
636
607
|
if (ads_calld_ != nullptr) {
|
637
608
|
auto* calld = ads_calld_->calld();
|
638
609
|
if (calld != nullptr) {
|
639
|
-
calld->UnsubscribeLocked(
|
610
|
+
calld->UnsubscribeLocked(type, name, delay_unsubscription);
|
640
611
|
if (!calld->HasSubscribedResources()) {
|
641
612
|
ads_calld_.reset();
|
642
613
|
}
|
@@ -652,13 +623,13 @@ template <typename T>
|
|
652
623
|
XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
|
653
624
|
WeakRefCountedPtr<ChannelState> chand)
|
654
625
|
: chand_(std::move(chand)),
|
655
|
-
backoff_(
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
626
|
+
backoff_(BackOff::Options()
|
627
|
+
.set_initial_backoff(Duration::Seconds(
|
628
|
+
GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS))
|
629
|
+
.set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
|
630
|
+
.set_jitter(GRPC_XDS_RECONNECT_JITTER)
|
631
|
+
.set_max_backoff(Duration::Seconds(
|
632
|
+
GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS))) {
|
662
633
|
// Closure Initialization
|
663
634
|
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
|
664
635
|
grpc_schedule_on_exec_ctx);
|
@@ -675,17 +646,11 @@ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
|
|
675
646
|
|
676
647
|
template <typename T>
|
677
648
|
void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
|
678
|
-
|
649
|
+
// If we saw a response on the current stream, reset backoff.
|
650
|
+
if (calld_->seen_response()) backoff_.Reset();
|
679
651
|
calld_.reset();
|
680
|
-
|
681
|
-
|
682
|
-
// call immediately.
|
683
|
-
backoff_.Reset();
|
684
|
-
StartNewCallLocked();
|
685
|
-
} else {
|
686
|
-
// If we failed to connect to the xds server, retry later.
|
687
|
-
StartRetryTimerLocked();
|
688
|
-
}
|
652
|
+
// Start retry timer.
|
653
|
+
StartRetryTimerLocked();
|
689
654
|
}
|
690
655
|
|
691
656
|
template <typename T>
|
@@ -694,10 +659,10 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
694
659
|
GPR_ASSERT(chand_->channel_ != nullptr);
|
695
660
|
GPR_ASSERT(calld_ == nullptr);
|
696
661
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
697
|
-
gpr_log(
|
698
|
-
|
699
|
-
|
700
|
-
|
662
|
+
gpr_log(
|
663
|
+
GPR_INFO,
|
664
|
+
"[xds_client %p] xds server %s: start new call from retryable call %p",
|
665
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
701
666
|
}
|
702
667
|
calld_ = MakeOrphanable<T>(
|
703
668
|
this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
|
@@ -706,14 +671,15 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
706
671
|
template <typename T>
|
707
672
|
void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
708
673
|
if (shutting_down_) return;
|
709
|
-
const
|
674
|
+
const Timestamp next_attempt_time = backoff_.NextAttemptTime();
|
710
675
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
711
|
-
|
712
|
-
std::max(next_attempt_time - ExecCtx::Get()->Now(),
|
676
|
+
Duration timeout =
|
677
|
+
std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
|
713
678
|
gpr_log(GPR_INFO,
|
714
|
-
"[xds_client %p]
|
679
|
+
"[xds_client %p] xds server %s: call attempt failed; "
|
715
680
|
"retry timer will fire in %" PRId64 "ms.",
|
716
|
-
chand()->xds_client(), chand(),
|
681
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(),
|
682
|
+
timeout.millis());
|
717
683
|
}
|
718
684
|
this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
|
719
685
|
grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
|
@@ -737,16 +703,179 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
|
737
703
|
retry_timer_callback_pending_ = false;
|
738
704
|
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
739
705
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
740
|
-
gpr_log(
|
741
|
-
|
742
|
-
|
743
|
-
|
706
|
+
gpr_log(GPR_INFO,
|
707
|
+
"[xds_client %p] xds server %s: retry timer fired (retryable "
|
708
|
+
"call: %p)",
|
709
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
744
710
|
}
|
745
711
|
StartNewCallLocked();
|
746
712
|
}
|
747
713
|
GRPC_ERROR_UNREF(error);
|
748
714
|
}
|
749
715
|
|
716
|
+
//
|
717
|
+
// XdsClient::ChannelState::AdsCallState::AdsResponseParser
|
718
|
+
//
|
719
|
+
|
720
|
+
absl::Status XdsClient::ChannelState::AdsCallState::AdsResponseParser::
|
721
|
+
ProcessAdsResponseFields(AdsResponseFields fields) {
|
722
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
723
|
+
gpr_log(
|
724
|
+
GPR_INFO,
|
725
|
+
"[xds_client %p] xds server %s: received ADS response: type_url=%s, "
|
726
|
+
"version=%s, nonce=%s, num_resources=%" PRIuPTR,
|
727
|
+
ads_call_state_->xds_client(),
|
728
|
+
ads_call_state_->chand()->server_.server_uri.c_str(),
|
729
|
+
fields.type_url.c_str(), fields.version.c_str(), fields.nonce.c_str(),
|
730
|
+
fields.num_resources);
|
731
|
+
}
|
732
|
+
result_.type =
|
733
|
+
ads_call_state_->xds_client()->GetResourceTypeLocked(fields.type_url);
|
734
|
+
if (result_.type == nullptr) {
|
735
|
+
return absl::InvalidArgumentError(
|
736
|
+
absl::StrCat("unknown resource type ", fields.type_url));
|
737
|
+
}
|
738
|
+
result_.type_url = std::move(fields.type_url);
|
739
|
+
result_.version = std::move(fields.version);
|
740
|
+
result_.nonce = std::move(fields.nonce);
|
741
|
+
return absl::OkStatus();
|
742
|
+
}
|
743
|
+
|
744
|
+
namespace {
|
745
|
+
|
746
|
+
// Build a resource metadata struct for ADS result accepting methods and CSDS.
|
747
|
+
XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
748
|
+
std::string serialized_proto, std::string version, Timestamp update_time) {
|
749
|
+
XdsApi::ResourceMetadata resource_metadata;
|
750
|
+
resource_metadata.serialized_proto = std::move(serialized_proto);
|
751
|
+
resource_metadata.update_time = update_time;
|
752
|
+
resource_metadata.version = std::move(version);
|
753
|
+
resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
|
754
|
+
return resource_metadata;
|
755
|
+
}
|
756
|
+
|
757
|
+
// Update resource_metadata for NACK.
|
758
|
+
void UpdateResourceMetadataNacked(const std::string& version,
|
759
|
+
const std::string& details,
|
760
|
+
Timestamp update_time,
|
761
|
+
XdsApi::ResourceMetadata* resource_metadata) {
|
762
|
+
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
763
|
+
resource_metadata->failed_version = version;
|
764
|
+
resource_metadata->failed_details = details;
|
765
|
+
resource_metadata->failed_update_time = update_time;
|
766
|
+
}
|
767
|
+
|
768
|
+
} // namespace
|
769
|
+
|
770
|
+
void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
771
|
+
const XdsEncodingContext& context, size_t idx, absl::string_view type_url,
|
772
|
+
absl::string_view serialized_resource) {
|
773
|
+
// Check the type_url of the resource.
|
774
|
+
bool is_v2 = false;
|
775
|
+
if (!result_.type->IsType(type_url, &is_v2)) {
|
776
|
+
result_.errors.emplace_back(
|
777
|
+
absl::StrCat("resource index ", idx, ": incorrect resource type ",
|
778
|
+
type_url, " (should be ", result_.type_url, ")"));
|
779
|
+
return;
|
780
|
+
}
|
781
|
+
// Parse the resource.
|
782
|
+
absl::StatusOr<XdsResourceType::DecodeResult> result =
|
783
|
+
result_.type->Decode(context, serialized_resource, is_v2);
|
784
|
+
if (!result.ok()) {
|
785
|
+
result_.errors.emplace_back(
|
786
|
+
absl::StrCat("resource index ", idx, ": ", result.status().ToString()));
|
787
|
+
return;
|
788
|
+
}
|
789
|
+
// Check the resource name.
|
790
|
+
auto resource_name =
|
791
|
+
XdsClient::ParseXdsResourceName(result->name, result_.type);
|
792
|
+
if (!resource_name.ok()) {
|
793
|
+
result_.errors.emplace_back(absl::StrCat(
|
794
|
+
"resource index ", idx, ": Cannot parse xDS resource name \"",
|
795
|
+
result->name, "\""));
|
796
|
+
return;
|
797
|
+
}
|
798
|
+
// Cancel resource-does-not-exist timer, if needed.
|
799
|
+
auto timer_it = ads_call_state_->state_map_.find(result_.type);
|
800
|
+
if (timer_it != ads_call_state_->state_map_.end()) {
|
801
|
+
auto it =
|
802
|
+
timer_it->second.subscribed_resources.find(resource_name->authority);
|
803
|
+
if (it != timer_it->second.subscribed_resources.end()) {
|
804
|
+
auto res_it = it->second.find(resource_name->key);
|
805
|
+
if (res_it != it->second.end()) {
|
806
|
+
res_it->second->MaybeCancelTimer();
|
807
|
+
}
|
808
|
+
}
|
809
|
+
}
|
810
|
+
// Lookup the authority in the cache.
|
811
|
+
auto authority_it =
|
812
|
+
xds_client()->authority_state_map_.find(resource_name->authority);
|
813
|
+
if (authority_it == xds_client()->authority_state_map_.end()) {
|
814
|
+
return; // Skip resource -- we don't have a subscription for it.
|
815
|
+
}
|
816
|
+
// Found authority, so look up type.
|
817
|
+
AuthorityState& authority_state = authority_it->second;
|
818
|
+
auto type_it = authority_state.resource_map.find(result_.type);
|
819
|
+
if (type_it == authority_state.resource_map.end()) {
|
820
|
+
return; // Skip resource -- we don't have a subscription for it.
|
821
|
+
}
|
822
|
+
auto& type_map = type_it->second;
|
823
|
+
// Found type, so look up resource key.
|
824
|
+
auto it = type_map.find(resource_name->key);
|
825
|
+
if (it == type_map.end()) {
|
826
|
+
return; // Skip resource -- we don't have a subscription for it.
|
827
|
+
}
|
828
|
+
ResourceState& resource_state = it->second;
|
829
|
+
// If needed, record that we've seen this resource.
|
830
|
+
if (result_.type->AllResourcesRequiredInSotW()) {
|
831
|
+
result_.resources_seen[resource_name->authority].insert(resource_name->key);
|
832
|
+
}
|
833
|
+
// Update resource state based on whether the resource is valid.
|
834
|
+
if (!result->resource.ok()) {
|
835
|
+
result_.errors.emplace_back(absl::StrCat(
|
836
|
+
"resource index ", idx, ": ", result->name,
|
837
|
+
": validation error: ", result->resource.status().ToString()));
|
838
|
+
xds_client()->NotifyWatchersOnErrorLocked(
|
839
|
+
resource_state.watchers,
|
840
|
+
absl::UnavailableError(absl::StrCat(
|
841
|
+
"invalid resource: ", result->resource.status().ToString())));
|
842
|
+
UpdateResourceMetadataNacked(result_.version,
|
843
|
+
result->resource.status().ToString(),
|
844
|
+
update_time_, &resource_state.meta);
|
845
|
+
return;
|
846
|
+
}
|
847
|
+
// Resource is valid.
|
848
|
+
result_.have_valid_resources = true;
|
849
|
+
// If it didn't change, ignore it.
|
850
|
+
if (resource_state.resource != nullptr &&
|
851
|
+
result_.type->ResourcesEqual(resource_state.resource.get(),
|
852
|
+
result->resource->get())) {
|
853
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
854
|
+
gpr_log(GPR_INFO,
|
855
|
+
"[xds_client %p] %s resource %s identical to current, ignoring.",
|
856
|
+
xds_client(), result_.type_url.c_str(), result->name.c_str());
|
857
|
+
}
|
858
|
+
return;
|
859
|
+
}
|
860
|
+
// Update the resource state.
|
861
|
+
resource_state.resource = std::move(*result->resource);
|
862
|
+
resource_state.meta = CreateResourceMetadataAcked(
|
863
|
+
std::string(serialized_resource), result_.version, update_time_);
|
864
|
+
// Notify watchers.
|
865
|
+
auto& watchers_list = resource_state.watchers;
|
866
|
+
auto* value =
|
867
|
+
result_.type->CopyResource(resource_state.resource.get()).release();
|
868
|
+
xds_client()->work_serializer_.Schedule(
|
869
|
+
[watchers_list, value]()
|
870
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
871
|
+
for (const auto& p : watchers_list) {
|
872
|
+
p.first->OnGenericResourceChanged(value);
|
873
|
+
}
|
874
|
+
delete value;
|
875
|
+
},
|
876
|
+
DEBUG_LOCATION);
|
877
|
+
}
|
878
|
+
|
750
879
|
//
|
751
880
|
// XdsClient::ChannelState::AdsCallState
|
752
881
|
//
|
@@ -763,14 +892,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
763
892
|
// the polling entities from client_channel.
|
764
893
|
GPR_ASSERT(xds_client() != nullptr);
|
765
894
|
// Create a call with the specified method name.
|
766
|
-
const
|
895
|
+
const char* method =
|
767
896
|
chand()->server_.ShouldUseV3()
|
768
|
-
?
|
769
|
-
|
897
|
+
? "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
|
898
|
+
"StreamAggregatedResources"
|
899
|
+
: "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
|
900
|
+
"StreamAggregatedResources";
|
770
901
|
call_ = grpc_channel_create_pollset_set_call(
|
771
902
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
772
|
-
xds_client()->interested_parties_,
|
773
|
-
|
903
|
+
xds_client()->interested_parties_,
|
904
|
+
StaticSlice::FromStaticString(method).c_slice(), nullptr,
|
905
|
+
Timestamp::InfFuture(), nullptr);
|
774
906
|
GPR_ASSERT(call_ != nullptr);
|
775
907
|
// Init data associated with the call.
|
776
908
|
grpc_metadata_array_init(&initial_metadata_recv_);
|
@@ -778,9 +910,9 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
778
910
|
// Start the call.
|
779
911
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
780
912
|
gpr_log(GPR_INFO,
|
781
|
-
"[xds_client %p]
|
782
|
-
"call: %p)",
|
783
|
-
xds_client(), chand(), this, call_);
|
913
|
+
"[xds_client %p] xds server %s: starting ADS call "
|
914
|
+
"(calld: %p, call: %p)",
|
915
|
+
xds_client(), chand()->server_.server_uri.c_str(), this, call_);
|
784
916
|
}
|
785
917
|
// Create the ops.
|
786
918
|
grpc_call_error call_error;
|
@@ -804,23 +936,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
804
936
|
const std::string& authority = a.first;
|
805
937
|
// Skip authorities that are not using this xDS channel.
|
806
938
|
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});
|
939
|
+
for (const auto& t : a.second.resource_map) {
|
940
|
+
const XdsResourceType* type = t.first;
|
941
|
+
for (const auto& r : t.second) {
|
942
|
+
const XdsResourceKey& resource_key = r.first;
|
943
|
+
SubscribeLocked(type, {authority, resource_key}, /*delay_send=*/true);
|
944
|
+
}
|
822
945
|
}
|
823
946
|
}
|
947
|
+
for (const auto& p : state_map_) {
|
948
|
+
SendMessageLocked(p.first);
|
949
|
+
}
|
824
950
|
// Op: recv initial metadata.
|
825
951
|
op = ops;
|
826
952
|
op->op = GRPC_OP_RECV_INITIAL_METADATA;
|
@@ -883,33 +1009,29 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
|
|
883
1009
|
}
|
884
1010
|
|
885
1011
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
886
|
-
const
|
1012
|
+
const XdsResourceType* type)
|
887
1013
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
888
1014
|
// Buffer message sending if an existing message is in flight.
|
889
1015
|
if (send_message_payload_ != nullptr) {
|
890
|
-
buffered_requests_.insert(
|
1016
|
+
buffered_requests_.insert(type);
|
891
1017
|
return;
|
892
1018
|
}
|
893
|
-
auto& state = state_map_[
|
1019
|
+
auto& state = state_map_[type];
|
894
1020
|
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
1021
|
request_payload_slice = xds_client()->api_.CreateAdsRequest(
|
899
|
-
chand()->server_,
|
900
|
-
chand()->
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
state_map_.erase(type_url);
|
905
|
-
}
|
1022
|
+
chand()->server_,
|
1023
|
+
chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
|
1024
|
+
chand()->resource_type_version_map_[type], state.nonce,
|
1025
|
+
ResourceNamesForRequest(type), GRPC_ERROR_REF(state.error),
|
1026
|
+
!sent_initial_message_);
|
906
1027
|
sent_initial_message_ = true;
|
907
1028
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
908
1029
|
gpr_log(GPR_INFO,
|
909
|
-
"[xds_client %p] sending ADS request: type=%s
|
910
|
-
"error=%s",
|
911
|
-
xds_client(),
|
912
|
-
|
1030
|
+
"[xds_client %p] xds server %s: sending ADS request: type=%s "
|
1031
|
+
"version=%s nonce=%s error=%s",
|
1032
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1033
|
+
std::string(type->type_url()).c_str(),
|
1034
|
+
chand()->resource_type_version_map_[type].c_str(),
|
913
1035
|
state.nonce.c_str(), grpc_error_std_string(state.error).c_str());
|
914
1036
|
}
|
915
1037
|
GRPC_ERROR_UNREF(state.error);
|
@@ -930,32 +1052,33 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
930
1052
|
grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
|
931
1053
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
932
1054
|
gpr_log(GPR_ERROR,
|
933
|
-
"[xds_client %p]
|
934
|
-
|
1055
|
+
"[xds_client %p] xds server %s: error starting ADS send_message "
|
1056
|
+
"batch on calld=%p: call_error=%d",
|
1057
|
+
xds_client(), chand()->server_.server_uri.c_str(), this,
|
1058
|
+
call_error);
|
935
1059
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
936
1060
|
}
|
937
1061
|
}
|
938
1062
|
|
939
1063
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
940
|
-
const
|
941
|
-
auto& state =
|
942
|
-
state_map_[type_url].subscribed_resources[name.authority][name.id];
|
1064
|
+
const XdsResourceType* type, const XdsResourceName& name, bool delay_send) {
|
1065
|
+
auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
|
943
1066
|
if (state == nullptr) {
|
944
|
-
state = MakeOrphanable<
|
945
|
-
SendMessageLocked(
|
1067
|
+
state = MakeOrphanable<ResourceTimer>(type, name);
|
1068
|
+
if (!delay_send) SendMessageLocked(type);
|
946
1069
|
}
|
947
1070
|
}
|
948
1071
|
|
949
1072
|
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
950
|
-
const
|
1073
|
+
const XdsResourceType* type, const XdsResourceName& name,
|
951
1074
|
bool delay_unsubscription) {
|
952
|
-
auto& type_state_map = state_map_[
|
1075
|
+
auto& type_state_map = state_map_[type];
|
953
1076
|
auto& authority_map = type_state_map.subscribed_resources[name.authority];
|
954
|
-
authority_map.erase(name.
|
1077
|
+
authority_map.erase(name.key);
|
955
1078
|
if (authority_map.empty()) {
|
956
1079
|
type_state_map.subscribed_resources.erase(name.authority);
|
957
1080
|
}
|
958
|
-
if (!delay_unsubscription) SendMessageLocked(
|
1081
|
+
if (!delay_unsubscription) SendMessageLocked(type);
|
959
1082
|
}
|
960
1083
|
|
961
1084
|
bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
@@ -965,395 +1088,6 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
965
1088
|
return false;
|
966
1089
|
}
|
967
1090
|
|
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
1091
|
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1358
1092
|
void* arg, grpc_error_handle error) {
|
1359
1093
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
@@ -1413,63 +1147,75 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1413
1147
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
1414
1148
|
recv_message_payload_ = nullptr;
|
1415
1149
|
// Parse and validate the response.
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
|
1420
|
-
ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
|
1421
|
-
ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
|
1150
|
+
AdsResponseParser parser(this);
|
1151
|
+
absl::Status status = xds_client()->api_.ParseAdsResponse(
|
1152
|
+
chand()->server_, response_slice, &parser);
|
1422
1153
|
grpc_slice_unref_internal(response_slice);
|
1423
|
-
if (
|
1154
|
+
if (!status.ok()) {
|
1424
1155
|
// Ignore unparsable response.
|
1425
1156
|
gpr_log(GPR_ERROR,
|
1426
|
-
"[xds_client %p]
|
1427
|
-
|
1428
|
-
|
1157
|
+
"[xds_client %p] xds server %s: error parsing ADS response (%s) "
|
1158
|
+
"-- ignoring",
|
1159
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1160
|
+
status.ToString().c_str());
|
1429
1161
|
} else {
|
1430
|
-
|
1162
|
+
seen_response_ = true;
|
1163
|
+
AdsResponseParser::Result result = parser.TakeResult();
|
1431
1164
|
// 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);
|
1165
|
+
auto& state = state_map_[result.type];
|
1166
|
+
state.nonce = result.nonce;
|
1167
|
+
// If we got an error, set state.error so that we'll NACK the update.
|
1168
|
+
if (!result.errors.empty()) {
|
1169
|
+
std::string error = absl::StrJoin(result.errors, "; ");
|
1170
|
+
gpr_log(
|
1171
|
+
GPR_ERROR,
|
1172
|
+
"[xds_client %p] xds server %s: ADS response invalid for resource "
|
1173
|
+
"type %s version %s, will NACK: nonce=%s error=%s",
|
1174
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1175
|
+
result.type_url.c_str(), result.version.c_str(), state.nonce.c_str(),
|
1176
|
+
error.c_str());
|
1445
1177
|
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
|
-
|
1178
|
+
state.error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(error),
|
1179
|
+
GRPC_ERROR_INT_GRPC_STATUS,
|
1180
|
+
GRPC_STATUS_UNAVAILABLE);
|
1181
|
+
}
|
1182
|
+
// Delete resources not seen in update if needed.
|
1183
|
+
if (result.type->AllResourcesRequiredInSotW()) {
|
1184
|
+
for (auto& a : xds_client()->authority_state_map_) {
|
1185
|
+
const std::string& authority = a.first;
|
1186
|
+
AuthorityState& authority_state = a.second;
|
1187
|
+
// Skip authorities that are not using this xDS channel.
|
1188
|
+
if (authority_state.channel_state != chand()) continue;
|
1189
|
+
auto seen_authority_it = result.resources_seen.find(authority);
|
1190
|
+
// Find this resource type.
|
1191
|
+
auto type_it = authority_state.resource_map.find(result.type);
|
1192
|
+
if (type_it == authority_state.resource_map.end()) continue;
|
1193
|
+
// Iterate over resource ids.
|
1194
|
+
for (auto& r : type_it->second) {
|
1195
|
+
const XdsResourceKey& resource_key = r.first;
|
1196
|
+
ResourceState& resource_state = r.second;
|
1197
|
+
if (seen_authority_it == result.resources_seen.end() ||
|
1198
|
+
seen_authority_it->second.find(resource_key) ==
|
1199
|
+
seen_authority_it->second.end()) {
|
1200
|
+
// If the resource was newly requested but has not yet been
|
1201
|
+
// received, we don't want to generate an error for the watchers,
|
1202
|
+
// because this ADS response may be in reaction to an earlier
|
1203
|
+
// request that did not yet request the new resource, so its absence
|
1204
|
+
// from the response does not necessarily indicate that the resource
|
1205
|
+
// does not exist. For that case, we rely on the request timeout
|
1206
|
+
// instead.
|
1207
|
+
if (resource_state.resource == nullptr) continue;
|
1208
|
+
resource_state.resource.reset();
|
1209
|
+
xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
1210
|
+
resource_state.watchers);
|
1211
|
+
}
|
1212
|
+
}
|
1213
|
+
}
|
1469
1214
|
}
|
1470
|
-
|
1471
|
-
|
1472
|
-
chand()->resource_type_version_map_[result.
|
1215
|
+
// If we had valid resources, update the version.
|
1216
|
+
if (result.have_valid_resources) {
|
1217
|
+
chand()->resource_type_version_map_[result.type] =
|
1218
|
+
std::move(result.version);
|
1473
1219
|
// Start load reporting if needed.
|
1474
1220
|
auto& lrs_call = chand()->lrs_calld_;
|
1475
1221
|
if (lrs_call != nullptr) {
|
@@ -1478,7 +1224,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1478
1224
|
}
|
1479
1225
|
}
|
1480
1226
|
// Send ACK or NACK.
|
1481
|
-
SendMessageLocked(result.
|
1227
|
+
SendMessageLocked(result.type);
|
1482
1228
|
}
|
1483
1229
|
if (xds_client()->shutting_down_) return true;
|
1484
1230
|
// Keep listening for updates.
|
@@ -1512,9 +1258,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1512
1258
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1513
1259
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1514
1260
|
gpr_log(GPR_INFO,
|
1515
|
-
"[xds_client %p] ADS call status received
|
1516
|
-
"
|
1517
|
-
|
1261
|
+
"[xds_client %p] xds server %s: ADS call status received "
|
1262
|
+
"(chand=%p, ads_calld=%p, call=%p): "
|
1263
|
+
"status=%d, details='%s', error='%s'",
|
1264
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1265
|
+
call_, status_code_, status_details,
|
1518
1266
|
grpc_error_std_string(error).c_str());
|
1519
1267
|
gpr_free(status_details);
|
1520
1268
|
}
|
@@ -1523,8 +1271,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1523
1271
|
// Try to restart the call.
|
1524
1272
|
parent_->OnCallFinishedLocked();
|
1525
1273
|
// Send error to all watchers.
|
1526
|
-
xds_client()->NotifyOnErrorLocked(
|
1527
|
-
|
1274
|
+
xds_client()->NotifyOnErrorLocked(absl::UnavailableError(absl::StrFormat(
|
1275
|
+
"xDS call failed: xDS server: %s, ADS call status code=%d, "
|
1276
|
+
"details='%s', error='%s'",
|
1277
|
+
chand()->server_.server_uri, status_code_,
|
1278
|
+
StringViewFromSlice(status_details_), grpc_error_std_string(error))));
|
1528
1279
|
}
|
1529
1280
|
GRPC_ERROR_UNREF(error);
|
1530
1281
|
}
|
@@ -1536,23 +1287,24 @@ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
|
|
1536
1287
|
return this == chand()->ads_calld_->calld();
|
1537
1288
|
}
|
1538
1289
|
|
1539
|
-
std::
|
1290
|
+
std::vector<std::string>
|
1540
1291
|
XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
1541
|
-
const
|
1542
|
-
std::
|
1543
|
-
|
1544
|
-
resource_map;
|
1545
|
-
auto it = state_map_.find(type_url);
|
1292
|
+
const XdsResourceType* type) {
|
1293
|
+
std::vector<std::string> resource_names;
|
1294
|
+
auto it = state_map_.find(type);
|
1546
1295
|
if (it != state_map_.end()) {
|
1547
1296
|
for (auto& a : it->second.subscribed_resources) {
|
1297
|
+
const std::string& authority = a.first;
|
1548
1298
|
for (auto& p : a.second) {
|
1549
|
-
|
1550
|
-
|
1551
|
-
|
1299
|
+
const XdsResourceKey& resource_key = p.first;
|
1300
|
+
resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
|
1301
|
+
authority, type->type_url(), resource_key));
|
1302
|
+
OrphanablePtr<ResourceTimer>& resource_timer = p.second;
|
1303
|
+
resource_timer->MaybeStartTimer(Ref(DEBUG_LOCATION, "ResourceTimer"));
|
1552
1304
|
}
|
1553
1305
|
}
|
1554
1306
|
}
|
1555
|
-
return
|
1307
|
+
return resource_names;
|
1556
1308
|
}
|
1557
1309
|
|
1558
1310
|
//
|
@@ -1567,7 +1319,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
|
1567
1319
|
|
1568
1320
|
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1569
1321
|
ScheduleNextReportLocked() {
|
1570
|
-
const
|
1322
|
+
const Timestamp next_report_time = ExecCtx::Get()->Now() + report_interval_;
|
1571
1323
|
grpc_timer_init(&next_report_timer_, next_report_time,
|
1572
1324
|
&on_next_report_timer_);
|
1573
1325
|
next_report_timer_callback_pending_ = true;
|
@@ -1613,15 +1365,19 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
|
1613
1365
|
bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
1614
1366
|
// Construct snapshot from all reported stats.
|
1615
1367
|
XdsApi::ClusterLoadReportMap snapshot =
|
1616
|
-
xds_client()->BuildLoadReportSnapshotLocked(parent_->
|
1368
|
+
xds_client()->BuildLoadReportSnapshotLocked(parent_->chand()->server_,
|
1369
|
+
parent_->send_all_clusters_,
|
1617
1370
|
parent_->cluster_names_);
|
1618
1371
|
// Skip client load report if the counters were all zero in the last
|
1619
1372
|
// report and they are still zero in this one.
|
1620
1373
|
const bool old_val = last_report_counters_were_zero_;
|
1621
1374
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1622
1375
|
if (old_val && last_report_counters_were_zero_) {
|
1623
|
-
|
1624
|
-
|
1376
|
+
auto it = xds_client()->xds_load_report_server_map_.find(
|
1377
|
+
parent_->chand()->server_);
|
1378
|
+
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1379
|
+
it->second.load_report_map.empty()) {
|
1380
|
+
it->second.channel_state->StopLrsCallLocked();
|
1625
1381
|
return true;
|
1626
1382
|
}
|
1627
1383
|
ScheduleNextReportLocked();
|
@@ -1642,8 +1398,10 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1642
1398
|
parent_->call_, &op, 1, &on_report_done_);
|
1643
1399
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
1644
1400
|
gpr_log(GPR_ERROR,
|
1645
|
-
"[xds_client %p]
|
1646
|
-
|
1401
|
+
"[xds_client %p] xds server %s: error starting LRS send_message "
|
1402
|
+
"batch on calld=%p: call_error=%d",
|
1403
|
+
xds_client(), parent_->chand()->server_.server_uri.c_str(), this,
|
1404
|
+
call_error);
|
1647
1405
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1648
1406
|
}
|
1649
1407
|
return false;
|
@@ -1665,8 +1423,11 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
|
1665
1423
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1666
1424
|
parent_->send_message_payload_ = nullptr;
|
1667
1425
|
// If there are no more registered stats to report, cancel the call.
|
1668
|
-
|
1669
|
-
|
1426
|
+
auto it =
|
1427
|
+
xds_client()->xds_load_report_server_map_.find(parent_->chand()->server_);
|
1428
|
+
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1429
|
+
it->second.load_report_map.empty()) {
|
1430
|
+
it->second.channel_state->StopLrsCallLocked();
|
1670
1431
|
GRPC_ERROR_UNREF(error);
|
1671
1432
|
return true;
|
1672
1433
|
}
|
@@ -1698,14 +1459,15 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1698
1459
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1699
1460
|
// the polling entities from client_channel.
|
1700
1461
|
GPR_ASSERT(xds_client() != nullptr);
|
1701
|
-
const
|
1462
|
+
const char* method =
|
1702
1463
|
chand()->server_.ShouldUseV3()
|
1703
|
-
?
|
1704
|
-
:
|
1464
|
+
? "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats"
|
1465
|
+
: "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats";
|
1705
1466
|
call_ = grpc_channel_create_pollset_set_call(
|
1706
1467
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
1707
|
-
xds_client()->interested_parties_,
|
1708
|
-
|
1468
|
+
xds_client()->interested_parties_,
|
1469
|
+
Slice::FromStaticString(method).c_slice(), nullptr,
|
1470
|
+
Timestamp::InfFuture(), nullptr);
|
1709
1471
|
GPR_ASSERT(call_ != nullptr);
|
1710
1472
|
// Init the request payload.
|
1711
1473
|
grpc_slice request_payload_slice =
|
@@ -1718,10 +1480,10 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1718
1480
|
grpc_metadata_array_init(&trailing_metadata_recv_);
|
1719
1481
|
// Start the call.
|
1720
1482
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1721
|
-
gpr_log(
|
1722
|
-
|
1723
|
-
|
1724
|
-
|
1483
|
+
gpr_log(
|
1484
|
+
GPR_INFO,
|
1485
|
+
"[xds_client %p] xds server %s: starting LRS call (calld=%p, call=%p)",
|
1486
|
+
xds_client(), chand()->server_.server_uri.c_str(), this, call_);
|
1725
1487
|
}
|
1726
1488
|
// Create the ops.
|
1727
1489
|
grpc_call_error call_error;
|
@@ -1875,14 +1637,15 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1875
1637
|
// Parse the response.
|
1876
1638
|
bool send_all_clusters = false;
|
1877
1639
|
std::set<std::string> new_cluster_names;
|
1878
|
-
|
1640
|
+
Duration new_load_reporting_interval;
|
1879
1641
|
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1880
1642
|
response_slice, &send_all_clusters, &new_cluster_names,
|
1881
1643
|
&new_load_reporting_interval);
|
1882
1644
|
if (parse_error != GRPC_ERROR_NONE) {
|
1883
1645
|
gpr_log(GPR_ERROR,
|
1884
|
-
"[xds_client %p] LRS response parsing failed
|
1885
|
-
xds_client(),
|
1646
|
+
"[xds_client %p] xds server %s: LRS response parsing failed: %s",
|
1647
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1648
|
+
grpc_error_std_string(parse_error).c_str());
|
1886
1649
|
GRPC_ERROR_UNREF(parse_error);
|
1887
1650
|
return;
|
1888
1651
|
}
|
@@ -1890,11 +1653,12 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1890
1653
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1891
1654
|
gpr_log(
|
1892
1655
|
GPR_INFO,
|
1893
|
-
"[xds_client %p] LRS response received, %" PRIuPTR
|
1656
|
+
"[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
|
1894
1657
|
" cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
|
1895
1658
|
"ms",
|
1896
|
-
xds_client(),
|
1897
|
-
|
1659
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1660
|
+
new_cluster_names.size(), send_all_clusters,
|
1661
|
+
new_load_reporting_interval.millis());
|
1898
1662
|
size_t i = 0;
|
1899
1663
|
for (const auto& name : new_cluster_names) {
|
1900
1664
|
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
@@ -1902,14 +1666,16 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1902
1666
|
}
|
1903
1667
|
}
|
1904
1668
|
if (new_load_reporting_interval <
|
1905
|
-
|
1906
|
-
|
1907
|
-
|
1669
|
+
Duration::Milliseconds(
|
1670
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
|
1671
|
+
new_load_reporting_interval = Duration::Milliseconds(
|
1672
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1908
1673
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1909
1674
|
gpr_log(GPR_INFO,
|
1910
|
-
"[xds_client %p]
|
1911
|
-
"value %dms",
|
1912
|
-
xds_client(),
|
1675
|
+
"[xds_client %p] xds server %s: increased load_report_interval "
|
1676
|
+
"to minimum value %dms",
|
1677
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1678
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1913
1679
|
}
|
1914
1680
|
}
|
1915
1681
|
// Ignore identical update.
|
@@ -1917,10 +1683,11 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1917
1683
|
cluster_names_ == new_cluster_names &&
|
1918
1684
|
load_reporting_interval_ == new_load_reporting_interval) {
|
1919
1685
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1920
|
-
gpr_log(
|
1921
|
-
|
1922
|
-
|
1923
|
-
|
1686
|
+
gpr_log(
|
1687
|
+
GPR_INFO,
|
1688
|
+
"[xds_client %p] xds server %s: incoming LRS response identical "
|
1689
|
+
"to current, ignoring.",
|
1690
|
+
xds_client(), chand()->server_.server_uri.c_str());
|
1924
1691
|
}
|
1925
1692
|
return;
|
1926
1693
|
}
|
@@ -1966,15 +1733,16 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1966
1733
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1967
1734
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1968
1735
|
gpr_log(GPR_INFO,
|
1969
|
-
"[xds_client %p] LRS call status received
|
1970
|
-
"
|
1971
|
-
|
1736
|
+
"[xds_client %p] xds server %s: LRS call status received "
|
1737
|
+
"(chand=%p, calld=%p, call=%p): "
|
1738
|
+
"status=%d, details='%s', error='%s'",
|
1739
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1740
|
+
call_, status_code_, status_details,
|
1972
1741
|
grpc_error_std_string(error).c_str());
|
1973
1742
|
gpr_free(status_details);
|
1974
1743
|
}
|
1975
1744
|
// Ignore status from a stale call.
|
1976
1745
|
if (IsCurrentCallOnChannel()) {
|
1977
|
-
GPR_ASSERT(!xds_client()->shutting_down_);
|
1978
1746
|
// Try to restart the call.
|
1979
1747
|
parent_->OnCallFinishedLocked();
|
1980
1748
|
}
|
@@ -1994,10 +1762,10 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1994
1762
|
|
1995
1763
|
namespace {
|
1996
1764
|
|
1997
|
-
|
1998
|
-
return grpc_channel_args_find_integer(
|
1765
|
+
Duration GetRequestTimeout(const grpc_channel_args* args) {
|
1766
|
+
return Duration::Milliseconds(grpc_channel_args_find_integer(
|
1999
1767
|
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
2000
|
-
{15000, 0, INT_MAX});
|
1768
|
+
{15000, 0, INT_MAX}));
|
2001
1769
|
}
|
2002
1770
|
|
2003
1771
|
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
@@ -2024,7 +1792,7 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
|
2024
1792
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
2025
1793
|
bootstrap_->certificate_providers())),
|
2026
1794
|
api_(this, &grpc_xds_client_trace, bootstrap_->node(),
|
2027
|
-
&bootstrap_->certificate_providers()) {
|
1795
|
+
&bootstrap_->certificate_providers(), &symtab_) {
|
2028
1796
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2029
1797
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
2030
1798
|
}
|
@@ -2055,24 +1823,9 @@ void XdsClient::Orphan() {
|
|
2055
1823
|
{
|
2056
1824
|
MutexLock lock(&mu_);
|
2057
1825
|
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();
|
1826
|
+
// Clear cache and any remaining watchers that may not have been cancelled.
|
1827
|
+
authority_state_map_.clear();
|
1828
|
+
invalid_watchers_.clear();
|
2076
1829
|
}
|
2077
1830
|
}
|
2078
1831
|
|
@@ -2089,127 +1842,68 @@ RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
|
2089
1842
|
return channel_state;
|
2090
1843
|
}
|
2091
1844
|
|
2092
|
-
void XdsClient::
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
auto
|
2098
|
-
if (!resource.ok()) {
|
1845
|
+
void XdsClient::WatchResource(const XdsResourceType* type,
|
1846
|
+
absl::string_view name,
|
1847
|
+
RefCountedPtr<ResourceWatcherInterface> watcher) {
|
1848
|
+
ResourceWatcherInterface* w = watcher.get();
|
1849
|
+
// Lambda for handling failure cases.
|
1850
|
+
auto fail = [&](absl::Status status) mutable {
|
2099
1851
|
{
|
2100
1852
|
MutexLock lock(&mu_);
|
2101
|
-
|
1853
|
+
MaybeRegisterResourceTypeLocked(type);
|
1854
|
+
invalid_watchers_[w] = watcher;
|
2102
1855
|
}
|
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
1856
|
work_serializer_.Run(
|
2106
1857
|
// TODO(yashykt): When we move to C++14, capture watcher using
|
2107
1858
|
// std::move()
|
2108
|
-
[watcher,
|
2109
|
-
watcher->OnError(
|
1859
|
+
[watcher, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1860
|
+
watcher->OnError(status);
|
2110
1861
|
},
|
2111
1862
|
DEBUG_LOCATION);
|
1863
|
+
};
|
1864
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
1865
|
+
if (!resource_name.ok()) {
|
1866
|
+
fail(absl::UnavailableError(absl::StrFormat(
|
1867
|
+
"Unable to parse resource name for listener %s", name)));
|
2112
1868
|
return;
|
2113
1869
|
}
|
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);
|
1870
|
+
// Find server to use.
|
1871
|
+
const XdsBootstrap::XdsServer* xds_server = nullptr;
|
1872
|
+
absl::string_view authority_name = resource_name->authority;
|
1873
|
+
if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
|
1874
|
+
auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
|
1875
|
+
if (authority == nullptr) {
|
1876
|
+
fail(absl::UnavailableError(
|
1877
|
+
absl::StrCat("authority \"", authority_name,
|
1878
|
+
"\" not present in bootstrap config")));
|
1879
|
+
return;
|
2135
1880
|
}
|
2136
|
-
|
2137
|
-
|
2138
|
-
if (authority_state.channel_state == nullptr) {
|
2139
|
-
authority_state.channel_state =
|
2140
|
-
GetOrCreateChannelStateLocked(bootstrap_->server());
|
1881
|
+
if (!authority->xds_servers.empty()) {
|
1882
|
+
xds_server = &authority->xds_servers[0];
|
2141
1883
|
}
|
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
1884
|
}
|
1885
|
+
if (xds_server == nullptr) xds_server = &bootstrap_->server();
|
2195
1886
|
{
|
2196
1887
|
MutexLock lock(&mu_);
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
1888
|
+
MaybeRegisterResourceTypeLocked(type);
|
1889
|
+
AuthorityState& authority_state =
|
1890
|
+
authority_state_map_[resource_name->authority];
|
1891
|
+
ResourceState& resource_state =
|
1892
|
+
authority_state.resource_map[type][resource_name->key];
|
1893
|
+
resource_state.watchers[w] = watcher;
|
1894
|
+
// If we already have a cached value for the resource, notify the new
|
1895
|
+
// watcher immediately.
|
1896
|
+
if (resource_state.resource != nullptr) {
|
2204
1897
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2205
1898
|
gpr_log(GPR_INFO,
|
2206
|
-
"[xds_client %p] returning cached
|
2207
|
-
|
1899
|
+
"[xds_client %p] returning cached listener data for %s", this,
|
1900
|
+
std::string(name).c_str());
|
2208
1901
|
}
|
2209
|
-
auto
|
1902
|
+
auto* value = type->CopyResource(resource_state.resource.get()).release();
|
2210
1903
|
work_serializer_.Schedule(
|
2211
|
-
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2212
|
-
watcher->
|
1904
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1905
|
+
watcher->OnGenericResourceChanged(value);
|
1906
|
+
delete value;
|
2213
1907
|
},
|
2214
1908
|
DEBUG_LOCATION);
|
2215
1909
|
}
|
@@ -2217,205 +1911,136 @@ void XdsClient::WatchRouteConfigData(
|
|
2217
1911
|
// needed.
|
2218
1912
|
if (authority_state.channel_state == nullptr) {
|
2219
1913
|
authority_state.channel_state =
|
2220
|
-
GetOrCreateChannelStateLocked(
|
1914
|
+
GetOrCreateChannelStateLocked(*xds_server);
|
2221
1915
|
}
|
2222
|
-
authority_state.channel_state->SubscribeLocked(
|
2223
|
-
*resource);
|
1916
|
+
authority_state.channel_state->SubscribeLocked(type, *resource_name);
|
2224
1917
|
}
|
2225
1918
|
work_serializer_.DrainQueue();
|
2226
1919
|
}
|
2227
1920
|
|
2228
|
-
void XdsClient::
|
2229
|
-
|
2230
|
-
|
1921
|
+
void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
1922
|
+
absl::string_view name,
|
1923
|
+
ResourceWatcherInterface* watcher,
|
1924
|
+
bool delay_unsubscription) {
|
1925
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
2231
1926
|
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);
|
2241
|
-
return;
|
2242
|
-
}
|
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);
|
1927
|
+
if (!resource_name.ok()) {
|
1928
|
+
invalid_watchers_.erase(watcher);
|
2269
1929
|
return;
|
2270
1930
|
}
|
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
1931
|
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());
|
1932
|
+
// Find authority.
|
1933
|
+
auto authority_it = authority_state_map_.find(resource_name->authority);
|
1934
|
+
if (authority_it == authority_state_map_.end()) return;
|
1935
|
+
AuthorityState& authority_state = authority_it->second;
|
1936
|
+
// Find type map.
|
1937
|
+
auto type_it = authority_state.resource_map.find(type);
|
1938
|
+
if (type_it == authority_state.resource_map.end()) return;
|
1939
|
+
auto& type_map = type_it->second;
|
1940
|
+
// Find resource key.
|
1941
|
+
auto resource_it = type_map.find(resource_name->key);
|
1942
|
+
if (resource_it == type_map.end()) return;
|
1943
|
+
ResourceState& resource_state = resource_it->second;
|
1944
|
+
// Remove watcher.
|
1945
|
+
resource_state.watchers.erase(watcher);
|
1946
|
+
// Clean up empty map entries, if any.
|
1947
|
+
if (resource_state.watchers.empty()) {
|
1948
|
+
authority_state.channel_state->UnsubscribeLocked(type, *resource_name,
|
1949
|
+
delay_unsubscription);
|
1950
|
+
type_map.erase(resource_it);
|
1951
|
+
if (type_map.empty()) {
|
1952
|
+
authority_state.resource_map.erase(type_it);
|
1953
|
+
if (authority_state.resource_map.empty()) {
|
1954
|
+
authority_state.channel_state.reset();
|
2360
1955
|
}
|
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
1956
|
}
|
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
1957
|
}
|
2377
|
-
work_serializer_.DrainQueue();
|
2378
1958
|
}
|
2379
1959
|
|
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);
|
1960
|
+
void XdsClient::MaybeRegisterResourceTypeLocked(
|
1961
|
+
const XdsResourceType* resource_type) {
|
1962
|
+
auto it = resource_types_.find(resource_type->type_url());
|
1963
|
+
if (it != resource_types_.end()) {
|
1964
|
+
GPR_ASSERT(it->second == resource_type);
|
2392
1965
|
return;
|
2393
1966
|
}
|
2394
|
-
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2398
|
-
|
2399
|
-
|
2400
|
-
|
2401
|
-
|
1967
|
+
resource_types_.emplace(resource_type->type_url(), resource_type);
|
1968
|
+
v2_resource_types_.emplace(resource_type->v2_type_url(), resource_type);
|
1969
|
+
resource_type->InitUpbSymtab(symtab_.ptr());
|
1970
|
+
}
|
1971
|
+
|
1972
|
+
const XdsResourceType* XdsClient::GetResourceTypeLocked(
|
1973
|
+
absl::string_view resource_type) {
|
1974
|
+
auto it = resource_types_.find(resource_type);
|
1975
|
+
if (it != resource_types_.end()) return it->second;
|
1976
|
+
auto it2 = v2_resource_types_.find(resource_type);
|
1977
|
+
if (it2 != v2_resource_types_.end()) return it2->second;
|
1978
|
+
return nullptr;
|
1979
|
+
}
|
1980
|
+
|
1981
|
+
absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
1982
|
+
absl::string_view name, const XdsResourceType* type) {
|
1983
|
+
// Old-style names use the empty string for authority.
|
1984
|
+
// authority is prefixed with "old:" to indicate that it's an old-style name.
|
1985
|
+
if (!absl::StartsWith(name, "xdstp:")) {
|
1986
|
+
return XdsResourceName{"old:", {std::string(name), {}}};
|
1987
|
+
}
|
1988
|
+
// New style name. Parse URI.
|
1989
|
+
auto uri = URI::Parse(name);
|
1990
|
+
if (!uri.ok()) return uri.status();
|
1991
|
+
// Split the resource type off of the path to get the id.
|
1992
|
+
std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
|
1993
|
+
absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
|
1994
|
+
if (!type->IsType(path_parts.first, nullptr)) {
|
1995
|
+
return absl::InvalidArgumentError(
|
1996
|
+
"xdstp URI path must indicate valid xDS resource type");
|
1997
|
+
}
|
1998
|
+
// Canonicalize order of query params.
|
1999
|
+
std::vector<URI::QueryParam> query_params;
|
2000
|
+
for (const auto& p : uri->query_parameter_map()) {
|
2001
|
+
query_params.emplace_back(
|
2002
|
+
URI::QueryParam{std::string(p.first), std::string(p.second)});
|
2003
|
+
}
|
2004
|
+
return XdsResourceName{
|
2005
|
+
absl::StrCat("xdstp:", uri->authority()),
|
2006
|
+
{std::string(path_parts.second), std::move(query_params)}};
|
2007
|
+
}
|
2008
|
+
|
2009
|
+
std::string XdsClient::ConstructFullXdsResourceName(
|
2010
|
+
absl::string_view authority, absl::string_view resource_type,
|
2011
|
+
const XdsResourceKey& key) {
|
2012
|
+
if (absl::ConsumePrefix(&authority, "xdstp:")) {
|
2013
|
+
auto uri = URI::Create("xdstp", std::string(authority),
|
2014
|
+
absl::StrCat("/", resource_type, "/", key.id),
|
2015
|
+
key.query_params, /*fragment=*/"");
|
2016
|
+
GPR_ASSERT(uri.ok());
|
2017
|
+
return uri->ToString();
|
2018
|
+
}
|
2019
|
+
// Old-style name.
|
2020
|
+
return key.id;
|
2402
2021
|
}
|
2403
2022
|
|
2404
2023
|
RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
2405
|
-
|
2024
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2406
2025
|
absl::string_view eds_service_name) {
|
2407
|
-
|
2408
|
-
// server name specified in lrs_server.
|
2026
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2409
2027
|
auto key =
|
2410
2028
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2411
2029
|
MutexLock lock(&mu_);
|
2412
|
-
// We jump through some hoops here to make sure that the
|
2413
|
-
//
|
2030
|
+
// We jump through some hoops here to make sure that the const
|
2031
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2032
|
+
// stored in the XdsClusterDropStats object point to the
|
2033
|
+
// XdsBootstrap::XdsServer and strings
|
2414
2034
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2415
|
-
auto
|
2416
|
-
|
2417
|
-
|
2418
|
-
|
2035
|
+
auto server_it =
|
2036
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2037
|
+
if (server_it->second.channel_state == nullptr) {
|
2038
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2039
|
+
}
|
2040
|
+
auto load_report_it = server_it->second.load_report_map
|
2041
|
+
.emplace(std::move(key), LoadReportState())
|
2042
|
+
.first;
|
2043
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2419
2044
|
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
2420
2045
|
if (load_report_state.drop_stats != nullptr) {
|
2421
2046
|
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
@@ -2426,31 +2051,26 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
|
2426
2051
|
load_report_state.drop_stats->GetSnapshotAndReset();
|
2427
2052
|
}
|
2428
2053
|
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
2429
|
-
Ref(DEBUG_LOCATION, "DropStats"),
|
2430
|
-
|
2431
|
-
|
2054
|
+
Ref(DEBUG_LOCATION, "DropStats"), server_it->first,
|
2055
|
+
load_report_it->first.first /*cluster_name*/,
|
2056
|
+
load_report_it->first.second /*eds_service_name*/);
|
2432
2057
|
load_report_state.drop_stats = cluster_drop_stats.get();
|
2433
2058
|
}
|
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
|
-
}
|
2059
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2440
2060
|
return cluster_drop_stats;
|
2441
2061
|
}
|
2442
2062
|
|
2443
2063
|
void XdsClient::RemoveClusterDropStats(
|
2444
|
-
|
2064
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2445
2065
|
absl::string_view eds_service_name,
|
2446
2066
|
XdsClusterDropStats* cluster_drop_stats) {
|
2447
2067
|
MutexLock lock(&mu_);
|
2448
|
-
|
2449
|
-
|
2450
|
-
auto
|
2068
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2069
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2070
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2451
2071
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2452
|
-
if (
|
2453
|
-
LoadReportState& load_report_state =
|
2072
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2073
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2454
2074
|
if (load_report_state.drop_stats == cluster_drop_stats) {
|
2455
2075
|
// Record final snapshot in deleted_drop_stats, which will be
|
2456
2076
|
// added to the next load report.
|
@@ -2461,21 +2081,27 @@ void XdsClient::RemoveClusterDropStats(
|
|
2461
2081
|
}
|
2462
2082
|
|
2463
2083
|
RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
2464
|
-
|
2084
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2465
2085
|
absl::string_view eds_service_name,
|
2466
2086
|
RefCountedPtr<XdsLocalityName> locality) {
|
2467
|
-
|
2468
|
-
// server name specified in lrs_server.
|
2087
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2469
2088
|
auto key =
|
2470
2089
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2471
2090
|
MutexLock lock(&mu_);
|
2472
|
-
// We jump through some hoops here to make sure that the
|
2473
|
-
//
|
2091
|
+
// We jump through some hoops here to make sure that the const
|
2092
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2093
|
+
// stored in the XdsClusterDropStats object point to the
|
2094
|
+
// XdsBootstrap::XdsServer and strings
|
2474
2095
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2475
|
-
auto
|
2476
|
-
|
2477
|
-
|
2478
|
-
|
2096
|
+
auto server_it =
|
2097
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2098
|
+
if (server_it->second.channel_state == nullptr) {
|
2099
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2100
|
+
}
|
2101
|
+
auto load_report_it = server_it->second.load_report_map
|
2102
|
+
.emplace(std::move(key), LoadReportState())
|
2103
|
+
.first;
|
2104
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2479
2105
|
LoadReportState::LocalityState& locality_state =
|
2480
2106
|
load_report_state.locality_stats[locality];
|
2481
2107
|
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
@@ -2488,32 +2114,27 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
|
2488
2114
|
locality_state.locality_stats->GetSnapshotAndReset();
|
2489
2115
|
}
|
2490
2116
|
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
2491
|
-
Ref(DEBUG_LOCATION, "LocalityStats"),
|
2492
|
-
|
2493
|
-
std::move(locality));
|
2117
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
|
2118
|
+
load_report_it->first.first /*cluster_name*/,
|
2119
|
+
load_report_it->first.second /*eds_service_name*/, std::move(locality));
|
2494
2120
|
locality_state.locality_stats = cluster_locality_stats.get();
|
2495
2121
|
}
|
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
|
-
}
|
2122
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2502
2123
|
return cluster_locality_stats;
|
2503
2124
|
}
|
2504
2125
|
|
2505
2126
|
void XdsClient::RemoveClusterLocalityStats(
|
2506
|
-
|
2127
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2507
2128
|
absl::string_view eds_service_name,
|
2508
2129
|
const RefCountedPtr<XdsLocalityName>& locality,
|
2509
2130
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
2510
2131
|
MutexLock lock(&mu_);
|
2511
|
-
|
2512
|
-
|
2513
|
-
auto
|
2132
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2133
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2134
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2514
2135
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2515
|
-
if (
|
2516
|
-
LoadReportState& load_report_state =
|
2136
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2137
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2517
2138
|
auto locality_it = load_report_state.locality_stats.find(locality);
|
2518
2139
|
if (locality_it == load_report_state.locality_stats.end()) return;
|
2519
2140
|
LoadReportState::LocalityState& locality_state = locality_it->second;
|
@@ -2533,68 +2154,77 @@ void XdsClient::ResetBackoff() {
|
|
2533
2154
|
}
|
2534
2155
|
}
|
2535
2156
|
|
2536
|
-
void XdsClient::NotifyOnErrorLocked(
|
2537
|
-
|
2538
|
-
|
2539
|
-
|
2540
|
-
|
2541
|
-
|
2542
|
-
|
2543
|
-
|
2544
|
-
|
2545
|
-
|
2546
|
-
|
2547
|
-
|
2548
|
-
|
2549
|
-
|
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);
|
2157
|
+
void XdsClient::NotifyOnErrorLocked(absl::Status status) {
|
2158
|
+
const auto* node = bootstrap_->node();
|
2159
|
+
if (node != nullptr) {
|
2160
|
+
status = absl::Status(
|
2161
|
+
status.code(), absl::StrCat(status.message(),
|
2162
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
2163
|
+
}
|
2164
|
+
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
2165
|
+
for (const auto& a : authority_state_map_) { // authority
|
2166
|
+
for (const auto& t : a.second.resource_map) { // type
|
2167
|
+
for (const auto& r : t.second) { // resource id
|
2168
|
+
for (const auto& w : r.second.watchers) { // watchers
|
2169
|
+
watchers.insert(w.second);
|
2170
|
+
}
|
2564
2171
|
}
|
2565
2172
|
}
|
2566
2173
|
}
|
2567
2174
|
work_serializer_.Schedule(
|
2568
|
-
// TODO(yashykt): When we move to C++14, capture
|
2175
|
+
// TODO(yashykt): When we move to C++14, capture watchers using
|
2569
2176
|
// std::move()
|
2570
|
-
[
|
2571
|
-
|
2572
|
-
|
2573
|
-
|
2574
|
-
|
2575
|
-
|
2576
|
-
|
2577
|
-
|
2578
|
-
|
2579
|
-
|
2580
|
-
|
2581
|
-
|
2582
|
-
|
2583
|
-
|
2584
|
-
|
2585
|
-
|
2586
|
-
|
2177
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2178
|
+
for (const auto& watcher : watchers) {
|
2179
|
+
watcher->OnError(status);
|
2180
|
+
}
|
2181
|
+
},
|
2182
|
+
DEBUG_LOCATION);
|
2183
|
+
}
|
2184
|
+
|
2185
|
+
void XdsClient::NotifyWatchersOnErrorLocked(
|
2186
|
+
const std::map<ResourceWatcherInterface*,
|
2187
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
2188
|
+
absl::Status status) {
|
2189
|
+
const auto* node = bootstrap_->node();
|
2190
|
+
if (node != nullptr) {
|
2191
|
+
status = absl::Status(
|
2192
|
+
status.code(), absl::StrCat(status.message(),
|
2193
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
2194
|
+
}
|
2195
|
+
work_serializer_.Schedule(
|
2196
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2197
|
+
for (const auto& p : watchers) {
|
2198
|
+
p.first->OnError(status);
|
2199
|
+
}
|
2200
|
+
},
|
2201
|
+
DEBUG_LOCATION);
|
2202
|
+
}
|
2203
|
+
|
2204
|
+
void XdsClient::NotifyWatchersOnResourceDoesNotExist(
|
2205
|
+
const std::map<ResourceWatcherInterface*,
|
2206
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers) {
|
2207
|
+
work_serializer_.Schedule(
|
2208
|
+
[watchers]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2209
|
+
for (const auto& p : watchers) {
|
2210
|
+
p.first->OnResourceDoesNotExist();
|
2211
|
+
}
|
2212
|
+
},
|
2587
2213
|
DEBUG_LOCATION);
|
2588
2214
|
}
|
2589
2215
|
|
2590
2216
|
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
2591
|
-
|
2217
|
+
const XdsBootstrap::XdsServer& xds_server, bool send_all_clusters,
|
2218
|
+
const std::set<std::string>& clusters) {
|
2592
2219
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2593
2220
|
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2594
2221
|
}
|
2595
2222
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
2596
|
-
|
2597
|
-
|
2223
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2224
|
+
if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
|
2225
|
+
auto& load_report_map = server_it->second.load_report_map;
|
2226
|
+
for (auto load_report_it = load_report_map.begin();
|
2227
|
+
load_report_it != load_report_map.end();) {
|
2598
2228
|
// Cluster key is cluster and EDS service name.
|
2599
2229
|
const auto& cluster_key = load_report_it->first;
|
2600
2230
|
LoadReportState& load_report = load_report_it->second;
|
@@ -2649,7 +2279,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2649
2279
|
}
|
2650
2280
|
}
|
2651
2281
|
// Compute load report interval.
|
2652
|
-
const
|
2282
|
+
const Timestamp now = ExecCtx::Get()->Now();
|
2653
2283
|
snapshot.load_report_interval = now - load_report.last_report_time;
|
2654
2284
|
load_report.last_report_time = now;
|
2655
2285
|
// Record snapshot.
|
@@ -2660,7 +2290,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2660
2290
|
// deleted stats objects, remove the entry.
|
2661
2291
|
if (load_report.locality_stats.empty() &&
|
2662
2292
|
load_report.drop_stats == nullptr) {
|
2663
|
-
load_report_it =
|
2293
|
+
load_report_it = load_report_map.erase(load_report_it);
|
2664
2294
|
} else {
|
2665
2295
|
++load_report_it;
|
2666
2296
|
}
|
@@ -2671,35 +2301,18 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2671
2301
|
std::string XdsClient::DumpClientConfigBinary() {
|
2672
2302
|
MutexLock lock(&mu_);
|
2673
2303
|
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_) {
|
2304
|
+
for (const auto& a : authority_state_map_) { // authority
|
2679
2305
|
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;
|
2306
|
+
for (const auto& t : a.second.resource_map) { // type
|
2307
|
+
const XdsResourceType* type = t.first;
|
2308
|
+
auto& resource_metadata_map =
|
2309
|
+
resource_type_metadata_map[type->type_url()];
|
2310
|
+
for (const auto& r : t.second) { // resource id
|
2311
|
+
const XdsResourceKey& resource_key = r.first;
|
2312
|
+
const ResourceState& resource_state = r.second;
|
2313
|
+
resource_metadata_map[ConstructFullXdsResourceName(
|
2314
|
+
authority, type->type_url(), resource_key)] = &resource_state.meta;
|
2315
|
+
}
|
2703
2316
|
}
|
2704
2317
|
}
|
2705
2318
|
// Assemble config dump messages
|
@@ -2713,6 +2326,7 @@ std::string XdsClient::DumpClientConfigBinary() {
|
|
2713
2326
|
void XdsClientGlobalInit() {
|
2714
2327
|
g_mu = new Mutex;
|
2715
2328
|
XdsHttpFilterRegistry::Init();
|
2329
|
+
XdsClusterSpecifierPluginRegistry::Init();
|
2716
2330
|
}
|
2717
2331
|
|
2718
2332
|
// TODO(roth): Find a better way to clear the fallback config that does
|
@@ -2723,6 +2337,7 @@ void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
|
2723
2337
|
delete g_mu;
|
2724
2338
|
g_mu = nullptr;
|
2725
2339
|
XdsHttpFilterRegistry::Shutdown();
|
2340
|
+
XdsClusterSpecifierPluginRegistry::Shutdown();
|
2726
2341
|
}
|
2727
2342
|
|
2728
2343
|
namespace {
|