grpc 1.42.0 → 1.45.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +405 -221
- 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 +17 -8
- 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/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 +213 -156
- data/src/core/ext/filters/client_channel/client_channel.h +43 -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 +32 -31
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -5
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +22 -27
- 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 +28 -19
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +122 -71
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +161 -112
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +55 -99
- 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 +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +114 -206
- 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 +261 -122
- 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 +122 -115
- 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/sockaddr/sockaddr_resolver.cc +40 -39
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +390 -373
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +8 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +13 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +236 -169
- data/src/core/ext/filters/client_channel/retry_service_config.cc +16 -18
- data/src/core/ext/filters/client_channel/retry_service_config.h +18 -12
- data/src/core/ext/filters/client_channel/retry_throttle.cc +9 -23
- data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/subchannel.cc +49 -56
- data/src/core/ext/filters/client_channel/subchannel.h +7 -7
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +96 -159
- data/src/core/ext/filters/client_idle/idle_filter_state.h +2 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +15 -14
- data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +53 -58
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +11 -13
- data/src/core/ext/filters/fault_injection/service_config_parser.h +10 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +70 -153
- data/src/core/ext/filters/http/client_authority_filter.cc +28 -87
- data/src/core/ext/filters/http/client_authority_filter.h +23 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +14 -17
- 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 +60 -161
- data/src/core/ext/filters/max_age/max_age_filter.cc +46 -40
- data/src/core/ext/filters/message_size/message_size_filter.cc +27 -35
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -3
- data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -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 +271 -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 +238 -20
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +283 -106
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +204 -291
- 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/hpack_encoder.cc +365 -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 +12 -41
- data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -9
- data/src/core/ext/transport/chttp2/transport/writing.cc +62 -128
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +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 +114 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +402 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +119 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +453 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +243 -209
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +799 -574
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +93 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +88 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +103 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +466 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +95 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +19 -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 +33 -18
- 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 +422 -316
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +231 -199
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +788 -570
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +43 -28
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +116 -78
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +308 -271
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +955 -661
- 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 +34 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +40 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +128 -78
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +290 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1122 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +72 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +222 -158
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +34 -22
- 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 +692 -498
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +62 -45
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +179 -129
- 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 +26 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +75 -52
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +143 -117
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +450 -328
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +111 -91
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +366 -263
- 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 +37 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +184 -125
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +676 -344
- 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 +26 -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 +60 -41
- 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 +40 -24
- 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 +46 -34
- 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 +35 -23
- 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 +114 -84
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +73 -55
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +211 -150
- 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 +211 -141
- 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 +29 -19
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +91 -71
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +282 -191
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +97 -78
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +287 -217
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +29 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +63 -41
- 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 +54 -37
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +120 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +81 -61
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +245 -184
- 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 +261 -191
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +123 -103
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +236 -190
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +49 -34
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +143 -111
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +642 -572
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2038 -1506
- 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 +108 -63
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +216 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +870 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +82 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +95 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +56 -39
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +119 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +203 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +89 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +184 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +192 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +126 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +30 -22
- 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 +125 -91
- 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 +150 -104
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +165 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +54 -36
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +254 -223
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +804 -558
- 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 +99 -60
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +369 -193
- 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 +96 -70
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +101 -83
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +267 -192
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +146 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +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 +298 -217
- 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 +74 -53
- 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 +198 -144
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +101 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +91 -68
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +65 -46
- 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 +35 -25
- 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 +26 -18
- 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 +26 -18
- 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 +86 -60
- 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 +66 -51
- 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 +57 -42
- 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 +75 -57
- 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 +163 -123
- 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 +158 -112
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +183 -0
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +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 +136 -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 +52 -33
- 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 +81 -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 +32 -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 +114 -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 +8 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +150 -125
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +372 -280
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +152 -126
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +410 -297
- data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
- data/src/core/ext/upb-generated/google/api/http.upb.h +118 -88
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -0
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +33 -21
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +366 -276
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1089 -763
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +29 -17
- 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 +81 -63
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +29 -17
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +214 -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 +37 -25
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +276 -0
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +61 -41
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +131 -107
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +397 -284
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +26 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +59 -38
- 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 +51 -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 +272 -202
- 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 +77 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +108 -57
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +34 -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 +8 -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 +34 -17
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +33 -18
- data/src/core/ext/upb-generated/validate/validate.upb.c +395 -310
- data/src/core/ext/upb-generated/validate/validate.upb.h +1118 -725
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +87 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +113 -65
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +81 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -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 +64 -45
- 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 +32 -24
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +95 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +40 -26
- 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 +74 -53
- 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 +44 -28
- 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 +44 -30
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +203 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +726 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +132 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +173 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +34 -22
- 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 +18 -24
- 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 +377 -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 +18 -20
- 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 +20 -31
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +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 +17 -21
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +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 +25 -41
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +25 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +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 +25 -39
- 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 +21 -27
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +818 -912
- 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 +137 -173
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +58 -58
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +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 +23 -34
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +19 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +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/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.h +1 -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 +162 -3417
- data/src/core/ext/xds/xds_api.h +60 -613
- data/src/core/ext/xds/xds_bootstrap.cc +221 -122
- data/src/core/ext/xds/xds_bootstrap.h +31 -15
- data/src/core/ext/xds/xds_certificate_provider.h +2 -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 +794 -1065
- data/src/core/ext/xds/xds_client.h +109 -149
- data/src/core/ext/xds/xds_client_stats.cc +15 -15
- data/src/core/ext/xds/xds_client_stats.h +5 -4
- data/src/core/ext/xds/xds_cluster.cc +453 -0
- data/src/core/ext/xds/xds_cluster.h +108 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +95 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +6 -6
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.cc +11 -5
- data/src/core/ext/xds/xds_http_filters.h +4 -4
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1039 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/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 +985 -0
- data/src/core/ext/xds/xds_route_config.h +215 -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 +1061 -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 +389 -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/channel_args.cc +77 -18
- data/src/core/lib/channel/channel_args.h +13 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +48 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_stack.cc +10 -3
- data/src/core/lib/channel/channel_stack.h +42 -6
- data/src/core/lib/channel/channel_stack_builder.cc +66 -250
- data/src/core/lib/channel/channel_stack_builder.h +95 -147
- data/src/core/lib/channel/channel_trace.cc +3 -6
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/connected_channel.cc +9 -4
- data/src/core/lib/channel/connected_channel.h +1 -1
- data/src/core/lib/channel/context.h +11 -0
- data/src/core/lib/channel/handshaker.cc +1 -1
- data/src/core/lib/channel/handshaker.h +1 -1
- data/src/core/lib/channel/promise_based_filter.cc +669 -0
- data/src/core/lib/channel/promise_based_filter.h +423 -0
- data/src/core/lib/compression/compression.cc +20 -112
- data/src/core/lib/compression/compression_internal.cc +143 -203
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/config/core_configuration.cc +11 -3
- data/src/core/lib/config/core_configuration.h +50 -0
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
- data/src/core/lib/event_engine/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 +6 -0
- data/src/core/lib/gpr/useful.h +18 -0
- data/src/core/lib/gprpp/bitset.h +7 -0
- data/src/core/lib/gprpp/capture.h +76 -0
- data/src/core/lib/gprpp/chunked_vector.h +45 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +45 -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 +1 -1
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
- data/src/core/lib/gprpp/status_helper.cc +30 -38
- data/src/core/lib/gprpp/status_helper.h +6 -19
- data/src/core/lib/gprpp/table.h +24 -1
- data/src/core/lib/gprpp/time.cc +186 -0
- data/src/core/lib/gprpp/time.h +292 -0
- data/src/core/lib/http/format_request.cc +27 -23
- data/src/core/lib/http/format_request.h +7 -6
- data/src/core/lib/http/httpcli.cc +310 -238
- data/src/core/lib/http/httpcli.h +183 -88
- data/src/core/lib/http/httpcli_security_connector.cc +62 -73
- data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
- data/src/core/lib/http/parser.h +1 -1
- data/src/core/lib/iomgr/buffer_list.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_epollex_linux.cc +12 -9
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -7
- data/src/core/lib/iomgr/ev_posix.cc +3 -3
- data/src/core/lib/iomgr/ev_posix.h +1 -1
- data/src/core/lib/iomgr/event_engine/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 +3 -2
- data/src/core/lib/iomgr/iocp_windows.cc +9 -9
- data/src/core/lib/iomgr/iocp_windows.h +1 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/polling_entity.h +6 -0
- data/src/core/lib/iomgr/pollset.cc +1 -1
- data/src/core/lib/iomgr/pollset.h +4 -4
- data/src/core/lib/iomgr/pollset_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +6 -9
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +83 -67
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +0 -17
- data/src/core/lib/iomgr/tcp_client.cc +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 +8 -24
- 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 +30 -34
- 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 +18 -22
- 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 +2 -2
- 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/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 +49 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/loop.h +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 +108 -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 +58 -0
- data/src/core/lib/resource_quota/thread_quota.cc +43 -0
- data/src/core/lib/resource_quota/thread_quota.h +57 -0
- data/src/core/lib/resource_quota/trace.cc +19 -0
- data/src/core/lib/resource_quota/trace.h +24 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +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 +109 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +51 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +171 -0
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -0
- data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
- data/src/core/lib/security/credentials/call_creds_util.h +42 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -81
- data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -9
- data/src/core/lib/security/credentials/credentials.cc +2 -3
- data/src/core/lib/security/credentials/credentials.h +68 -57
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +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 +18 -18
- data/src/core/lib/security/credentials/fake/fake_credentials.h +14 -16
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +17 -16
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +6 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -27
- data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -9
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +13 -7
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +28 -44
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -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.h +6 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +148 -173
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +52 -33
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +95 -153
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +54 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +6 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +33 -87
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +36 -83
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
- data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
- data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -1
- 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 +12 -17
- data/src/core/lib/security/security_connector/security_connector.cc +3 -15
- data/src/core/lib/security/security_connector/security_connector.h +16 -21
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/ssl_utils.cc +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 +361 -204
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +70 -47
- data/src/core/lib/security/transport/auth_filters.h +37 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +87 -358
- data/src/core/lib/security/transport/security_handshaker.cc +16 -8
- 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 +204 -413
- data/src/core/lib/surface/call.h +5 -5
- data/src/core/lib/surface/channel.cc +67 -99
- data/src/core/lib/surface/channel.h +12 -23
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/channel_init.h +4 -4
- data/src/core/lib/surface/completion_queue.cc +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 +44 -72
- data/src/core/lib/surface/server.h +13 -14
- 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 +4 -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 +1128 -793
- 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 +88 -4
- data/src/core/lib/transport/transport_impl.h +13 -0
- data/src/core/lib/transport/transport_op_string.cc +5 -47
- data/src/core/lib/uri/uri_parser.cc +237 -63
- data/src/core/lib/uri/uri_parser.h +39 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +22 -88
- 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 +19 -11
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
- data/src/core/tsi/local_transport_security.cc +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 +135 -15
- data/src/core/tsi/ssl_transport_security.h +39 -6
- data/src/ruby/ext/grpc/extconf.rb +10 -3
- data/src/ruby/ext/grpc/rb_channel.c +5 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +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/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
- data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
- data/third_party/abseil-cpp/absl/base/config.h +67 -37
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/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 +716 -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 +2009 -979
- data/third_party/upb/upb/def.h +321 -258
- data/third_party/upb/upb/def.hpp +139 -169
- data/third_party/upb/upb/encode.c +261 -174
- data/third_party/upb/upb/encode.h +15 -17
- data/third_party/upb/upb/msg.c +154 -121
- data/third_party/upb/upb/msg.h +40 -33
- data/third_party/upb/upb/msg_internal.h +381 -250
- 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 +222 -142
- data/third_party/upb/upb/table_internal.h +128 -96
- 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 +120 -144
- data/third_party/upb/upb/upb.hpp +31 -28
- data/third_party/upb/upb/upb_internal.h +21 -11
- data/third_party/xxhash/xxhash.h +607 -352
- metadata +476 -213
- 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/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/gprpp/match.h +0 -73
- data/src/core/lib/gprpp/overload.h +0 -59
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
- data/src/core/lib/iomgr/iomgr_custom.h +0 -49
- data/src/core/lib/iomgr/pollset_custom.cc +0 -105
- data/src/core/lib/iomgr/pollset_custom.h +0 -37
- data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
- data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
- data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- 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,15 @@
|
|
37
37
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
38
38
|
#include "src/core/ext/xds/xds_channel_args.h"
|
39
39
|
#include "src/core/ext/xds/xds_client_stats.h"
|
40
|
+
#include "src/core/ext/xds/xds_cluster.h"
|
41
|
+
#include "src/core/ext/xds/xds_endpoint.h"
|
40
42
|
#include "src/core/ext/xds/xds_http_filters.h"
|
43
|
+
#include "src/core/ext/xds/xds_listener.h"
|
41
44
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
42
45
|
#include "src/core/lib/backoff/backoff.h"
|
43
46
|
#include "src/core/lib/channel/channel_args.h"
|
44
47
|
#include "src/core/lib/channel/channel_stack.h"
|
48
|
+
#include "src/core/lib/config/core_configuration.h"
|
45
49
|
#include "src/core/lib/gpr/env.h"
|
46
50
|
#include "src/core/lib/gpr/string.h"
|
47
51
|
#include "src/core/lib/gprpp/memory.h"
|
@@ -50,11 +54,12 @@
|
|
50
54
|
#include "src/core/lib/gprpp/sync.h"
|
51
55
|
#include "src/core/lib/iomgr/sockaddr.h"
|
52
56
|
#include "src/core/lib/iomgr/timer.h"
|
57
|
+
#include "src/core/lib/security/credentials/channel_creds_registry.h"
|
53
58
|
#include "src/core/lib/slice/slice_internal.h"
|
54
59
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
55
60
|
#include "src/core/lib/surface/call.h"
|
56
61
|
#include "src/core/lib/surface/channel.h"
|
57
|
-
#include "src/core/lib/
|
62
|
+
#include "src/core/lib/surface/lame_client.h"
|
58
63
|
#include "src/core/lib/uri/uri_parser.h"
|
59
64
|
|
60
65
|
#define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
@@ -78,6 +83,43 @@ char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
|
78
83
|
|
79
84
|
} // namespace
|
80
85
|
|
86
|
+
class XdsClient::Notifier {
|
87
|
+
public:
|
88
|
+
// Helper template function to invoke `OnError()` on a list of watchers \a
|
89
|
+
// watchers_list within \a work_serializer. Works with all 4 resource types.
|
90
|
+
template <class T>
|
91
|
+
static void ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
92
|
+
XdsClient* xds_client, const T& watchers_list, grpc_error_handle error,
|
93
|
+
const DebugLocation& location) {
|
94
|
+
xds_client->work_serializer_.Schedule(
|
95
|
+
[watchers_list, error]()
|
96
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
97
|
+
for (const auto& p : watchers_list) {
|
98
|
+
p.first->OnError(GRPC_ERROR_REF(error));
|
99
|
+
}
|
100
|
+
GRPC_ERROR_UNREF(error);
|
101
|
+
},
|
102
|
+
location);
|
103
|
+
}
|
104
|
+
|
105
|
+
// Helper template function to invoke `OnResourceDoesNotExist()` on a list of
|
106
|
+
// watchers \a watchers_list within \a work_serializer. Works with all 4
|
107
|
+
// resource types.
|
108
|
+
template <class T>
|
109
|
+
static void ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
110
|
+
XdsClient* xds_client, const T& watchers_list,
|
111
|
+
const DebugLocation& location) {
|
112
|
+
xds_client->work_serializer_.Schedule(
|
113
|
+
[watchers_list]()
|
114
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client->work_serializer_) {
|
115
|
+
for (const auto& p : watchers_list) {
|
116
|
+
p.first->OnResourceDoesNotExist();
|
117
|
+
}
|
118
|
+
},
|
119
|
+
location);
|
120
|
+
}
|
121
|
+
};
|
122
|
+
|
81
123
|
//
|
82
124
|
// Internal class declarations
|
83
125
|
//
|
@@ -135,37 +177,65 @@ class XdsClient::ChannelState::AdsCallState
|
|
135
177
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
136
178
|
bool seen_response() const { return seen_response_; }
|
137
179
|
|
138
|
-
void SubscribeLocked(const
|
139
|
-
const XdsApi::ResourceName& resource)
|
180
|
+
void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name)
|
140
181
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
141
|
-
void UnsubscribeLocked(const
|
142
|
-
const
|
143
|
-
bool delay_unsubscription)
|
182
|
+
void UnsubscribeLocked(const XdsResourceType* type,
|
183
|
+
const XdsResourceName& name, bool delay_unsubscription)
|
144
184
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
145
185
|
|
146
186
|
bool HasSubscribedResources() const;
|
147
187
|
|
148
188
|
private:
|
149
|
-
class
|
189
|
+
class AdsResponseParser : public XdsApi::AdsResponseParserInterface {
|
150
190
|
public:
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
191
|
+
struct Result {
|
192
|
+
const XdsResourceType* type;
|
193
|
+
std::string type_url;
|
194
|
+
std::string version;
|
195
|
+
std::string nonce;
|
196
|
+
std::vector<std::string> errors;
|
197
|
+
std::map<std::string /*authority*/, std::set<XdsResourceKey>>
|
198
|
+
resources_seen;
|
199
|
+
bool have_valid_resources = false;
|
200
|
+
};
|
201
|
+
|
202
|
+
explicit AdsResponseParser(AdsCallState* ads_call_state)
|
203
|
+
: ads_call_state_(ads_call_state) {}
|
204
|
+
|
205
|
+
absl::Status ProcessAdsResponseFields(AdsResponseFields fields) override
|
206
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
207
|
+
|
208
|
+
void ParseResource(const XdsEncodingContext& context, size_t idx,
|
209
|
+
absl::string_view type_url,
|
210
|
+
absl::string_view serialized_resource) override
|
211
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
212
|
+
|
213
|
+
Result TakeResult() { return std::move(result_); }
|
214
|
+
|
215
|
+
private:
|
216
|
+
XdsClient* xds_client() const { return ads_call_state_->xds_client(); }
|
217
|
+
|
218
|
+
AdsCallState* ads_call_state_;
|
219
|
+
const Timestamp update_time_ = ExecCtx::Get()->Now();
|
220
|
+
Result result_;
|
221
|
+
};
|
222
|
+
|
223
|
+
class ResourceTimer : public InternallyRefCounted<ResourceTimer> {
|
224
|
+
public:
|
225
|
+
ResourceTimer(const XdsResourceType* type, const XdsResourceName& name)
|
226
|
+
: type_(type), name_(name) {
|
157
227
|
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
158
228
|
grpc_schedule_on_exec_ctx);
|
159
229
|
}
|
160
230
|
|
161
231
|
void Orphan() override {
|
162
|
-
|
232
|
+
MaybeCancelTimer();
|
163
233
|
Unref(DEBUG_LOCATION, "Orphan");
|
164
234
|
}
|
165
235
|
|
166
|
-
void
|
167
|
-
if (
|
168
|
-
|
236
|
+
void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld) {
|
237
|
+
if (timer_started_) return;
|
238
|
+
timer_started_ = true;
|
169
239
|
ads_calld_ = std::move(ads_calld);
|
170
240
|
Ref(DEBUG_LOCATION, "timer").release();
|
171
241
|
timer_pending_ = true;
|
@@ -175,7 +245,7 @@ class XdsClient::ChannelState::AdsCallState
|
|
175
245
|
&timer_callback_);
|
176
246
|
}
|
177
247
|
|
178
|
-
void
|
248
|
+
void MaybeCancelTimer() {
|
179
249
|
if (timer_pending_) {
|
180
250
|
grpc_timer_cancel(&timer_);
|
181
251
|
timer_pending_ = false;
|
@@ -184,11 +254,12 @@ class XdsClient::ChannelState::AdsCallState
|
|
184
254
|
|
185
255
|
private:
|
186
256
|
static void OnTimer(void* arg, grpc_error_handle error) {
|
187
|
-
|
257
|
+
ResourceTimer* self = static_cast<ResourceTimer*>(arg);
|
188
258
|
{
|
189
259
|
MutexLock lock(&self->ads_calld_->xds_client()->mu_);
|
190
260
|
self->OnTimerLocked(GRPC_ERROR_REF(error));
|
191
261
|
}
|
262
|
+
self->ads_calld_->xds_client()->work_serializer_.DrainQueue();
|
192
263
|
self->ads_calld_.reset();
|
193
264
|
self->Unref(DEBUG_LOCATION, "timer");
|
194
265
|
}
|
@@ -200,55 +271,33 @@ class XdsClient::ChannelState::AdsCallState
|
|
200
271
|
grpc_error_handle watcher_error =
|
201
272
|
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
202
273
|
"timeout obtaining resource {type=%s name=%s} from xds server",
|
203
|
-
|
204
|
-
|
205
|
-
|
274
|
+
type_->type_url(),
|
275
|
+
XdsClient::ConstructFullXdsResourceName(
|
276
|
+
name_.authority, type_->type_url(), name_.key)));
|
206
277
|
watcher_error = grpc_error_set_int(
|
207
278
|
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
208
279
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
209
|
-
gpr_log(GPR_INFO, "[xds_client %p] %s",
|
280
|
+
gpr_log(GPR_INFO, "[xds_client %p] xds server %s: %s",
|
281
|
+
ads_calld_->xds_client(),
|
282
|
+
ads_calld_->chand()->server_.server_uri.c_str(),
|
210
283
|
grpc_error_std_string(watcher_error).c_str());
|
211
284
|
}
|
212
285
|
auto& authority_state =
|
213
|
-
ads_calld_->xds_client()->authority_state_map_[
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
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);
|
286
|
+
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
287
|
+
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
288
|
+
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
289
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
290
|
+
ads_calld_->xds_client(), state.watchers, watcher_error,
|
291
|
+
DEBUG_LOCATION);
|
243
292
|
}
|
244
293
|
GRPC_ERROR_UNREF(error);
|
245
294
|
}
|
246
295
|
|
247
|
-
const
|
248
|
-
const
|
296
|
+
const XdsResourceType* type_;
|
297
|
+
const XdsResourceName name_;
|
249
298
|
|
250
299
|
RefCountedPtr<AdsCallState> ads_calld_;
|
251
|
-
bool
|
300
|
+
bool timer_started_ = false;
|
252
301
|
bool timer_pending_ = false;
|
253
302
|
grpc_timer timer_;
|
254
303
|
grpc_closure timer_callback_;
|
@@ -263,40 +312,11 @@ class XdsClient::ChannelState::AdsCallState
|
|
263
312
|
|
264
313
|
// Subscribed resources of this type.
|
265
314
|
std::map<std::string /*authority*/,
|
266
|
-
std::map<
|
315
|
+
std::map<XdsResourceKey, OrphanablePtr<ResourceTimer>>>
|
267
316
|
subscribed_resources;
|
268
317
|
};
|
269
318
|
|
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)
|
319
|
+
void SendMessageLocked(const XdsResourceType* type)
|
300
320
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
301
321
|
|
302
322
|
static void OnRequestSent(void* arg, grpc_error_handle error);
|
@@ -311,9 +331,9 @@ class XdsClient::ChannelState::AdsCallState
|
|
311
331
|
|
312
332
|
bool IsCurrentCallOnChannel() const;
|
313
333
|
|
314
|
-
|
315
|
-
|
316
|
-
ResourceNamesForRequest(const
|
334
|
+
// Constructs a list of resource names of a given type for an ADS
|
335
|
+
// request. Also starts the timer for each resource if needed.
|
336
|
+
std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type);
|
317
337
|
|
318
338
|
// The owning RetryableCall<>.
|
319
339
|
RefCountedPtr<RetryableCall<AdsCallState>> parent_;
|
@@ -342,10 +362,10 @@ class XdsClient::ChannelState::AdsCallState
|
|
342
362
|
grpc_closure on_status_received_;
|
343
363
|
|
344
364
|
// Resource types for which requests need to be sent.
|
345
|
-
std::set<
|
365
|
+
std::set<const XdsResourceType*> buffered_requests_;
|
346
366
|
|
347
367
|
// State for each resource type.
|
348
|
-
std::map<
|
368
|
+
std::map<const XdsResourceType*, ResourceTypeState> state_map_;
|
349
369
|
};
|
350
370
|
|
351
371
|
// Contains an LRS call to the xds server.
|
@@ -369,7 +389,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
369
389
|
// Reports client-side load stats according to a fixed interval.
|
370
390
|
class Reporter : public InternallyRefCounted<Reporter> {
|
371
391
|
public:
|
372
|
-
Reporter(RefCountedPtr<LrsCallState> parent,
|
392
|
+
Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
|
373
393
|
: parent_(std::move(parent)), report_interval_(report_interval) {
|
374
394
|
GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
|
375
395
|
grpc_schedule_on_exec_ctx);
|
@@ -400,7 +420,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
400
420
|
RefCountedPtr<LrsCallState> parent_;
|
401
421
|
|
402
422
|
// The load reporting state.
|
403
|
-
const
|
423
|
+
const Duration report_interval_;
|
404
424
|
bool last_report_counters_were_zero_ = false;
|
405
425
|
bool next_report_timer_callback_pending_ = false;
|
406
426
|
grpc_timer next_report_timer_;
|
@@ -447,7 +467,7 @@ class XdsClient::ChannelState::LrsCallState
|
|
447
467
|
// Load reporting state.
|
448
468
|
bool send_all_clusters_ = false;
|
449
469
|
std::set<std::string> cluster_names_; // Asked for by the LRS server.
|
450
|
-
|
470
|
+
Duration load_reporting_interval_;
|
451
471
|
OrphanablePtr<Reporter> reporter_;
|
452
472
|
};
|
453
473
|
|
@@ -464,18 +484,23 @@ class XdsClient::ChannelState::StateWatcher
|
|
464
484
|
private:
|
465
485
|
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
466
486
|
const absl::Status& status) override {
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
487
|
+
{
|
488
|
+
MutexLock lock(&parent_->xds_client_->mu_);
|
489
|
+
if (!parent_->shutting_down_ &&
|
490
|
+
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
491
|
+
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
492
|
+
gpr_log(GPR_INFO,
|
493
|
+
"[xds_client %p] xds channel for server %s in "
|
494
|
+
"state TRANSIENT_FAILURE: %s",
|
495
|
+
parent_->xds_client(), parent_->server_.server_uri.c_str(),
|
496
|
+
status.ToString().c_str());
|
497
|
+
parent_->xds_client_->NotifyOnErrorLocked(
|
498
|
+
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
499
|
+
"xds channel in TRANSIENT_FAILURE, connectivity error: ",
|
500
|
+
status.ToString())));
|
501
|
+
}
|
478
502
|
}
|
503
|
+
parent_->xds_client()->work_serializer_.DrainQueue();
|
479
504
|
}
|
480
505
|
|
481
506
|
WeakRefCountedPtr<ChannelState> parent_;
|
@@ -490,10 +515,10 @@ namespace {
|
|
490
515
|
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
491
516
|
const XdsBootstrap::XdsServer& server) {
|
492
517
|
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
493
|
-
|
494
|
-
|
495
|
-
return
|
496
|
-
|
518
|
+
CoreConfiguration::Get().channel_creds_registry().CreateChannelCreds(
|
519
|
+
server.channel_creds_type, server.channel_creds_config);
|
520
|
+
return grpc_channel_create(server.server_uri.c_str(), channel_creds.get(),
|
521
|
+
args);
|
497
522
|
}
|
498
523
|
|
499
524
|
} // namespace
|
@@ -517,8 +542,8 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
517
542
|
|
518
543
|
XdsClient::ChannelState::~ChannelState() {
|
519
544
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
520
|
-
gpr_log(GPR_INFO, "[xds_client %p]
|
521
|
-
this);
|
545
|
+
gpr_log(GPR_INFO, "[xds_client %p] destroying xds channel %p for server %s",
|
546
|
+
xds_client(), this, server_.server_uri.c_str());
|
522
547
|
}
|
523
548
|
grpc_channel_destroy(channel_);
|
524
549
|
xds_client_.reset(DEBUG_LOCATION, "ChannelState");
|
@@ -559,9 +584,27 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
559
584
|
WeakRef(DEBUG_LOCATION, "ChannelState+lrs")));
|
560
585
|
}
|
561
586
|
|
562
|
-
void XdsClient::ChannelState::
|
587
|
+
void XdsClient::ChannelState::StopLrsCallLocked() {
|
588
|
+
xds_client_->xds_load_report_server_map_.erase(server_);
|
589
|
+
lrs_calld_.reset();
|
590
|
+
}
|
591
|
+
|
592
|
+
namespace {
|
593
|
+
|
594
|
+
bool IsLameChannel(grpc_channel* channel) {
|
595
|
+
grpc_channel_element* elem =
|
596
|
+
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
597
|
+
return elem->filter == &grpc_lame_filter;
|
598
|
+
}
|
599
|
+
|
600
|
+
} // namespace
|
563
601
|
|
564
602
|
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
603
|
+
if (IsLameChannel(channel_)) {
|
604
|
+
xds_client()->NotifyOnErrorLocked(
|
605
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds client has a lame channel"));
|
606
|
+
return;
|
607
|
+
}
|
565
608
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
566
609
|
GPR_ASSERT(client_channel != nullptr);
|
567
610
|
watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
|
@@ -571,13 +614,16 @@ void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
|
571
614
|
}
|
572
615
|
|
573
616
|
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
617
|
+
if (IsLameChannel(channel_)) {
|
618
|
+
return;
|
619
|
+
}
|
574
620
|
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
575
621
|
GPR_ASSERT(client_channel != nullptr);
|
576
622
|
client_channel->RemoveConnectivityWatcher(watcher_);
|
577
623
|
}
|
578
624
|
|
579
|
-
void XdsClient::ChannelState::SubscribeLocked(
|
580
|
-
|
625
|
+
void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
|
626
|
+
const XdsResourceName& name) {
|
581
627
|
if (ads_calld_ == nullptr) {
|
582
628
|
// Start the ADS call if this is the first request.
|
583
629
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -591,16 +637,16 @@ void XdsClient::ChannelState::SubscribeLocked(
|
|
591
637
|
// because when the call is restarted it will resend all necessary requests.
|
592
638
|
if (ads_calld() == nullptr) return;
|
593
639
|
// Subscribe to this resource if the ADS call is active.
|
594
|
-
ads_calld()->SubscribeLocked(
|
640
|
+
ads_calld()->SubscribeLocked(type, name);
|
595
641
|
}
|
596
642
|
|
597
|
-
void XdsClient::ChannelState::UnsubscribeLocked(
|
598
|
-
|
599
|
-
|
643
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
|
644
|
+
const XdsResourceName& name,
|
645
|
+
bool delay_unsubscription) {
|
600
646
|
if (ads_calld_ != nullptr) {
|
601
647
|
auto* calld = ads_calld_->calld();
|
602
648
|
if (calld != nullptr) {
|
603
|
-
calld->UnsubscribeLocked(
|
649
|
+
calld->UnsubscribeLocked(type, name, delay_unsubscription);
|
604
650
|
if (!calld->HasSubscribedResources()) {
|
605
651
|
ads_calld_.reset();
|
606
652
|
}
|
@@ -616,13 +662,13 @@ template <typename T>
|
|
616
662
|
XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
|
617
663
|
WeakRefCountedPtr<ChannelState> chand)
|
618
664
|
: chand_(std::move(chand)),
|
619
|
-
backoff_(
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
665
|
+
backoff_(BackOff::Options()
|
666
|
+
.set_initial_backoff(Duration::Seconds(
|
667
|
+
GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS))
|
668
|
+
.set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
|
669
|
+
.set_jitter(GRPC_XDS_RECONNECT_JITTER)
|
670
|
+
.set_max_backoff(Duration::Seconds(
|
671
|
+
GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS))) {
|
626
672
|
// Closure Initialization
|
627
673
|
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
|
628
674
|
grpc_schedule_on_exec_ctx);
|
@@ -658,10 +704,10 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
658
704
|
GPR_ASSERT(chand_->channel_ != nullptr);
|
659
705
|
GPR_ASSERT(calld_ == nullptr);
|
660
706
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
661
|
-
gpr_log(
|
662
|
-
|
663
|
-
|
664
|
-
|
707
|
+
gpr_log(
|
708
|
+
GPR_INFO,
|
709
|
+
"[xds_client %p] xds server %s: start new call from retryable call %p",
|
710
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
665
711
|
}
|
666
712
|
calld_ = MakeOrphanable<T>(
|
667
713
|
this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
|
@@ -670,14 +716,15 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
670
716
|
template <typename T>
|
671
717
|
void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
672
718
|
if (shutting_down_) return;
|
673
|
-
const
|
719
|
+
const Timestamp next_attempt_time = backoff_.NextAttemptTime();
|
674
720
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
675
|
-
|
676
|
-
std::max(next_attempt_time - ExecCtx::Get()->Now(),
|
721
|
+
Duration timeout =
|
722
|
+
std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
|
677
723
|
gpr_log(GPR_INFO,
|
678
|
-
"[xds_client %p]
|
724
|
+
"[xds_client %p] xds server %s: call attempt failed; "
|
679
725
|
"retry timer will fire in %" PRId64 "ms.",
|
680
|
-
chand()->xds_client(), chand(),
|
726
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(),
|
727
|
+
timeout.millis());
|
681
728
|
}
|
682
729
|
this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start").release();
|
683
730
|
grpc_timer_init(&retry_timer_, next_attempt_time, &on_retry_timer_);
|
@@ -701,16 +748,182 @@ void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
|
701
748
|
retry_timer_callback_pending_ = false;
|
702
749
|
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
703
750
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
704
|
-
gpr_log(
|
705
|
-
|
706
|
-
|
707
|
-
|
751
|
+
gpr_log(GPR_INFO,
|
752
|
+
"[xds_client %p] xds server %s: retry timer fired (retryable "
|
753
|
+
"call: %p)",
|
754
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
708
755
|
}
|
709
756
|
StartNewCallLocked();
|
710
757
|
}
|
711
758
|
GRPC_ERROR_UNREF(error);
|
712
759
|
}
|
713
760
|
|
761
|
+
//
|
762
|
+
// XdsClient::ChannelState::AdsCallState::AdsResponseParser
|
763
|
+
//
|
764
|
+
|
765
|
+
absl::Status XdsClient::ChannelState::AdsCallState::AdsResponseParser::
|
766
|
+
ProcessAdsResponseFields(AdsResponseFields fields) {
|
767
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
768
|
+
gpr_log(
|
769
|
+
GPR_INFO,
|
770
|
+
"[xds_client %p] xds server %s: received ADS response: type_url=%s, "
|
771
|
+
"version=%s, nonce=%s, num_resources=%" PRIuPTR,
|
772
|
+
ads_call_state_->xds_client(),
|
773
|
+
ads_call_state_->chand()->server_.server_uri.c_str(),
|
774
|
+
fields.type_url.c_str(), fields.version.c_str(), fields.nonce.c_str(),
|
775
|
+
fields.num_resources);
|
776
|
+
}
|
777
|
+
result_.type =
|
778
|
+
ads_call_state_->xds_client()->GetResourceTypeLocked(fields.type_url);
|
779
|
+
if (result_.type == nullptr) {
|
780
|
+
return absl::InvalidArgumentError(
|
781
|
+
absl::StrCat("unknown resource type ", fields.type_url));
|
782
|
+
}
|
783
|
+
result_.type_url = std::move(fields.type_url);
|
784
|
+
result_.version = std::move(fields.version);
|
785
|
+
result_.nonce = std::move(fields.nonce);
|
786
|
+
return absl::OkStatus();
|
787
|
+
}
|
788
|
+
|
789
|
+
namespace {
|
790
|
+
|
791
|
+
// Build a resource metadata struct for ADS result accepting methods and CSDS.
|
792
|
+
XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
793
|
+
std::string serialized_proto, std::string version, Timestamp update_time) {
|
794
|
+
XdsApi::ResourceMetadata resource_metadata;
|
795
|
+
resource_metadata.serialized_proto = std::move(serialized_proto);
|
796
|
+
resource_metadata.update_time = update_time;
|
797
|
+
resource_metadata.version = std::move(version);
|
798
|
+
resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
|
799
|
+
return resource_metadata;
|
800
|
+
}
|
801
|
+
|
802
|
+
// Update resource_metadata for NACK.
|
803
|
+
void UpdateResourceMetadataNacked(const std::string& version,
|
804
|
+
const std::string& details,
|
805
|
+
Timestamp update_time,
|
806
|
+
XdsApi::ResourceMetadata* resource_metadata) {
|
807
|
+
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
808
|
+
resource_metadata->failed_version = version;
|
809
|
+
resource_metadata->failed_details = details;
|
810
|
+
resource_metadata->failed_update_time = update_time;
|
811
|
+
}
|
812
|
+
|
813
|
+
} // namespace
|
814
|
+
|
815
|
+
void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
816
|
+
const XdsEncodingContext& context, size_t idx, absl::string_view type_url,
|
817
|
+
absl::string_view serialized_resource) {
|
818
|
+
// Check the type_url of the resource.
|
819
|
+
bool is_v2 = false;
|
820
|
+
if (!result_.type->IsType(type_url, &is_v2)) {
|
821
|
+
result_.errors.emplace_back(
|
822
|
+
absl::StrCat("resource index ", idx, ": incorrect resource type ",
|
823
|
+
type_url, " (should be ", result_.type_url, ")"));
|
824
|
+
return;
|
825
|
+
}
|
826
|
+
// Parse the resource.
|
827
|
+
absl::StatusOr<XdsResourceType::DecodeResult> result =
|
828
|
+
result_.type->Decode(context, serialized_resource, is_v2);
|
829
|
+
if (!result.ok()) {
|
830
|
+
result_.errors.emplace_back(
|
831
|
+
absl::StrCat("resource index ", idx, ": ", result.status().ToString()));
|
832
|
+
return;
|
833
|
+
}
|
834
|
+
// Check the resource name.
|
835
|
+
auto resource_name =
|
836
|
+
XdsClient::ParseXdsResourceName(result->name, result_.type);
|
837
|
+
if (!resource_name.ok()) {
|
838
|
+
result_.errors.emplace_back(absl::StrCat(
|
839
|
+
"resource index ", idx, ": Cannot parse xDS resource name \"",
|
840
|
+
result->name, "\""));
|
841
|
+
return;
|
842
|
+
}
|
843
|
+
// Cancel resource-does-not-exist timer, if needed.
|
844
|
+
auto timer_it = ads_call_state_->state_map_.find(result_.type);
|
845
|
+
if (timer_it != ads_call_state_->state_map_.end()) {
|
846
|
+
auto it =
|
847
|
+
timer_it->second.subscribed_resources.find(resource_name->authority);
|
848
|
+
if (it != timer_it->second.subscribed_resources.end()) {
|
849
|
+
auto res_it = it->second.find(resource_name->key);
|
850
|
+
if (res_it != it->second.end()) {
|
851
|
+
res_it->second->MaybeCancelTimer();
|
852
|
+
}
|
853
|
+
}
|
854
|
+
}
|
855
|
+
// Lookup the authority in the cache.
|
856
|
+
auto authority_it =
|
857
|
+
xds_client()->authority_state_map_.find(resource_name->authority);
|
858
|
+
if (authority_it == xds_client()->authority_state_map_.end()) {
|
859
|
+
return; // Skip resource -- we don't have a subscription for it.
|
860
|
+
}
|
861
|
+
// Found authority, so look up type.
|
862
|
+
AuthorityState& authority_state = authority_it->second;
|
863
|
+
auto type_it = authority_state.resource_map.find(result_.type);
|
864
|
+
if (type_it == authority_state.resource_map.end()) {
|
865
|
+
return; // Skip resource -- we don't have a subscription for it.
|
866
|
+
}
|
867
|
+
auto& type_map = type_it->second;
|
868
|
+
// Found type, so look up resource key.
|
869
|
+
auto it = type_map.find(resource_name->key);
|
870
|
+
if (it == type_map.end()) {
|
871
|
+
return; // Skip resource -- we don't have a subscription for it.
|
872
|
+
}
|
873
|
+
ResourceState& resource_state = it->second;
|
874
|
+
// If needed, record that we've seen this resource.
|
875
|
+
if (result_.type->AllResourcesRequiredInSotW()) {
|
876
|
+
result_.resources_seen[resource_name->authority].insert(resource_name->key);
|
877
|
+
}
|
878
|
+
// Update resource state based on whether the resource is valid.
|
879
|
+
if (!result->resource.ok()) {
|
880
|
+
result_.errors.emplace_back(absl::StrCat(
|
881
|
+
"resource index ", idx, ": ", result->name,
|
882
|
+
": validation error: ", result->resource.status().ToString()));
|
883
|
+
Notifier::ScheduleNotifyWatchersOnErrorInWorkSerializer(
|
884
|
+
xds_client(), resource_state.watchers,
|
885
|
+
grpc_error_set_int(
|
886
|
+
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
887
|
+
"invalid resource: ", result->resource.status().ToString())),
|
888
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
|
889
|
+
DEBUG_LOCATION);
|
890
|
+
UpdateResourceMetadataNacked(result_.version,
|
891
|
+
result->resource.status().ToString(),
|
892
|
+
update_time_, &resource_state.meta);
|
893
|
+
return;
|
894
|
+
}
|
895
|
+
// Resource is valid.
|
896
|
+
result_.have_valid_resources = true;
|
897
|
+
// If it didn't change, ignore it.
|
898
|
+
if (resource_state.resource != nullptr &&
|
899
|
+
result_.type->ResourcesEqual(resource_state.resource.get(),
|
900
|
+
result->resource->get())) {
|
901
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
902
|
+
gpr_log(GPR_INFO,
|
903
|
+
"[xds_client %p] %s resource %s identical to current, ignoring.",
|
904
|
+
xds_client(), result_.type_url.c_str(), result->name.c_str());
|
905
|
+
}
|
906
|
+
return;
|
907
|
+
}
|
908
|
+
// Update the resource state.
|
909
|
+
resource_state.resource = std::move(*result->resource);
|
910
|
+
resource_state.meta = CreateResourceMetadataAcked(
|
911
|
+
std::string(serialized_resource), result_.version, update_time_);
|
912
|
+
// Notify watchers.
|
913
|
+
auto& watchers_list = resource_state.watchers;
|
914
|
+
auto* value =
|
915
|
+
result_.type->CopyResource(resource_state.resource.get()).release();
|
916
|
+
xds_client()->work_serializer_.Schedule(
|
917
|
+
[watchers_list, value]()
|
918
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
919
|
+
for (const auto& p : watchers_list) {
|
920
|
+
p.first->OnGenericResourceChanged(value);
|
921
|
+
}
|
922
|
+
delete value;
|
923
|
+
},
|
924
|
+
DEBUG_LOCATION);
|
925
|
+
}
|
926
|
+
|
714
927
|
//
|
715
928
|
// XdsClient::ChannelState::AdsCallState
|
716
929
|
//
|
@@ -727,14 +940,17 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
727
940
|
// the polling entities from client_channel.
|
728
941
|
GPR_ASSERT(xds_client() != nullptr);
|
729
942
|
// Create a call with the specified method name.
|
730
|
-
const
|
943
|
+
const char* method =
|
731
944
|
chand()->server_.ShouldUseV3()
|
732
|
-
?
|
733
|
-
|
945
|
+
? "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
|
946
|
+
"StreamAggregatedResources"
|
947
|
+
: "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
|
948
|
+
"StreamAggregatedResources";
|
734
949
|
call_ = grpc_channel_create_pollset_set_call(
|
735
950
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
736
|
-
xds_client()->interested_parties_,
|
737
|
-
|
951
|
+
xds_client()->interested_parties_,
|
952
|
+
StaticSlice::FromStaticString(method).c_slice(), nullptr,
|
953
|
+
Timestamp::InfFuture(), nullptr);
|
738
954
|
GPR_ASSERT(call_ != nullptr);
|
739
955
|
// Init data associated with the call.
|
740
956
|
grpc_metadata_array_init(&initial_metadata_recv_);
|
@@ -742,9 +958,9 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
742
958
|
// Start the call.
|
743
959
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
744
960
|
gpr_log(GPR_INFO,
|
745
|
-
"[xds_client %p]
|
746
|
-
"call: %p)",
|
747
|
-
xds_client(), chand(), this, call_);
|
961
|
+
"[xds_client %p] xds server %s: starting ADS call "
|
962
|
+
"(calld: %p, call: %p)",
|
963
|
+
xds_client(), chand()->server_.server_uri.c_str(), this, call_);
|
748
964
|
}
|
749
965
|
// Create the ops.
|
750
966
|
grpc_call_error call_error;
|
@@ -768,21 +984,12 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
768
984
|
const std::string& authority = a.first;
|
769
985
|
// Skip authorities that are not using this xDS channel.
|
770
986
|
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});
|
987
|
+
for (const auto& t : a.second.resource_map) {
|
988
|
+
const XdsResourceType* type = t.first;
|
989
|
+
for (const auto& r : t.second) {
|
990
|
+
const XdsResourceKey& resource_key = r.first;
|
991
|
+
SubscribeLocked(type, {authority, resource_key});
|
992
|
+
}
|
786
993
|
}
|
787
994
|
}
|
788
995
|
// Op: recv initial metadata.
|
@@ -847,33 +1054,29 @@ void XdsClient::ChannelState::AdsCallState::Orphan() {
|
|
847
1054
|
}
|
848
1055
|
|
849
1056
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
850
|
-
const
|
1057
|
+
const XdsResourceType* type)
|
851
1058
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
852
1059
|
// Buffer message sending if an existing message is in flight.
|
853
1060
|
if (send_message_payload_ != nullptr) {
|
854
|
-
buffered_requests_.insert(
|
1061
|
+
buffered_requests_.insert(type);
|
855
1062
|
return;
|
856
1063
|
}
|
857
|
-
auto& state = state_map_[
|
1064
|
+
auto& state = state_map_[type];
|
858
1065
|
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
1066
|
request_payload_slice = xds_client()->api_.CreateAdsRequest(
|
863
|
-
chand()->server_,
|
864
|
-
chand()->
|
865
|
-
|
866
|
-
|
867
|
-
|
868
|
-
state_map_.erase(type_url);
|
869
|
-
}
|
1067
|
+
chand()->server_,
|
1068
|
+
chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
|
1069
|
+
chand()->resource_type_version_map_[type], state.nonce,
|
1070
|
+
ResourceNamesForRequest(type), GRPC_ERROR_REF(state.error),
|
1071
|
+
!sent_initial_message_);
|
870
1072
|
sent_initial_message_ = true;
|
871
1073
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
872
1074
|
gpr_log(GPR_INFO,
|
873
|
-
"[xds_client %p] sending ADS request: type=%s
|
874
|
-
"error=%s",
|
875
|
-
xds_client(),
|
876
|
-
|
1075
|
+
"[xds_client %p] xds server %s: sending ADS request: type=%s "
|
1076
|
+
"version=%s nonce=%s error=%s",
|
1077
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1078
|
+
std::string(type->type_url()).c_str(),
|
1079
|
+
chand()->resource_type_version_map_[type].c_str(),
|
877
1080
|
state.nonce.c_str(), grpc_error_std_string(state.error).c_str());
|
878
1081
|
}
|
879
1082
|
GRPC_ERROR_UNREF(state.error);
|
@@ -894,34 +1097,33 @@ void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
|
894
1097
|
grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
|
895
1098
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
896
1099
|
gpr_log(GPR_ERROR,
|
897
|
-
"[xds_client %p]
|
898
|
-
|
1100
|
+
"[xds_client %p] xds server %s: error starting ADS send_message "
|
1101
|
+
"batch on calld=%p: call_error=%d",
|
1102
|
+
xds_client(), chand()->server_.server_uri.c_str(), this,
|
1103
|
+
call_error);
|
899
1104
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
900
1105
|
}
|
901
1106
|
}
|
902
1107
|
|
903
1108
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
904
|
-
const
|
905
|
-
auto& state = state_map_[
|
906
|
-
.subscribed_resources[resource.authority][resource.id];
|
1109
|
+
const XdsResourceType* type, const XdsResourceName& name) {
|
1110
|
+
auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
|
907
1111
|
if (state == nullptr) {
|
908
|
-
state = MakeOrphanable<
|
909
|
-
|
910
|
-
!chand()->resource_type_version_map_[type_url].empty());
|
911
|
-
SendMessageLocked(type_url);
|
1112
|
+
state = MakeOrphanable<ResourceTimer>(type, name);
|
1113
|
+
SendMessageLocked(type);
|
912
1114
|
}
|
913
1115
|
}
|
914
1116
|
|
915
1117
|
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
916
|
-
const
|
1118
|
+
const XdsResourceType* type, const XdsResourceName& name,
|
917
1119
|
bool delay_unsubscription) {
|
918
|
-
auto& type_state_map = state_map_[
|
919
|
-
auto& authority_map = type_state_map.subscribed_resources[
|
920
|
-
authority_map.erase(
|
1120
|
+
auto& type_state_map = state_map_[type];
|
1121
|
+
auto& authority_map = type_state_map.subscribed_resources[name.authority];
|
1122
|
+
authority_map.erase(name.key);
|
921
1123
|
if (authority_map.empty()) {
|
922
|
-
type_state_map.subscribed_resources.erase(
|
1124
|
+
type_state_map.subscribed_resources.erase(name.authority);
|
923
1125
|
}
|
924
|
-
if (!delay_unsubscription) SendMessageLocked(
|
1126
|
+
if (!delay_unsubscription) SendMessageLocked(type);
|
925
1127
|
}
|
926
1128
|
|
927
1129
|
bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
@@ -931,421 +1133,6 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
931
1133
|
return false;
|
932
1134
|
}
|
933
1135
|
|
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
1136
|
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1350
1137
|
void* arg, grpc_error_handle error) {
|
1351
1138
|
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
@@ -1388,6 +1175,7 @@ void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
|
1388
1175
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1389
1176
|
done = ads_calld->OnResponseReceivedLocked();
|
1390
1177
|
}
|
1178
|
+
ads_calld->xds_client()->work_serializer_.DrainQueue();
|
1391
1179
|
if (done) ads_calld->Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
|
1392
1180
|
}
|
1393
1181
|
|
@@ -1404,63 +1192,76 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1404
1192
|
grpc_byte_buffer_destroy(recv_message_payload_);
|
1405
1193
|
recv_message_payload_ = nullptr;
|
1406
1194
|
// Parse and validate the response.
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
|
1411
|
-
ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
|
1412
|
-
ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
|
1195
|
+
AdsResponseParser parser(this);
|
1196
|
+
absl::Status status = xds_client()->api_.ParseAdsResponse(
|
1197
|
+
chand()->server_, response_slice, &parser);
|
1413
1198
|
grpc_slice_unref_internal(response_slice);
|
1414
|
-
if (
|
1199
|
+
if (!status.ok()) {
|
1415
1200
|
// Ignore unparsable response.
|
1416
1201
|
gpr_log(GPR_ERROR,
|
1417
|
-
"[xds_client %p]
|
1418
|
-
|
1419
|
-
|
1202
|
+
"[xds_client %p] xds server %s: error parsing ADS response (%s) "
|
1203
|
+
"-- ignoring",
|
1204
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1205
|
+
status.ToString().c_str());
|
1420
1206
|
} else {
|
1421
|
-
|
1207
|
+
AdsResponseParser::Result result = parser.TakeResult();
|
1422
1208
|
// 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);
|
1209
|
+
auto& state = state_map_[result.type];
|
1210
|
+
state.nonce = result.nonce;
|
1211
|
+
// If we got an error, set state.error so that we'll NACK the update.
|
1212
|
+
if (!result.errors.empty()) {
|
1213
|
+
std::string error = absl::StrJoin(result.errors, "; ");
|
1214
|
+
gpr_log(
|
1215
|
+
GPR_ERROR,
|
1216
|
+
"[xds_client %p] xds server %s: ADS response invalid for resource "
|
1217
|
+
"type %s version %s, will NACK: nonce=%s error=%s",
|
1218
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1219
|
+
result.type_url.c_str(), result.version.c_str(), state.nonce.c_str(),
|
1220
|
+
error.c_str());
|
1436
1221
|
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
|
-
|
1222
|
+
state.error = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_CPP_STRING(error),
|
1223
|
+
GRPC_ERROR_INT_GRPC_STATUS,
|
1224
|
+
GRPC_STATUS_UNAVAILABLE);
|
1225
|
+
}
|
1226
|
+
// Delete resources not seen in update if needed.
|
1227
|
+
if (result.type->AllResourcesRequiredInSotW()) {
|
1228
|
+
for (auto& a : xds_client()->authority_state_map_) {
|
1229
|
+
const std::string& authority = a.first;
|
1230
|
+
AuthorityState& authority_state = a.second;
|
1231
|
+
// Skip authorities that are not using this xDS channel.
|
1232
|
+
if (authority_state.channel_state != chand()) continue;
|
1233
|
+
auto seen_authority_it = result.resources_seen.find(authority);
|
1234
|
+
// Find this resource type.
|
1235
|
+
auto type_it = authority_state.resource_map.find(result.type);
|
1236
|
+
if (type_it == authority_state.resource_map.end()) continue;
|
1237
|
+
// Iterate over resource ids.
|
1238
|
+
for (auto& r : type_it->second) {
|
1239
|
+
const XdsResourceKey& resource_key = r.first;
|
1240
|
+
ResourceState& resource_state = r.second;
|
1241
|
+
if (seen_authority_it == result.resources_seen.end() ||
|
1242
|
+
seen_authority_it->second.find(resource_key) ==
|
1243
|
+
seen_authority_it->second.end()) {
|
1244
|
+
// If the resource was newly requested but has not yet been
|
1245
|
+
// received, we don't want to generate an error for the watchers,
|
1246
|
+
// because this ADS response may be in reaction to an earlier
|
1247
|
+
// request that did not yet request the new resource, so its absence
|
1248
|
+
// from the response does not necessarily indicate that the resource
|
1249
|
+
// does not exist. For that case, we rely on the request timeout
|
1250
|
+
// instead.
|
1251
|
+
if (resource_state.resource == nullptr) continue;
|
1252
|
+
resource_state.resource.reset();
|
1253
|
+
Notifier::
|
1254
|
+
ScheduleNotifyWatchersOnResourceDoesNotExistInWorkSerializer(
|
1255
|
+
xds_client(), resource_state.watchers, DEBUG_LOCATION);
|
1256
|
+
}
|
1257
|
+
}
|
1258
|
+
}
|
1460
1259
|
}
|
1461
|
-
|
1260
|
+
// If we had valid resources, update the version.
|
1261
|
+
if (result.have_valid_resources) {
|
1462
1262
|
seen_response_ = true;
|
1463
|
-
chand()->resource_type_version_map_[result.
|
1263
|
+
chand()->resource_type_version_map_[result.type] =
|
1264
|
+
std::move(result.version);
|
1464
1265
|
// Start load reporting if needed.
|
1465
1266
|
auto& lrs_call = chand()->lrs_calld_;
|
1466
1267
|
if (lrs_call != nullptr) {
|
@@ -1469,7 +1270,7 @@ bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
|
1469
1270
|
}
|
1470
1271
|
}
|
1471
1272
|
// Send ACK or NACK.
|
1472
|
-
SendMessageLocked(result.
|
1273
|
+
SendMessageLocked(result.type);
|
1473
1274
|
}
|
1474
1275
|
if (xds_client()->shutting_down_) return true;
|
1475
1276
|
// Keep listening for updates.
|
@@ -1494,6 +1295,7 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
|
1494
1295
|
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1495
1296
|
ads_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1496
1297
|
}
|
1298
|
+
ads_calld->xds_client()->work_serializer_.DrainQueue();
|
1497
1299
|
ads_calld->Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
|
1498
1300
|
}
|
1499
1301
|
|
@@ -1502,9 +1304,11 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1502
1304
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1503
1305
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1504
1306
|
gpr_log(GPR_INFO,
|
1505
|
-
"[xds_client %p] ADS call status received
|
1506
|
-
"
|
1507
|
-
|
1307
|
+
"[xds_client %p] xds server %s: ADS call status received "
|
1308
|
+
"(chand=%p, ads_calld=%p, call=%p): "
|
1309
|
+
"status=%d, details='%s', error='%s'",
|
1310
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1311
|
+
call_, status_code_, status_details,
|
1508
1312
|
grpc_error_std_string(error).c_str());
|
1509
1313
|
gpr_free(status_details);
|
1510
1314
|
}
|
@@ -1514,7 +1318,12 @@ void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
|
1514
1318
|
parent_->OnCallFinishedLocked();
|
1515
1319
|
// Send error to all watchers.
|
1516
1320
|
xds_client()->NotifyOnErrorLocked(
|
1517
|
-
|
1321
|
+
GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
1322
|
+
"xDS call failed: xDS server: %s, ADS call status code=%d, "
|
1323
|
+
"details='%s', error='%s'",
|
1324
|
+
chand()->server_.server_uri, status_code_,
|
1325
|
+
StringViewFromSlice(status_details_),
|
1326
|
+
grpc_error_std_string(error))));
|
1518
1327
|
}
|
1519
1328
|
GRPC_ERROR_UNREF(error);
|
1520
1329
|
}
|
@@ -1526,23 +1335,24 @@ bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
|
|
1526
1335
|
return this == chand()->ads_calld_->calld();
|
1527
1336
|
}
|
1528
1337
|
|
1529
|
-
std::
|
1338
|
+
std::vector<std::string>
|
1530
1339
|
XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
1531
|
-
const
|
1532
|
-
std::
|
1533
|
-
|
1534
|
-
resource_map;
|
1535
|
-
auto it = state_map_.find(type_url);
|
1340
|
+
const XdsResourceType* type) {
|
1341
|
+
std::vector<std::string> resource_names;
|
1342
|
+
auto it = state_map_.find(type);
|
1536
1343
|
if (it != state_map_.end()) {
|
1537
1344
|
for (auto& a : it->second.subscribed_resources) {
|
1345
|
+
const std::string& authority = a.first;
|
1538
1346
|
for (auto& p : a.second) {
|
1539
|
-
|
1540
|
-
|
1541
|
-
|
1347
|
+
const XdsResourceKey& resource_key = p.first;
|
1348
|
+
resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
|
1349
|
+
authority, type->type_url(), resource_key));
|
1350
|
+
OrphanablePtr<ResourceTimer>& resource_timer = p.second;
|
1351
|
+
resource_timer->MaybeStartTimer(Ref(DEBUG_LOCATION, "ResourceTimer"));
|
1542
1352
|
}
|
1543
1353
|
}
|
1544
1354
|
}
|
1545
|
-
return
|
1355
|
+
return resource_names;
|
1546
1356
|
}
|
1547
1357
|
|
1548
1358
|
//
|
@@ -1557,7 +1367,7 @@ void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
|
1557
1367
|
|
1558
1368
|
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1559
1369
|
ScheduleNextReportLocked() {
|
1560
|
-
const
|
1370
|
+
const Timestamp next_report_time = ExecCtx::Get()->Now() + report_interval_;
|
1561
1371
|
grpc_timer_init(&next_report_timer_, next_report_time,
|
1562
1372
|
&on_next_report_timer_);
|
1563
1373
|
next_report_timer_callback_pending_ = true;
|
@@ -1603,15 +1413,19 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
|
1603
1413
|
bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
1604
1414
|
// Construct snapshot from all reported stats.
|
1605
1415
|
XdsApi::ClusterLoadReportMap snapshot =
|
1606
|
-
xds_client()->BuildLoadReportSnapshotLocked(parent_->
|
1416
|
+
xds_client()->BuildLoadReportSnapshotLocked(parent_->chand()->server_,
|
1417
|
+
parent_->send_all_clusters_,
|
1607
1418
|
parent_->cluster_names_);
|
1608
1419
|
// Skip client load report if the counters were all zero in the last
|
1609
1420
|
// report and they are still zero in this one.
|
1610
1421
|
const bool old_val = last_report_counters_were_zero_;
|
1611
1422
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1612
1423
|
if (old_val && last_report_counters_were_zero_) {
|
1613
|
-
|
1614
|
-
|
1424
|
+
auto it = xds_client()->xds_load_report_server_map_.find(
|
1425
|
+
parent_->chand()->server_);
|
1426
|
+
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1427
|
+
it->second.load_report_map.empty()) {
|
1428
|
+
it->second.channel_state->StopLrsCallLocked();
|
1615
1429
|
return true;
|
1616
1430
|
}
|
1617
1431
|
ScheduleNextReportLocked();
|
@@ -1632,8 +1446,10 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1632
1446
|
parent_->call_, &op, 1, &on_report_done_);
|
1633
1447
|
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
1634
1448
|
gpr_log(GPR_ERROR,
|
1635
|
-
"[xds_client %p]
|
1636
|
-
|
1449
|
+
"[xds_client %p] xds server %s: error starting LRS send_message "
|
1450
|
+
"batch on calld=%p: call_error=%d",
|
1451
|
+
xds_client(), parent_->chand()->server_.server_uri.c_str(), this,
|
1452
|
+
call_error);
|
1637
1453
|
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1638
1454
|
}
|
1639
1455
|
return false;
|
@@ -1655,8 +1471,11 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
|
1655
1471
|
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1656
1472
|
parent_->send_message_payload_ = nullptr;
|
1657
1473
|
// If there are no more registered stats to report, cancel the call.
|
1658
|
-
|
1659
|
-
|
1474
|
+
auto it =
|
1475
|
+
xds_client()->xds_load_report_server_map_.find(parent_->chand()->server_);
|
1476
|
+
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1477
|
+
it->second.load_report_map.empty()) {
|
1478
|
+
it->second.channel_state->StopLrsCallLocked();
|
1660
1479
|
GRPC_ERROR_UNREF(error);
|
1661
1480
|
return true;
|
1662
1481
|
}
|
@@ -1688,14 +1507,15 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1688
1507
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1689
1508
|
// the polling entities from client_channel.
|
1690
1509
|
GPR_ASSERT(xds_client() != nullptr);
|
1691
|
-
const
|
1510
|
+
const char* method =
|
1692
1511
|
chand()->server_.ShouldUseV3()
|
1693
|
-
?
|
1694
|
-
:
|
1512
|
+
? "/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats"
|
1513
|
+
: "/envoy.service.load_stats.v2.LoadReportingService/StreamLoadStats";
|
1695
1514
|
call_ = grpc_channel_create_pollset_set_call(
|
1696
1515
|
chand()->channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
|
1697
|
-
xds_client()->interested_parties_,
|
1698
|
-
|
1516
|
+
xds_client()->interested_parties_,
|
1517
|
+
Slice::FromStaticString(method).c_slice(), nullptr,
|
1518
|
+
Timestamp::InfFuture(), nullptr);
|
1699
1519
|
GPR_ASSERT(call_ != nullptr);
|
1700
1520
|
// Init the request payload.
|
1701
1521
|
grpc_slice request_payload_slice =
|
@@ -1708,10 +1528,10 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1708
1528
|
grpc_metadata_array_init(&trailing_metadata_recv_);
|
1709
1529
|
// Start the call.
|
1710
1530
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1711
|
-
gpr_log(
|
1712
|
-
|
1713
|
-
|
1714
|
-
|
1531
|
+
gpr_log(
|
1532
|
+
GPR_INFO,
|
1533
|
+
"[xds_client %p] xds server %s: starting LRS call (calld=%p, call=%p)",
|
1534
|
+
xds_client(), chand()->server_.server_uri.c_str(), this, call_);
|
1715
1535
|
}
|
1716
1536
|
// Create the ops.
|
1717
1537
|
grpc_call_error call_error;
|
@@ -1865,14 +1685,15 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1865
1685
|
// Parse the response.
|
1866
1686
|
bool send_all_clusters = false;
|
1867
1687
|
std::set<std::string> new_cluster_names;
|
1868
|
-
|
1688
|
+
Duration new_load_reporting_interval;
|
1869
1689
|
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1870
1690
|
response_slice, &send_all_clusters, &new_cluster_names,
|
1871
1691
|
&new_load_reporting_interval);
|
1872
1692
|
if (parse_error != GRPC_ERROR_NONE) {
|
1873
1693
|
gpr_log(GPR_ERROR,
|
1874
|
-
"[xds_client %p] LRS response parsing failed
|
1875
|
-
xds_client(),
|
1694
|
+
"[xds_client %p] xds server %s: LRS response parsing failed: %s",
|
1695
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1696
|
+
grpc_error_std_string(parse_error).c_str());
|
1876
1697
|
GRPC_ERROR_UNREF(parse_error);
|
1877
1698
|
return;
|
1878
1699
|
}
|
@@ -1880,11 +1701,12 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1880
1701
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1881
1702
|
gpr_log(
|
1882
1703
|
GPR_INFO,
|
1883
|
-
"[xds_client %p] LRS response received, %" PRIuPTR
|
1704
|
+
"[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
|
1884
1705
|
" cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
|
1885
1706
|
"ms",
|
1886
|
-
xds_client(),
|
1887
|
-
|
1707
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1708
|
+
new_cluster_names.size(), send_all_clusters,
|
1709
|
+
new_load_reporting_interval.millis());
|
1888
1710
|
size_t i = 0;
|
1889
1711
|
for (const auto& name : new_cluster_names) {
|
1890
1712
|
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
@@ -1892,14 +1714,16 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1892
1714
|
}
|
1893
1715
|
}
|
1894
1716
|
if (new_load_reporting_interval <
|
1895
|
-
|
1896
|
-
|
1897
|
-
|
1717
|
+
Duration::Milliseconds(
|
1718
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
|
1719
|
+
new_load_reporting_interval = Duration::Milliseconds(
|
1720
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1898
1721
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1899
1722
|
gpr_log(GPR_INFO,
|
1900
|
-
"[xds_client %p]
|
1901
|
-
"value %dms",
|
1902
|
-
xds_client(),
|
1723
|
+
"[xds_client %p] xds server %s: increased load_report_interval "
|
1724
|
+
"to minimum value %dms",
|
1725
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1726
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1903
1727
|
}
|
1904
1728
|
}
|
1905
1729
|
// Ignore identical update.
|
@@ -1907,10 +1731,11 @@ bool XdsClient::ChannelState::LrsCallState::OnResponseReceivedLocked() {
|
|
1907
1731
|
cluster_names_ == new_cluster_names &&
|
1908
1732
|
load_reporting_interval_ == new_load_reporting_interval) {
|
1909
1733
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1910
|
-
gpr_log(
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
1734
|
+
gpr_log(
|
1735
|
+
GPR_INFO,
|
1736
|
+
"[xds_client %p] xds server %s: incoming LRS response identical "
|
1737
|
+
"to current, ignoring.",
|
1738
|
+
xds_client(), chand()->server_.server_uri.c_str());
|
1914
1739
|
}
|
1915
1740
|
return;
|
1916
1741
|
}
|
@@ -1956,15 +1781,16 @@ void XdsClient::ChannelState::LrsCallState::OnStatusReceivedLocked(
|
|
1956
1781
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1957
1782
|
char* status_details = grpc_slice_to_c_string(status_details_);
|
1958
1783
|
gpr_log(GPR_INFO,
|
1959
|
-
"[xds_client %p] LRS call status received
|
1960
|
-
"
|
1961
|
-
|
1784
|
+
"[xds_client %p] xds server %s: LRS call status received "
|
1785
|
+
"(chand=%p, calld=%p, call=%p): "
|
1786
|
+
"status=%d, details='%s', error='%s'",
|
1787
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1788
|
+
call_, status_code_, status_details,
|
1962
1789
|
grpc_error_std_string(error).c_str());
|
1963
1790
|
gpr_free(status_details);
|
1964
1791
|
}
|
1965
1792
|
// Ignore status from a stale call.
|
1966
1793
|
if (IsCurrentCallOnChannel()) {
|
1967
|
-
GPR_ASSERT(!xds_client()->shutting_down_);
|
1968
1794
|
// Try to restart the call.
|
1969
1795
|
parent_->OnCallFinishedLocked();
|
1970
1796
|
}
|
@@ -1984,10 +1810,10 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1984
1810
|
|
1985
1811
|
namespace {
|
1986
1812
|
|
1987
|
-
|
1988
|
-
return grpc_channel_args_find_integer(
|
1813
|
+
Duration GetRequestTimeout(const grpc_channel_args* args) {
|
1814
|
+
return Duration::Milliseconds(grpc_channel_args_find_integer(
|
1989
1815
|
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
1990
|
-
{15000, 0, INT_MAX});
|
1816
|
+
{15000, 0, INT_MAX}));
|
1991
1817
|
}
|
1992
1818
|
|
1993
1819
|
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
@@ -2014,7 +1840,7 @@ XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
|
2014
1840
|
certificate_provider_store_(MakeOrphanable<CertificateProviderStore>(
|
2015
1841
|
bootstrap_->certificate_providers())),
|
2016
1842
|
api_(this, &grpc_xds_client_trace, bootstrap_->node(),
|
2017
|
-
&bootstrap_->certificate_providers()) {
|
1843
|
+
&bootstrap_->certificate_providers(), &symtab_) {
|
2018
1844
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2019
1845
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
2020
1846
|
}
|
@@ -2045,24 +1871,9 @@ void XdsClient::Orphan() {
|
|
2045
1871
|
{
|
2046
1872
|
MutexLock lock(&mu_);
|
2047
1873
|
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();
|
1874
|
+
// Clear cache and any remaining watchers that may not have been cancelled.
|
1875
|
+
authority_state_map_.clear();
|
1876
|
+
invalid_watchers_.clear();
|
2066
1877
|
}
|
2067
1878
|
}
|
2068
1879
|
|
@@ -2079,262 +1890,205 @@ RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
|
2079
1890
|
return channel_state;
|
2080
1891
|
}
|
2081
1892
|
|
2082
|
-
void XdsClient::
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
1893
|
+
void XdsClient::WatchResource(const XdsResourceType* type,
|
1894
|
+
absl::string_view name,
|
1895
|
+
RefCountedPtr<ResourceWatcherInterface> watcher) {
|
1896
|
+
ResourceWatcherInterface* w = watcher.get();
|
1897
|
+
// Lambda for handling failure cases.
|
1898
|
+
auto fail = [&](grpc_error_handle error) mutable {
|
1899
|
+
{
|
1900
|
+
MutexLock lock(&mu_);
|
1901
|
+
MaybeRegisterResourceTypeLocked(type);
|
1902
|
+
invalid_watchers_[w] = watcher;
|
1903
|
+
}
|
1904
|
+
work_serializer_.Run(
|
1905
|
+
// TODO(yashykt): When we move to C++14, capture watcher using
|
1906
|
+
// std::move()
|
1907
|
+
[watcher, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1908
|
+
watcher->OnError(error);
|
1909
|
+
},
|
1910
|
+
DEBUG_LOCATION);
|
1911
|
+
};
|
1912
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
1913
|
+
if (!resource_name.ok()) {
|
1914
|
+
fail(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
1915
|
+
"Unable to parse resource name for listener %s", name)));
|
2094
1916
|
return;
|
2095
1917
|
}
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
1918
|
+
// Find server to use.
|
1919
|
+
const XdsBootstrap::XdsServer* xds_server = nullptr;
|
1920
|
+
absl::string_view authority_name = resource_name->authority;
|
1921
|
+
if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
|
1922
|
+
auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
|
1923
|
+
if (authority == nullptr) {
|
1924
|
+
fail(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
1925
|
+
absl::StrCat("authority \"", authority_name,
|
1926
|
+
"\" not present in bootstrap config")));
|
1927
|
+
return;
|
2105
1928
|
}
|
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());
|
1929
|
+
if (!authority->xds_servers.empty()) {
|
1930
|
+
xds_server = &authority->xds_servers[0];
|
2167
1931
|
}
|
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
|
-
}
|
2175
|
-
authority_state.channel_state->SubscribeLocked(XdsApi::kRdsTypeUrl,
|
2176
|
-
*resource);
|
2177
|
-
}
|
2178
|
-
|
2179
|
-
void XdsClient::CancelRouteConfigDataWatch(absl::string_view route_config_name,
|
2180
|
-
RouteConfigWatcherInterface* watcher,
|
2181
|
-
bool delay_unsubscription) {
|
2182
|
-
MutexLock lock(&mu_);
|
2183
|
-
if (shutting_down_) return;
|
2184
|
-
auto resource = XdsApi::ParseResourceName(route_config_name, XdsApi::IsRds);
|
2185
|
-
if (!resource.ok()) return;
|
2186
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2187
|
-
RouteConfigState& route_config_state =
|
2188
|
-
authority_state.route_config_map[resource->id];
|
2189
|
-
auto it = route_config_state.watchers.find(watcher);
|
2190
|
-
if (it == route_config_state.watchers.end()) {
|
2191
|
-
invalid_route_config_watchers_.erase(watcher);
|
2192
|
-
return;
|
2193
|
-
}
|
2194
|
-
route_config_state.watchers.erase(it);
|
2195
|
-
if (!route_config_state.watchers.empty()) return;
|
2196
|
-
authority_state.route_config_map.erase(resource->id);
|
2197
|
-
xds_server_channel_map_[bootstrap_->server()]->UnsubscribeLocked(
|
2198
|
-
XdsApi::kRdsTypeUrl, *resource, delay_unsubscription);
|
2199
|
-
if (!authority_state.HasSubscribedResources()) {
|
2200
|
-
authority_state.channel_state.reset();
|
2201
1932
|
}
|
2202
|
-
|
2203
|
-
|
2204
|
-
|
2205
|
-
|
2206
|
-
|
2207
|
-
|
1933
|
+
if (xds_server == nullptr) xds_server = &bootstrap_->server();
|
1934
|
+
{
|
1935
|
+
MutexLock lock(&mu_);
|
1936
|
+
MaybeRegisterResourceTypeLocked(type);
|
1937
|
+
AuthorityState& authority_state =
|
1938
|
+
authority_state_map_[resource_name->authority];
|
1939
|
+
ResourceState& resource_state =
|
1940
|
+
authority_state.resource_map[type][resource_name->key];
|
1941
|
+
resource_state.watchers[w] = watcher;
|
1942
|
+
// If we already have a cached value for the resource, notify the new
|
1943
|
+
// watcher immediately.
|
1944
|
+
if (resource_state.resource != nullptr) {
|
1945
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1946
|
+
gpr_log(GPR_INFO,
|
1947
|
+
"[xds_client %p] returning cached listener data for %s", this,
|
1948
|
+
std::string(name).c_str());
|
1949
|
+
}
|
1950
|
+
auto* value = type->CopyResource(resource_state.resource.get()).release();
|
1951
|
+
work_serializer_.Schedule(
|
1952
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1953
|
+
watcher->OnGenericResourceChanged(value);
|
1954
|
+
delete value;
|
1955
|
+
},
|
1956
|
+
DEBUG_LOCATION);
|
1957
|
+
}
|
1958
|
+
// If the authority doesn't yet have a channel, set it, creating it if
|
1959
|
+
// needed.
|
1960
|
+
if (authority_state.channel_state == nullptr) {
|
1961
|
+
authority_state.channel_state =
|
1962
|
+
GetOrCreateChannelStateLocked(*xds_server);
|
1963
|
+
}
|
1964
|
+
authority_state.channel_state->SubscribeLocked(type, *resource_name);
|
1965
|
+
}
|
1966
|
+
work_serializer_.DrainQueue();
|
1967
|
+
}
|
1968
|
+
|
1969
|
+
void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
1970
|
+
absl::string_view name,
|
1971
|
+
ResourceWatcherInterface* watcher,
|
1972
|
+
bool delay_unsubscription) {
|
1973
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
2208
1974
|
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));
|
1975
|
+
if (!resource_name.ok()) {
|
1976
|
+
invalid_watchers_.erase(watcher);
|
2216
1977
|
return;
|
2217
1978
|
}
|
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
1979
|
if (shutting_down_) return;
|
2244
|
-
|
2245
|
-
|
2246
|
-
|
2247
|
-
|
2248
|
-
|
2249
|
-
|
2250
|
-
|
2251
|
-
|
2252
|
-
|
2253
|
-
|
2254
|
-
if (
|
2255
|
-
|
2256
|
-
|
2257
|
-
|
2258
|
-
if
|
2259
|
-
|
2260
|
-
|
2261
|
-
|
2262
|
-
|
2263
|
-
|
2264
|
-
|
2265
|
-
|
2266
|
-
|
2267
|
-
|
2268
|
-
EndpointWatcherInterface* w = watcher.get();
|
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());
|
1980
|
+
// Find authority.
|
1981
|
+
auto authority_it = authority_state_map_.find(resource_name->authority);
|
1982
|
+
if (authority_it == authority_state_map_.end()) return;
|
1983
|
+
AuthorityState& authority_state = authority_it->second;
|
1984
|
+
// Find type map.
|
1985
|
+
auto type_it = authority_state.resource_map.find(type);
|
1986
|
+
if (type_it == authority_state.resource_map.end()) return;
|
1987
|
+
auto& type_map = type_it->second;
|
1988
|
+
// Find resource key.
|
1989
|
+
auto resource_it = type_map.find(resource_name->key);
|
1990
|
+
if (resource_it == type_map.end()) return;
|
1991
|
+
ResourceState& resource_state = resource_it->second;
|
1992
|
+
// Remove watcher.
|
1993
|
+
resource_state.watchers.erase(watcher);
|
1994
|
+
// Clean up empty map entries, if any.
|
1995
|
+
if (resource_state.watchers.empty()) {
|
1996
|
+
authority_state.channel_state->UnsubscribeLocked(type, *resource_name,
|
1997
|
+
delay_unsubscription);
|
1998
|
+
type_map.erase(resource_it);
|
1999
|
+
if (type_map.empty()) {
|
2000
|
+
authority_state.resource_map.erase(type_it);
|
2001
|
+
if (authority_state.resource_map.empty()) {
|
2002
|
+
authority_state.channel_state.reset();
|
2003
|
+
}
|
2287
2004
|
}
|
2288
|
-
w->OnEndpointChanged(endpoint_state.update.value());
|
2289
|
-
}
|
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
2005
|
}
|
2295
|
-
authority_state.channel_state->SubscribeLocked(XdsApi::kEdsTypeUrl,
|
2296
|
-
*resource);
|
2297
2006
|
}
|
2298
2007
|
|
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);
|
2008
|
+
void XdsClient::MaybeRegisterResourceTypeLocked(
|
2009
|
+
const XdsResourceType* resource_type) {
|
2010
|
+
auto it = resource_types_.find(resource_type->type_url());
|
2011
|
+
if (it != resource_types_.end()) {
|
2012
|
+
GPR_ASSERT(it->second == resource_type);
|
2311
2013
|
return;
|
2312
2014
|
}
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
|
2015
|
+
resource_types_.emplace(resource_type->type_url(), resource_type);
|
2016
|
+
v2_resource_types_.emplace(resource_type->v2_type_url(), resource_type);
|
2017
|
+
resource_type->InitUpbSymtab(symtab_.ptr());
|
2018
|
+
}
|
2019
|
+
|
2020
|
+
const XdsResourceType* XdsClient::GetResourceTypeLocked(
|
2021
|
+
absl::string_view resource_type) {
|
2022
|
+
auto it = resource_types_.find(resource_type);
|
2023
|
+
if (it != resource_types_.end()) return it->second;
|
2024
|
+
auto it2 = v2_resource_types_.find(resource_type);
|
2025
|
+
if (it2 != v2_resource_types_.end()) return it2->second;
|
2026
|
+
return nullptr;
|
2027
|
+
}
|
2028
|
+
|
2029
|
+
absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
2030
|
+
absl::string_view name, const XdsResourceType* type) {
|
2031
|
+
// Old-style names use the empty string for authority.
|
2032
|
+
// authority is prefixed with "old:" to indicate that it's an old-style name.
|
2033
|
+
if (!absl::StartsWith(name, "xdstp:")) {
|
2034
|
+
return XdsResourceName{"old:", {std::string(name), {}}};
|
2035
|
+
}
|
2036
|
+
// New style name. Parse URI.
|
2037
|
+
auto uri = URI::Parse(name);
|
2038
|
+
if (!uri.ok()) return uri.status();
|
2039
|
+
// Split the resource type off of the path to get the id.
|
2040
|
+
std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
|
2041
|
+
absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
|
2042
|
+
if (!type->IsType(path_parts.first, nullptr)) {
|
2043
|
+
return absl::InvalidArgumentError(
|
2044
|
+
"xdstp URI path must indicate valid xDS resource type");
|
2045
|
+
}
|
2046
|
+
// Canonicalize order of query params.
|
2047
|
+
std::vector<URI::QueryParam> query_params;
|
2048
|
+
for (const auto& p : uri->query_parameter_map()) {
|
2049
|
+
query_params.emplace_back(
|
2050
|
+
URI::QueryParam{std::string(p.first), std::string(p.second)});
|
2051
|
+
}
|
2052
|
+
return XdsResourceName{
|
2053
|
+
absl::StrCat("xdstp:", uri->authority()),
|
2054
|
+
{std::string(path_parts.second), std::move(query_params)}};
|
2055
|
+
}
|
2056
|
+
|
2057
|
+
std::string XdsClient::ConstructFullXdsResourceName(
|
2058
|
+
absl::string_view authority, absl::string_view resource_type,
|
2059
|
+
const XdsResourceKey& key) {
|
2060
|
+
if (absl::ConsumePrefix(&authority, "xdstp:")) {
|
2061
|
+
auto uri = URI::Create("xdstp", std::string(authority),
|
2062
|
+
absl::StrCat("/", resource_type, "/", key.id),
|
2063
|
+
key.query_params, /*fragment=*/"");
|
2064
|
+
GPR_ASSERT(uri.ok());
|
2065
|
+
return uri->ToString();
|
2066
|
+
}
|
2067
|
+
// Old-style name.
|
2068
|
+
return key.id;
|
2321
2069
|
}
|
2322
2070
|
|
2323
2071
|
RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
2324
|
-
|
2072
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2325
2073
|
absl::string_view eds_service_name) {
|
2326
|
-
|
2327
|
-
// server name specified in lrs_server.
|
2074
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2328
2075
|
auto key =
|
2329
2076
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2330
2077
|
MutexLock lock(&mu_);
|
2331
|
-
// We jump through some hoops here to make sure that the
|
2332
|
-
//
|
2078
|
+
// We jump through some hoops here to make sure that the const
|
2079
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2080
|
+
// stored in the XdsClusterDropStats object point to the
|
2081
|
+
// XdsBootstrap::XdsServer and strings
|
2333
2082
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2334
|
-
auto
|
2335
|
-
|
2336
|
-
|
2337
|
-
|
2083
|
+
auto server_it =
|
2084
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2085
|
+
if (server_it->second.channel_state == nullptr) {
|
2086
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2087
|
+
}
|
2088
|
+
auto load_report_it = server_it->second.load_report_map
|
2089
|
+
.emplace(std::move(key), LoadReportState())
|
2090
|
+
.first;
|
2091
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2338
2092
|
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
2339
2093
|
if (load_report_state.drop_stats != nullptr) {
|
2340
2094
|
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
@@ -2345,31 +2099,26 @@ RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
|
2345
2099
|
load_report_state.drop_stats->GetSnapshotAndReset();
|
2346
2100
|
}
|
2347
2101
|
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
2348
|
-
Ref(DEBUG_LOCATION, "DropStats"),
|
2349
|
-
|
2350
|
-
|
2102
|
+
Ref(DEBUG_LOCATION, "DropStats"), server_it->first,
|
2103
|
+
load_report_it->first.first /*cluster_name*/,
|
2104
|
+
load_report_it->first.second /*eds_service_name*/);
|
2351
2105
|
load_report_state.drop_stats = cluster_drop_stats.get();
|
2352
2106
|
}
|
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
|
-
}
|
2107
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2359
2108
|
return cluster_drop_stats;
|
2360
2109
|
}
|
2361
2110
|
|
2362
2111
|
void XdsClient::RemoveClusterDropStats(
|
2363
|
-
|
2112
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2364
2113
|
absl::string_view eds_service_name,
|
2365
2114
|
XdsClusterDropStats* cluster_drop_stats) {
|
2366
2115
|
MutexLock lock(&mu_);
|
2367
|
-
|
2368
|
-
|
2369
|
-
auto
|
2116
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2117
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2118
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2370
2119
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2371
|
-
if (
|
2372
|
-
LoadReportState& load_report_state =
|
2120
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2121
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2373
2122
|
if (load_report_state.drop_stats == cluster_drop_stats) {
|
2374
2123
|
// Record final snapshot in deleted_drop_stats, which will be
|
2375
2124
|
// added to the next load report.
|
@@ -2380,21 +2129,27 @@ void XdsClient::RemoveClusterDropStats(
|
|
2380
2129
|
}
|
2381
2130
|
|
2382
2131
|
RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
2383
|
-
|
2132
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2384
2133
|
absl::string_view eds_service_name,
|
2385
2134
|
RefCountedPtr<XdsLocalityName> locality) {
|
2386
|
-
|
2387
|
-
// server name specified in lrs_server.
|
2135
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2388
2136
|
auto key =
|
2389
2137
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2390
2138
|
MutexLock lock(&mu_);
|
2391
|
-
// We jump through some hoops here to make sure that the
|
2392
|
-
//
|
2139
|
+
// We jump through some hoops here to make sure that the const
|
2140
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
2141
|
+
// stored in the XdsClusterDropStats object point to the
|
2142
|
+
// XdsBootstrap::XdsServer and strings
|
2393
2143
|
// in the load_report_map_ key, so that they have the same lifetime.
|
2394
|
-
auto
|
2395
|
-
|
2396
|
-
|
2397
|
-
|
2144
|
+
auto server_it =
|
2145
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2146
|
+
if (server_it->second.channel_state == nullptr) {
|
2147
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2148
|
+
}
|
2149
|
+
auto load_report_it = server_it->second.load_report_map
|
2150
|
+
.emplace(std::move(key), LoadReportState())
|
2151
|
+
.first;
|
2152
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2398
2153
|
LoadReportState::LocalityState& locality_state =
|
2399
2154
|
load_report_state.locality_stats[locality];
|
2400
2155
|
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
@@ -2407,32 +2162,27 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
|
2407
2162
|
locality_state.locality_stats->GetSnapshotAndReset();
|
2408
2163
|
}
|
2409
2164
|
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
2410
|
-
Ref(DEBUG_LOCATION, "LocalityStats"),
|
2411
|
-
|
2412
|
-
std::move(locality));
|
2165
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
|
2166
|
+
load_report_it->first.first /*cluster_name*/,
|
2167
|
+
load_report_it->first.second /*eds_service_name*/, std::move(locality));
|
2413
2168
|
locality_state.locality_stats = cluster_locality_stats.get();
|
2414
2169
|
}
|
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
|
-
}
|
2170
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2421
2171
|
return cluster_locality_stats;
|
2422
2172
|
}
|
2423
2173
|
|
2424
2174
|
void XdsClient::RemoveClusterLocalityStats(
|
2425
|
-
|
2175
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2426
2176
|
absl::string_view eds_service_name,
|
2427
2177
|
const RefCountedPtr<XdsLocalityName>& locality,
|
2428
2178
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
2429
2179
|
MutexLock lock(&mu_);
|
2430
|
-
|
2431
|
-
|
2432
|
-
auto
|
2180
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2181
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
2182
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2433
2183
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2434
|
-
if (
|
2435
|
-
LoadReportState& load_report_state =
|
2184
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
2185
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2436
2186
|
auto locality_it = load_report_state.locality_stats.find(locality);
|
2437
2187
|
if (locality_it == load_report_state.locality_stats.end()) return;
|
2438
2188
|
LoadReportState::LocalityState& locality_state = locality_it->second;
|
@@ -2453,43 +2203,40 @@ void XdsClient::ResetBackoff() {
|
|
2453
2203
|
}
|
2454
2204
|
|
2455
2205
|
void XdsClient::NotifyOnErrorLocked(grpc_error_handle error) {
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
for (const auto&
|
2460
|
-
|
2461
|
-
|
2462
|
-
|
2463
|
-
for (const auto& p : a.second.route_config_map) {
|
2464
|
-
const RouteConfigState& route_config_state = p.second;
|
2465
|
-
for (const auto& p : route_config_state.watchers) {
|
2466
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
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));
|
2206
|
+
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
2207
|
+
for (const auto& a : authority_state_map_) { // authority
|
2208
|
+
for (const auto& t : a.second.resource_map) { // type
|
2209
|
+
for (const auto& r : t.second) { // resource id
|
2210
|
+
for (const auto& w : r.second.watchers) { // watchers
|
2211
|
+
watchers.insert(w.second);
|
2212
|
+
}
|
2479
2213
|
}
|
2480
2214
|
}
|
2481
2215
|
}
|
2482
|
-
|
2216
|
+
work_serializer_.Schedule(
|
2217
|
+
// TODO(yashykt): When we move to C++14, capture watchers using
|
2218
|
+
// std::move()
|
2219
|
+
[watchers, error]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2220
|
+
for (const auto& watcher : watchers) {
|
2221
|
+
watcher->OnError(GRPC_ERROR_REF(error));
|
2222
|
+
}
|
2223
|
+
GRPC_ERROR_UNREF(error);
|
2224
|
+
},
|
2225
|
+
DEBUG_LOCATION);
|
2483
2226
|
}
|
2484
2227
|
|
2485
2228
|
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
2486
|
-
|
2229
|
+
const XdsBootstrap::XdsServer& xds_server, bool send_all_clusters,
|
2230
|
+
const std::set<std::string>& clusters) {
|
2487
2231
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2488
2232
|
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2489
2233
|
}
|
2490
2234
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
2491
|
-
|
2492
|
-
|
2235
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
2236
|
+
if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
|
2237
|
+
auto& load_report_map = server_it->second.load_report_map;
|
2238
|
+
for (auto load_report_it = load_report_map.begin();
|
2239
|
+
load_report_it != load_report_map.end();) {
|
2493
2240
|
// Cluster key is cluster and EDS service name.
|
2494
2241
|
const auto& cluster_key = load_report_it->first;
|
2495
2242
|
LoadReportState& load_report = load_report_it->second;
|
@@ -2544,7 +2291,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2544
2291
|
}
|
2545
2292
|
}
|
2546
2293
|
// Compute load report interval.
|
2547
|
-
const
|
2294
|
+
const Timestamp now = ExecCtx::Get()->Now();
|
2548
2295
|
snapshot.load_report_interval = now - load_report.last_report_time;
|
2549
2296
|
load_report.last_report_time = now;
|
2550
2297
|
// Record snapshot.
|
@@ -2555,7 +2302,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2555
2302
|
// deleted stats objects, remove the entry.
|
2556
2303
|
if (load_report.locality_stats.empty() &&
|
2557
2304
|
load_report.drop_stats == nullptr) {
|
2558
|
-
load_report_it =
|
2305
|
+
load_report_it = load_report_map.erase(load_report_it);
|
2559
2306
|
} else {
|
2560
2307
|
++load_report_it;
|
2561
2308
|
}
|
@@ -2566,35 +2313,18 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2566
2313
|
std::string XdsClient::DumpClientConfigBinary() {
|
2567
2314
|
MutexLock lock(&mu_);
|
2568
2315
|
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_) {
|
2316
|
+
for (const auto& a : authority_state_map_) { // authority
|
2574
2317
|
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;
|
2318
|
+
for (const auto& t : a.second.resource_map) { // type
|
2319
|
+
const XdsResourceType* type = t.first;
|
2320
|
+
auto& resource_metadata_map =
|
2321
|
+
resource_type_metadata_map[type->type_url()];
|
2322
|
+
for (const auto& r : t.second) { // resource id
|
2323
|
+
const XdsResourceKey& resource_key = r.first;
|
2324
|
+
const ResourceState& resource_state = r.second;
|
2325
|
+
resource_metadata_map[ConstructFullXdsResourceName(
|
2326
|
+
authority, type->type_url(), resource_key)] = &resource_state.meta;
|
2327
|
+
}
|
2598
2328
|
}
|
2599
2329
|
}
|
2600
2330
|
// Assemble config dump messages
|
@@ -2625,7 +2355,7 @@ namespace {
|
|
2625
2355
|
std::string GetBootstrapContents(const char* fallback_config,
|
2626
2356
|
grpc_error_handle* error) {
|
2627
2357
|
// First, try GRPC_XDS_BOOTSTRAP env var.
|
2628
|
-
|
2358
|
+
UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
2629
2359
|
if (path != nullptr) {
|
2630
2360
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2631
2361
|
gpr_log(GPR_INFO,
|
@@ -2642,8 +2372,7 @@ std::string GetBootstrapContents(const char* fallback_config,
|
|
2642
2372
|
return contents_str;
|
2643
2373
|
}
|
2644
2374
|
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
2645
|
-
|
2646
|
-
gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2375
|
+
UniquePtr<char> env_config(gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2647
2376
|
if (env_config != nullptr) {
|
2648
2377
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2649
2378
|
gpr_log(GPR_INFO,
|