grpc 1.42.0 → 1.46.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +425 -234
- data/include/grpc/event_engine/event_engine.h +37 -13
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -11
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/grpc.h +40 -14
- data/include/grpc/grpc_posix.h +20 -19
- data/include/grpc/grpc_security.h +312 -195
- data/include/grpc/grpc_security_constants.h +1 -14
- 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 +7 -3
- 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 +9 -10
- data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
- 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 +367 -243
- data/src/core/ext/filters/client_channel/client_channel.h +45 -41
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +6 -13
- 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 +5 -6
- 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 +22 -27
- 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 +100 -81
- 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/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/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 +123 -76
- 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 +104 -145
- 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 +147 -70
- 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 +323 -470
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +94 -62
- 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 +31 -50
- 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 +84 -68
- 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 +476 -412
- 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 +52 -59
- 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 -544
- 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 +22 -22
- 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 +36 -251
- 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 +61 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +239 -20
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +286 -108
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +327 -303
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +9 -4
- data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -10
- data/src/core/ext/transport/chttp2/transport/flow_control.h +5 -5
- 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 +361 -240
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +87 -145
- 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 +74 -149
- 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 +16 -43
- 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 +42 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
- 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 +247 -209
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1249 -684
- 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 +43 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +50 -17
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +670 -385
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +239 -199
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1270 -663
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +201 -90
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +320 -271
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1671 -826
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +43 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +273 -98
- 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 +74 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +355 -189
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +46 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +213 -176
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1069 -581
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +526 -166
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +39 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +42 -100
- 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 +145 -117
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +769 -409
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +737 -348
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +58 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +203 -125
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +993 -396
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +29 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +84 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +76 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +94 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +47 -25
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +195 -108
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +350 -189
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +358 -187
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -20
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +98 -71
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +504 -258
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +561 -300
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +105 -48
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +24 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +66 -39
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +414 -234
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +407 -236
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +127 -103
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +563 -293
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +53 -34
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +272 -141
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +663 -572
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +3643 -1900
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +149 -71
- 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 +27 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +78 -45
- 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 +17 -4
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +35 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +188 -111
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +261 -131
- 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 +26 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +87 -42
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +283 -223
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1554 -733
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +105 -60
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +555 -234
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +157 -86
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +623 -262
- 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 +15 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +22 -14
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +91 -72
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +475 -255
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +108 -61
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +73 -56
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +348 -185
- 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 +34 -18
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -80
- 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 +28 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +100 -56
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +51 -30
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +49 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +39 -23
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +118 -68
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +124 -64
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +86 -52
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +151 -82
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +230 -144
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +236 -130
- 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 +9 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
- 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 +23 -9
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +63 -35
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +99 -51
- 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 +19 -6
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +41 -18
- 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 +22 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +721 -381
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +796 -401
- data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
- data/src/core/ext/upb-generated/google/api/http.upb.h +217 -114
- 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 +18 -5
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +39 -21
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +373 -282
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2077 -1029
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +37 -19
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +22 -14
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +178 -92
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +37 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +241 -148
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +53 -29
- 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 +32 -18
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +104 -47
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +686 -358
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +77 -40
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +57 -34
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +399 -237
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +116 -62
- 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 +75 -13
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +194 -56
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -17
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +57 -19
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +50 -17
- data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
- data/src/core/ext/upb-generated/validate/validate.upb.h +2730 -1164
- 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 +64 -17
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +175 -67
- 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 +17 -4
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +31 -18
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +99 -54
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +54 -29
- 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 +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +56 -29
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +131 -69
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +59 -29
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +102 -45
- 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 +20 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +43 -23
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
- 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 +10 -8
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
- 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 +22 -52
- 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 +250 -281
- 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 +60 -62
- 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 +387 -426
- 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 +16 -18
- 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 +25 -23
- 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 +17 -32
- 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 +17 -19
- 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 +87 -133
- 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 +140 -116
- 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 +16 -19
- 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 +24 -43
- 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 +23 -51
- 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 +179 -187
- 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 +16 -19
- 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 +252 -254
- 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 +14 -16
- 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 +16 -20
- 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 +16 -18
- 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 +20 -22
- 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 +15 -18
- 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 +20 -28
- 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 +21 -33
- 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 +20 -30
- 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 +16 -18
- 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 +54 -62
- 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 +155 -166
- 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 +21 -23
- 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 +17 -21
- 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 +19 -35
- 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 +19 -37
- 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 +38 -38
- 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 +828 -914
- 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 +54 -48
- 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 +17 -21
- 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 +17 -18
- 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 +19 -29
- 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 +20 -26
- 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 +19 -20
- 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 +199 -215
- 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 +17 -13
- 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 +171 -157
- 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 +21 -27
- 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 +219 -216
- 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 +16 -18
- 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 +19 -33
- 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 +18 -22
- 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 +22 -32
- 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 +15 -23
- 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 +17 -21
- 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 +17 -19
- 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 +17 -19
- 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 +17 -19
- 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 +17 -23
- 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 +17 -21
- 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 +16 -21
- 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 +18 -24
- 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 +15 -29
- 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 +16 -26
- 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 +12 -10
- 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 +14 -19
- 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 +13 -19
- 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 +13 -16
- 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 +7 -7
- 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 +5 -14
- 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 +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +5 -62
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
- 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 +6 -15
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
- 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 +6 -17
- 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 +7 -12
- 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 +9 -16
- 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 +6 -13
- 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 +8 -13
- 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 +8 -15
- 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 +8 -13
- 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 +7 -12
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
- data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
- data/src/core/ext/xds/certificate_provider_store.cc +8 -0
- data/src/core/ext/xds/certificate_provider_store.h +10 -1
- 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 +182 -3417
- data/src/core/ext/xds/xds_api.h +60 -613
- data/src/core/ext/xds/xds_bootstrap.cc +222 -123
- data/src/core/ext/xds/xds_bootstrap.h +33 -15
- data/src/core/ext/xds/xds_certificate_provider.cc +2 -0
- data/src/core/ext/xds/xds_certificate_provider.h +10 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +16 -20
- data/src/core/ext/xds/xds_channel_stack_modifier.h +4 -3
- data/src/core/ext/xds/xds_client.cc +805 -1084
- data/src/core/ext/xds/xds_client.h +118 -150
- data/src/core/ext/xds/xds_client_stats.cc +15 -15
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_cluster.cc +453 -0
- data/src/core/ext/xds/xds_cluster.h +108 -0
- data/src/core/ext/xds/xds_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/xds/xds_resource_type.cc +33 -0
- 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 +250 -0
- data/src/core/ext/xds/xds_routing.h +101 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +1056 -286
- 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 +452 -88
- data/src/core/lib/backoff/backoff.cc +9 -38
- 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 +166 -28
- data/src/core/lib/channel/channel_args.h +214 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +61 -0
- 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 -272
- 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 +2 -1
- 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 +11 -3
- data/src/core/lib/config/core_configuration.h +50 -0
- data/src/core/lib/debug/stats_data.cc +2 -6
- data/src/core/lib/debug/stats_data.h +18 -21
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
- data/src/core/lib/event_engine/event_engine.cc +21 -19
- data/src/core/lib/event_engine/event_engine_factory.h +36 -0
- data/src/core/lib/event_engine/memory_allocator.cc +66 -0
- data/src/core/lib/event_engine/resolved_address.cc +39 -0
- 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 +7 -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 +49 -0
- data/src/core/lib/gprpp/debug_location.h +2 -0
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_env.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -3
- data/src/core/lib/gprpp/orphanable.h +1 -1
- data/src/core/lib/gprpp/ref_counted.h +3 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- 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 +24 -1
- 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 +310 -238
- data/src/core/lib/http/httpcli.h +183 -88
- 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.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +18 -18
- data/src/core/lib/iomgr/call_combiner.cc +17 -7
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +25 -3
- data/src/core/lib/iomgr/endpoint.h +0 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -24
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/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/endpoint.cc +2 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +8 -27
- 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 +68 -49
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +11 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -7
- data/src/core/lib/iomgr/exec_ctx.cc +25 -97
- data/src/core/lib/iomgr/exec_ctx.h +18 -34
- data/src/core/lib/iomgr/executor.cc +22 -16
- data/src/core/lib/iomgr/executor.h +1 -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 +3 -5
- data/src/core/lib/iomgr/tcp_client.h +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +2 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +10 -26
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -11
- data/src/core/lib/iomgr/tcp_posix.cc +120 -66
- data/src/core/lib/iomgr/tcp_posix.h +1 -3
- data/src/core/lib/iomgr/tcp_server.cc +4 -6
- data/src/core/lib/iomgr/tcp_server.h +6 -8
- data/src/core/lib/iomgr/tcp_server_posix.cc +43 -38
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- 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_server_windows.cc +5 -12
- data/src/core/lib/iomgr/tcp_windows.cc +19 -17
- data/src/core/lib/iomgr/tcp_windows.h +1 -2
- 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 +120 -44
- data/src/core/lib/iomgr/work_serializer.h +16 -4
- data/src/core/lib/json/json_reader.cc +83 -35
- data/src/core/lib/json/json_util.cc +5 -5
- 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 +121 -0
- data/src/core/lib/promise/activity.h +540 -0
- 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/context.h +86 -0
- data/src/core/lib/promise/detail/basic_seq.h +496 -0
- data/src/core/lib/promise/detail/promise_factory.h +189 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +50 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/intra_activity_waiter.h +49 -0
- data/src/core/lib/promise/latch.h +104 -0
- data/src/core/lib/promise/loop.h +134 -0
- data/src/core/lib/promise/map.h +88 -0
- data/src/core/lib/promise/poll.h +66 -0
- data/src/core/lib/promise/promise.h +95 -0
- data/src/core/lib/promise/race.h +84 -0
- data/src/core/lib/promise/seq.h +89 -0
- 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 +83 -0
- data/src/core/lib/resource_quota/api.h +40 -0
- 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 +478 -0
- data/src/core/lib/resource_quota/memory_quota.h +457 -0
- data/src/core/lib/resource_quota/resource_quota.cc +33 -0
- data/src/core/lib/resource_quota/resource_quota.h +66 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +37 -38
- data/src/core/lib/security/authorization/evaluate_args.h +3 -2
- 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 +48 -33
- 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 +52 -35
- 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 -14
- 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 +21 -16
- 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 +33 -45
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -12
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +54 -43
- 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 +157 -174
- 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.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +56 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +209 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +145 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +33 -87
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +30 -16
- data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +51 -58
- data/src/core/lib/security/credentials/xds/xds_credentials.h +37 -6
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +11 -17
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -16
- 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 +8 -18
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -16
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -19
- 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 +38 -32
- data/src/core/lib/security/security_connector/ssl_utils.h +14 -18
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +365 -206
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +70 -47
- 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 +22 -12
- 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/percent_encoding.cc +30 -86
- data/src/core/lib/slice/percent_encoding.h +5 -11
- data/src/core/lib/slice/slice.cc +78 -181
- data/src/core/lib/slice/slice.h +384 -0
- data/src/core/lib/slice/slice_buffer.cc +4 -0
- 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 +8 -83
- data/src/core/lib/slice/slice_refcount_base.h +21 -133
- data/src/core/lib/surface/builtins.cc +6 -6
- data/src/core/lib/surface/call.cc +1132 -1221
- data/src/core/lib/surface/call.h +5 -19
- data/src/core/lib/surface/channel.cc +68 -99
- data/src/core/lib/surface/channel.h +12 -23
- 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 +12 -11
- data/src/core/lib/surface/init.cc +78 -10
- data/src/core/lib/surface/init.h +0 -2
- data/src/core/lib/surface/lame_client.cc +26 -19
- data/src/core/lib/surface/server.cc +46 -85
- data/src/core/lib/surface/server.h +14 -16
- data/src/core/lib/surface/validate_metadata.cc +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +10 -11
- data/src/core/lib/transport/bdp_estimator.h +2 -2
- data/src/core/lib/transport/byte_stream.cc +6 -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 +1131 -792
- data/src/core/lib/transport/parsed_metadata.cc +37 -0
- data/src/core/lib/transport/parsed_metadata.h +228 -90
- data/src/core/lib/transport/pid_controller.cc +4 -4
- 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 +7 -27
- data/src/core/lib/transport/transport.h +103 -4
- 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 +237 -63
- data/src/core/lib/uri/uri_parser.h +39 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +24 -92
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +28 -23
- 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 +16 -24
- 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 +210 -53
- data/src/core/tsi/ssl_transport_security.h +47 -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 +26 -34
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +39 -51
- 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/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
- data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
- data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
- data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
- data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
- data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
- data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
- data/third_party/abseil-cpp/absl/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/abseil-cpp/absl/status/internal/status_internal.h +5 -5
- data/third_party/abseil-cpp/absl/status/status.cc +9 -17
- data/third_party/abseil-cpp/absl/status/status.h +19 -15
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
- data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
- data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
- data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
- data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
- data/third_party/abseil-cpp/absl/time/time.h +67 -36
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
- data/third_party/abseil-cpp/absl/types/span.h +3 -3
- data/third_party/boringssl-with-bazel/err_data.c +681 -677
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
- 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/fipsmodule/self_check/self_check.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
- 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/crypto/pool/internal.h +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/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/dh.h +4 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.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 +732 -378
- 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 -55
- data/third_party/upb/upb/def.c +2074 -981
- data/third_party/upb/upb/def.h +332 -260
- data/third_party/upb/upb/def.hpp +139 -169
- data/third_party/upb/upb/encode.c +267 -174
- 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 +152 -121
- data/third_party/upb/upb/msg.h +39 -33
- data/third_party/upb/upb/msg_internal.h +395 -251
- 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 +292 -212
- data/third_party/upb/upb/reflection.h +91 -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 +114 -91
- data/third_party/upb/upb/text_encode.h +10 -10
- data/third_party/upb/upb/upb.c +118 -71
- 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 +505 -221
- 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 -195
- data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
- 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 -119
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
- 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 -27
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
- 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 -73
- 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 -72
- 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 -80
- 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 -74
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
- data/src/core/lib/avl/avl.cc +0 -306
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -138
- data/src/core/lib/compression/compression_args.h +0 -56
- 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/event_engine/iomgr.h +0 -42
- 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/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
- data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
- data/src/core/lib/iomgr/tcp_custom.cc +0 -377
- data/src/core/lib/iomgr/tcp_custom.h +0 -86
- data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
- 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 -171
- 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 -529
- data/src/core/lib/slice/static_slice.h +0 -331
- 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 -94
- data/src/core/lib/transport/static_metadata.cc +0 -1117
- data/src/core/lib/transport/static_metadata.h +0 -340
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
- 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
|
@@ -135,37 +141,66 @@ class XdsClient::ChannelState::AdsCallState
|
|
135
141
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
136
142
|
bool seen_response() const { return seen_response_; }
|
137
143
|
|
138
|
-
void SubscribeLocked(const
|
139
|
-
|
144
|
+
void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name,
|
145
|
+
bool delay_send)
|
140
146
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
141
|
-
void UnsubscribeLocked(const
|
142
|
-
const
|
143
|
-
bool delay_unsubscription)
|
147
|
+
void UnsubscribeLocked(const XdsResourceType* type,
|
148
|
+
const XdsResourceName& name, bool delay_unsubscription)
|
144
149
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
145
150
|
|
146
151
|
bool HasSubscribedResources() const;
|
147
152
|
|
148
153
|
private:
|
149
|
-
class
|
154
|
+
class AdsResponseParser : public XdsApi::AdsResponseParserInterface {
|
150
155
|
public:
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
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) {
|
157
192
|
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
158
193
|
grpc_schedule_on_exec_ctx);
|
159
194
|
}
|
160
195
|
|
161
196
|
void Orphan() override {
|
162
|
-
|
197
|
+
MaybeCancelTimer();
|
163
198
|
Unref(DEBUG_LOCATION, "Orphan");
|
164
199
|
}
|
165
200
|
|
166
|
-
void
|
167
|
-
if (
|
168
|
-
|
201
|
+
void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld) {
|
202
|
+
if (timer_started_) return;
|
203
|
+
timer_started_ = true;
|
169
204
|
ads_calld_ = std::move(ads_calld);
|
170
205
|
Ref(DEBUG_LOCATION, "timer").release();
|
171
206
|
timer_pending_ = true;
|
@@ -175,7 +210,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
175
210
|
&timer_callback_);
|
176
211
|
}
|
177
212
|
|
178
|
-
void
|
213
|
+
void MaybeCancelTimer() {
|
179
214
|
if (timer_pending_) {
|
180
215
|
grpc_timer_cancel(&timer_);
|
181
216
|
timer_pending_ = false;
|
@@ -184,11 +219,12 @@ class XdsClient::ChannelState::AdsCallState
|
|
184
219
|
|
185
220
|
private:
|
186
221
|
static void OnTimer(void* arg, grpc_error_handle error) {
|
187
|
-
|
222
|
+
ResourceTimer* self = static_cast<ResourceTimer*>(arg);
|
188
223
|
{
|
189
224
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
190
225
|
self->OnTimerLocked(GRPC_ERROR_REF(error));
|
191
226
|
}
|
227
|
+
self->ads_calld_->xds_client()->work_serializer_.DrainQueue();
|
192
228
|
self->ads_calld_.reset();
|
193
229
|
self->Unref(DEBUG_LOCATION, "timer");
|
194
230
|
}
|
@@ -197,58 +233,32 @@ class XdsClient::ChannelState::AdsCallState
|
|
197
233
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
198
234
|
if (error == GRPC_ERROR_NONE && timer_pending_) {
|
199
235
|
timer_pending_ = false;
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
type_url_, resource_.id)));
|
206
|
-
watcher_error = grpc_error_set_int(
|
207
|
-
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)));
|
208
241
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
209
|
-
gpr_log(GPR_INFO, "[xds_client %p] %s",
|
210
|
-
|
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());
|
211
246
|
}
|
212
247
|
auto& authority_state =
|
213
|
-
ads_calld_->xds_client()->authority_state_map_[
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
219
|
-
}
|
220
|
-
} else if (type_url_ == XdsApi::kRdsTypeUrl) {
|
221
|
-
RouteConfigState& state =
|
222
|
-
authority_state.route_config_map[resource_.id];
|
223
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
224
|
-
for (const auto& p : state.watchers) {
|
225
|
-
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
226
|
-
}
|
227
|
-
} else if (type_url_ == XdsApi::kCdsTypeUrl) {
|
228
|
-
ClusterState& state = authority_state.cluster_map[resource_.id];
|
229
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
230
|
-
for (const auto& p : state.watchers) {
|
231
|
-
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
232
|
-
}
|
233
|
-
} else if (type_url_ == XdsApi::kEdsTypeUrl) {
|
234
|
-
EndpointState& state = authority_state.endpoint_map[resource_.id];
|
235
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
236
|
-
for (const auto& p : state.watchers) {
|
237
|
-
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
238
|
-
}
|
239
|
-
} else {
|
240
|
-
GPR_UNREACHABLE_CODE(return );
|
241
|
-
}
|
242
|
-
GRPC_ERROR_UNREF(watcher_error);
|
248
|
+
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
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);
|
243
253
|
}
|
244
254
|
GRPC_ERROR_UNREF(error);
|
245
255
|
}
|
246
256
|
|
247
|
-
const
|
248
|
-
const
|
257
|
+
const XdsResourceType* type_;
|
258
|
+
const XdsResourceName name_;
|
249
259
|
|
250
260
|
RefCountedPtr<AdsCallState> ads_calld_;
|
251
|
-
bool
|
261
|
+
bool timer_started_ = false;
|
252
262
|
bool timer_pending_ = false;
|
253
263
|
grpc_timer timer_;
|
254
264
|
grpc_closure timer_callback_;
|
@@ -263,40 +273,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
263
273
|
|
264
274
|
// Subscribed resources of this type.
|
265
275
|
std::map<std::string /*authority*/,
|
266
|
-
std::map<
|
276
|
+
std::map<XdsResourceKey, OrphanablePtr<ResourceTimer>>>
|
267
277
|
subscribed_resources;
|
268
278
|
};
|
269
279
|
|
270
|
-
void SendMessageLocked(const
|
271
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
272
|
-
|
273
|
-
void AcceptLdsUpdateLocked(
|
274
|
-
std::string version, grpc_millis update_time,
|
275
|
-
XdsApi::LdsUpdateMap lds_update_map,
|
276
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed)
|
277
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
278
|
-
void AcceptRdsUpdateLocked(std::string version, grpc_millis update_time,
|
279
|
-
XdsApi::RdsUpdateMap rds_update_map)
|
280
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
281
|
-
void AcceptCdsUpdateLocked(
|
282
|
-
std::string version, grpc_millis update_time,
|
283
|
-
XdsApi::CdsUpdateMap cds_update_map,
|
284
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed)
|
285
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
286
|
-
void AcceptEdsUpdateLocked(std::string version, grpc_millis update_time,
|
287
|
-
XdsApi::EdsUpdateMap eds_update_map)
|
288
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
289
|
-
|
290
|
-
template <typename StateMap>
|
291
|
-
void RejectAdsUpdateHelperLocked(const std::string& resource_name,
|
292
|
-
grpc_millis update_time,
|
293
|
-
const XdsApi::AdsParseResult& result,
|
294
|
-
const std::string& error_details,
|
295
|
-
StateMap* state_map)
|
296
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
297
|
-
|
298
|
-
void RejectAdsUpdateLocked(grpc_millis update_time,
|
299
|
-
const XdsApi::AdsParseResult& result)
|
280
|
+
void SendMessageLocked(const XdsResourceType* type)
|
300
281
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
301
282
|
|
302
283
|
static void OnRequestSent(void* arg, grpc_error_handle error);
|
@@ -311,9 +292,9 @@ class XdsClient::ChannelState::AdsCallState
|
|
311
292
|
|
312
293
|
bool IsCurrentCallOnChannel() const;
|
313
294
|
|
314
|
-
|
315
|
-
|
316
|
-
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);
|
317
298
|
|
318
299
|
// The owning RetryableCall<>.
|
319
300
|
RefCountedPtr<RetryableCall<AdsCallState>> parent_;
|
@@ -342,10 +323,10 @@ class XdsClient::ChannelState::AdsCallState
|
|
342
323
|
grpc_closure on_status_received_;
|
343
324
|
|
344
325
|
// Resource types for which requests need to be sent.
|
345
|
-
std::set<
|
326
|
+
std::set<const XdsResourceType*> buffered_requests_;
|
346
327
|
|
347
328
|
// State for each resource type.
|
348
|
-
std::map<
|
329
|
+
std::map<const XdsResourceType*, ResourceTypeState> state_map_;
|
349
330
|
};
|
350
331
|
|
351
332
|
// Contains an LRS call to the xds server.
|
@@ -369,7 +350,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
369
350
|
// Reports client-side load stats according to a fixed interval.
|
370
351
|
class Reporter : public InternallyRefCounted<Reporter> {
|
371
352
|
public:
|
372
|
-
Reporter(RefCountedPtr<LrsCallState> parent,
|
353
|
+
Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
|
373
354
|
: parent_(std::move(parent)), report_interval_(report_interval) {
|
374
355
|
GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
|
375
356
|
grpc_schedule_on_exec_ctx);
|
@@ -400,7 +381,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
400
381
|
RefCountedPtr<LrsCallState> parent_;
|
401
382
|
|
402
383
|
// The load reporting state.
|
403
|
-
const
|
384
|
+
const Duration report_interval_;
|
404
385
|
bool last_report_counters_were_zero_ = false;
|
405
386
|
bool next_report_timer_callback_pending_ = false;
|
406
387
|
grpc_timer next_report_timer_;
|
@@ -447,7 +428,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
447
428
|
// Load reporting state.
|
448
429
|
bool send_all_clusters_ = false;
|
449
430
|
std::set<std::string> cluster_names_; // Asked for by the LRS server.
|
450
|
-
|
431
|
+
Duration load_reporting_interval_;
|
451
432
|
OrphanablePtr<Reporter> reporter_;
|
452
433
|
};
|
453
434
|
|
@@ -464,18 +445,23 @@ class XdsClient::ChannelState::StateWatcher
|
|
464
445
|
private:
|
465
446
|
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
466
447
|
const absl::Status& status) override {
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
448
|
+
{
|
449
|
+
MutexLock lock(&parent_->xds_client_->mu_);
|
450
|
+
if (!parent_->shutting_down_ &&
|
451
|
+
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
452
|
+
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
453
|
+
gpr_log(GPR_INFO,
|
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());
|
458
|
+
parent_->xds_client_->NotifyOnErrorLocked(
|
459
|
+
absl::UnavailableError(absl::StrCat(
|
460
|
+
"xds channel in TRANSIENT_FAILURE, connectivity error: ",
|
461
|
+
status.ToString())));
|
462
|
+
}
|
478
463
|
}
|
464
|
+
parent_->xds_client()->work_serializer_.DrainQueue();
|
479
465
|
}
|
480
466
|
|
481
467
|
WeakRefCountedPtr<ChannelState> parent_;
|
@@ -490,10 +476,10 @@ namespace {
|
|
490
476
|
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
491
477
|
const XdsBootstrap::XdsServer& server) {
|
492
478
|
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
493
|
-
|
494
|
-
|
495
|
-
return
|
496
|
-
|
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);
|
497
483
|
}
|
498
484
|
|
499
485
|
} // namespace
|
@@ -517,8 +503,8 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
517
503
|
|
518
504
|
XdsClient::ChannelState::~ChannelState() {
|
519
505
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
520
|
-
gpr_log(GPR_INFO, "[xds_client %p]
|
521
|
-
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());
|
522
508
|
}
|
523
509
|
grpc_channel_destroy(channel_);
|
524
510
|
xds_client_.reset(DEBUG_LOCATION, "ChannelState");
|
@@ -559,9 +545,27 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
559
545
|
WeakRef(DEBUG_LOCATION, "ChannelState+lrs")));
|
560
546
|
}
|
561
547
|
|
562
|
-
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
|
563
562
|
|
564
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
|
+
}
|
565
569
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
566
570
|
GPR_ASSERT(client_channel != nullptr);
|
567
571
|
watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
|
@@ -571,13 +575,16 @@ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
|
571
575
|
}
|
572
576
|
|
573
577
|
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
578
|
+
if (IsLameChannel(channel_)) {
|
579
|
+
return;
|
580
|
+
}
|
574
581
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
575
582
|
GPR_ASSERT(client_channel != nullptr);
|
576
583
|
client_channel->RemoveConnectivityWatcher(watcher_);
|
577
584
|
}
|
578
585
|
|
579
|
-
void XdsClient::ChannelState::SubscribeLocked(
|
580
|
-
|
586
|
+
void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
|
587
|
+
const XdsResourceName& name) {
|
581
588
|
if (ads_calld_ == nullptr) {
|
582
589
|
// Start the ADS call if this is the first request.
|
583
590
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -591,16 +598,16 @@ void XdsClient::ChannelState::SubscribeLocked(
|
|
591
598
|
// because when the call is restarted it will resend all necessary requests.
|
592
599
|
if (ads_calld() == nullptr) return;
|
593
600
|
// Subscribe to this resource if the ADS call is active.
|
594
|
-
ads_calld()->SubscribeLocked(
|
601
|
+
ads_calld()->SubscribeLocked(type, name, /*delay_send=*/false);
|
595
602
|
}
|
596
603
|
|
597
|
-
void XdsClient::ChannelState::UnsubscribeLocked(
|
598
|
-
|
599
|
-
|
604
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
|
605
|
+
const XdsResourceName& name,
|
606
|
+
bool delay_unsubscription) {
|
600
607
|
if (ads_calld_ != nullptr) {
|
601
608
|
auto* calld = ads_calld_->calld();
|
602
609
|
if (calld != nullptr) {
|
603
|
-
calld->UnsubscribeLocked(
|
610
|
+
calld->UnsubscribeLocked(type, name, delay_unsubscription);
|
604
611
|
if (!calld->HasSubscribedResources()) {
|
605
612
|
ads_calld_.reset();
|
606
613
|
}
|
@@ -616,13 +623,13 @@ template <typename T>
|
|
616
623
|
XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
|
617
624
|
WeakRefCountedPtr<ChannelState> chand)
|
618
625
|
: chand_(std::move(chand)),
|
619
|
-
backoff_(
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
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))) {
|
626
633
|
// Closure Initialization
|
627
634
|
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
|
628
635
|
grpc_schedule_on_exec_ctx);
|
@@ -639,17 +646,11 @@ void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
|
|
639
646
|
|
640
647
|
template <typename T>
|
641
648
|
void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
|
642
|
-
|
649
|
+
// If we saw a response on the current stream, reset backoff.
|
650
|
+
if (calld_->seen_response()) backoff_.Reset();
|
643
651
|
calld_.reset();
|
644
|
-
|
645
|
-
|
646
|
-
// call immediately.
|
647
|
-
backoff_.Reset();
|
648
|
-
StartNewCallLocked();
|
649
|
-
} else {
|
650
|
-
// If we failed to connect to the xds server, retry later.
|
651
|
-
StartRetryTimerLocked();
|
652
|
-
}
|
652
|
+
// Start retry timer.
|
653
|
+
StartRetryTimerLocked();
|
653
654
|
}
|
654
655
|
|
655
656
|
template <typename T>
|
@@ -658,10 +659,10 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
658
659
|
GPR_ASSERT(chand_->channel_ != nullptr);
|
659
660
|
GPR_ASSERT(calld_ == nullptr);
|
660
661
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
661
|
-
gpr_log(
|
662
|
-
|
663
|
-
|
664
|
-
|
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);
|
665
666
|
}
|
666
667
|
calld_ = MakeOrphanable<T>(
|
667
668
|
this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
|
@@ -670,14 +671,15 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
670
671
|
template <typename T>
|
671
672
|
void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
672
673
|
if (shutting_down_) return;
|
673
|
-
const
|
674
|
+
const Timestamp next_attempt_time = backoff_.NextAttemptTime();
|
674
675
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
675
|
-
|
676
|
-
std::max(next_attempt_time - ExecCtx::Get()->Now(),
|
676
|
+
Duration timeout =
|
677
|
+
std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
|
677
678
|
gpr_log(GPR_INFO,
|
678
|
-
"[xds_client %p]
|
679
|
+
"[xds_client %p] xds server %s: call attempt failed; "
|
679
680
|
"retry timer will fire in %" PRId64 "ms.",
|
680
|
-
chand()->xds_client(), chand(),
|
681
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(),
|
682
|
+
timeout.millis());
|
681
683
|
}
|
682
684
|
this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
|
683
685
|
grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
|
@@ -701,16 +703,179 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
|
701
703
|
retry_timer_callback_pending_ = false;
|
702
704
|
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
703
705
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
704
|
-
gpr_log(
|
705
|
-
|
706
|
-
|
707
|
-
|
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);
|
708
710
|
}
|
709
711
|
StartNewCallLocked();
|
710
712
|
}
|
711
713
|
GRPC_ERROR_UNREF(error);
|
712
714
|
}
|
713
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
|
+
xds_client()->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
|
+
|
714
879
|
//
|
715
880
|
// XdsClient::ChannelState::AdsCallState
|
716
881
|
//
|
@@ -727,14 +892,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
727
892
|
// the polling entities from client_channel.
|
728
893
|
GPR_ASSERT(xds_client() != nullptr);
|
729
894
|
// Create a call with the specified method name.
|
730
|
-
const
|
895
|
+
const char* method =
|
731
896
|
chand()->server_.ShouldUseV3()
|
732
|
-
?
|
733
|
-
|
897
|
+
? "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
|
898
|
+
"StreamAggregatedResources"
|
899
|
+
: "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
|
900
|
+
"StreamAggregatedResources";
|
734
901
|
call_ = grpc_channel_create_pollset_set_call(
|
735
902
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
736
|
-
xds_client()->interested_parties_,
|
737
|
-
|
903
|
+
xds_client()->interested_parties_,
|
904
|
+
StaticSlice::FromStaticString(method).c_slice(), nullptr,
|
905
|
+
Timestamp::InfFuture(), nullptr);
|
738
906
|
GPR_ASSERT(call_ != nullptr);
|
739
907
|
// Init data associated with the call.
|
740
908
|
grpc_metadata_array_init(&initial_metadata_recv_);
|
@@ -742,9 +910,9 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
742
910
|
// Start the call.
|
743
911
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
744
912
|
gpr_log(GPR_INFO,
|
745
|
-
"[xds_client %p]
|
746
|
-
"call: %p)",
|
747
|
-
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_);
|
748
916
|
}
|
749
917
|
// Create the ops.
|
750
918
|
grpc_call_error call_error;
|
@@ -768,23 +936,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
768
936
|
const std::string& authority = a.first;
|
769
937
|
// Skip authorities that are not using this xDS channel.
|
770
938
|
if (a.second.channel_state != chand()) continue;
|
771
|
-
for (const auto&
|
772
|
-
const
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
SubscribeLocked(XdsApi::kRdsTypeUrl, {authority, route_config_name});
|
778
|
-
}
|
779
|
-
for (const auto& c : a.second.cluster_map) {
|
780
|
-
const std::string& cluster_name = c.first;
|
781
|
-
SubscribeLocked(XdsApi::kCdsTypeUrl, {authority, cluster_name});
|
782
|
-
}
|
783
|
-
for (const auto& e : a.second.endpoint_map) {
|
784
|
-
const std::string& endpoint_name = e.first;
|
785
|
-
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
|
+
}
|
786
945
|
}
|
787
946
|
}
|
947
|
+
for (const auto& p : state_map_) {
|
948
|
+
SendMessageLocked(p.first);
|
949
|
+
}
|
788
950
|
// Op: recv initial metadata.
|
789
951
|
op = ops;
|
790
952
|
op->op = GRPC_OP_RECV_INITIAL_METADATA;
|
@@ -847,33 +1009,29 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
|
|
847
1009
|
}
|
848
1010
|
|
849
1011
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
850
|
-
const
|
1012
|
+
const XdsResourceType* type)
|
851
1013
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
852
1014
|
// Buffer message sending if an existing message is in flight.
|
853
1015
|
if (send_message_payload_ != nullptr) {
|
854
|
-
buffered_requests_.insert(
|
1016
|
+
buffered_requests_.insert(type);
|
855
1017
|
return;
|
856
1018
|
}
|
857
|
-
auto& state = state_map_[
|
1019
|
+
auto& state = state_map_[type];
|
858
1020
|
grpc_slice request_payload_slice;
|
859
|
-
std::map<absl::string_view /*authority*/,
|
860
|
-
std::set<absl::string_view /*name*/>>
|
861
|
-
resource_map = ResourceNamesForRequest(type_url);
|
862
1021
|
request_payload_slice = xds_client()->api_.CreateAdsRequest(
|
863
|
-
chand()->server_,
|
864
|
-
chand()->
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
state_map_.erase(type_url);
|
869
|
-
}
|
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_);
|
870
1027
|
sent_initial_message_ = true;
|
871
1028
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
872
1029
|
gpr_log(GPR_INFO,
|
873
|
-
"[xds_client %p] sending ADS request: type=%s
|
874
|
-
"error=%s",
|
875
|
-
xds_client(),
|
876
|
-
|
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(),
|
877
1035
|
state.nonce.c_str(), grpc_error_std_string(state.error).c_str());
|
878
1036
|
}
|
879
1037
|
GRPC_ERROR_UNREF(state.error);
|
@@ -894,34 +1052,33 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
894
1052
|
grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
|
895
1053
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
896
1054
|
gpr_log(GPR_ERROR,
|
897
|
-
"[xds_client %p]
|
898
|
-
|
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);
|
899
1059
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
900
1060
|
}
|
901
1061
|
}
|
902
1062
|
|
903
1063
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
904
|
-
const
|
905
|
-
auto& state = state_map_[
|
906
|
-
.subscribed_resources[resource.authority][resource.id];
|
1064
|
+
const XdsResourceType* type, const XdsResourceName& name, bool delay_send) {
|
1065
|
+
auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
|
907
1066
|
if (state == nullptr) {
|
908
|
-
state = MakeOrphanable<
|
909
|
-
|
910
|
-
!chand()->resource_type_version_map_[type_url].empty());
|
911
|
-
SendMessageLocked(type_url);
|
1067
|
+
state = MakeOrphanable<ResourceTimer>(type, name);
|
1068
|
+
if (!delay_send) SendMessageLocked(type);
|
912
1069
|
}
|
913
1070
|
}
|
914
1071
|
|
915
1072
|
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
916
|
-
const
|
1073
|
+
const XdsResourceType* type, const XdsResourceName& name,
|
917
1074
|
bool delay_unsubscription) {
|
918
|
-
auto& type_state_map = state_map_[
|
919
|
-
auto& authority_map = type_state_map.subscribed_resources[
|
920
|
-
authority_map.erase(
|
1075
|
+
auto& type_state_map = state_map_[type];
|
1076
|
+
auto& authority_map = type_state_map.subscribed_resources[name.authority];
|
1077
|
+
authority_map.erase(name.key);
|
921
1078
|
if (authority_map.empty()) {
|
922
|
-
type_state_map.subscribed_resources.erase(
|
1079
|
+
type_state_map.subscribed_resources.erase(name.authority);
|
923
1080
|
}
|
924
|
-
if (!delay_unsubscription) SendMessageLocked(
|
1081
|
+
if (!delay_unsubscription) SendMessageLocked(type);
|
925
1082
|
}
|
926
1083
|
|
927
1084
|
bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
@@ -931,421 +1088,6 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
931
1088
|
return false;
|
932
1089
|
}
|
933
1090
|
|
934
|
-
namespace {
|
935
|
-
|
936
|
-
// Build a resource metadata struct for ADS result accepting methods and CSDS.
|
937
|
-
XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
938
|
-
std::string serialized_proto, std::string version,
|
939
|
-
grpc_millis update_time) {
|
940
|
-
XdsApi::ResourceMetadata resource_metadata;
|
941
|
-
resource_metadata.serialized_proto = std::move(serialized_proto);
|
942
|
-
resource_metadata.update_time = update_time;
|
943
|
-
resource_metadata.version = std::move(version);
|
944
|
-
resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
|
945
|
-
return resource_metadata;
|
946
|
-
}
|
947
|
-
|
948
|
-
} // namespace
|
949
|
-
|
950
|
-
void XdsClient::ChannelState::AdsCallState::AcceptLdsUpdateLocked(
|
951
|
-
std::string version, grpc_millis update_time,
|
952
|
-
XdsApi::LdsUpdateMap lds_update_map,
|
953
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed) {
|
954
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
955
|
-
gpr_log(GPR_INFO,
|
956
|
-
"[xds_client %p] LDS update received containing %" PRIuPTR
|
957
|
-
" resources",
|
958
|
-
xds_client(), lds_update_map.size());
|
959
|
-
}
|
960
|
-
auto& lds_state = state_map_[XdsApi::kLdsTypeUrl];
|
961
|
-
std::set<std::string> rds_resource_names_seen;
|
962
|
-
for (auto& p : lds_update_map) {
|
963
|
-
const XdsApi::ResourceName& resource = p.first;
|
964
|
-
XdsApi::LdsUpdate& lds_update = p.second.resource;
|
965
|
-
auto& state =
|
966
|
-
lds_state.subscribed_resources[resource.authority][resource.id];
|
967
|
-
if (state != nullptr) state->Finish();
|
968
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
969
|
-
gpr_log(GPR_INFO, "[xds_client %p] LDS resource %s: %s", xds_client(),
|
970
|
-
XdsApi::ConstructFullResourceName(
|
971
|
-
resource.authority, XdsApi::kLdsTypeUrl, resource.id)
|
972
|
-
.c_str(),
|
973
|
-
lds_update.ToString().c_str());
|
974
|
-
}
|
975
|
-
// Record the RDS resource names seen.
|
976
|
-
if (!lds_update.http_connection_manager.route_config_name.empty()) {
|
977
|
-
rds_resource_names_seen.insert(
|
978
|
-
lds_update.http_connection_manager.route_config_name);
|
979
|
-
}
|
980
|
-
ListenerState& listener_state =
|
981
|
-
xds_client()
|
982
|
-
->authority_state_map_[resource.authority]
|
983
|
-
.listener_map[resource.id];
|
984
|
-
// Ignore identical update.
|
985
|
-
if (listener_state.update.has_value() &&
|
986
|
-
*listener_state.update == lds_update) {
|
987
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
988
|
-
gpr_log(GPR_INFO,
|
989
|
-
"[xds_client %p] LDS update for %s identical to current, "
|
990
|
-
"ignoring.",
|
991
|
-
xds_client(),
|
992
|
-
XdsApi::ConstructFullResourceName(
|
993
|
-
resource.authority, XdsApi::kLdsTypeUrl, resource.id)
|
994
|
-
.c_str());
|
995
|
-
}
|
996
|
-
continue;
|
997
|
-
}
|
998
|
-
// Update the listener state.
|
999
|
-
listener_state.update = std::move(lds_update);
|
1000
|
-
listener_state.meta = CreateResourceMetadataAcked(
|
1001
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1002
|
-
// Notify watchers.
|
1003
|
-
for (const auto& p : listener_state.watchers) {
|
1004
|
-
p.first->OnListenerChanged(*listener_state.update);
|
1005
|
-
}
|
1006
|
-
}
|
1007
|
-
// For invalid resources in the update, if they are already in the
|
1008
|
-
// cache, pretend that they are present in the update, so that we
|
1009
|
-
// don't incorrectly consider them deleted below.
|
1010
|
-
for (const auto& resource : resource_names_failed) {
|
1011
|
-
auto& listener_map =
|
1012
|
-
xds_client()->authority_state_map_[resource.authority].listener_map;
|
1013
|
-
auto it = listener_map.find(resource.id);
|
1014
|
-
if (it != listener_map.end()) {
|
1015
|
-
auto& update = it->second.update;
|
1016
|
-
if (!update.has_value()) continue;
|
1017
|
-
lds_update_map[resource];
|
1018
|
-
if (!update->http_connection_manager.route_config_name.empty()) {
|
1019
|
-
rds_resource_names_seen.insert(
|
1020
|
-
update->http_connection_manager.route_config_name);
|
1021
|
-
}
|
1022
|
-
}
|
1023
|
-
}
|
1024
|
-
// For any subscribed resource that is not present in the update,
|
1025
|
-
// remove it from the cache and notify watchers that it does not exist.
|
1026
|
-
for (const auto& a : lds_state.subscribed_resources) {
|
1027
|
-
const std::string& authority_name = a.first;
|
1028
|
-
for (const auto& p : a.second) {
|
1029
|
-
const std::string& listener_name = p.first;
|
1030
|
-
if (lds_update_map.find({authority_name, listener_name}) ==
|
1031
|
-
lds_update_map.end()) {
|
1032
|
-
ListenerState& listener_state =
|
1033
|
-
xds_client()
|
1034
|
-
->authority_state_map_[authority_name]
|
1035
|
-
.listener_map[listener_name];
|
1036
|
-
// If the resource was newly requested but has not yet been received,
|
1037
|
-
// we don't want to generate an error for the watchers, because this LDS
|
1038
|
-
// response may be in reaction to an earlier request that did not yet
|
1039
|
-
// request the new resource, so its absence from the response does not
|
1040
|
-
// necessarily indicate that the resource does not exist.
|
1041
|
-
// For that case, we rely on the request timeout instead.
|
1042
|
-
if (!listener_state.update.has_value()) continue;
|
1043
|
-
listener_state.update.reset();
|
1044
|
-
for (const auto& p : listener_state.watchers) {
|
1045
|
-
p.first->OnResourceDoesNotExist();
|
1046
|
-
}
|
1047
|
-
}
|
1048
|
-
}
|
1049
|
-
}
|
1050
|
-
// For any RDS resource that is no longer referred to by any LDS
|
1051
|
-
// resources, remove it from the cache and notify watchers that it
|
1052
|
-
// does not exist.
|
1053
|
-
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
1054
|
-
for (const auto& a : rds_state.subscribed_resources) {
|
1055
|
-
const std::string& authority_name = a.first;
|
1056
|
-
for (const auto& p : a.second) {
|
1057
|
-
const std::string& listener_name = p.first;
|
1058
|
-
if (rds_resource_names_seen.find(XdsApi::ConstructFullResourceName(
|
1059
|
-
authority_name, XdsApi::kRdsTypeUrl, listener_name)) ==
|
1060
|
-
rds_resource_names_seen.end()) {
|
1061
|
-
RouteConfigState& route_config_state =
|
1062
|
-
xds_client()
|
1063
|
-
->authority_state_map_[authority_name]
|
1064
|
-
.route_config_map[listener_name];
|
1065
|
-
route_config_state.update.reset();
|
1066
|
-
for (const auto& p : route_config_state.watchers) {
|
1067
|
-
p.first->OnResourceDoesNotExist();
|
1068
|
-
}
|
1069
|
-
}
|
1070
|
-
}
|
1071
|
-
}
|
1072
|
-
}
|
1073
|
-
|
1074
|
-
void XdsClient::ChannelState::AdsCallState::AcceptRdsUpdateLocked(
|
1075
|
-
std::string version, grpc_millis update_time,
|
1076
|
-
XdsApi::RdsUpdateMap rds_update_map) {
|
1077
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1078
|
-
gpr_log(GPR_INFO,
|
1079
|
-
"[xds_client %p] RDS update received containing %" PRIuPTR
|
1080
|
-
" resources",
|
1081
|
-
xds_client(), rds_update_map.size());
|
1082
|
-
}
|
1083
|
-
auto& rds_state = state_map_[XdsApi::kRdsTypeUrl];
|
1084
|
-
for (auto& p : rds_update_map) {
|
1085
|
-
const XdsApi::ResourceName& resource = p.first;
|
1086
|
-
XdsApi::RdsUpdate& rds_update = p.second.resource;
|
1087
|
-
auto& state =
|
1088
|
-
rds_state.subscribed_resources[resource.authority][resource.id];
|
1089
|
-
if (state != nullptr) state->Finish();
|
1090
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1091
|
-
gpr_log(GPR_INFO, "[xds_client %p] RDS resource:\n%s", xds_client(),
|
1092
|
-
rds_update.ToString().c_str());
|
1093
|
-
}
|
1094
|
-
RouteConfigState& route_config_state =
|
1095
|
-
xds_client()
|
1096
|
-
->authority_state_map_[resource.authority]
|
1097
|
-
.route_config_map[resource.id];
|
1098
|
-
// Ignore identical update.
|
1099
|
-
if (route_config_state.update.has_value() &&
|
1100
|
-
*route_config_state.update == rds_update) {
|
1101
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1102
|
-
gpr_log(GPR_INFO,
|
1103
|
-
"[xds_client %p] RDS resource identical to current, ignoring",
|
1104
|
-
xds_client());
|
1105
|
-
}
|
1106
|
-
continue;
|
1107
|
-
}
|
1108
|
-
// Update the cache.
|
1109
|
-
route_config_state.update = std::move(rds_update);
|
1110
|
-
route_config_state.meta = CreateResourceMetadataAcked(
|
1111
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1112
|
-
// Notify all watchers.
|
1113
|
-
for (const auto& p : route_config_state.watchers) {
|
1114
|
-
p.first->OnRouteConfigChanged(*route_config_state.update);
|
1115
|
-
}
|
1116
|
-
}
|
1117
|
-
}
|
1118
|
-
|
1119
|
-
void XdsClient::ChannelState::AdsCallState::AcceptCdsUpdateLocked(
|
1120
|
-
std::string version, grpc_millis update_time,
|
1121
|
-
XdsApi::CdsUpdateMap cds_update_map,
|
1122
|
-
const std::set<XdsApi::ResourceName>& resource_names_failed) {
|
1123
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1124
|
-
gpr_log(GPR_INFO,
|
1125
|
-
"[xds_client %p] CDS update received containing %" PRIuPTR
|
1126
|
-
" resources",
|
1127
|
-
xds_client(), cds_update_map.size());
|
1128
|
-
}
|
1129
|
-
auto& cds_state = state_map_[XdsApi::kCdsTypeUrl];
|
1130
|
-
std::set<std::string> eds_resource_names_seen;
|
1131
|
-
for (auto& p : cds_update_map) {
|
1132
|
-
const XdsApi::ResourceName& resource = p.first;
|
1133
|
-
XdsApi::CdsUpdate& cds_update = p.second.resource;
|
1134
|
-
auto& state =
|
1135
|
-
cds_state.subscribed_resources[resource.authority][resource.id];
|
1136
|
-
if (state != nullptr) state->Finish();
|
1137
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1138
|
-
gpr_log(GPR_INFO, "[xds_client %p] cluster=%s: %s", xds_client(),
|
1139
|
-
XdsApi::ConstructFullResourceName(
|
1140
|
-
resource.authority, XdsApi::kCdsTypeUrl, resource.id)
|
1141
|
-
.c_str(),
|
1142
|
-
cds_update.ToString().c_str());
|
1143
|
-
}
|
1144
|
-
// Record the EDS resource names seen.
|
1145
|
-
eds_resource_names_seen.insert(
|
1146
|
-
cds_update.eds_service_name.empty()
|
1147
|
-
? XdsApi::ConstructFullResourceName(
|
1148
|
-
resource.authority, XdsApi::kCdsTypeUrl, resource.id)
|
1149
|
-
: cds_update.eds_service_name);
|
1150
|
-
ClusterState& cluster_state = xds_client()
|
1151
|
-
->authority_state_map_[resource.authority]
|
1152
|
-
.cluster_map[resource.id];
|
1153
|
-
// Ignore identical update.
|
1154
|
-
if (cluster_state.update.has_value() &&
|
1155
|
-
*cluster_state.update == cds_update) {
|
1156
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1157
|
-
gpr_log(GPR_INFO,
|
1158
|
-
"[xds_client %p] CDS update identical to current, ignoring.",
|
1159
|
-
xds_client());
|
1160
|
-
}
|
1161
|
-
continue;
|
1162
|
-
}
|
1163
|
-
// Update the cluster state.
|
1164
|
-
cluster_state.update = std::move(cds_update);
|
1165
|
-
cluster_state.meta = CreateResourceMetadataAcked(
|
1166
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1167
|
-
// Notify all watchers.
|
1168
|
-
for (const auto& p : cluster_state.watchers) {
|
1169
|
-
p.first->OnClusterChanged(cluster_state.update.value());
|
1170
|
-
}
|
1171
|
-
}
|
1172
|
-
// For invalid resources in the update, if they are already in the
|
1173
|
-
// cache, pretend that they are present in the update, so that we
|
1174
|
-
// don't incorrectly consider them deleted below.
|
1175
|
-
for (const auto& resource : resource_names_failed) {
|
1176
|
-
auto& cluster_map =
|
1177
|
-
xds_client()->authority_state_map_[resource.authority].cluster_map;
|
1178
|
-
auto it = cluster_map.find(resource.id);
|
1179
|
-
if (it != cluster_map.end()) {
|
1180
|
-
auto& update = it->second.update;
|
1181
|
-
if (!update.has_value()) continue;
|
1182
|
-
cds_update_map[resource];
|
1183
|
-
eds_resource_names_seen.insert(
|
1184
|
-
update->eds_service_name.empty()
|
1185
|
-
? XdsApi::ConstructFullResourceName(
|
1186
|
-
resource.authority, XdsApi::kCdsTypeUrl, resource.id)
|
1187
|
-
: update->eds_service_name);
|
1188
|
-
}
|
1189
|
-
}
|
1190
|
-
// For any subscribed resource that is not present in the update,
|
1191
|
-
// remove it from the cache and notify watchers that it does not exist.
|
1192
|
-
for (const auto& a : cds_state.subscribed_resources) {
|
1193
|
-
const std::string& authority = a.first;
|
1194
|
-
for (const auto& p : a.second) {
|
1195
|
-
const std::string& cluster_name = p.first;
|
1196
|
-
if (cds_update_map.find({authority, cluster_name}) ==
|
1197
|
-
cds_update_map.end()) {
|
1198
|
-
ClusterState& cluster_state = xds_client()
|
1199
|
-
->authority_state_map_[authority]
|
1200
|
-
.cluster_map[cluster_name];
|
1201
|
-
// If the resource was newly requested but has not yet been received,
|
1202
|
-
// we don't want to generate an error for the watchers, because this CDS
|
1203
|
-
// response may be in reaction to an earlier request that did not yet
|
1204
|
-
// request the new resource, so its absence from the response does not
|
1205
|
-
// necessarily indicate that the resource does not exist.
|
1206
|
-
// For that case, we rely on the request timeout instead.
|
1207
|
-
if (!cluster_state.update.has_value()) continue;
|
1208
|
-
cluster_state.update.reset();
|
1209
|
-
for (const auto& p : cluster_state.watchers) {
|
1210
|
-
p.first->OnResourceDoesNotExist();
|
1211
|
-
}
|
1212
|
-
}
|
1213
|
-
}
|
1214
|
-
}
|
1215
|
-
// For any EDS resource that is no longer referred to by any CDS
|
1216
|
-
// resources, remove it from the cache and notify watchers that it
|
1217
|
-
// does not exist.
|
1218
|
-
auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
|
1219
|
-
for (const auto& a : eds_state.subscribed_resources) {
|
1220
|
-
const std::string& authority = a.first;
|
1221
|
-
for (const auto& p : a.second) {
|
1222
|
-
const std::string& eds_resource_name = p.first;
|
1223
|
-
if (eds_resource_names_seen.find(XdsApi::ConstructFullResourceName(
|
1224
|
-
authority, XdsApi::kEdsTypeUrl, eds_resource_name)) ==
|
1225
|
-
eds_resource_names_seen.end()) {
|
1226
|
-
EndpointState& endpoint_state = xds_client()
|
1227
|
-
->authority_state_map_[authority]
|
1228
|
-
.endpoint_map[eds_resource_name];
|
1229
|
-
endpoint_state.update.reset();
|
1230
|
-
for (const auto& p : endpoint_state.watchers) {
|
1231
|
-
p.first->OnResourceDoesNotExist();
|
1232
|
-
}
|
1233
|
-
}
|
1234
|
-
}
|
1235
|
-
}
|
1236
|
-
}
|
1237
|
-
|
1238
|
-
void XdsClient::ChannelState::AdsCallState::AcceptEdsUpdateLocked(
|
1239
|
-
std::string version, grpc_millis update_time,
|
1240
|
-
XdsApi::EdsUpdateMap eds_update_map) {
|
1241
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1242
|
-
gpr_log(GPR_INFO,
|
1243
|
-
"[xds_client %p] EDS update received containing %" PRIuPTR
|
1244
|
-
" resources",
|
1245
|
-
xds_client(), eds_update_map.size());
|
1246
|
-
}
|
1247
|
-
auto& eds_state = state_map_[XdsApi::kEdsTypeUrl];
|
1248
|
-
for (auto& p : eds_update_map) {
|
1249
|
-
const XdsApi::ResourceName& resource = p.first;
|
1250
|
-
XdsApi::EdsUpdate& eds_update = p.second.resource;
|
1251
|
-
auto& state =
|
1252
|
-
eds_state.subscribed_resources[resource.authority][resource.id];
|
1253
|
-
if (state != nullptr) state->Finish();
|
1254
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1255
|
-
gpr_log(GPR_INFO, "[xds_client %p] EDS resource %s: %s", xds_client(),
|
1256
|
-
XdsApi::ConstructFullResourceName(
|
1257
|
-
resource.authority, XdsApi::kCdsTypeUrl, resource.id)
|
1258
|
-
.c_str(),
|
1259
|
-
eds_update.ToString().c_str());
|
1260
|
-
}
|
1261
|
-
EndpointState& endpoint_state =
|
1262
|
-
xds_client()
|
1263
|
-
->authority_state_map_[resource.authority]
|
1264
|
-
.endpoint_map[resource.id];
|
1265
|
-
// Ignore identical update.
|
1266
|
-
if (endpoint_state.update.has_value() &&
|
1267
|
-
*endpoint_state.update == eds_update) {
|
1268
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1269
|
-
gpr_log(GPR_INFO,
|
1270
|
-
"[xds_client %p] EDS update identical to current, ignoring.",
|
1271
|
-
xds_client());
|
1272
|
-
}
|
1273
|
-
continue;
|
1274
|
-
}
|
1275
|
-
// Update the cluster state.
|
1276
|
-
endpoint_state.update = std::move(eds_update);
|
1277
|
-
endpoint_state.meta = CreateResourceMetadataAcked(
|
1278
|
-
std::move(p.second.serialized_proto), version, update_time);
|
1279
|
-
// Notify all watchers.
|
1280
|
-
for (const auto& p : endpoint_state.watchers) {
|
1281
|
-
p.first->OnEndpointChanged(endpoint_state.update.value());
|
1282
|
-
}
|
1283
|
-
}
|
1284
|
-
}
|
1285
|
-
|
1286
|
-
namespace {
|
1287
|
-
|
1288
|
-
// Update resource_metadata for NACK.
|
1289
|
-
void UpdateResourceMetadataNacked(const std::string& version,
|
1290
|
-
const std::string& details,
|
1291
|
-
grpc_millis update_time,
|
1292
|
-
XdsApi::ResourceMetadata* resource_metadata) {
|
1293
|
-
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
1294
|
-
resource_metadata->failed_version = version;
|
1295
|
-
resource_metadata->failed_details = details;
|
1296
|
-
resource_metadata->failed_update_time = update_time;
|
1297
|
-
}
|
1298
|
-
|
1299
|
-
} // namespace
|
1300
|
-
|
1301
|
-
template <typename StateMap>
|
1302
|
-
void XdsClient::ChannelState::AdsCallState::RejectAdsUpdateHelperLocked(
|
1303
|
-
const std::string& resource_name, grpc_millis update_time,
|
1304
|
-
const XdsApi::AdsParseResult& result, const std::string& error_details,
|
1305
|
-
StateMap* state_map) {
|
1306
|
-
auto it = state_map->find(resource_name);
|
1307
|
-
if (it == state_map->end()) return;
|
1308
|
-
auto& state = it->second;
|
1309
|
-
for (const auto& p : state.watchers) {
|
1310
|
-
p.first->OnError(GRPC_ERROR_REF(result.parse_error));
|
1311
|
-
}
|
1312
|
-
UpdateResourceMetadataNacked(result.version, error_details, update_time,
|
1313
|
-
&state.meta);
|
1314
|
-
}
|
1315
|
-
|
1316
|
-
void XdsClient::ChannelState::AdsCallState::RejectAdsUpdateLocked(
|
1317
|
-
grpc_millis update_time, const XdsApi::AdsParseResult& result) {
|
1318
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1319
|
-
gpr_log(GPR_INFO,
|
1320
|
-
"[xds_client %p] %s update NACKed containing %" PRIuPTR
|
1321
|
-
" invalid resources",
|
1322
|
-
xds_client(), result.type_url.c_str(),
|
1323
|
-
result.resource_names_failed.size());
|
1324
|
-
}
|
1325
|
-
std::string details = grpc_error_std_string(result.parse_error);
|
1326
|
-
for (auto& resource : result.resource_names_failed) {
|
1327
|
-
auto authority_it =
|
1328
|
-
xds_client()->authority_state_map_.find(resource.authority);
|
1329
|
-
if (authority_it == xds_client()->authority_state_map_.end()) continue;
|
1330
|
-
AuthorityState& authority_state = authority_it->second;
|
1331
|
-
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1332
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1333
|
-
&authority_state.listener_map);
|
1334
|
-
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1335
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1336
|
-
&authority_state.route_config_map);
|
1337
|
-
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1338
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1339
|
-
&authority_state.cluster_map);
|
1340
|
-
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1341
|
-
RejectAdsUpdateHelperLocked(resource.id, update_time, result, details,
|
1342
|
-
&authority_state.endpoint_map);
|
1343
|
-
} else {
|
1344
|
-
GPR_ASSERT(0);
|
1345
|
-
}
|
1346
|
-
}
|
1347
|
-
}
|
1348
|
-
|
1349
1091
|
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1350
1092
|
void* arg, grpc_error_handle error) {
|
1351
1093
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
@@ -1388,6 +1130,7 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
|
1388
1130
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1389
1131
|
done = ads_calld->OnResponseReceivedLocked();
|
1390
1132
|
}
|
1133
|
+
ads_calld->xds_client()->work_serializer_.DrainQueue();
|
1391
1134
|
if (done) ads_calld->Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
|
1392
1135
|
}
|
1393
1136
|
|
@@ -1404,63 +1147,75 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1404
1147
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
1405
1148
|
recv_message_payload_ = nullptr;
|
1406
1149
|
// Parse and validate the response.
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
|
1411
|
-
ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
|
1412
|
-
ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
|
1150
|
+
AdsResponseParser parser(this);
|
1151
|
+
absl::Status status = xds_client()->api_.ParseAdsResponse(
|
1152
|
+
chand()->server_, response_slice, &parser);
|
1413
1153
|
grpc_slice_unref_internal(response_slice);
|
1414
|
-
if (
|
1154
|
+
if (!status.ok()) {
|
1415
1155
|
// Ignore unparsable response.
|
1416
1156
|
gpr_log(GPR_ERROR,
|
1417
|
-
"[xds_client %p]
|
1418
|
-
|
1419
|
-
|
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());
|
1420
1161
|
} else {
|
1421
|
-
|
1162
|
+
seen_response_ = true;
|
1163
|
+
AdsResponseParser::Result result = parser.TakeResult();
|
1422
1164
|
// Update nonce.
|
1423
|
-
auto& state = state_map_[result.
|
1424
|
-
state.nonce =
|
1425
|
-
// If we got an error, we'll NACK the update.
|
1426
|
-
if (result.
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
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());
|
1436
1177
|
GRPC_ERROR_UNREF(state.error);
|
1437
|
-
state.error =
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
if (result.
|
1443
|
-
|
1444
|
-
|
1445
|
-
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1454
|
-
|
1455
|
-
|
1456
|
-
|
1457
|
-
|
1458
|
-
|
1459
|
-
|
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
|
+
}
|
1460
1214
|
}
|
1461
|
-
|
1462
|
-
|
1463
|
-
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);
|
1464
1219
|
// Start load reporting if needed.
|
1465
1220
|
auto& lrs_call = chand()->lrs_calld_;
|
1466
1221
|
if (lrs_call != nullptr) {
|
@@ -1469,7 +1224,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1469
1224
|
}
|
1470
1225
|
}
|
1471
1226
|
// Send ACK or NACK.
|
1472
|
-
SendMessageLocked(result.
|
1227
|
+
SendMessageLocked(result.type);
|
1473
1228
|
}
|
1474
1229
|
if (xds_client()->shutting_down_) return true;
|
1475
1230
|
// Keep listening for updates.
|
@@ -1494,6 +1249,7 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
|
1494
1249
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1495
1250
|
ads_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1496
1251
|
}
|
1252
|
+
ads_calld->xds_client()->work_serializer_.DrainQueue();
|
1497
1253
|
ads_calld->Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
|
1498
1254
|
}
|
1499
1255
|
|
@@ -1502,9 +1258,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1502
1258
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1503
1259
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1504
1260
|
gpr_log(GPR_INFO,
|
1505
|
-
"[xds_client %p] ADS call status received
|
1506
|
-
"
|
1507
|
-
|
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,
|
1508
1266
|
grpc_error_std_string(error).c_str());
|
1509
1267
|
gpr_free(status_details);
|
1510
1268
|
}
|
@@ -1513,8 +1271,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1513
1271
|
// Try to restart the call.
|
1514
1272
|
parent_->OnCallFinishedLocked();
|
1515
1273
|
// Send error to all watchers.
|
1516
|
-
xds_client()->NotifyOnErrorLocked(
|
1517
|
-
|
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))));
|
1518
1279
|
}
|
1519
1280
|
GRPC_ERROR_UNREF(error);
|
1520
1281
|
}
|
@@ -1526,23 +1287,24 @@ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
|
|
1526
1287
|
return this == chand()->ads_calld_->calld();
|
1527
1288
|
}
|
1528
1289
|
|
1529
|
-
std::
|
1290
|
+
std::vector<std::string>
|
1530
1291
|
XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
1531
|
-
const
|
1532
|
-
std::
|
1533
|
-
|
1534
|
-
resource_map;
|
1535
|
-
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);
|
1536
1295
|
if (it != state_map_.end()) {
|
1537
1296
|
for (auto& a : it->second.subscribed_resources) {
|
1297
|
+
const std::string& authority = a.first;
|
1538
1298
|
for (auto& p : a.second) {
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
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"));
|
1542
1304
|
}
|
1543
1305
|
}
|
1544
1306
|
}
|
1545
|
-
return
|
1307
|
+
return resource_names;
|
1546
1308
|
}
|
1547
1309
|
|
1548
1310
|
//
|
@@ -1557,7 +1319,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
|
1557
1319
|
|
1558
1320
|
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1559
1321
|
ScheduleNextReportLocked() {
|
1560
|
-
const
|
1322
|
+
const Timestamp next_report_time = ExecCtx::Get()->Now() + report_interval_;
|
1561
1323
|
grpc_timer_init(&next_report_timer_, next_report_time,
|
1562
1324
|
&on_next_report_timer_);
|
1563
1325
|
next_report_timer_callback_pending_ = true;
|
@@ -1603,15 +1365,19 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
|
1603
1365
|
bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
1604
1366
|
// Construct snapshot from all reported stats.
|
1605
1367
|
XdsApi::ClusterLoadReportMap snapshot =
|
1606
|
-
xds_client()->BuildLoadReportSnapshotLocked(parent_->
|
1368
|
+
xds_client()->BuildLoadReportSnapshotLocked(parent_->chand()->server_,
|
1369
|
+
parent_->send_all_clusters_,
|
1607
1370
|
parent_->cluster_names_);
|
1608
1371
|
// Skip client load report if the counters were all zero in the last
|
1609
1372
|
// report and they are still zero in this one.
|
1610
1373
|
const bool old_val = last_report_counters_were_zero_;
|
1611
1374
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1612
1375
|
if (old_val && last_report_counters_were_zero_) {
|
1613
|
-
|
1614
|
-
|
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();
|
1615
1381
|
return true;
|
1616
1382
|
}
|
1617
1383
|
ScheduleNextReportLocked();
|
@@ -1632,8 +1398,10 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1632
1398
|
parent_->call_, &op, 1, &on_report_done_);
|
1633
1399
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
1634
1400
|
gpr_log(GPR_ERROR,
|
1635
|
-
"[xds_client %p]
|
1636
|
-
|
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);
|
1637
1405
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1638
1406
|
}
|
1639
1407
|
return false;
|
@@ -1655,8 +1423,11 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
|
1655
1423
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1656
1424
|
parent_->send_message_payload_ = nullptr;
|
1657
1425
|
// If there are no more registered stats to report, cancel the call.
|
1658
|
-
|
1659
|
-
|
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();
|
1660
1431
|
GRPC_ERROR_UNREF(error);
|
1661
1432
|
return true;
|
1662
1433
|
}
|
@@ -1688,14 +1459,15 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1688
1459
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1689
1460
|
// the polling entities from client_channel.
|
1690
1461
|
GPR_ASSERT(xds_client() != nullptr);
|
1691
|
-
const
|
1462
|
+
const char* method =
|
1692
1463
|
chand()->server_.ShouldUseV3()
|
1693
|
-
?
|
1694
|
-
:
|
1464
|
+
? "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats"
|
1465
|
+
: "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats";
|
1695
1466
|
call_ = grpc_channel_create_pollset_set_call(
|
1696
1467
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
1697
|
-
xds_client()->interested_parties_,
|
1698
|
-
|
1468
|
+
xds_client()->interested_parties_,
|
1469
|
+
Slice::FromStaticString(method).c_slice(), nullptr,
|
1470
|
+
Timestamp::InfFuture(), nullptr);
|
1699
1471
|
GPR_ASSERT(call_ != nullptr);
|
1700
1472
|
// Init the request payload.
|
1701
1473
|
grpc_slice request_payload_slice =
|
@@ -1708,10 +1480,10 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1708
1480
|
grpc_metadata_array_init(&trailing_metadata_recv_);
|
1709
1481
|
// Start the call.
|
1710
1482
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1711
|
-
gpr_log(
|
1712
|
-
|
1713
|
-
|
1714
|
-
|
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_);
|
1715
1487
|
}
|
1716
1488
|
// Create the ops.
|
1717
1489
|
grpc_call_error call_error;
|
@@ -1865,14 +1637,15 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1865
1637
|
// Parse the response.
|
1866
1638
|
bool send_all_clusters = false;
|
1867
1639
|
std::set<std::string> new_cluster_names;
|
1868
|
-
|
1640
|
+
Duration new_load_reporting_interval;
|
1869
1641
|
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1870
1642
|
response_slice, &send_all_clusters, &new_cluster_names,
|
1871
1643
|
&new_load_reporting_interval);
|
1872
1644
|
if (parse_error != GRPC_ERROR_NONE) {
|
1873
1645
|
gpr_log(GPR_ERROR,
|
1874
|
-
"[xds_client %p] LRS response parsing failed
|
1875
|
-
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());
|
1876
1649
|
GRPC_ERROR_UNREF(parse_error);
|
1877
1650
|
return;
|
1878
1651
|
}
|
@@ -1880,11 +1653,12 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1880
1653
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1881
1654
|
gpr_log(
|
1882
1655
|
GPR_INFO,
|
1883
|
-
"[xds_client %p] LRS response received, %" PRIuPTR
|
1656
|
+
"[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
|
1884
1657
|
" cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
|
1885
1658
|
"ms",
|
1886
|
-
xds_client(),
|
1887
|
-
|
1659
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1660
|
+
new_cluster_names.size(), send_all_clusters,
|
1661
|
+
new_load_reporting_interval.millis());
|
1888
1662
|
size_t i = 0;
|
1889
1663
|
for (const auto& name : new_cluster_names) {
|
1890
1664
|
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
@@ -1892,14 +1666,16 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1892
1666
|
}
|
1893
1667
|
}
|
1894
1668
|
if (new_load_reporting_interval <
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
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);
|
1898
1673
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1899
1674
|
gpr_log(GPR_INFO,
|
1900
|
-
"[xds_client %p]
|
1901
|
-
"value %dms",
|
1902
|
-
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);
|
1903
1679
|
}
|
1904
1680
|
}
|
1905
1681
|
// Ignore identical update.
|
@@ -1907,10 +1683,11 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1907
1683
|
cluster_names_ == new_cluster_names &&
|
1908
1684
|
load_reporting_interval_ == new_load_reporting_interval) {
|
1909
1685
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1910
|
-
gpr_log(
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
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());
|
1914
1691
|
}
|
1915
1692
|
return;
|
1916
1693
|
}
|
@@ -1956,15 +1733,16 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1956
1733
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1957
1734
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1958
1735
|
gpr_log(GPR_INFO,
|
1959
|
-
"[xds_client %p] LRS call status received
|
1960
|
-
"
|
1961
|
-
|
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,
|
1962
1741
|
grpc_error_std_string(error).c_str());
|
1963
1742
|
gpr_free(status_details);
|
1964
1743
|
}
|
1965
1744
|
// Ignore status from a stale call.
|
1966
1745
|
if (IsCurrentCallOnChannel()) {
|
1967
|
-
GPR_ASSERT(!xds_client()->shutting_down_);
|
1968
1746
|
// Try to restart the call.
|
1969
1747
|
parent_->OnCallFinishedLocked();
|
1970
1748
|
}
|
@@ -1984,10 +1762,10 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1984
1762
|
|
1985
1763
|
namespace {
|
1986
1764
|
|
1987
|
-
|
1988
|
-
return grpc_channel_args_find_integer(
|
1765
|
+
Duration GetRequestTimeout(const grpc_channel_args* args) {
|
1766
|
+
return Duration::Milliseconds(grpc_channel_args_find_integer(
|
1989
1767
|
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
1990
|
-
{15000, 0, INT_MAX});
|
1768
|
+
{15000, 0, INT_MAX}));
|
1991
1769
|
}
|
1992
1770
|
|
1993
1771
|
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
@@ -2010,11 +1788,12 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
|
2010
1788
|
bootstrap_(std::move(bootstrap)),
|
2011
1789
|
args_(ModifyChannelArgs(args)),
|
2012
1790
|
request_timeout_(GetRequestTimeout(args)),
|
1791
|
+
xds_federation_enabled_(XdsFederationEnabled()),
|
2013
1792
|
interested_parties_(grpc_pollset_set_create()),
|
2014
1793
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
2015
1794
|
bootstrap_->certificate_providers())),
|
2016
1795
|
api_(this, &grpc_xds_client_trace, bootstrap_->node(),
|
2017
|
-
&bootstrap_->certificate_providers()) {
|
1796
|
+
&bootstrap_->certificate_providers(), &symtab_) {
|
2018
1797
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2019
1798
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
2020
1799
|
}
|
@@ -2045,24 +1824,9 @@ void XdsClient::Orphan() {
|
|
2045
1824
|
{
|
2046
1825
|
MutexLock lock(&mu_);
|
2047
1826
|
shutting_down_ = true;
|
2048
|
-
//
|
2049
|
-
|
2050
|
-
|
2051
|
-
// is possible for ADS calls to be in progress. Unreffing the loadbalancing
|
2052
|
-
// policies before those calls are done would lead to issues such as
|
2053
|
-
// https://github.com/grpc/grpc/issues/20928.
|
2054
|
-
for (auto& a : authority_state_map_) {
|
2055
|
-
a.second.channel_state.reset();
|
2056
|
-
if (!a.second.listener_map.empty()) {
|
2057
|
-
a.second.cluster_map.clear();
|
2058
|
-
a.second.endpoint_map.clear();
|
2059
|
-
}
|
2060
|
-
}
|
2061
|
-
// We clear these invalid resource watchers as cancel never came.
|
2062
|
-
invalid_listener_watchers_.clear();
|
2063
|
-
invalid_route_config_watchers_.clear();
|
2064
|
-
invalid_cluster_watchers_.clear();
|
2065
|
-
invalid_endpoint_watchers_.clear();
|
1827
|
+
// Clear cache and any remaining watchers that may not have been cancelled.
|
1828
|
+
authority_state_map_.clear();
|
1829
|
+
invalid_watchers_.clear();
|
2066
1830
|
}
|
2067
1831
|
}
|
2068
1832
|
|
@@ -2079,262 +1843,206 @@ RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
|
2079
1843
|
return channel_state;
|
2080
1844
|
}
|
2081
1845
|
|
2082
|
-
void XdsClient::
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
1846
|
+
void XdsClient::WatchResource(const XdsResourceType* type,
|
1847
|
+
absl::string_view name,
|
1848
|
+
RefCountedPtr<ResourceWatcherInterface> watcher) {
|
1849
|
+
ResourceWatcherInterface* w = watcher.get();
|
1850
|
+
// Lambda for handling failure cases.
|
1851
|
+
auto fail = [&](absl::Status status) mutable {
|
1852
|
+
{
|
1853
|
+
MutexLock lock(&mu_);
|
1854
|
+
MaybeRegisterResourceTypeLocked(type);
|
1855
|
+
invalid_watchers_[w] = watcher;
|
1856
|
+
}
|
1857
|
+
work_serializer_.Run(
|
1858
|
+
// TODO(yashykt): When we move to C++14, capture watcher using
|
1859
|
+
// std::move()
|
1860
|
+
[watcher, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1861
|
+
watcher->OnError(status);
|
1862
|
+
},
|
1863
|
+
DEBUG_LOCATION);
|
1864
|
+
};
|
1865
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
1866
|
+
if (!resource_name.ok()) {
|
1867
|
+
fail(absl::UnavailableError(absl::StrFormat(
|
1868
|
+
"Unable to parse resource name for listener %s", name)));
|
2094
1869
|
return;
|
2095
1870
|
}
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
1871
|
+
// Find server to use.
|
1872
|
+
const XdsBootstrap::XdsServer* xds_server = nullptr;
|
1873
|
+
absl::string_view authority_name = resource_name->authority;
|
1874
|
+
if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
|
1875
|
+
auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
|
1876
|
+
if (authority == nullptr) {
|
1877
|
+
fail(absl::UnavailableError(
|
1878
|
+
absl::StrCat("authority \"", authority_name,
|
1879
|
+
"\" not present in bootstrap config")));
|
1880
|
+
return;
|
2105
1881
|
}
|
2106
|
-
|
2107
|
-
|
2108
|
-
// If the authority doesn't yet have a channel, set it, creating it if needed.
|
2109
|
-
if (authority_state.channel_state == nullptr) {
|
2110
|
-
authority_state.channel_state =
|
2111
|
-
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2112
|
-
}
|
2113
|
-
authority_state.channel_state->SubscribeLocked(XdsApi::kLdsTypeUrl,
|
2114
|
-
*resource);
|
2115
|
-
}
|
2116
|
-
|
2117
|
-
void XdsClient::CancelListenerDataWatch(absl::string_view listener_name,
|
2118
|
-
ListenerWatcherInterface* watcher,
|
2119
|
-
bool delay_unsubscription) {
|
2120
|
-
MutexLock lock(&mu_);
|
2121
|
-
if (shutting_down_) return;
|
2122
|
-
auto resource = XdsApi::ParseResourceName(listener_name, XdsApi::IsLds);
|
2123
|
-
if (!resource.ok()) return;
|
2124
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2125
|
-
ListenerState& listener_state = authority_state.listener_map[resource->id];
|
2126
|
-
auto it = listener_state.watchers.find(watcher);
|
2127
|
-
if (it == listener_state.watchers.end()) {
|
2128
|
-
invalid_listener_watchers_.erase(watcher);
|
2129
|
-
return;
|
2130
|
-
}
|
2131
|
-
listener_state.watchers.erase(it);
|
2132
|
-
if (!listener_state.watchers.empty()) return;
|
2133
|
-
authority_state.listener_map.erase(resource->id);
|
2134
|
-
xds_server_channel_map_[bootstrap_->server()]->UnsubscribeLocked(
|
2135
|
-
XdsApi::kLdsTypeUrl, *resource, delay_unsubscription);
|
2136
|
-
if (!authority_state.HasSubscribedResources()) {
|
2137
|
-
authority_state.channel_state.reset();
|
2138
|
-
}
|
2139
|
-
}
|
2140
|
-
|
2141
|
-
void XdsClient::WatchRouteConfigData(
|
2142
|
-
absl::string_view route_config_name,
|
2143
|
-
std::unique_ptr<RouteConfigWatcherInterface> watcher) {
|
2144
|
-
std::string route_config_name_str = std::string(route_config_name);
|
2145
|
-
MutexLock lock(&mu_);
|
2146
|
-
RouteConfigWatcherInterface* w = watcher.get();
|
2147
|
-
auto resource = XdsApi::ParseResourceName(route_config_name, XdsApi::IsRds);
|
2148
|
-
if (!resource.ok()) {
|
2149
|
-
invalid_route_config_watchers_[w] = std::move(watcher);
|
2150
|
-
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2151
|
-
absl::StrFormat("Unable to parse resource name for route config %s",
|
2152
|
-
route_config_name));
|
2153
|
-
w->OnError(GRPC_ERROR_REF(error));
|
2154
|
-
return;
|
2155
|
-
}
|
2156
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2157
|
-
RouteConfigState& route_config_state =
|
2158
|
-
authority_state.route_config_map[resource->id];
|
2159
|
-
route_config_state.watchers[w] = std::move(watcher);
|
2160
|
-
// If we've already received an RDS update, notify the new watcher
|
2161
|
-
// immediately.
|
2162
|
-
if (route_config_state.update.has_value()) {
|
2163
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2164
|
-
gpr_log(GPR_INFO,
|
2165
|
-
"[xds_client %p] returning cached route config data for %s", this,
|
2166
|
-
route_config_name_str.c_str());
|
1882
|
+
if (!authority->xds_servers.empty()) {
|
1883
|
+
xds_server = &authority->xds_servers[0];
|
2167
1884
|
}
|
2168
|
-
w->OnRouteConfigChanged(*route_config_state.update);
|
2169
|
-
}
|
2170
|
-
// If the authority doesn't yet have a channel, set it, creating it if needed.
|
2171
|
-
if (authority_state.channel_state == nullptr) {
|
2172
|
-
authority_state.channel_state =
|
2173
|
-
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2174
1885
|
}
|
2175
|
-
|
2176
|
-
|
2177
|
-
|
2178
|
-
|
2179
|
-
|
2180
|
-
|
2181
|
-
|
2182
|
-
|
2183
|
-
|
2184
|
-
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2194
|
-
|
2195
|
-
|
2196
|
-
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
2204
|
-
|
2205
|
-
|
2206
|
-
|
2207
|
-
|
1886
|
+
if (xds_server == nullptr) xds_server = &bootstrap_->server();
|
1887
|
+
{
|
1888
|
+
MutexLock lock(&mu_);
|
1889
|
+
MaybeRegisterResourceTypeLocked(type);
|
1890
|
+
AuthorityState& authority_state =
|
1891
|
+
authority_state_map_[resource_name->authority];
|
1892
|
+
ResourceState& resource_state =
|
1893
|
+
authority_state.resource_map[type][resource_name->key];
|
1894
|
+
resource_state.watchers[w] = watcher;
|
1895
|
+
// If we already have a cached value for the resource, notify the new
|
1896
|
+
// watcher immediately.
|
1897
|
+
if (resource_state.resource != nullptr) {
|
1898
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1899
|
+
gpr_log(GPR_INFO,
|
1900
|
+
"[xds_client %p] returning cached listener data for %s", this,
|
1901
|
+
std::string(name).c_str());
|
1902
|
+
}
|
1903
|
+
auto* value = type->CopyResource(resource_state.resource.get()).release();
|
1904
|
+
work_serializer_.Schedule(
|
1905
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1906
|
+
watcher->OnGenericResourceChanged(value);
|
1907
|
+
delete value;
|
1908
|
+
},
|
1909
|
+
DEBUG_LOCATION);
|
1910
|
+
}
|
1911
|
+
// If the authority doesn't yet have a channel, set it, creating it if
|
1912
|
+
// needed.
|
1913
|
+
if (authority_state.channel_state == nullptr) {
|
1914
|
+
authority_state.channel_state =
|
1915
|
+
GetOrCreateChannelStateLocked(*xds_server);
|
1916
|
+
}
|
1917
|
+
authority_state.channel_state->SubscribeLocked(type, *resource_name);
|
1918
|
+
}
|
1919
|
+
work_serializer_.DrainQueue();
|
1920
|
+
}
|
1921
|
+
|
1922
|
+
void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
1923
|
+
absl::string_view name,
|
1924
|
+
ResourceWatcherInterface* watcher,
|
1925
|
+
bool delay_unsubscription) {
|
1926
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
2208
1927
|
MutexLock lock(&mu_);
|
2209
|
-
|
2210
|
-
|
2211
|
-
if (!resource.ok()) {
|
2212
|
-
invalid_cluster_watchers_[w] = std::move(watcher);
|
2213
|
-
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
2214
|
-
"Unable to parse resource name for cluster %s", cluster_name));
|
2215
|
-
w->OnError(GRPC_ERROR_REF(error));
|
1928
|
+
if (!resource_name.ok()) {
|
1929
|
+
invalid_watchers_.erase(watcher);
|
2216
1930
|
return;
|
2217
1931
|
}
|
2218
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2219
|
-
ClusterState& cluster_state = authority_state.cluster_map[resource->id];
|
2220
|
-
cluster_state.watchers[w] = std::move(watcher);
|
2221
|
-
// If we've already received a CDS update, notify the new watcher
|
2222
|
-
// immediately.
|
2223
|
-
if (cluster_state.update.has_value()) {
|
2224
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2225
|
-
gpr_log(GPR_INFO, "[xds_client %p] returning cached cluster data for %s",
|
2226
|
-
this, cluster_name_str.c_str());
|
2227
|
-
}
|
2228
|
-
w->OnClusterChanged(cluster_state.update.value());
|
2229
|
-
}
|
2230
|
-
// If the authority doesn't yet have a channel, set it, creating it if needed.
|
2231
|
-
if (authority_state.channel_state == nullptr) {
|
2232
|
-
authority_state.channel_state =
|
2233
|
-
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2234
|
-
}
|
2235
|
-
authority_state.channel_state->SubscribeLocked(XdsApi::kCdsTypeUrl,
|
2236
|
-
*resource);
|
2237
|
-
}
|
2238
|
-
|
2239
|
-
void XdsClient::CancelClusterDataWatch(absl::string_view cluster_name,
|
2240
|
-
ClusterWatcherInterface* watcher,
|
2241
|
-
bool delay_unsubscription) {
|
2242
|
-
MutexLock lock(&mu_);
|
2243
1932
|
if (shutting_down_) return;
|
2244
|
-
|
2245
|
-
if (!
|
2246
|
-
auto
|
2247
|
-
|
2248
|
-
|
2249
|
-
|
2250
|
-
|
2251
|
-
|
2252
|
-
|
2253
|
-
|
2254
|
-
|
2255
|
-
|
2256
|
-
|
2257
|
-
|
2258
|
-
|
2259
|
-
|
2260
|
-
|
2261
|
-
|
2262
|
-
|
2263
|
-
|
2264
|
-
|
2265
|
-
|
2266
|
-
|
2267
|
-
|
2268
|
-
|
2269
|
-
auto resource = XdsApi::ParseResourceName(eds_service_name, XdsApi::IsEds);
|
2270
|
-
if (!resource.ok()) {
|
2271
|
-
invalid_endpoint_watchers_[w] = std::move(watcher);
|
2272
|
-
grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
2273
|
-
absl::StrFormat("Unable to parse resource name for endpoint service %s",
|
2274
|
-
eds_service_name));
|
2275
|
-
w->OnError(GRPC_ERROR_REF(error));
|
2276
|
-
return;
|
2277
|
-
}
|
2278
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2279
|
-
EndpointState& endpoint_state = authority_state.endpoint_map[resource->id];
|
2280
|
-
endpoint_state.watchers[w] = std::move(watcher);
|
2281
|
-
// If we've already received an EDS update, notify the new watcher
|
2282
|
-
// immediately.
|
2283
|
-
if (endpoint_state.update.has_value()) {
|
2284
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2285
|
-
gpr_log(GPR_INFO, "[xds_client %p] returning cached endpoint data for %s",
|
2286
|
-
this, eds_service_name_str.c_str());
|
1933
|
+
// Find authority.
|
1934
|
+
if (!resource_name.ok()) return;
|
1935
|
+
auto authority_it = authority_state_map_.find(resource_name->authority);
|
1936
|
+
if (authority_it == authority_state_map_.end()) return;
|
1937
|
+
AuthorityState& authority_state = authority_it->second;
|
1938
|
+
// Find type map.
|
1939
|
+
auto type_it = authority_state.resource_map.find(type);
|
1940
|
+
if (type_it == authority_state.resource_map.end()) return;
|
1941
|
+
auto& type_map = type_it->second;
|
1942
|
+
// Find resource key.
|
1943
|
+
auto resource_it = type_map.find(resource_name->key);
|
1944
|
+
if (resource_it == type_map.end()) return;
|
1945
|
+
ResourceState& resource_state = resource_it->second;
|
1946
|
+
// Remove watcher.
|
1947
|
+
resource_state.watchers.erase(watcher);
|
1948
|
+
// Clean up empty map entries, if any.
|
1949
|
+
if (resource_state.watchers.empty()) {
|
1950
|
+
authority_state.channel_state->UnsubscribeLocked(type, *resource_name,
|
1951
|
+
delay_unsubscription);
|
1952
|
+
type_map.erase(resource_it);
|
1953
|
+
if (type_map.empty()) {
|
1954
|
+
authority_state.resource_map.erase(type_it);
|
1955
|
+
if (authority_state.resource_map.empty()) {
|
1956
|
+
authority_state.channel_state.reset();
|
1957
|
+
}
|
2287
1958
|
}
|
2288
|
-
w->OnEndpointChanged(endpoint_state.update.value());
|
2289
1959
|
}
|
2290
|
-
// If the authority doesn't yet have a channel, set it, creating it if needed.
|
2291
|
-
if (authority_state.channel_state == nullptr) {
|
2292
|
-
authority_state.channel_state =
|
2293
|
-
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2294
|
-
}
|
2295
|
-
authority_state.channel_state->SubscribeLocked(XdsApi::kEdsTypeUrl,
|
2296
|
-
*resource);
|
2297
1960
|
}
|
2298
1961
|
|
2299
|
-
void XdsClient::
|
2300
|
-
|
2301
|
-
|
2302
|
-
|
2303
|
-
|
2304
|
-
auto resource = XdsApi::ParseResourceName(eds_service_name, XdsApi::IsEds);
|
2305
|
-
if (!resource.ok()) return;
|
2306
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2307
|
-
EndpointState& endpoint_state = authority_state.endpoint_map[resource->id];
|
2308
|
-
auto it = endpoint_state.watchers.find(watcher);
|
2309
|
-
if (it == endpoint_state.watchers.end()) {
|
2310
|
-
invalid_endpoint_watchers_.erase(watcher);
|
1962
|
+
void XdsClient::MaybeRegisterResourceTypeLocked(
|
1963
|
+
const XdsResourceType* resource_type) {
|
1964
|
+
auto it = resource_types_.find(resource_type->type_url());
|
1965
|
+
if (it != resource_types_.end()) {
|
1966
|
+
GPR_ASSERT(it->second == resource_type);
|
2311
1967
|
return;
|
2312
1968
|
}
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
|
1969
|
+
resource_types_.emplace(resource_type->type_url(), resource_type);
|
1970
|
+
v2_resource_types_.emplace(resource_type->v2_type_url(), resource_type);
|
1971
|
+
resource_type->InitUpbSymtab(symtab_.ptr());
|
1972
|
+
}
|
1973
|
+
|
1974
|
+
const XdsResourceType* XdsClient::GetResourceTypeLocked(
|
1975
|
+
absl::string_view resource_type) {
|
1976
|
+
auto it = resource_types_.find(resource_type);
|
1977
|
+
if (it != resource_types_.end()) return it->second;
|
1978
|
+
auto it2 = v2_resource_types_.find(resource_type);
|
1979
|
+
if (it2 != v2_resource_types_.end()) return it2->second;
|
1980
|
+
return nullptr;
|
1981
|
+
}
|
1982
|
+
|
1983
|
+
absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
1984
|
+
absl::string_view name, const XdsResourceType* type) {
|
1985
|
+
// Old-style names use the empty string for authority.
|
1986
|
+
// authority is prefixed with "old:" to indicate that it's an old-style name.
|
1987
|
+
if (!xds_federation_enabled_ || !absl::StartsWith(name, "xdstp:")) {
|
1988
|
+
return XdsResourceName{"old:", {std::string(name), {}}};
|
1989
|
+
}
|
1990
|
+
// New style name. Parse URI.
|
1991
|
+
auto uri = URI::Parse(name);
|
1992
|
+
if (!uri.ok()) return uri.status();
|
1993
|
+
// Split the resource type off of the path to get the id.
|
1994
|
+
std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
|
1995
|
+
absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
|
1996
|
+
if (!type->IsType(path_parts.first, nullptr)) {
|
1997
|
+
return absl::InvalidArgumentError(
|
1998
|
+
"xdstp URI path must indicate valid xDS resource type");
|
1999
|
+
}
|
2000
|
+
// Canonicalize order of query params.
|
2001
|
+
std::vector<URI::QueryParam> query_params;
|
2002
|
+
for (const auto& p : uri->query_parameter_map()) {
|
2003
|
+
query_params.emplace_back(
|
2004
|
+
URI::QueryParam{std::string(p.first), std::string(p.second)});
|
2005
|
+
}
|
2006
|
+
return XdsResourceName{
|
2007
|
+
absl::StrCat("xdstp:", uri->authority()),
|
2008
|
+
{std::string(path_parts.second), std::move(query_params)}};
|
2009
|
+
}
|
2010
|
+
|
2011
|
+
std::string XdsClient::ConstructFullXdsResourceName(
|
2012
|
+
absl::string_view authority, absl::string_view resource_type,
|
2013
|
+
const XdsResourceKey& key) {
|
2014
|
+
if (absl::ConsumePrefix(&authority, "xdstp:")) {
|
2015
|
+
auto uri = URI::Create("xdstp", std::string(authority),
|
2016
|
+
absl::StrCat("/", resource_type, "/", key.id),
|
2017
|
+
key.query_params, /*fragment=*/"");
|
2018
|
+
GPR_ASSERT(uri.ok());
|
2019
|
+
return uri->ToString();
|
2020
|
+
}
|
2021
|
+
// Old-style name.
|
2022
|
+
return key.id;
|
2321
2023
|
}
|
2322
2024
|
|
2323
2025
|
RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
2324
|
-
|
2026
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2325
2027
|
absl::string_view eds_service_name) {
|
2326
|
-
|
2327
|
-
// server name specified in lrs_server.
|
2028
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2328
2029
|
auto key =
|
2329
2030
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2330
2031
|
MutexLock lock(&mu_);
|
2331
|
-
// We jump through some hoops here to make sure that the
|
2332
|
-
//
|
2032
|
+
// We jump through some hoops here to make sure that the const
|
2033
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2034
|
+
// stored in the XdsClusterDropStats object point to the
|
2035
|
+
// XdsBootstrap::XdsServer and strings
|
2333
2036
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2334
|
-
auto
|
2335
|
-
|
2336
|
-
|
2337
|
-
|
2037
|
+
auto server_it =
|
2038
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2039
|
+
if (server_it->second.channel_state == nullptr) {
|
2040
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2041
|
+
}
|
2042
|
+
auto load_report_it = server_it->second.load_report_map
|
2043
|
+
.emplace(std::move(key), LoadReportState())
|
2044
|
+
.first;
|
2045
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2338
2046
|
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
2339
2047
|
if (load_report_state.drop_stats != nullptr) {
|
2340
2048
|
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
@@ -2345,31 +2053,26 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
|
2345
2053
|
load_report_state.drop_stats->GetSnapshotAndReset();
|
2346
2054
|
}
|
2347
2055
|
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
2348
|
-
Ref(DEBUG_LOCATION, "DropStats"),
|
2349
|
-
|
2350
|
-
|
2056
|
+
Ref(DEBUG_LOCATION, "DropStats"), server_it->first,
|
2057
|
+
load_report_it->first.first /*cluster_name*/,
|
2058
|
+
load_report_it->first.second /*eds_service_name*/);
|
2351
2059
|
load_report_state.drop_stats = cluster_drop_stats.get();
|
2352
2060
|
}
|
2353
|
-
|
2354
|
-
GPR_ASSERT(resource.ok());
|
2355
|
-
auto a = authority_state_map_.find(resource->authority);
|
2356
|
-
if (a != authority_state_map_.end()) {
|
2357
|
-
a->second.channel_state->MaybeStartLrsCall();
|
2358
|
-
}
|
2061
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2359
2062
|
return cluster_drop_stats;
|
2360
2063
|
}
|
2361
2064
|
|
2362
2065
|
void XdsClient::RemoveClusterDropStats(
|
2363
|
-
|
2066
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2364
2067
|
absl::string_view eds_service_name,
|
2365
2068
|
XdsClusterDropStats* cluster_drop_stats) {
|
2366
2069
|
MutexLock lock(&mu_);
|
2367
|
-
|
2368
|
-
|
2369
|
-
auto
|
2070
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2071
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2072
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2370
2073
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2371
|
-
if (
|
2372
|
-
LoadReportState& load_report_state =
|
2074
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2075
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2373
2076
|
if (load_report_state.drop_stats == cluster_drop_stats) {
|
2374
2077
|
// Record final snapshot in deleted_drop_stats, which will be
|
2375
2078
|
// added to the next load report.
|
@@ -2380,21 +2083,27 @@ void XdsClient::RemoveClusterDropStats(
|
|
2380
2083
|
}
|
2381
2084
|
|
2382
2085
|
RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
2383
|
-
|
2086
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2384
2087
|
absl::string_view eds_service_name,
|
2385
2088
|
RefCountedPtr<XdsLocalityName> locality) {
|
2386
|
-
|
2387
|
-
// server name specified in lrs_server.
|
2089
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2388
2090
|
auto key =
|
2389
2091
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2390
2092
|
MutexLock lock(&mu_);
|
2391
|
-
// We jump through some hoops here to make sure that the
|
2392
|
-
//
|
2093
|
+
// We jump through some hoops here to make sure that the const
|
2094
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2095
|
+
// stored in the XdsClusterDropStats object point to the
|
2096
|
+
// XdsBootstrap::XdsServer and strings
|
2393
2097
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2394
|
-
auto
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2098
|
+
auto server_it =
|
2099
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2100
|
+
if (server_it->second.channel_state == nullptr) {
|
2101
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2102
|
+
}
|
2103
|
+
auto load_report_it = server_it->second.load_report_map
|
2104
|
+
.emplace(std::move(key), LoadReportState())
|
2105
|
+
.first;
|
2106
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2398
2107
|
LoadReportState::LocalityState& locality_state =
|
2399
2108
|
load_report_state.locality_stats[locality];
|
2400
2109
|
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
@@ -2407,32 +2116,27 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
|
2407
2116
|
locality_state.locality_stats->GetSnapshotAndReset();
|
2408
2117
|
}
|
2409
2118
|
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
2410
|
-
Ref(DEBUG_LOCATION, "LocalityStats"),
|
2411
|
-
|
2412
|
-
std::move(locality));
|
2119
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
|
2120
|
+
load_report_it->first.first /*cluster_name*/,
|
2121
|
+
load_report_it->first.second /*eds_service_name*/, std::move(locality));
|
2413
2122
|
locality_state.locality_stats = cluster_locality_stats.get();
|
2414
2123
|
}
|
2415
|
-
|
2416
|
-
GPR_ASSERT(resource.ok());
|
2417
|
-
auto a = authority_state_map_.find(resource->authority);
|
2418
|
-
if (a != authority_state_map_.end()) {
|
2419
|
-
a->second.channel_state->MaybeStartLrsCall();
|
2420
|
-
}
|
2124
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2421
2125
|
return cluster_locality_stats;
|
2422
2126
|
}
|
2423
2127
|
|
2424
2128
|
void XdsClient::RemoveClusterLocalityStats(
|
2425
|
-
|
2129
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2426
2130
|
absl::string_view eds_service_name,
|
2427
2131
|
const RefCountedPtr<XdsLocalityName>& locality,
|
2428
2132
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
2429
2133
|
MutexLock lock(&mu_);
|
2430
|
-
|
2431
|
-
|
2432
|
-
auto
|
2134
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2135
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2136
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2433
2137
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2434
|
-
if (
|
2435
|
-
LoadReportState& load_report_state =
|
2138
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2139
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2436
2140
|
auto locality_it = load_report_state.locality_stats.find(locality);
|
2437
2141
|
if (locality_it == load_report_state.locality_stats.end()) return;
|
2438
2142
|
LoadReportState::LocalityState& locality_state = locality_it->second;
|
@@ -2452,44 +2156,77 @@ void XdsClient::ResetBackoff() {
|
|
2452
2156
|
}
|
2453
2157
|
}
|
2454
2158
|
|
2455
|
-
void XdsClient::NotifyOnErrorLocked(
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
2462
|
-
|
2463
|
-
|
2464
|
-
|
2465
|
-
for (const auto&
|
2466
|
-
|
2467
|
-
|
2468
|
-
|
2469
|
-
for (const auto& p : a.second.cluster_map) {
|
2470
|
-
const ClusterState& cluster_state = p.second;
|
2471
|
-
for (const auto& p : cluster_state.watchers) {
|
2472
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
2473
|
-
}
|
2474
|
-
}
|
2475
|
-
for (const auto& p : a.second.endpoint_map) {
|
2476
|
-
const EndpointState& endpoint_state = p.second;
|
2477
|
-
for (const auto& p : endpoint_state.watchers) {
|
2478
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
2159
|
+
void XdsClient::NotifyOnErrorLocked(absl::Status status) {
|
2160
|
+
const auto* node = bootstrap_->node();
|
2161
|
+
if (node != nullptr) {
|
2162
|
+
status = absl::Status(
|
2163
|
+
status.code(), absl::StrCat(status.message(),
|
2164
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
2165
|
+
}
|
2166
|
+
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
2167
|
+
for (const auto& a : authority_state_map_) { // authority
|
2168
|
+
for (const auto& t : a.second.resource_map) { // type
|
2169
|
+
for (const auto& r : t.second) { // resource id
|
2170
|
+
for (const auto& w : r.second.watchers) { // watchers
|
2171
|
+
watchers.insert(w.second);
|
2172
|
+
}
|
2479
2173
|
}
|
2480
2174
|
}
|
2481
2175
|
}
|
2482
|
-
|
2176
|
+
work_serializer_.Schedule(
|
2177
|
+
// TODO(yashykt): When we move to C++14, capture watchers using
|
2178
|
+
// std::move()
|
2179
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2180
|
+
for (const auto& watcher : watchers) {
|
2181
|
+
watcher->OnError(status);
|
2182
|
+
}
|
2183
|
+
},
|
2184
|
+
DEBUG_LOCATION);
|
2185
|
+
}
|
2186
|
+
|
2187
|
+
void XdsClient::NotifyWatchersOnErrorLocked(
|
2188
|
+
const std::map<ResourceWatcherInterface*,
|
2189
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
2190
|
+
absl::Status status) {
|
2191
|
+
const auto* node = bootstrap_->node();
|
2192
|
+
if (node != nullptr) {
|
2193
|
+
status = absl::Status(
|
2194
|
+
status.code(), absl::StrCat(status.message(),
|
2195
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
2196
|
+
}
|
2197
|
+
work_serializer_.Schedule(
|
2198
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2199
|
+
for (const auto& p : watchers) {
|
2200
|
+
p.first->OnError(status);
|
2201
|
+
}
|
2202
|
+
},
|
2203
|
+
DEBUG_LOCATION);
|
2204
|
+
}
|
2205
|
+
|
2206
|
+
void XdsClient::NotifyWatchersOnResourceDoesNotExist(
|
2207
|
+
const std::map<ResourceWatcherInterface*,
|
2208
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers) {
|
2209
|
+
work_serializer_.Schedule(
|
2210
|
+
[watchers]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
2211
|
+
for (const auto& p : watchers) {
|
2212
|
+
p.first->OnResourceDoesNotExist();
|
2213
|
+
}
|
2214
|
+
},
|
2215
|
+
DEBUG_LOCATION);
|
2483
2216
|
}
|
2484
2217
|
|
2485
2218
|
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
2486
|
-
|
2219
|
+
const XdsBootstrap::XdsServer& xds_server, bool send_all_clusters,
|
2220
|
+
const std::set<std::string>& clusters) {
|
2487
2221
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2488
2222
|
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2489
2223
|
}
|
2490
2224
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
2491
|
-
|
2492
|
-
|
2225
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2226
|
+
if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
|
2227
|
+
auto& load_report_map = server_it->second.load_report_map;
|
2228
|
+
for (auto load_report_it = load_report_map.begin();
|
2229
|
+
load_report_it != load_report_map.end();) {
|
2493
2230
|
// Cluster key is cluster and EDS service name.
|
2494
2231
|
const auto& cluster_key = load_report_it->first;
|
2495
2232
|
LoadReportState& load_report = load_report_it->second;
|
@@ -2544,7 +2281,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2544
2281
|
}
|
2545
2282
|
}
|
2546
2283
|
// Compute load report interval.
|
2547
|
-
const
|
2284
|
+
const Timestamp now = ExecCtx::Get()->Now();
|
2548
2285
|
snapshot.load_report_interval = now - load_report.last_report_time;
|
2549
2286
|
load_report.last_report_time = now;
|
2550
2287
|
// Record snapshot.
|
@@ -2555,7 +2292,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2555
2292
|
// deleted stats objects, remove the entry.
|
2556
2293
|
if (load_report.locality_stats.empty() &&
|
2557
2294
|
load_report.drop_stats == nullptr) {
|
2558
|
-
load_report_it =
|
2295
|
+
load_report_it = load_report_map.erase(load_report_it);
|
2559
2296
|
} else {
|
2560
2297
|
++load_report_it;
|
2561
2298
|
}
|
@@ -2566,35 +2303,18 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2566
2303
|
std::string XdsClient::DumpClientConfigBinary() {
|
2567
2304
|
MutexLock lock(&mu_);
|
2568
2305
|
XdsApi::ResourceTypeMetadataMap resource_type_metadata_map;
|
2569
|
-
auto&
|
2570
|
-
auto& rds_map = resource_type_metadata_map[XdsApi::kRdsTypeUrl];
|
2571
|
-
auto& cds_map = resource_type_metadata_map[XdsApi::kCdsTypeUrl];
|
2572
|
-
auto& eds_map = resource_type_metadata_map[XdsApi::kEdsTypeUrl];
|
2573
|
-
for (auto& a : authority_state_map_) {
|
2306
|
+
for (const auto& a : authority_state_map_) { // authority
|
2574
2307
|
const std::string& authority = a.first;
|
2575
|
-
|
2576
|
-
|
2577
|
-
|
2578
|
-
|
2579
|
-
|
2580
|
-
|
2581
|
-
|
2582
|
-
|
2583
|
-
|
2584
|
-
|
2585
|
-
authority, XdsApi::kRdsTypeUrl, route_config_name)] = &p.second.meta;
|
2586
|
-
}
|
2587
|
-
// Collect resource metadata from clusters
|
2588
|
-
for (auto& p : a.second.cluster_map) {
|
2589
|
-
const std::string& cluster_name = p.first;
|
2590
|
-
cds_map[XdsApi::ConstructFullResourceName(authority, XdsApi::kCdsTypeUrl,
|
2591
|
-
cluster_name)] = &p.second.meta;
|
2592
|
-
}
|
2593
|
-
// Collect resource metadata from endpoints
|
2594
|
-
for (auto& p : a.second.endpoint_map) {
|
2595
|
-
const std::string& endpoint_name = p.first;
|
2596
|
-
eds_map[XdsApi::ConstructFullResourceName(
|
2597
|
-
authority, XdsApi::kEdsTypeUrl, endpoint_name)] = &p.second.meta;
|
2308
|
+
for (const auto& t : a.second.resource_map) { // type
|
2309
|
+
const XdsResourceType* type = t.first;
|
2310
|
+
auto& resource_metadata_map =
|
2311
|
+
resource_type_metadata_map[type->type_url()];
|
2312
|
+
for (const auto& r : t.second) { // resource id
|
2313
|
+
const XdsResourceKey& resource_key = r.first;
|
2314
|
+
const ResourceState& resource_state = r.second;
|
2315
|
+
resource_metadata_map[ConstructFullXdsResourceName(
|
2316
|
+
authority, type->type_url(), resource_key)] = &resource_state.meta;
|
2317
|
+
}
|
2598
2318
|
}
|
2599
2319
|
}
|
2600
2320
|
// Assemble config dump messages
|
@@ -2608,6 +2328,7 @@ std::string XdsClient::DumpClientConfigBinary() {
|
|
2608
2328
|
void XdsClientGlobalInit() {
|
2609
2329
|
g_mu = new Mutex;
|
2610
2330
|
XdsHttpFilterRegistry::Init();
|
2331
|
+
XdsClusterSpecifierPluginRegistry::Init();
|
2611
2332
|
}
|
2612
2333
|
|
2613
2334
|
// TODO(roth): Find a better way to clear the fallback config that does
|
@@ -2618,6 +2339,7 @@ void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
|
2618
2339
|
delete g_mu;
|
2619
2340
|
g_mu = nullptr;
|
2620
2341
|
XdsHttpFilterRegistry::Shutdown();
|
2342
|
+
XdsClusterSpecifierPluginRegistry::Shutdown();
|
2621
2343
|
}
|
2622
2344
|
|
2623
2345
|
namespace {
|
@@ -2625,7 +2347,7 @@ namespace {
|
|
2625
2347
|
std::string GetBootstrapContents(const char* fallback_config,
|
2626
2348
|
grpc_error_handle* error) {
|
2627
2349
|
// First, try GRPC_XDS_BOOTSTRAP env var.
|
2628
|
-
|
2350
|
+
UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
2629
2351
|
if (path != nullptr) {
|
2630
2352
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2631
2353
|
gpr_log(GPR_INFO,
|
@@ -2642,8 +2364,7 @@ std::string GetBootstrapContents(const char* fallback_config,
|
|
2642
2364
|
return contents_str;
|
2643
2365
|
}
|
2644
2366
|
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
2645
|
-
|
2646
|
-
gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2367
|
+
UniquePtr<char> env_config(gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2647
2368
|
if (env_config != nullptr) {
|
2648
2369
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2649
2370
|
gpr_log(GPR_INFO,
|