grpc 1.42.0 → 1.49.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +622 -358
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +114 -43
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
- data/include/grpc/event_engine/memory_allocator.h +27 -26
- data/include/grpc/event_engine/memory_request.h +57 -0
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +118 -0
- data/include/grpc/grpc.h +43 -17
- data/include/grpc/grpc_posix.h +20 -19
- data/include/grpc/grpc_security.h +323 -195
- data/include/grpc/grpc_security_constants.h +1 -14
- data/include/grpc/impl/codegen/compression_types.h +2 -3
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +24 -25
- data/include/grpc/impl/codegen/port_platform.h +107 -44
- data/include/grpc/impl/codegen/slice.h +5 -2
- data/include/grpc/slice.h +0 -11
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +141 -0
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +7 -5
- data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
- data/src/core/ext/filters/client_channel/backup_poller.cc +20 -14
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +48 -26
- data/src/core/ext/filters/client_channel/client_channel.cc +574 -496
- data/src/core/ext/filters/client_channel/client_channel.h +100 -54
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -25
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +21 -11
- data/src/core/ext/filters/client_channel/connector.h +12 -7
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +24 -12
- data/src/core/ext/filters/client_channel/dynamic_filters.h +14 -4
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +140 -583
- data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
- data/src/core/ext/filters/client_channel/http_proxy.cc +100 -126
- data/src/core/ext/filters/client_channel/http_proxy.h +23 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -11
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +10 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +285 -225
- 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.cc +16 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1142 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +78 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +206 -190
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +420 -292
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +419 -272
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +11 -5
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +302 -236
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +269 -241
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +142 -124
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +210 -164
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +231 -205
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +252 -167
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +103 -86
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +534 -548
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -15
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +20 -16
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +12 -6
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +38 -28
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -325
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -56
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +332 -329
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +126 -255
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +39 -49
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +167 -85
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +212 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +112 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +58 -61
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +598 -472
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +52 -54
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +26 -17
- data/src/core/ext/filters/client_channel/retry_filter.cc +322 -208
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +52 -44
- data/src/core/ext/filters/client_channel/retry_service_config.h +31 -19
- data/src/core/ext/filters/client_channel/retry_throttle.cc +10 -31
- data/src/core/ext/filters/client_channel/retry_throttle.h +18 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/client_channel/subchannel.cc +250 -298
- data/src/core/ext/filters/client_channel/subchannel.h +91 -47
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +472 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +35 -25
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +171 -402
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +31 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +30 -24
- data/src/core/ext/filters/fault_injection/service_config_parser.h +29 -10
- data/src/core/ext/filters/http/client/http_client_filter.cc +107 -551
- data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
- data/src/core/ext/filters/http/client_authority_filter.h +28 -6
- data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +101 -320
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +59 -133
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
- data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +78 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +25 -8
- data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +621 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +85 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +161 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +256 -98
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +346 -166
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +646 -888
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
- data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +215 -266
- data/src/core/ext/transport/chttp2/transport/flow_control.h +183 -291
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -212
- data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +9 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -42
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +389 -249
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +106 -170
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +41 -46
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +48 -155
- data/src/core/ext/transport/chttp2/transport/parsing.cc +87 -51
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +135 -157
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
- data/src/core/ext/transport/inproc/inproc_transport.cc +161 -227
- data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
- 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 +159 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -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 +128 -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 +106 -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 +101 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -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 +107 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
- 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 +33 -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 +92 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
- 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 +161 -71
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -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 +92 -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 +107 -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 +86 -45
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -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 +98 -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 +221 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -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 +226 -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 +150 -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 +39 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -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 +91 -42
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
- 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 +107 -60
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -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 +26 -14
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -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 +140 -80
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -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 +108 -56
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -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 +143 -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 +71 -35
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- 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 +45 -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 +131 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
- data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
- data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -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 +43 -21
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -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 +190 -92
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -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 +57 -29
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -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 +108 -47
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -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 +435 -237
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
- data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
- data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -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 +112 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -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 +35 -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 +107 -54
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -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 +60 -29
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -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 +151 -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 +226 -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 +47 -23
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
- 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 +56 -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 +120 -150
- 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 +253 -280
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -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 +26 -28
- 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 +180 -165
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
- 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 +194 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -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 +199 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -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/opentelemetry.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.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 +61 -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 +80 -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 +405 -410
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -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 +125 -135
- 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 +38 -43
- 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_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- 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 +96 -151
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +9 -9
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +12 -0
- data/src/core/ext/xds/certificate_provider_store.h +19 -1
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +13 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +10 -2
- data/src/core/ext/xds/upb_utils.h +45 -0
- data/src/core/ext/xds/xds_api.cc +331 -3601
- data/src/core/ext/xds/xds_api.h +75 -630
- data/src/core/ext/xds/xds_bootstrap.cc +279 -180
- data/src/core/ext/xds/xds_bootstrap.h +64 -28
- data/src/core/ext/xds/xds_certificate_provider.cc +17 -3
- data/src/core/ext/xds/xds_certificate_provider.h +35 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -20
- data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
- data/src/core/ext/xds/xds_client.cc +1185 -2050
- data/src/core/ext/xds/xds_client.h +143 -189
- data/src/core/ext/xds/xds_client_grpc.cc +291 -0
- data/src/core/ext/xds/xds_client_grpc.h +102 -0
- data/src/core/ext/xds/xds_client_stats.cc +18 -19
- data/src/core/ext/xds/xds_client_stats.h +9 -7
- data/src/core/ext/xds/xds_cluster.cc +543 -0
- data/src/core/ext/xds/xds_cluster.h +120 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +147 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +73 -0
- data/src/core/ext/xds/xds_common_types.cc +426 -0
- data/src/core/ext/xds/xds_common_types.h +102 -0
- data/src/core/ext/xds/xds_endpoint.cc +381 -0
- data/src/core/ext/xds/xds_endpoint.h +143 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +21 -26
- data/src/core/ext/xds/xds_http_fault_filter.h +8 -6
- data/src/core/ext/xds/xds_http_filters.cc +18 -5
- data/src/core/ext/xds/xds_http_filters.h +9 -9
- data/src/core/ext/xds/xds_http_rbac_filter.cc +560 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +61 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +1097 -0
- data/src/core/ext/xds/xds_listener.h +229 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
- data/src/core/ext/xds/xds_resource_type.h +109 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +91 -0
- data/src/core/ext/xds/xds_route_config.cc +1153 -0
- data/src/core/ext/xds/xds_route_config.h +241 -0
- data/src/core/ext/xds/xds_routing.cc +263 -0
- data/src/core/ext/xds/xds_routing.h +104 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +1138 -324
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +27 -8
- data/src/core/lib/address_utils/parse_address.h +11 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
- data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
- data/src/core/lib/avl/avl.h +476 -88
- data/src/core/lib/backoff/backoff.cc +10 -39
- data/src/core/lib/backoff/backoff.h +12 -12
- data/src/core/lib/channel/call_finalization.h +90 -0
- data/src/core/lib/channel/call_tracer.h +16 -7
- data/src/core/lib/channel/channel_args.cc +274 -48
- data/src/core/lib/channel/channel_args.h +298 -12
- data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
- data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +54 -10
- data/src/core/lib/channel/channel_stack.h +83 -14
- data/src/core/lib/channel/channel_stack_builder.cc +19 -278
- data/src/core/lib/channel/channel_stack_builder.h +104 -150
- data/src/core/lib/channel/channel_stack_builder_impl.cc +95 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +46 -0
- data/src/core/lib/channel/channel_trace.cc +11 -19
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +36 -49
- data/src/core/lib/channel/channelz.h +24 -7
- data/src/core/lib/channel/channelz_registry.cc +11 -19
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +26 -30
- data/src/core/lib/channel/connected_channel.h +4 -1
- data/src/core/lib/channel/context.h +11 -0
- data/src/core/lib/channel/promise_based_filter.cc +1263 -0
- data/src/core/lib/channel/promise_based_filter.h +571 -0
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression.cc +26 -113
- data/src/core/lib/compression/compression_internal.cc +170 -204
- data/src/core/lib/compression/compression_internal.h +68 -72
- data/src/core/lib/compression/message_compress.cc +14 -12
- data/src/core/lib/compression/message_compress.h +4 -5
- data/src/core/lib/config/core_configuration.cc +14 -3
- data/src/core/lib/config/core_configuration.h +100 -36
- data/src/core/lib/debug/stats.cc +15 -18
- data/src/core/lib/debug/stats.h +13 -4
- data/src/core/lib/debug/stats_data.cc +4 -7
- data/src/core/lib/debug/stats_data.h +18 -25
- data/src/core/lib/debug/trace.h +15 -14
- data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +6 -3
- data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +6 -5
- data/src/core/lib/event_engine/default_event_engine.cc +71 -0
- data/src/core/lib/{iomgr/event_engine/resolved_address_internal.cc → event_engine/default_event_engine.h} +13 -17
- data/src/core/lib/event_engine/default_event_engine_factory.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/resolved_address_internal.h → event_engine/default_event_engine_factory.h} +8 -10
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
- data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/executor/threaded_executor.h} +18 -25
- data/src/core/lib/event_engine/forkable.cc +101 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/memory_allocator.cc +74 -0
- data/src/core/lib/event_engine/poller.h +54 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +121 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
- data/src/core/lib/event_engine/promise.h +78 -0
- data/src/core/lib/event_engine/{event_engine.cc → resolved_address.cc} +3 -12
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/event_engine/socket_notifier.h +55 -0
- data/src/core/lib/event_engine/thread_pool.cc +158 -0
- data/src/core/lib/event_engine/thread_pool.h +81 -0
- data/src/core/lib/event_engine/trace.cc +18 -0
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/event_engine/utils.cc +49 -0
- data/src/core/lib/event_engine/utils.h +40 -0
- data/src/core/lib/event_engine/windows/iocp.cc +149 -0
- data/src/core/lib/event_engine/windows/iocp.h +68 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
- data/src/core/lib/event_engine/windows/win_socket.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/sync_posix.cc +1 -0
- data/src/core/lib/gpr/time.cc +13 -10
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gpr/tls.h +10 -5
- data/src/core/lib/gpr/useful.h +47 -0
- data/src/core/lib/gprpp/bitset.h +27 -14
- data/src/core/lib/gprpp/chunked_vector.h +49 -3
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
- data/src/core/lib/gprpp/debug_location.h +41 -7
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +10 -9
- data/src/core/lib/gprpp/global_config_env.h +5 -3
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -70
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/no_destruct.h +94 -0
- data/src/core/lib/gprpp/orphanable.h +2 -5
- data/src/core/lib/gprpp/ref_counted.h +4 -4
- data/src/core/lib/gprpp/ref_counted_ptr.h +3 -6
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +75 -48
- data/src/core/lib/gprpp/status_helper.h +10 -19
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +33 -1
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +214 -0
- data/src/core/lib/gprpp/time.h +301 -0
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/gprpp/work_serializer.cc +247 -0
- data/src/core/lib/gprpp/work_serializer.h +86 -0
- data/src/core/lib/http/format_request.cc +62 -29
- data/src/core/lib/http/format_request.h +10 -7
- data/src/core/lib/http/httpcli.cc +316 -243
- data/src/core/lib/http/httpcli.h +233 -90
- data/src/core/lib/http/httpcli_security_connector.cc +80 -80
- data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
- data/src/core/lib/http/parser.cc +85 -15
- data/src/core/lib/http/parser.h +18 -2
- data/src/core/lib/iomgr/buffer_list.cc +9 -9
- data/src/core/lib/iomgr/buffer_list.h +18 -18
- data/src/core/lib/iomgr/call_combiner.cc +10 -26
- data/src/core/lib/iomgr/closure.h +20 -9
- data/src/core/lib/iomgr/combiner.cc +9 -7
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +7 -6
- data/src/core/lib/iomgr/endpoint_cfstream.cc +16 -30
- data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
- data/src/core/lib/iomgr/error.cc +7 -775
- data/src/core/lib/iomgr/error.h +6 -149
- data/src/core/lib/iomgr/error_cfstream.cc +0 -5
- data/src/core/lib/iomgr/ev_apple.cc +6 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +65 -25
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +101 -68
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +58 -100
- data/src/core/lib/iomgr/ev_posix.h +6 -4
- data/src/core/lib/iomgr/exec_ctx.cc +14 -98
- data/src/core/lib/iomgr/exec_ctx.h +19 -36
- data/src/core/lib/iomgr/executor.cc +16 -20
- data/src/core/lib/iomgr/executor.h +1 -4
- data/src/core/lib/iomgr/fork_posix.cc +1 -0
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- 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.cc +7 -1
- data/src/core/lib/iomgr/iomgr_fwd.h +25 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +0 -17
- 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_set.h +1 -2
- data/src/core/lib/iomgr/pollset_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +29 -12
- data/src/core/lib/iomgr/resolve_address.cc +12 -23
- data/src/core/lib/iomgr/resolve_address.h +79 -46
- data/src/core/lib/iomgr/resolve_address_impl.h +58 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +109 -65
- data/src/core/lib/iomgr/resolve_address_posix.h +64 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +122 -76
- data/src/core/lib/iomgr/resolve_address_windows.h +64 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/resolved_address.h} +21 -10
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -19
- data/src/core/lib/iomgr/socket_windows.h +0 -2
- data/src/core/lib/iomgr/tcp_client.cc +12 -9
- data/src/core/lib/iomgr/tcp_client.h +25 -15
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +25 -19
- data/src/core/lib/iomgr/tcp_client_posix.cc +161 -52
- data/src/core/lib/iomgr/tcp_client_posix.h +4 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +28 -26
- data/src/core/lib/iomgr/tcp_posix.cc +307 -97
- 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 +72 -53
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +42 -38
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -6
- data/src/core/lib/iomgr/tcp_server_windows.cc +25 -24
- data/src/core/lib/iomgr/tcp_windows.cc +31 -26
- 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 +100 -83
- 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/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/json/json.h +20 -24
- data/src/core/lib/json/json_args.h +34 -0
- data/src/core/lib/json/json_object_loader.cc +233 -0
- data/src/core/lib/json/json_object_loader.h +618 -0
- data/src/core/lib/json/json_reader.cc +155 -75
- data/src/core/lib/json/json_util.cc +11 -32
- data/src/core/lib/json/json_util.h +15 -6
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +7 -45
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +105 -95
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +167 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +31 -26
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -47
- data/src/core/lib/matchers/matchers.cc +7 -4
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +120 -0
- data/src/core/lib/promise/activity.h +582 -0
- data/src/core/lib/promise/arena_promise.h +201 -0
- data/src/core/lib/promise/call_push_pull.h +148 -0
- data/src/core/lib/promise/context.h +85 -0
- data/src/core/lib/promise/detail/basic_seq.h +516 -0
- data/src/core/lib/promise/detail/promise_factory.h +187 -0
- data/src/core/lib/promise/detail/promise_like.h +85 -0
- data/src/core/lib/promise/detail/status.h +50 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
- data/src/core/lib/promise/intra_activity_waiter.h +49 -0
- data/src/core/lib/promise/latch.h +103 -0
- data/src/core/lib/promise/loop.h +136 -0
- data/src/core/lib/promise/map.h +87 -0
- data/src/core/lib/promise/poll.h +66 -0
- data/src/core/lib/promise/promise.h +96 -0
- data/src/core/lib/promise/race.h +83 -0
- data/src/core/lib/promise/seq.h +108 -0
- data/src/core/lib/promise/sleep.cc +77 -0
- data/src/core/lib/promise/sleep.h +79 -0
- data/src/core/lib/promise/try_seq.h +177 -0
- data/src/core/lib/{iomgr/ev_epollex_linux.h → resolver/resolver.cc} +15 -8
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +45 -53
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +36 -34
- data/src/core/lib/resolver/resolver_registry.cc +149 -0
- data/src/core/lib/resolver/resolver_registry.h +123 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +28 -18
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +19 -16
- data/src/core/lib/resource_quota/api.cc +96 -0
- data/src/core/lib/resource_quota/api.h +43 -0
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +37 -20
- data/src/core/lib/{gprpp → resource_quota}/arena.h +49 -17
- data/src/core/lib/resource_quota/memory_quota.cc +618 -0
- data/src/core/lib/resource_quota/memory_quota.h +543 -0
- data/src/core/lib/resource_quota/periodic_update.cc +79 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/resource_quota/resource_quota.cc} +13 -11
- data/src/core/lib/resource_quota/resource_quota.h +74 -0
- data/src/core/lib/resource_quota/thread_quota.cc +45 -0
- data/src/core/lib/resource_quota/thread_quota.h +61 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → resource_quota/trace.cc} +3 -9
- data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
- data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
- data/src/core/lib/security/authorization/evaluate_args.h +9 -5
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +66 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +120 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
- data/src/core/lib/security/authorization/matchers.cc +238 -0
- data/src/core/lib/security/authorization/matchers.h +218 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +446 -0
- data/src/core/lib/security/authorization/rbac_policy.h +178 -0
- data/src/core/lib/security/context/security_context.cc +9 -4
- data/src/core/lib/security/context/security_context.h +23 -4
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
- data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
- data/src/core/lib/security/credentials/call_creds_util.h +43 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
- data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
- data/src/core/lib/security/credentials/credentials.cc +6 -11
- data/src/core/lib/security/credentials/credentials.h +106 -99
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +173 -52
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +108 -64
- data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -9
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +58 -23
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +42 -43
- data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +91 -56
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -30
- data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +21 -11
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +90 -56
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -3
- data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
- data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +201 -202
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +103 -156
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +50 -22
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
- data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
- data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +41 -35
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +50 -55
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +21 -22
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +32 -21
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +28 -21
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +45 -29
- data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
- data/src/core/lib/security/security_connector/security_connector.cc +22 -32
- data/src/core/lib/security/security_connector/security_connector.h +49 -31
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +32 -22
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +50 -34
- data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +387 -220
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
- data/src/core/lib/security/transport/auth_filters.h +45 -5
- data/src/core/lib/security/transport/client_auth_filter.cc +111 -368
- data/src/core/lib/security/transport/secure_endpoint.cc +267 -137
- data/src/core/lib/security/transport/secure_endpoint.h +5 -4
- data/src/core/lib/security/transport/security_handshaker.cc +81 -50
- data/src/core/lib/security/transport/security_handshaker.h +7 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -41
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config.h +89 -0
- data/src/core/{ext → lib}/service_config/service_config_call_data.h +11 -7
- data/src/core/lib/service_config/service_config_impl.cc +238 -0
- data/src/core/{ext/service_config/service_config.h → lib/service_config/service_config_impl.h} +33 -32
- data/src/core/lib/service_config/service_config_parser.cc +98 -0
- data/src/core/lib/service_config/service_config_parser.h +101 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +35 -97
- data/src/core/lib/slice/percent_encoding.h +4 -16
- data/src/core/lib/slice/slice.cc +88 -184
- data/src/core/lib/slice/slice.h +389 -0
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +83 -23
- data/src/core/lib/slice/slice_buffer.h +137 -0
- data/src/core/lib/{iomgr/is_epollexclusive_available.h → slice/slice_buffer_api.cc} +11 -12
- data/src/core/lib/slice/slice_internal.h +16 -34
- data/src/core/lib/slice/slice_refcount.cc +18 -0
- data/src/core/lib/slice/slice_refcount.h +7 -83
- data/src/core/lib/slice/slice_refcount_base.h +20 -133
- data/src/core/lib/slice/slice_string_helpers.cc +0 -16
- data/src/core/lib/slice/slice_string_helpers.h +1 -8
- data/src/core/lib/surface/builtins.cc +11 -6
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1159 -1289
- data/src/core/lib/surface/call.h +26 -22
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +218 -312
- data/src/core/lib/surface/channel.h +102 -74
- data/src/core/lib/surface/channel_init.cc +2 -3
- data/src/core/lib/surface/channel_init.h +4 -6
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +41 -33
- data/src/core/lib/surface/completion_queue.h +7 -5
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +68 -33
- data/src/core/lib/surface/init.h +0 -10
- data/src/core/lib/surface/lame_client.cc +63 -103
- data/src/core/lib/surface/lame_client.h +41 -3
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +121 -146
- data/src/core/lib/surface/server.h +60 -29
- data/src/core/lib/surface/validate_metadata.cc +7 -20
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +13 -12
- data/src/core/lib/transport/bdp_estimator.h +4 -5
- data/src/core/lib/transport/connectivity_state.cc +5 -4
- data/src/core/lib/transport/connectivity_state.h +3 -4
- data/src/core/lib/transport/error_utils.cc +17 -43
- data/src/core/lib/transport/error_utils.h +7 -2
- data/src/core/lib/{channel → transport}/handshaker.cc +20 -17
- data/src/core/lib/{channel → transport}/handshaker.h +16 -10
- data/src/core/lib/{channel → transport}/handshaker_factory.h +10 -12
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +7 -2
- data/src/core/lib/{channel → transport}/handshaker_registry.h +7 -8
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +62 -53
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +267 -69
- data/src/core/lib/transport/metadata_batch.h +1088 -835
- data/src/core/lib/transport/parsed_metadata.cc +39 -0
- data/src/core/lib/transport/parsed_metadata.h +237 -93
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/status_conversion.cc +4 -2
- data/src/core/lib/transport/status_conversion.h +3 -3
- data/src/core/lib/transport/tcp_connect_handshaker.cc +247 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +203 -70
- data/src/core/lib/transport/timeout_encoding.h +44 -10
- data/src/core/lib/transport/transport.cc +25 -47
- data/src/core/lib/transport/transport.h +151 -27
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +25 -0
- data/src/core/lib/transport/transport_op_string.cc +21 -64
- data/src/core/lib/uri/uri_parser.cc +248 -66
- data/src/core/lib/uri/uri_parser.h +39 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -92
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +67 -43
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +36 -21
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
- 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/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +66 -31
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/local_transport_security.cc +24 -28
- 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 +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +249 -68
- data/src/core/tsi/ssl_transport_security.h +47 -8
- data/src/core/tsi/transport_security.cc +18 -6
- data/src/core/tsi/transport_security.h +2 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/core/tsi/transport_security_interface.h +19 -5
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +61 -21
- 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 +40 -52
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/ext/grpc/rb_server.c +7 -4
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -0
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
- data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +245 -74
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- 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 +77 -113
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
- 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 +18 -8
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
- 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/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
- data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
- 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 +245 -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 +95 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -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 +161 -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 +96 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -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 +264 -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 +165 -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 +149 -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 +96 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -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 +111 -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 +272 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
- data/third_party/abseil-cpp/absl/status/status.cc +183 -19
- data/third_party/abseil-cpp/absl/status/status.h +41 -27
- data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- 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 +469 -1094
- data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -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_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
- 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 +418 -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 +88 -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 +123 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
- 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 +39 -8
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- 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 +28 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
- data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
- 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/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- 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 +82 -47
- 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/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +5 -4
- 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/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +832 -382
- data/third_party/upb/upb/decode.h +44 -17
- data/third_party/upb/upb/decode_fast.c +304 -302
- data/third_party/upb/upb/decode_fast.h +18 -18
- data/third_party/upb/upb/def.c +2083 -982
- data/third_party/upb/upb/def.h +339 -260
- data/third_party/upb/upb/def.hpp +144 -171
- data/third_party/upb/upb/encode.c +287 -185
- data/third_party/upb/upb/encode.h +24 -16
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +76 -58
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +23 -13
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +780 -0
- data/third_party/upb/upb/json_encode.h +65 -0
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +132 -161
- data/third_party/upb/upb/msg.h +18 -55
- data/third_party/upb/upb/msg_internal.h +404 -254
- data/third_party/upb/upb/port_def.inc +10 -1
- data/third_party/upb/upb/port_undef.inc +2 -0
- data/third_party/upb/upb/reflection.c +203 -280
- data/third_party/upb/upb/reflection.h +40 -126
- data/third_party/upb/upb/reflection.hpp +6 -6
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +233 -149
- data/third_party/upb/upb/table_internal.h +9 -324
- data/third_party/upb/upb/text_encode.c +116 -92
- data/third_party/upb/upb/text_encode.h +10 -10
- data/third_party/upb/upb/upb.c +34 -273
- data/third_party/upb/upb/upb.h +79 -262
- data/third_party/upb/upb/upb.hpp +31 -28
- data/third_party/xxhash/xxhash.h +607 -352
- data/third_party/zlib/crc32.c +966 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +78 -30
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +5 -3
- data/third_party/zlib/gzread.c +5 -7
- data/third_party/zlib/gzwrite.c +25 -13
- data/third_party/zlib/infback.c +2 -1
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +39 -8
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/trees.c +27 -48
- data/third_party/zlib/zlib.h +123 -100
- data/third_party/zlib/zutil.c +2 -2
- data/third_party/zlib/zutil.h +12 -9
- metadata +637 -270
- 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/lb_policy_factory.h +0 -48
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
- data/src/core/ext/filters/client_channel/resolver.cc +0 -87
- data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
- data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
- data/src/core/ext/service_config/service_config.cc +0 -227
- data/src/core/ext/service_config/service_config_parser.cc +0 -89
- data/src/core/ext/service_config/service_config_parser.h +0 -97
- 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/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
- data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
- data/src/core/lib/iomgr/iomgr_custom.h +0 -49
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/pollset_custom.cc +0 -105
- data/src/core/lib/iomgr/pollset_custom.h +0 -37
- data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
- data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
- data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
- data/src/core/lib/iomgr/resource_quota.cc +0 -1106
- data/src/core/lib/iomgr/resource_quota.h +0 -226
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
- data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
- data/src/core/lib/iomgr/tcp_custom.cc +0 -377
- data/src/core/lib/iomgr/tcp_custom.h +0 -86
- data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/timer_custom.cc +0 -96
- data/src/core/lib/iomgr/timer_custom.h +0 -43
- data/src/core/lib/iomgr/work_serializer.cc +0 -155
- data/src/core/lib/iomgr/work_serializer.h +0 -81
- 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_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- 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/byte_stream.cc +0 -158
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- 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/abseil-cpp/absl/container/internal/have_sse.h +0 -50
- 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
@@ -19,42 +19,33 @@
|
|
19
19
|
#include "src/core/ext/xds/xds_client.h"
|
20
20
|
|
21
21
|
#include <inttypes.h>
|
22
|
-
#include <limits.h>
|
23
22
|
#include <string.h>
|
24
23
|
|
25
|
-
#include
|
24
|
+
#include <algorithm>
|
25
|
+
|
26
|
+
#include "absl/memory/memory.h"
|
27
|
+
#include "absl/strings/match.h"
|
28
|
+
#include "absl/strings/str_cat.h"
|
26
29
|
#include "absl/strings/str_format.h"
|
27
30
|
#include "absl/strings/str_join.h"
|
31
|
+
#include "absl/strings/str_split.h"
|
28
32
|
#include "absl/strings/string_view.h"
|
33
|
+
#include "absl/strings/strip.h"
|
34
|
+
#include "absl/types/optional.h"
|
35
|
+
#include "upb/arena.h"
|
29
36
|
|
30
|
-
#include <grpc/
|
31
|
-
#include <grpc/
|
32
|
-
#include <grpc/support/alloc.h>
|
33
|
-
#include <grpc/support/time.h>
|
37
|
+
#include <grpc/event_engine/event_engine.h>
|
38
|
+
#include <grpc/support/log.h>
|
34
39
|
|
35
|
-
#include "src/core/ext/filters/client_channel/client_channel.h"
|
36
40
|
#include "src/core/ext/xds/xds_api.h"
|
37
41
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
38
|
-
#include "src/core/ext/xds/xds_channel_args.h"
|
39
42
|
#include "src/core/ext/xds/xds_client_stats.h"
|
40
|
-
#include "src/core/ext/xds/xds_http_filters.h"
|
41
|
-
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
42
43
|
#include "src/core/lib/backoff/backoff.h"
|
43
|
-
#include "src/core/lib/
|
44
|
-
#include "src/core/lib/
|
45
|
-
#include "src/core/lib/gpr/env.h"
|
46
|
-
#include "src/core/lib/gpr/string.h"
|
47
|
-
#include "src/core/lib/gprpp/memory.h"
|
44
|
+
#include "src/core/lib/event_engine/default_event_engine.h"
|
45
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
48
46
|
#include "src/core/lib/gprpp/orphanable.h"
|
49
47
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
50
48
|
#include "src/core/lib/gprpp/sync.h"
|
51
|
-
#include "src/core/lib/iomgr/sockaddr.h"
|
52
|
-
#include "src/core/lib/iomgr/timer.h"
|
53
|
-
#include "src/core/lib/slice/slice_internal.h"
|
54
|
-
#include "src/core/lib/slice/slice_string_helpers.h"
|
55
|
-
#include "src/core/lib/surface/call.h"
|
56
|
-
#include "src/core/lib/surface/channel.h"
|
57
|
-
#include "src/core/lib/transport/static_metadata.h"
|
58
49
|
#include "src/core/lib/uri/uri_parser.h"
|
59
50
|
|
60
51
|
#define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
@@ -65,19 +56,12 @@
|
|
65
56
|
|
66
57
|
namespace grpc_core {
|
67
58
|
|
59
|
+
using ::grpc_event_engine::experimental::EventEngine;
|
60
|
+
using ::grpc_event_engine::experimental::GetDefaultEventEngine;
|
61
|
+
|
68
62
|
TraceFlag grpc_xds_client_trace(false, "xds_client");
|
69
63
|
TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
|
70
64
|
|
71
|
-
namespace {
|
72
|
-
|
73
|
-
Mutex* g_mu = nullptr;
|
74
|
-
|
75
|
-
const grpc_channel_args* g_channel_args ABSL_GUARDED_BY(*g_mu) = nullptr;
|
76
|
-
XdsClient* g_xds_client ABSL_GUARDED_BY(*g_mu) = nullptr;
|
77
|
-
char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
78
|
-
|
79
|
-
} // namespace
|
80
|
-
|
81
65
|
//
|
82
66
|
// Internal class declarations
|
83
67
|
//
|
@@ -90,9 +74,12 @@ class XdsClient::ChannelState::RetryableCall
|
|
90
74
|
public:
|
91
75
|
explicit RetryableCall(WeakRefCountedPtr<ChannelState> chand);
|
92
76
|
|
93
|
-
|
77
|
+
// Disable thread-safety analysis because this method is called via
|
78
|
+
// OrphanablePtr<>, but there's no way to pass the lock annotation
|
79
|
+
// through there.
|
80
|
+
void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
94
81
|
|
95
|
-
void OnCallFinishedLocked();
|
82
|
+
void OnCallFinishedLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
96
83
|
|
97
84
|
T* calld() const { return calld_.get(); }
|
98
85
|
ChannelState* chand() const { return chand_.get(); }
|
@@ -101,9 +88,9 @@ class XdsClient::ChannelState::RetryableCall
|
|
101
88
|
|
102
89
|
private:
|
103
90
|
void StartNewCallLocked();
|
104
|
-
void StartRetryTimerLocked();
|
105
|
-
|
106
|
-
void
|
91
|
+
void StartRetryTimerLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
92
|
+
|
93
|
+
void OnRetryTimer();
|
107
94
|
|
108
95
|
// The wrapped xds call that talks to the xds server. It's instantiated
|
109
96
|
// every time we start a new call. It's null during call retry backoff.
|
@@ -113,9 +100,8 @@ class XdsClient::ChannelState::RetryableCall
|
|
113
100
|
|
114
101
|
// Retry state.
|
115
102
|
BackOff backoff_;
|
116
|
-
|
117
|
-
|
118
|
-
bool retry_timer_callback_pending_ = false;
|
103
|
+
absl::optional<EventEngine::TaskHandle> timer_handle_
|
104
|
+
ABSL_GUARDED_BY(&XdsClient::mu_);
|
119
105
|
|
120
106
|
bool shutting_down_ = false;
|
121
107
|
};
|
@@ -126,7 +112,6 @@ class XdsClient::ChannelState::AdsCallState
|
|
126
112
|
public:
|
127
113
|
// The ctor and dtor should not be used directly.
|
128
114
|
explicit AdsCallState(RefCountedPtr<RetryableCall<AdsCallState>> parent);
|
129
|
-
~AdsCallState() override;
|
130
115
|
|
131
116
|
void Orphan() override;
|
132
117
|
|
@@ -135,217 +120,200 @@ class XdsClient::ChannelState::AdsCallState
|
|
135
120
|
XdsClient* xds_client() const { return chand()->xds_client(); }
|
136
121
|
bool seen_response() const { return seen_response_; }
|
137
122
|
|
138
|
-
void SubscribeLocked(const
|
139
|
-
|
123
|
+
void SubscribeLocked(const XdsResourceType* type, const XdsResourceName& name,
|
124
|
+
bool delay_send)
|
140
125
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
141
|
-
void UnsubscribeLocked(const
|
142
|
-
const
|
143
|
-
bool delay_unsubscription)
|
126
|
+
void UnsubscribeLocked(const XdsResourceType* type,
|
127
|
+
const XdsResourceName& name, bool delay_unsubscription)
|
144
128
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
145
129
|
|
146
130
|
bool HasSubscribedResources() const;
|
147
131
|
|
148
132
|
private:
|
149
|
-
class
|
133
|
+
class AdsResponseParser : public XdsApi::AdsResponseParserInterface {
|
150
134
|
public:
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
135
|
+
struct Result {
|
136
|
+
const XdsResourceType* type;
|
137
|
+
std::string type_url;
|
138
|
+
std::string version;
|
139
|
+
std::string nonce;
|
140
|
+
std::vector<std::string> errors;
|
141
|
+
std::map<std::string /*authority*/, std::set<XdsResourceKey>>
|
142
|
+
resources_seen;
|
143
|
+
bool have_valid_resources = false;
|
144
|
+
};
|
145
|
+
|
146
|
+
explicit AdsResponseParser(AdsCallState* ads_call_state)
|
147
|
+
: ads_call_state_(ads_call_state) {}
|
148
|
+
|
149
|
+
absl::Status ProcessAdsResponseFields(AdsResponseFields fields) override
|
150
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
151
|
+
|
152
|
+
void ParseResource(upb_Arena* arena, size_t idx, absl::string_view type_url,
|
153
|
+
absl::string_view serialized_resource) override
|
154
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
155
|
+
|
156
|
+
Result TakeResult() { return std::move(result_); }
|
157
|
+
|
158
|
+
private:
|
159
|
+
XdsClient* xds_client() const { return ads_call_state_->xds_client(); }
|
160
|
+
|
161
|
+
AdsCallState* ads_call_state_;
|
162
|
+
const Timestamp update_time_ = ExecCtx::Get()->Now();
|
163
|
+
Result result_;
|
164
|
+
};
|
160
165
|
|
161
|
-
|
162
|
-
|
166
|
+
class ResourceTimer : public InternallyRefCounted<ResourceTimer> {
|
167
|
+
public:
|
168
|
+
ResourceTimer(const XdsResourceType* type, const XdsResourceName& name)
|
169
|
+
: type_(type), name_(name) {}
|
170
|
+
|
171
|
+
// Disable thread-safety analysis because this method is called via
|
172
|
+
// OrphanablePtr<>, but there's no way to pass the lock annotation
|
173
|
+
// through there.
|
174
|
+
void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
175
|
+
MaybeCancelTimer();
|
163
176
|
Unref(DEBUG_LOCATION, "Orphan");
|
164
177
|
}
|
165
178
|
|
166
|
-
void
|
167
|
-
|
168
|
-
|
179
|
+
void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld)
|
180
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
181
|
+
if (!timer_start_needed_) return;
|
182
|
+
timer_start_needed_ = false;
|
183
|
+
// Check if we already have a cached version of this resource
|
184
|
+
// (i.e., if this is the initial request for the resource after an
|
185
|
+
// ADS stream restart). If so, we don't start the timer, because
|
186
|
+
// (a) we already have the resource and (b) the server may
|
187
|
+
// optimize by not resending the resource that we already have.
|
188
|
+
auto& authority_state =
|
189
|
+
ads_calld->xds_client()->authority_state_map_[name_.authority];
|
190
|
+
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
191
|
+
if (state.resource != nullptr) return;
|
192
|
+
// Start timer.
|
169
193
|
ads_calld_ = std::move(ads_calld);
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
194
|
+
timer_handle_ = GetDefaultEventEngine()->RunAfter(
|
195
|
+
ads_calld_->xds_client()->request_timeout_,
|
196
|
+
[self = Ref(DEBUG_LOCATION, "timer")]() {
|
197
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
198
|
+
ExecCtx exec_ctx;
|
199
|
+
self->OnTimer();
|
200
|
+
});
|
201
|
+
}
|
202
|
+
|
203
|
+
void MaybeCancelTimer() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
204
|
+
// If the timer hasn't been started yet, make sure we don't start
|
205
|
+
// it later. This can happen if the last watch for an LDS or CDS
|
206
|
+
// resource is cancelled and then restarted, both while an ADS
|
207
|
+
// request for a different resource type is being sent (causing
|
208
|
+
// the unsubscription and then resubscription requests to be
|
209
|
+
// queued), and then we get a response for the LDS or CDS resource.
|
210
|
+
// In that case, we would call MaybeCancelTimer() when we receive the
|
211
|
+
// response and then MaybeStartTimer() when we finally send the new
|
212
|
+
// LDS or CDS request, thus causing the timer to fire when it shouldn't.
|
213
|
+
// For details, see https://github.com/grpc/grpc/issues/29583.
|
214
|
+
// TODO(roth): Find a way to write a test for this case.
|
215
|
+
timer_start_needed_ = false;
|
216
|
+
if (timer_handle_.has_value()) {
|
217
|
+
GetDefaultEventEngine()->Cancel(*timer_handle_);
|
218
|
+
timer_handle_.reset();
|
182
219
|
}
|
183
220
|
}
|
184
221
|
|
185
222
|
private:
|
186
|
-
|
187
|
-
ResourceState* self = static_cast<ResourceState*>(arg);
|
223
|
+
void OnTimer() {
|
188
224
|
{
|
189
|
-
MutexLock lock(&
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
"timeout obtaining resource {type=%s name=%s} from xds server",
|
203
|
-
type_url_,
|
204
|
-
XdsApi::ConstructFullResourceName(resource_.authority,
|
205
|
-
type_url_, resource_.id)));
|
206
|
-
watcher_error = grpc_error_set_int(
|
207
|
-
watcher_error, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE);
|
208
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
209
|
-
gpr_log(GPR_INFO, "[xds_client %p] %s", ads_calld_->xds_client(),
|
210
|
-
grpc_error_std_string(watcher_error).c_str());
|
211
|
-
}
|
212
|
-
auto& authority_state =
|
213
|
-
ads_calld_->xds_client()->authority_state_map_[resource_.authority];
|
214
|
-
if (type_url_ == XdsApi::kLdsTypeUrl) {
|
215
|
-
ListenerState& state = authority_state.listener_map[resource_.id];
|
216
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
217
|
-
for (const auto& p : state.watchers) {
|
218
|
-
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
219
|
-
}
|
220
|
-
} else if (type_url_ == XdsApi::kRdsTypeUrl) {
|
221
|
-
RouteConfigState& state =
|
222
|
-
authority_state.route_config_map[resource_.id];
|
223
|
-
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
224
|
-
for (const auto& p : state.watchers) {
|
225
|
-
p.first->OnError(GRPC_ERROR_REF(watcher_error));
|
225
|
+
MutexLock lock(&ads_calld_->xds_client()->mu_);
|
226
|
+
if (timer_handle_.has_value()) {
|
227
|
+
timer_handle_.reset();
|
228
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
229
|
+
gpr_log(GPR_INFO,
|
230
|
+
"[xds_client %p] xds server %s: timeout obtaining resource "
|
231
|
+
"{type=%s name=%s} from xds server",
|
232
|
+
ads_calld_->xds_client(),
|
233
|
+
ads_calld_->chand()->server_.server_uri.c_str(),
|
234
|
+
std::string(type_->type_url()).c_str(),
|
235
|
+
XdsClient::ConstructFullXdsResourceName(
|
236
|
+
name_.authority, type_->type_url(), name_.key)
|
237
|
+
.c_str());
|
226
238
|
}
|
227
|
-
|
228
|
-
|
239
|
+
auto& authority_state =
|
240
|
+
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
241
|
+
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
229
242
|
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
230
|
-
|
231
|
-
|
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 );
|
243
|
+
ads_calld_->xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
244
|
+
state.watchers);
|
241
245
|
}
|
242
|
-
GRPC_ERROR_UNREF(watcher_error);
|
243
246
|
}
|
244
|
-
|
247
|
+
ads_calld_->xds_client()->work_serializer_.DrainQueue();
|
248
|
+
ads_calld_.reset();
|
245
249
|
}
|
246
250
|
|
247
|
-
const
|
248
|
-
const
|
251
|
+
const XdsResourceType* type_;
|
252
|
+
const XdsResourceName name_;
|
249
253
|
|
250
254
|
RefCountedPtr<AdsCallState> ads_calld_;
|
251
|
-
bool
|
252
|
-
|
253
|
-
|
254
|
-
grpc_closure timer_callback_;
|
255
|
+
bool timer_start_needed_ ABSL_GUARDED_BY(&XdsClient::mu_) = true;
|
256
|
+
absl::optional<EventEngine::TaskHandle> timer_handle_
|
257
|
+
ABSL_GUARDED_BY(&XdsClient::mu_);
|
255
258
|
};
|
256
259
|
|
257
|
-
|
258
|
-
|
260
|
+
class StreamEventHandler
|
261
|
+
: public XdsTransportFactory::XdsTransport::StreamingCall::EventHandler {
|
262
|
+
public:
|
263
|
+
explicit StreamEventHandler(RefCountedPtr<AdsCallState> ads_calld)
|
264
|
+
: ads_calld_(std::move(ads_calld)) {}
|
265
|
+
|
266
|
+
void OnRequestSent(bool ok) override { ads_calld_->OnRequestSent(ok); }
|
267
|
+
void OnRecvMessage(absl::string_view payload) override {
|
268
|
+
ads_calld_->OnRecvMessage(payload);
|
269
|
+
}
|
270
|
+
void OnStatusReceived(absl::Status status) override {
|
271
|
+
ads_calld_->OnStatusReceived(std::move(status));
|
272
|
+
}
|
259
273
|
|
260
|
-
|
274
|
+
private:
|
275
|
+
RefCountedPtr<AdsCallState> ads_calld_;
|
276
|
+
};
|
277
|
+
|
278
|
+
struct ResourceTypeState {
|
279
|
+
// Nonce and status for this resource type.
|
261
280
|
std::string nonce;
|
262
|
-
|
281
|
+
absl::Status status;
|
263
282
|
|
264
283
|
// Subscribed resources of this type.
|
265
284
|
std::map<std::string /*authority*/,
|
266
|
-
std::map<
|
285
|
+
std::map<XdsResourceKey, OrphanablePtr<ResourceTimer>>>
|
267
286
|
subscribed_resources;
|
268
287
|
};
|
269
288
|
|
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)
|
289
|
+
void SendMessageLocked(const XdsResourceType* type)
|
296
290
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
297
291
|
|
298
|
-
void
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
static void OnRequestSent(void* arg, grpc_error_handle error);
|
303
|
-
void OnRequestSentLocked(grpc_error_handle error)
|
304
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
305
|
-
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
306
|
-
bool OnResponseReceivedLocked()
|
307
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
308
|
-
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
309
|
-
void OnStatusReceivedLocked(grpc_error_handle error)
|
310
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
292
|
+
void OnRequestSent(bool ok);
|
293
|
+
void OnRecvMessage(absl::string_view payload);
|
294
|
+
void OnStatusReceived(absl::Status status);
|
311
295
|
|
312
296
|
bool IsCurrentCallOnChannel() const;
|
313
297
|
|
314
|
-
|
315
|
-
|
316
|
-
ResourceNamesForRequest(const
|
298
|
+
// Constructs a list of resource names of a given type for an ADS
|
299
|
+
// request. Also starts the timer for each resource if needed.
|
300
|
+
std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type)
|
301
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
317
302
|
|
318
303
|
// The owning RetryableCall<>.
|
319
304
|
RefCountedPtr<RetryableCall<AdsCallState>> parent_;
|
320
305
|
|
306
|
+
OrphanablePtr<XdsTransportFactory::XdsTransport::StreamingCall> call_;
|
307
|
+
|
321
308
|
bool sent_initial_message_ = false;
|
322
309
|
bool seen_response_ = false;
|
323
|
-
|
324
|
-
// Always non-NULL.
|
325
|
-
grpc_call* call_;
|
326
|
-
|
327
|
-
// recv_initial_metadata
|
328
|
-
grpc_metadata_array initial_metadata_recv_;
|
329
|
-
|
330
|
-
// send_message
|
331
|
-
grpc_byte_buffer* send_message_payload_ = nullptr;
|
332
|
-
grpc_closure on_request_sent_;
|
333
|
-
|
334
|
-
// recv_message
|
335
|
-
grpc_byte_buffer* recv_message_payload_ = nullptr;
|
336
|
-
grpc_closure on_response_received_;
|
337
|
-
|
338
|
-
// recv_trailing_metadata
|
339
|
-
grpc_metadata_array trailing_metadata_recv_;
|
340
|
-
grpc_status_code status_code_;
|
341
|
-
grpc_slice status_details_;
|
342
|
-
grpc_closure on_status_received_;
|
310
|
+
bool send_message_pending_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
|
343
311
|
|
344
312
|
// Resource types for which requests need to be sent.
|
345
|
-
std::set<
|
313
|
+
std::set<const XdsResourceType*> buffered_requests_;
|
346
314
|
|
347
315
|
// State for each resource type.
|
348
|
-
std::map<
|
316
|
+
std::map<const XdsResourceType*, ResourceTypeState> state_map_;
|
349
317
|
};
|
350
318
|
|
351
319
|
// Contains an LRS call to the xds server.
|
@@ -354,11 +322,11 @@ class XdsClient::ChannelState::LrsCallState
|
|
354
322
|
public:
|
355
323
|
// The ctor and dtor should not be used directly.
|
356
324
|
explicit LrsCallState(RefCountedPtr<RetryableCall<LrsCallState>> parent);
|
357
|
-
~LrsCallState() override;
|
358
325
|
|
359
326
|
void Orphan() override;
|
360
327
|
|
361
|
-
void MaybeStartReportingLocked()
|
328
|
+
void MaybeStartReportingLocked()
|
329
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
362
330
|
|
363
331
|
RetryableCall<LrsCallState>* parent() { return parent_.get(); }
|
364
332
|
ChannelState* chand() const { return parent_->chand(); }
|
@@ -366,30 +334,44 @@ class XdsClient::ChannelState::LrsCallState
|
|
366
334
|
bool seen_response() const { return seen_response_; }
|
367
335
|
|
368
336
|
private:
|
337
|
+
class StreamEventHandler
|
338
|
+
: public XdsTransportFactory::XdsTransport::StreamingCall::EventHandler {
|
339
|
+
public:
|
340
|
+
explicit StreamEventHandler(RefCountedPtr<LrsCallState> lrs_calld)
|
341
|
+
: lrs_calld_(std::move(lrs_calld)) {}
|
342
|
+
|
343
|
+
void OnRequestSent(bool ok) override { lrs_calld_->OnRequestSent(ok); }
|
344
|
+
void OnRecvMessage(absl::string_view payload) override {
|
345
|
+
lrs_calld_->OnRecvMessage(payload);
|
346
|
+
}
|
347
|
+
void OnStatusReceived(absl::Status status) override {
|
348
|
+
lrs_calld_->OnStatusReceived(std::move(status));
|
349
|
+
}
|
350
|
+
|
351
|
+
private:
|
352
|
+
RefCountedPtr<LrsCallState> lrs_calld_;
|
353
|
+
};
|
354
|
+
|
369
355
|
// Reports client-side load stats according to a fixed interval.
|
370
356
|
class Reporter : public InternallyRefCounted<Reporter> {
|
371
357
|
public:
|
372
|
-
Reporter(RefCountedPtr<LrsCallState> parent,
|
358
|
+
Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
|
373
359
|
: parent_(std::move(parent)), report_interval_(report_interval) {
|
374
|
-
GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
|
375
|
-
grpc_schedule_on_exec_ctx);
|
376
|
-
GRPC_CLOSURE_INIT(&on_report_done_, OnReportDone, this,
|
377
|
-
grpc_schedule_on_exec_ctx);
|
378
360
|
ScheduleNextReportLocked();
|
379
361
|
}
|
380
362
|
|
381
|
-
|
363
|
+
// Disable thread-safety analysis because this method is called via
|
364
|
+
// OrphanablePtr<>, but there's no way to pass the lock annotation
|
365
|
+
// through there.
|
366
|
+
void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
367
|
+
|
368
|
+
void OnReportDoneLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
382
369
|
|
383
370
|
private:
|
384
371
|
void ScheduleNextReportLocked()
|
385
372
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
386
|
-
|
387
|
-
bool OnNextReportTimerLocked(grpc_error_handle error)
|
388
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
373
|
+
bool OnNextReportTimer();
|
389
374
|
bool SendReportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
390
|
-
static void OnReportDone(void* arg, grpc_error_handle error);
|
391
|
-
bool OnReportDoneLocked(grpc_error_handle error)
|
392
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
393
375
|
|
394
376
|
bool IsCurrentReporterOnCall() const {
|
395
377
|
return this == parent_->reporter_.get();
|
@@ -400,104 +382,37 @@ class XdsClient::ChannelState::LrsCallState
|
|
400
382
|
RefCountedPtr<LrsCallState> parent_;
|
401
383
|
|
402
384
|
// The load reporting state.
|
403
|
-
const
|
385
|
+
const Duration report_interval_;
|
404
386
|
bool last_report_counters_were_zero_ = false;
|
405
|
-
|
406
|
-
|
407
|
-
grpc_closure on_next_report_timer_;
|
408
|
-
grpc_closure on_report_done_;
|
387
|
+
absl::optional<EventEngine::TaskHandle> timer_handle_
|
388
|
+
ABSL_GUARDED_BY(&XdsClient::mu_);
|
409
389
|
};
|
410
390
|
|
411
|
-
|
412
|
-
void
|
413
|
-
|
414
|
-
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
415
|
-
bool OnResponseReceivedLocked()
|
416
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
417
|
-
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
418
|
-
void OnStatusReceivedLocked(grpc_error_handle error)
|
419
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
391
|
+
void OnRequestSent(bool ok);
|
392
|
+
void OnRecvMessage(absl::string_view payload);
|
393
|
+
void OnStatusReceived(absl::Status status);
|
420
394
|
|
421
395
|
bool IsCurrentCallOnChannel() const;
|
422
396
|
|
423
397
|
// The owning RetryableCall<>.
|
424
398
|
RefCountedPtr<RetryableCall<LrsCallState>> parent_;
|
425
|
-
bool seen_response_ = false;
|
426
399
|
|
427
|
-
|
428
|
-
grpc_call* call_;
|
400
|
+
OrphanablePtr<XdsTransportFactory::XdsTransport::StreamingCall> call_;
|
429
401
|
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
// send_message
|
434
|
-
grpc_byte_buffer* send_message_payload_ = nullptr;
|
435
|
-
grpc_closure on_initial_request_sent_;
|
436
|
-
|
437
|
-
// recv_message
|
438
|
-
grpc_byte_buffer* recv_message_payload_ = nullptr;
|
439
|
-
grpc_closure on_response_received_;
|
440
|
-
|
441
|
-
// recv_trailing_metadata
|
442
|
-
grpc_metadata_array trailing_metadata_recv_;
|
443
|
-
grpc_status_code status_code_;
|
444
|
-
grpc_slice status_details_;
|
445
|
-
grpc_closure on_status_received_;
|
402
|
+
bool seen_response_ = false;
|
403
|
+
bool send_message_pending_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
|
446
404
|
|
447
405
|
// Load reporting state.
|
448
406
|
bool send_all_clusters_ = false;
|
449
407
|
std::set<std::string> cluster_names_; // Asked for by the LRS server.
|
450
|
-
|
408
|
+
Duration load_reporting_interval_;
|
451
409
|
OrphanablePtr<Reporter> reporter_;
|
452
410
|
};
|
453
411
|
|
454
|
-
//
|
455
|
-
// XdsClient::ChannelState::StateWatcher
|
456
|
-
//
|
457
|
-
|
458
|
-
class XdsClient::ChannelState::StateWatcher
|
459
|
-
: public AsyncConnectivityStateWatcherInterface {
|
460
|
-
public:
|
461
|
-
explicit StateWatcher(WeakRefCountedPtr<ChannelState> parent)
|
462
|
-
: parent_(std::move(parent)) {}
|
463
|
-
|
464
|
-
private:
|
465
|
-
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
466
|
-
const absl::Status& status) override {
|
467
|
-
MutexLock lock(&parent_->xds_client_->mu_);
|
468
|
-
if (!parent_->shutting_down_ &&
|
469
|
-
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
470
|
-
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
471
|
-
gpr_log(GPR_INFO,
|
472
|
-
"[xds_client %p] xds channel in state:TRANSIENT_FAILURE "
|
473
|
-
"status_message:(%s)",
|
474
|
-
parent_->xds_client(), status.ToString().c_str());
|
475
|
-
parent_->xds_client_->NotifyOnErrorLocked(
|
476
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
477
|
-
"xds channel in TRANSIENT_FAILURE"));
|
478
|
-
}
|
479
|
-
}
|
480
|
-
|
481
|
-
WeakRefCountedPtr<ChannelState> parent_;
|
482
|
-
};
|
483
|
-
|
484
412
|
//
|
485
413
|
// XdsClient::ChannelState
|
486
414
|
//
|
487
415
|
|
488
|
-
namespace {
|
489
|
-
|
490
|
-
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
491
|
-
const XdsBootstrap::XdsServer& server) {
|
492
|
-
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
493
|
-
XdsChannelCredsRegistry::MakeChannelCreds(server.channel_creds_type,
|
494
|
-
server.channel_creds_config);
|
495
|
-
return grpc_secure_channel_create(channel_creds.get(),
|
496
|
-
server.server_uri.c_str(), args, nullptr);
|
497
|
-
}
|
498
|
-
|
499
|
-
} // namespace
|
500
|
-
|
501
416
|
XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
502
417
|
const XdsBootstrap::XdsServer& server)
|
503
418
|
: DualRefCounted<ChannelState>(
|
@@ -510,35 +425,43 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
510
425
|
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
|
511
426
|
xds_client_.get(), server.server_uri.c_str());
|
512
427
|
}
|
513
|
-
|
514
|
-
|
515
|
-
|
428
|
+
absl::Status status;
|
429
|
+
transport_ = xds_client_->transport_factory_->Create(
|
430
|
+
server,
|
431
|
+
[self = WeakRef(DEBUG_LOCATION, "OnConnectivityFailure")](
|
432
|
+
absl::Status status) {
|
433
|
+
self->OnConnectivityStateChange(std::move(status));
|
434
|
+
},
|
435
|
+
&status);
|
436
|
+
GPR_ASSERT(transport_ != nullptr);
|
437
|
+
if (!status.ok()) OnConnectivityStateChangeLocked(std::move(status));
|
516
438
|
}
|
517
439
|
|
518
440
|
XdsClient::ChannelState::~ChannelState() {
|
519
441
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
520
|
-
gpr_log(GPR_INFO, "[xds_client %p]
|
521
|
-
this);
|
442
|
+
gpr_log(GPR_INFO, "[xds_client %p] destroying xds channel %p for server %s",
|
443
|
+
xds_client(), this, server_.server_uri.c_str());
|
522
444
|
}
|
523
|
-
grpc_channel_destroy(channel_);
|
524
445
|
xds_client_.reset(DEBUG_LOCATION, "ChannelState");
|
525
446
|
}
|
526
447
|
|
527
448
|
// This method should only ever be called when holding the lock, but we can't
|
528
449
|
// use a ABSL_EXCLUSIVE_LOCKS_REQUIRED annotation, because Orphan() will be
|
529
|
-
// called from DualRefCounted::Unref, which cannot have a lock annotation for
|
530
|
-
// lock in this subclass.
|
450
|
+
// called from DualRefCounted::Unref, which cannot have a lock annotation for
|
451
|
+
// a lock in this subclass.
|
531
452
|
void XdsClient::ChannelState::Orphan() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
532
453
|
shutting_down_ = true;
|
533
|
-
|
454
|
+
transport_.reset();
|
534
455
|
// At this time, all strong refs are removed, remove from channel map to
|
535
|
-
// prevent subsequent subscription from trying to use this ChannelState as
|
536
|
-
// is shutting down.
|
456
|
+
// prevent subsequent subscription from trying to use this ChannelState as
|
457
|
+
// it is shutting down.
|
537
458
|
xds_client_->xds_server_channel_map_.erase(server_);
|
538
459
|
ads_calld_.reset();
|
539
460
|
lrs_calld_.reset();
|
540
461
|
}
|
541
462
|
|
463
|
+
void XdsClient::ChannelState::ResetBackoff() { transport_->ResetBackoff(); }
|
464
|
+
|
542
465
|
XdsClient::ChannelState::AdsCallState* XdsClient::ChannelState::ads_calld()
|
543
466
|
const {
|
544
467
|
return ads_calld_->calld();
|
@@ -559,25 +482,13 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
559
482
|
WeakRef(DEBUG_LOCATION, "ChannelState+lrs")));
|
560
483
|
}
|
561
484
|
|
562
|
-
void XdsClient::ChannelState::
|
563
|
-
|
564
|
-
|
565
|
-
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
566
|
-
GPR_ASSERT(client_channel != nullptr);
|
567
|
-
watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
|
568
|
-
client_channel->AddConnectivityWatcher(
|
569
|
-
GRPC_CHANNEL_IDLE,
|
570
|
-
OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
|
571
|
-
}
|
572
|
-
|
573
|
-
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
574
|
-
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
575
|
-
GPR_ASSERT(client_channel != nullptr);
|
576
|
-
client_channel->RemoveConnectivityWatcher(watcher_);
|
485
|
+
void XdsClient::ChannelState::StopLrsCallLocked() {
|
486
|
+
xds_client_->xds_load_report_server_map_.erase(server_);
|
487
|
+
lrs_calld_.reset();
|
577
488
|
}
|
578
489
|
|
579
|
-
void XdsClient::ChannelState::SubscribeLocked(
|
580
|
-
|
490
|
+
void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
|
491
|
+
const XdsResourceName& name) {
|
581
492
|
if (ads_calld_ == nullptr) {
|
582
493
|
// Start the ADS call if this is the first request.
|
583
494
|
ads_calld_.reset(new RetryableCall<AdsCallState>(
|
@@ -591,16 +502,16 @@ void XdsClient::ChannelState::SubscribeLocked(
|
|
591
502
|
// because when the call is restarted it will resend all necessary requests.
|
592
503
|
if (ads_calld() == nullptr) return;
|
593
504
|
// Subscribe to this resource if the ADS call is active.
|
594
|
-
ads_calld()->SubscribeLocked(
|
505
|
+
ads_calld()->SubscribeLocked(type, name, /*delay_send=*/false);
|
595
506
|
}
|
596
507
|
|
597
|
-
void XdsClient::ChannelState::UnsubscribeLocked(
|
598
|
-
|
599
|
-
|
508
|
+
void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
|
509
|
+
const XdsResourceName& name,
|
510
|
+
bool delay_unsubscription) {
|
600
511
|
if (ads_calld_ != nullptr) {
|
601
512
|
auto* calld = ads_calld_->calld();
|
602
513
|
if (calld != nullptr) {
|
603
|
-
calld->UnsubscribeLocked(
|
514
|
+
calld->UnsubscribeLocked(type, name, delay_unsubscription);
|
604
515
|
if (!calld->HasSubscribedResources()) {
|
605
516
|
ads_calld_.reset();
|
606
517
|
}
|
@@ -608,6 +519,29 @@ void XdsClient::ChannelState::UnsubscribeLocked(
|
|
608
519
|
}
|
609
520
|
}
|
610
521
|
|
522
|
+
void XdsClient::ChannelState::OnConnectivityStateChange(absl::Status status) {
|
523
|
+
{
|
524
|
+
MutexLock lock(&xds_client_->mu_);
|
525
|
+
OnConnectivityStateChangeLocked(std::move(status));
|
526
|
+
}
|
527
|
+
xds_client_->work_serializer_.DrainQueue();
|
528
|
+
}
|
529
|
+
|
530
|
+
void XdsClient::ChannelState::OnConnectivityStateChangeLocked(
|
531
|
+
absl::Status status) {
|
532
|
+
if (!shutting_down_) {
|
533
|
+
// Notify all watchers of error.
|
534
|
+
gpr_log(GPR_INFO,
|
535
|
+
"[xds_client %p] xds channel for server %s in "
|
536
|
+
"state TRANSIENT_FAILURE: %s",
|
537
|
+
xds_client(), server_.server_uri.c_str(),
|
538
|
+
status.ToString().c_str());
|
539
|
+
xds_client_->NotifyOnErrorLocked(absl::UnavailableError(
|
540
|
+
absl::StrCat("xds channel in TRANSIENT_FAILURE, connectivity error: ",
|
541
|
+
status.ToString())));
|
542
|
+
}
|
543
|
+
}
|
544
|
+
|
611
545
|
//
|
612
546
|
// XdsClient::ChannelState::RetryableCall<>
|
613
547
|
//
|
@@ -616,16 +550,13 @@ template <typename T>
|
|
616
550
|
XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
|
617
551
|
WeakRefCountedPtr<ChannelState> chand)
|
618
552
|
: chand_(std::move(chand)),
|
619
|
-
backoff_(
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
// Closure Initialization
|
627
|
-
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
|
628
|
-
grpc_schedule_on_exec_ctx);
|
553
|
+
backoff_(BackOff::Options()
|
554
|
+
.set_initial_backoff(Duration::Seconds(
|
555
|
+
GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS))
|
556
|
+
.set_multiplier(GRPC_XDS_RECONNECT_BACKOFF_MULTIPLIER)
|
557
|
+
.set_jitter(GRPC_XDS_RECONNECT_JITTER)
|
558
|
+
.set_max_backoff(Duration::Seconds(
|
559
|
+
GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS))) {
|
629
560
|
StartNewCallLocked();
|
630
561
|
}
|
631
562
|
|
@@ -633,35 +564,32 @@ template <typename T>
|
|
633
564
|
void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
|
634
565
|
shutting_down_ = true;
|
635
566
|
calld_.reset();
|
636
|
-
if (
|
567
|
+
if (timer_handle_.has_value()) {
|
568
|
+
GetDefaultEventEngine()->Cancel(*timer_handle_);
|
569
|
+
timer_handle_.reset();
|
570
|
+
}
|
637
571
|
this->Unref(DEBUG_LOCATION, "RetryableCall+orphaned");
|
638
572
|
}
|
639
573
|
|
640
574
|
template <typename T>
|
641
575
|
void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
|
642
|
-
|
576
|
+
// If we saw a response on the current stream, reset backoff.
|
577
|
+
if (calld_->seen_response()) backoff_.Reset();
|
643
578
|
calld_.reset();
|
644
|
-
|
645
|
-
|
646
|
-
// call immediately.
|
647
|
-
backoff_.Reset();
|
648
|
-
StartNewCallLocked();
|
649
|
-
} else {
|
650
|
-
// If we failed to connect to the xds server, retry later.
|
651
|
-
StartRetryTimerLocked();
|
652
|
-
}
|
579
|
+
// Start retry timer.
|
580
|
+
StartRetryTimerLocked();
|
653
581
|
}
|
654
582
|
|
655
583
|
template <typename T>
|
656
584
|
void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
657
585
|
if (shutting_down_) return;
|
658
|
-
GPR_ASSERT(chand_->
|
586
|
+
GPR_ASSERT(chand_->transport_ != nullptr);
|
659
587
|
GPR_ASSERT(calld_ == nullptr);
|
660
588
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
661
589
|
gpr_log(GPR_INFO,
|
662
|
-
"[xds_client %p]
|
663
|
-
"
|
664
|
-
chand()->xds_client(), chand(), this);
|
590
|
+
"[xds_client %p] xds server %s: start new call from retryable "
|
591
|
+
"call %p",
|
592
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
665
593
|
}
|
666
594
|
calld_ = MakeOrphanable<T>(
|
667
595
|
this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
|
@@ -670,45 +598,216 @@ void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
|
670
598
|
template <typename T>
|
671
599
|
void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
672
600
|
if (shutting_down_) return;
|
673
|
-
const
|
601
|
+
const Timestamp next_attempt_time = backoff_.NextAttemptTime();
|
602
|
+
const Duration timeout =
|
603
|
+
std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
|
674
604
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
675
|
-
grpc_millis timeout =
|
676
|
-
std::max(next_attempt_time - ExecCtx::Get()->Now(), grpc_millis(0));
|
677
605
|
gpr_log(GPR_INFO,
|
678
|
-
"[xds_client %p]
|
606
|
+
"[xds_client %p] xds server %s: call attempt failed; "
|
679
607
|
"retry timer will fire in %" PRId64 "ms.",
|
680
|
-
chand()->xds_client(), chand(),
|
608
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(),
|
609
|
+
timeout.millis());
|
681
610
|
}
|
682
|
-
|
683
|
-
|
684
|
-
|
611
|
+
timer_handle_ = GetDefaultEventEngine()->RunAfter(
|
612
|
+
timeout,
|
613
|
+
[self = this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start")]() {
|
614
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
615
|
+
ExecCtx exec_ctx;
|
616
|
+
self->OnRetryTimer();
|
617
|
+
});
|
685
618
|
}
|
686
619
|
|
687
620
|
template <typename T>
|
688
|
-
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
621
|
+
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer() {
|
622
|
+
MutexLock lock(&chand_->xds_client()->mu_);
|
623
|
+
if (timer_handle_.has_value()) {
|
624
|
+
timer_handle_.reset();
|
625
|
+
if (shutting_down_) return;
|
626
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
627
|
+
gpr_log(GPR_INFO,
|
628
|
+
"[xds_client %p] xds server %s: retry timer fired (retryable "
|
629
|
+
"call: %p)",
|
630
|
+
chand()->xds_client(), chand()->server_.server_uri.c_str(), this);
|
631
|
+
}
|
632
|
+
StartNewCallLocked();
|
694
633
|
}
|
695
|
-
calld->Unref(DEBUG_LOCATION, "RetryableCall+retry_timer_done");
|
696
634
|
}
|
697
635
|
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
636
|
+
//
|
637
|
+
// XdsClient::ChannelState::AdsCallState::AdsResponseParser
|
638
|
+
//
|
639
|
+
|
640
|
+
absl::Status XdsClient::ChannelState::AdsCallState::AdsResponseParser::
|
641
|
+
ProcessAdsResponseFields(AdsResponseFields fields) {
|
642
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
643
|
+
gpr_log(
|
644
|
+
GPR_INFO,
|
645
|
+
"[xds_client %p] xds server %s: received ADS response: type_url=%s, "
|
646
|
+
"version=%s, nonce=%s, num_resources=%" PRIuPTR,
|
647
|
+
ads_call_state_->xds_client(),
|
648
|
+
ads_call_state_->chand()->server_.server_uri.c_str(),
|
649
|
+
fields.type_url.c_str(), fields.version.c_str(), fields.nonce.c_str(),
|
650
|
+
fields.num_resources);
|
651
|
+
}
|
652
|
+
result_.type =
|
653
|
+
ads_call_state_->xds_client()->GetResourceTypeLocked(fields.type_url);
|
654
|
+
if (result_.type == nullptr) {
|
655
|
+
return absl::InvalidArgumentError(
|
656
|
+
absl::StrCat("unknown resource type ", fields.type_url));
|
657
|
+
}
|
658
|
+
result_.type_url = std::move(fields.type_url);
|
659
|
+
result_.version = std::move(fields.version);
|
660
|
+
result_.nonce = std::move(fields.nonce);
|
661
|
+
return absl::OkStatus();
|
662
|
+
}
|
663
|
+
|
664
|
+
namespace {
|
665
|
+
|
666
|
+
// Build a resource metadata struct for ADS result accepting methods and CSDS.
|
667
|
+
XdsApi::ResourceMetadata CreateResourceMetadataAcked(
|
668
|
+
std::string serialized_proto, std::string version, Timestamp update_time) {
|
669
|
+
XdsApi::ResourceMetadata resource_metadata;
|
670
|
+
resource_metadata.serialized_proto = std::move(serialized_proto);
|
671
|
+
resource_metadata.update_time = update_time;
|
672
|
+
resource_metadata.version = std::move(version);
|
673
|
+
resource_metadata.client_status = XdsApi::ResourceMetadata::ACKED;
|
674
|
+
return resource_metadata;
|
675
|
+
}
|
676
|
+
|
677
|
+
// Update resource_metadata for NACK.
|
678
|
+
void UpdateResourceMetadataNacked(const std::string& version,
|
679
|
+
const std::string& details,
|
680
|
+
Timestamp update_time,
|
681
|
+
XdsApi::ResourceMetadata* resource_metadata) {
|
682
|
+
resource_metadata->client_status = XdsApi::ResourceMetadata::NACKED;
|
683
|
+
resource_metadata->failed_version = version;
|
684
|
+
resource_metadata->failed_details = details;
|
685
|
+
resource_metadata->failed_update_time = update_time;
|
686
|
+
}
|
687
|
+
|
688
|
+
} // namespace
|
689
|
+
|
690
|
+
void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
691
|
+
upb_Arena* arena, size_t idx, absl::string_view type_url,
|
692
|
+
absl::string_view serialized_resource) {
|
693
|
+
// Check the type_url of the resource.
|
694
|
+
bool is_v2 = false;
|
695
|
+
if (!result_.type->IsType(type_url, &is_v2)) {
|
696
|
+
result_.errors.emplace_back(
|
697
|
+
absl::StrCat("resource index ", idx, ": incorrect resource type ",
|
698
|
+
type_url, " (should be ", result_.type_url, ")"));
|
699
|
+
return;
|
700
|
+
}
|
701
|
+
// Parse the resource.
|
702
|
+
XdsResourceType::DecodeContext context = {
|
703
|
+
xds_client(), ads_call_state_->chand()->server_, &grpc_xds_client_trace,
|
704
|
+
xds_client()->symtab_.ptr(), arena};
|
705
|
+
absl::StatusOr<XdsResourceType::DecodeResult> result =
|
706
|
+
result_.type->Decode(context, serialized_resource, is_v2);
|
707
|
+
if (!result.ok()) {
|
708
|
+
result_.errors.emplace_back(
|
709
|
+
absl::StrCat("resource index ", idx, ": ", result.status().ToString()));
|
710
|
+
return;
|
711
|
+
}
|
712
|
+
// Check the resource name.
|
713
|
+
auto resource_name =
|
714
|
+
xds_client()->ParseXdsResourceName(result->name, result_.type);
|
715
|
+
if (!resource_name.ok()) {
|
716
|
+
result_.errors.emplace_back(absl::StrCat(
|
717
|
+
"resource index ", idx, ": Cannot parse xDS resource name \"",
|
718
|
+
result->name, "\""));
|
719
|
+
return;
|
720
|
+
}
|
721
|
+
// Cancel resource-does-not-exist timer, if needed.
|
722
|
+
auto timer_it = ads_call_state_->state_map_.find(result_.type);
|
723
|
+
if (timer_it != ads_call_state_->state_map_.end()) {
|
724
|
+
auto it =
|
725
|
+
timer_it->second.subscribed_resources.find(resource_name->authority);
|
726
|
+
if (it != timer_it->second.subscribed_resources.end()) {
|
727
|
+
auto res_it = it->second.find(resource_name->key);
|
728
|
+
if (res_it != it->second.end()) {
|
729
|
+
res_it->second->MaybeCancelTimer();
|
730
|
+
}
|
731
|
+
}
|
732
|
+
}
|
733
|
+
// Lookup the authority in the cache.
|
734
|
+
auto authority_it =
|
735
|
+
xds_client()->authority_state_map_.find(resource_name->authority);
|
736
|
+
if (authority_it == xds_client()->authority_state_map_.end()) {
|
737
|
+
return; // Skip resource -- we don't have a subscription for it.
|
738
|
+
}
|
739
|
+
// Found authority, so look up type.
|
740
|
+
AuthorityState& authority_state = authority_it->second;
|
741
|
+
auto type_it = authority_state.resource_map.find(result_.type);
|
742
|
+
if (type_it == authority_state.resource_map.end()) {
|
743
|
+
return; // Skip resource -- we don't have a subscription for it.
|
744
|
+
}
|
745
|
+
auto& type_map = type_it->second;
|
746
|
+
// Found type, so look up resource key.
|
747
|
+
auto it = type_map.find(resource_name->key);
|
748
|
+
if (it == type_map.end()) {
|
749
|
+
return; // Skip resource -- we don't have a subscription for it.
|
750
|
+
}
|
751
|
+
ResourceState& resource_state = it->second;
|
752
|
+
// If needed, record that we've seen this resource.
|
753
|
+
if (result_.type->AllResourcesRequiredInSotW()) {
|
754
|
+
result_.resources_seen[resource_name->authority].insert(resource_name->key);
|
755
|
+
}
|
756
|
+
// If we previously ignored the resource's deletion, log that we're
|
757
|
+
// now re-adding it.
|
758
|
+
if (resource_state.ignored_deletion) {
|
759
|
+
gpr_log(GPR_INFO,
|
760
|
+
"[xds_client %p] xds server %s: server returned new version of "
|
761
|
+
"resource for which we previously ignored a deletion: type %s "
|
762
|
+
"name %s",
|
763
|
+
xds_client(), ads_call_state_->chand()->server_.server_uri.c_str(),
|
764
|
+
std::string(type_url).c_str(), result->name.c_str());
|
765
|
+
resource_state.ignored_deletion = false;
|
766
|
+
}
|
767
|
+
// Update resource state based on whether the resource is valid.
|
768
|
+
if (!result->resource.ok()) {
|
769
|
+
result_.errors.emplace_back(absl::StrCat(
|
770
|
+
"resource index ", idx, ": ", result->name,
|
771
|
+
": validation error: ", result->resource.status().ToString()));
|
772
|
+
xds_client()->NotifyWatchersOnErrorLocked(
|
773
|
+
resource_state.watchers,
|
774
|
+
absl::UnavailableError(absl::StrCat(
|
775
|
+
"invalid resource: ", result->resource.status().ToString())));
|
776
|
+
UpdateResourceMetadataNacked(result_.version,
|
777
|
+
result->resource.status().ToString(),
|
778
|
+
update_time_, &resource_state.meta);
|
779
|
+
return;
|
780
|
+
}
|
781
|
+
// Resource is valid.
|
782
|
+
result_.have_valid_resources = true;
|
783
|
+
// If it didn't change, ignore it.
|
784
|
+
if (resource_state.resource != nullptr &&
|
785
|
+
result_.type->ResourcesEqual(resource_state.resource.get(),
|
786
|
+
result->resource->get())) {
|
703
787
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
704
|
-
gpr_log(
|
705
|
-
|
706
|
-
|
707
|
-
chand()->xds_client(), chand(), this);
|
788
|
+
gpr_log(GPR_INFO,
|
789
|
+
"[xds_client %p] %s resource %s identical to current, ignoring.",
|
790
|
+
xds_client(), result_.type_url.c_str(), result->name.c_str());
|
708
791
|
}
|
709
|
-
|
792
|
+
return;
|
710
793
|
}
|
711
|
-
|
794
|
+
// Update the resource state.
|
795
|
+
resource_state.resource = std::move(*result->resource);
|
796
|
+
resource_state.meta = CreateResourceMetadataAcked(
|
797
|
+
std::string(serialized_resource), result_.version, update_time_);
|
798
|
+
// Notify watchers.
|
799
|
+
auto& watchers_list = resource_state.watchers;
|
800
|
+
auto* value =
|
801
|
+
result_.type->CopyResource(resource_state.resource.get()).release();
|
802
|
+
xds_client()->work_serializer_.Schedule(
|
803
|
+
[watchers_list, value]()
|
804
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&xds_client()->work_serializer_) {
|
805
|
+
for (const auto& p : watchers_list) {
|
806
|
+
p.first->OnGenericResourceChanged(value);
|
807
|
+
}
|
808
|
+
delete value;
|
809
|
+
},
|
810
|
+
DEBUG_LOCATION);
|
712
811
|
}
|
713
812
|
|
714
813
|
//
|
@@ -722,206 +821,104 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
722
821
|
? "AdsCallState"
|
723
822
|
: nullptr),
|
724
823
|
parent_(std::move(parent)) {
|
725
|
-
// Init the ADS call. Note that the call will progress every time there's
|
726
|
-
// activity in xds_client()->interested_parties_, which is comprised of
|
727
|
-
// the polling entities from client_channel.
|
728
824
|
GPR_ASSERT(xds_client() != nullptr);
|
729
|
-
//
|
730
|
-
const
|
825
|
+
// Init the ADS call.
|
826
|
+
const char* method =
|
731
827
|
chand()->server_.ShouldUseV3()
|
732
|
-
?
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
828
|
+
? "/envoy.service.discovery.v3.AggregatedDiscoveryService/"
|
829
|
+
"StreamAggregatedResources"
|
830
|
+
: "/envoy.service.discovery.v2.AggregatedDiscoveryService/"
|
831
|
+
"StreamAggregatedResources";
|
832
|
+
call_ = chand()->transport_->CreateStreamingCall(
|
833
|
+
method, absl::make_unique<StreamEventHandler>(
|
834
|
+
// Passing the initial ref here. This ref will go away when
|
835
|
+
// the StreamEventHandler is destroyed.
|
836
|
+
RefCountedPtr<AdsCallState>(this)));
|
738
837
|
GPR_ASSERT(call_ != nullptr);
|
739
|
-
// Init data associated with the call.
|
740
|
-
grpc_metadata_array_init(&initial_metadata_recv_);
|
741
|
-
grpc_metadata_array_init(&trailing_metadata_recv_);
|
742
838
|
// Start the call.
|
743
839
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
744
840
|
gpr_log(GPR_INFO,
|
745
|
-
"[xds_client %p]
|
746
|
-
"call: %p)",
|
747
|
-
xds_client(), chand(), this,
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
memset(ops, 0, sizeof(ops));
|
753
|
-
// Op: send initial metadata.
|
754
|
-
grpc_op* op = ops;
|
755
|
-
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
756
|
-
op->data.send_initial_metadata.count = 0;
|
757
|
-
op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
|
758
|
-
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
|
759
|
-
op->reserved = nullptr;
|
760
|
-
op++;
|
761
|
-
call_error = grpc_call_start_batch_and_execute(
|
762
|
-
call_, ops, static_cast<size_t>(op - ops), nullptr);
|
763
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
764
|
-
// Op: send request message.
|
765
|
-
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
766
|
-
grpc_schedule_on_exec_ctx);
|
841
|
+
"[xds_client %p] xds server %s: starting ADS call "
|
842
|
+
"(calld: %p, call: %p)",
|
843
|
+
xds_client(), chand()->server_.server_uri.c_str(), this,
|
844
|
+
call_.get());
|
845
|
+
}
|
846
|
+
// If this is a reconnect, add any necessary subscriptions from what's
|
847
|
+
// already in the cache.
|
767
848
|
for (const auto& a : xds_client()->authority_state_map_) {
|
768
849
|
const std::string& authority = a.first;
|
769
850
|
// Skip authorities that are not using this xDS channel.
|
770
851
|
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});
|
852
|
+
for (const auto& t : a.second.resource_map) {
|
853
|
+
const XdsResourceType* type = t.first;
|
854
|
+
for (const auto& r : t.second) {
|
855
|
+
const XdsResourceKey& resource_key = r.first;
|
856
|
+
SubscribeLocked(type, {authority, resource_key}, /*delay_send=*/true);
|
857
|
+
}
|
786
858
|
}
|
787
859
|
}
|
788
|
-
//
|
789
|
-
|
790
|
-
|
791
|
-
|
792
|
-
&initial_metadata_recv_;
|
793
|
-
op->flags = 0;
|
794
|
-
op->reserved = nullptr;
|
795
|
-
op++;
|
796
|
-
// Op: recv response.
|
797
|
-
op->op = GRPC_OP_RECV_MESSAGE;
|
798
|
-
op->data.recv_message.recv_message = &recv_message_payload_;
|
799
|
-
op->flags = 0;
|
800
|
-
op->reserved = nullptr;
|
801
|
-
op++;
|
802
|
-
Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
|
803
|
-
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
|
804
|
-
grpc_schedule_on_exec_ctx);
|
805
|
-
call_error = grpc_call_start_batch_and_execute(
|
806
|
-
call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
|
807
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
808
|
-
// Op: recv server status.
|
809
|
-
op = ops;
|
810
|
-
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
|
811
|
-
op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
|
812
|
-
op->data.recv_status_on_client.status = &status_code_;
|
813
|
-
op->data.recv_status_on_client.status_details = &status_details_;
|
814
|
-
op->flags = 0;
|
815
|
-
op->reserved = nullptr;
|
816
|
-
op++;
|
817
|
-
// This callback signals the end of the call, so it relies on the initial
|
818
|
-
// ref instead of a new ref. When it's invoked, it's the initial ref that is
|
819
|
-
// unreffed.
|
820
|
-
GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
|
821
|
-
grpc_schedule_on_exec_ctx);
|
822
|
-
call_error = grpc_call_start_batch_and_execute(
|
823
|
-
call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
|
824
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
825
|
-
}
|
826
|
-
|
827
|
-
XdsClient::ChannelState::AdsCallState::~AdsCallState() {
|
828
|
-
grpc_metadata_array_destroy(&initial_metadata_recv_);
|
829
|
-
grpc_metadata_array_destroy(&trailing_metadata_recv_);
|
830
|
-
grpc_byte_buffer_destroy(send_message_payload_);
|
831
|
-
grpc_byte_buffer_destroy(recv_message_payload_);
|
832
|
-
grpc_slice_unref_internal(status_details_);
|
833
|
-
GPR_ASSERT(call_ != nullptr);
|
834
|
-
grpc_call_unref(call_);
|
860
|
+
// Send initial message if we added any subscriptions above.
|
861
|
+
for (const auto& p : state_map_) {
|
862
|
+
SendMessageLocked(p.first);
|
863
|
+
}
|
835
864
|
}
|
836
865
|
|
837
866
|
void XdsClient::ChannelState::AdsCallState::Orphan() {
|
838
|
-
GPR_ASSERT(call_ != nullptr);
|
839
|
-
// If we are here because xds_client wants to cancel the call,
|
840
|
-
// on_status_received_ will complete the cancellation and clean up. Otherwise,
|
841
|
-
// we are here because xds_client has to orphan a failed call, then the
|
842
|
-
// following cancellation will be a no-op.
|
843
|
-
grpc_call_cancel_internal(call_);
|
844
867
|
state_map_.clear();
|
845
|
-
// Note that the initial ref is
|
846
|
-
//
|
868
|
+
// Note that the initial ref is held by the StreamEventHandler, which
|
869
|
+
// will be destroyed when call_ is destroyed, which may not happen
|
870
|
+
// here, since there may be other refs held to call_ by internal callbacks.
|
871
|
+
call_.reset();
|
847
872
|
}
|
848
873
|
|
849
874
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
850
|
-
const
|
875
|
+
const XdsResourceType* type)
|
851
876
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
852
877
|
// Buffer message sending if an existing message is in flight.
|
853
|
-
if (
|
854
|
-
buffered_requests_.insert(
|
878
|
+
if (send_message_pending_) {
|
879
|
+
buffered_requests_.insert(type);
|
855
880
|
return;
|
856
881
|
}
|
857
|
-
auto& state = state_map_[
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
chand()->server_, type_url, resource_map,
|
864
|
-
chand()->resource_type_version_map_[type_url], state.nonce,
|
865
|
-
GRPC_ERROR_REF(state.error), !sent_initial_message_);
|
866
|
-
if (type_url != XdsApi::kLdsTypeUrl && type_url != XdsApi::kRdsTypeUrl &&
|
867
|
-
type_url != XdsApi::kCdsTypeUrl && type_url != XdsApi::kEdsTypeUrl) {
|
868
|
-
state_map_.erase(type_url);
|
869
|
-
}
|
882
|
+
auto& state = state_map_[type];
|
883
|
+
std::string serialized_message = xds_client()->api_.CreateAdsRequest(
|
884
|
+
chand()->server_,
|
885
|
+
chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
|
886
|
+
chand()->resource_type_version_map_[type], state.nonce,
|
887
|
+
ResourceNamesForRequest(type), state.status, !sent_initial_message_);
|
870
888
|
sent_initial_message_ = true;
|
871
889
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
872
890
|
gpr_log(GPR_INFO,
|
873
|
-
"[xds_client %p] sending ADS request: type=%s
|
874
|
-
"error=%s",
|
875
|
-
xds_client(),
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
GRPC_ERROR_UNREF(state.error);
|
880
|
-
state.error = GRPC_ERROR_NONE;
|
881
|
-
// Create message payload.
|
882
|
-
send_message_payload_ =
|
883
|
-
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
884
|
-
grpc_slice_unref_internal(request_payload_slice);
|
885
|
-
// Send the message.
|
886
|
-
grpc_op op;
|
887
|
-
memset(&op, 0, sizeof(op));
|
888
|
-
op.op = GRPC_OP_SEND_MESSAGE;
|
889
|
-
op.data.send_message.send_message = send_message_payload_;
|
890
|
-
Ref(DEBUG_LOCATION, "ADS+OnRequestSentLocked").release();
|
891
|
-
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
892
|
-
grpc_schedule_on_exec_ctx);
|
893
|
-
grpc_call_error call_error =
|
894
|
-
grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
|
895
|
-
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
896
|
-
gpr_log(GPR_ERROR,
|
897
|
-
"[xds_client %p] calld=%p call_error=%d sending ADS message",
|
898
|
-
xds_client(), this, call_error);
|
899
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
891
|
+
"[xds_client %p] xds server %s: sending ADS request: type=%s "
|
892
|
+
"version=%s nonce=%s error=%s",
|
893
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
894
|
+
std::string(type->type_url()).c_str(),
|
895
|
+
chand()->resource_type_version_map_[type].c_str(),
|
896
|
+
state.nonce.c_str(), state.status.ToString().c_str());
|
900
897
|
}
|
898
|
+
state.status = absl::OkStatus();
|
899
|
+
call_->SendMessage(std::move(serialized_message));
|
900
|
+
send_message_pending_ = true;
|
901
901
|
}
|
902
902
|
|
903
903
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
904
|
-
const
|
905
|
-
auto& state = state_map_[
|
906
|
-
.subscribed_resources[resource.authority][resource.id];
|
904
|
+
const XdsResourceType* type, const XdsResourceName& name, bool delay_send) {
|
905
|
+
auto& state = state_map_[type].subscribed_resources[name.authority][name.key];
|
907
906
|
if (state == nullptr) {
|
908
|
-
state = MakeOrphanable<
|
909
|
-
|
910
|
-
!chand()->resource_type_version_map_[type_url].empty());
|
911
|
-
SendMessageLocked(type_url);
|
907
|
+
state = MakeOrphanable<ResourceTimer>(type, name);
|
908
|
+
if (!delay_send) SendMessageLocked(type);
|
912
909
|
}
|
913
910
|
}
|
914
911
|
|
915
912
|
void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
916
|
-
const
|
913
|
+
const XdsResourceType* type, const XdsResourceName& name,
|
917
914
|
bool delay_unsubscription) {
|
918
|
-
auto& type_state_map = state_map_[
|
919
|
-
auto& authority_map = type_state_map.subscribed_resources[
|
920
|
-
authority_map.erase(
|
915
|
+
auto& type_state_map = state_map_[type];
|
916
|
+
auto& authority_map = type_state_map.subscribed_resources[name.authority];
|
917
|
+
authority_map.erase(name.key);
|
921
918
|
if (authority_map.empty()) {
|
922
|
-
type_state_map.subscribed_resources.erase(
|
919
|
+
type_state_map.subscribed_resources.erase(name.authority);
|
923
920
|
}
|
924
|
-
if (!delay_unsubscription) SendMessageLocked(
|
921
|
+
if (!delay_unsubscription) SendMessageLocked(type);
|
925
922
|
}
|
926
923
|
|
927
924
|
bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
@@ -931,618 +928,176 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
931
928
|
return false;
|
932
929
|
}
|
933
930
|
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
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);
|
931
|
+
void XdsClient::ChannelState::AdsCallState::OnRequestSent(bool ok) {
|
932
|
+
MutexLock lock(&xds_client()->mu_);
|
933
|
+
send_message_pending_ = false;
|
934
|
+
if (ok && IsCurrentCallOnChannel()) {
|
935
|
+
// Continue to send another pending message if any.
|
936
|
+
// TODO(roth): The current code to handle buffered messages has the
|
937
|
+
// advantage of sending only the most recent list of resource names for
|
938
|
+
// each resource type (no matter how many times that resource type has
|
939
|
+
// been requested to send while the current message sending is still
|
940
|
+
// pending). But its disadvantage is that we send the requests in fixed
|
941
|
+
// order of resource types. We need to fix this if we are seeing some
|
942
|
+
// resource type(s) starved due to frequent requests of other resource
|
943
|
+
// type(s).
|
944
|
+
auto it = buffered_requests_.begin();
|
945
|
+
if (it != buffered_requests_.end()) {
|
946
|
+
SendMessageLocked(*it);
|
947
|
+
buffered_requests_.erase(it);
|
1005
948
|
}
|
1006
949
|
}
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
950
|
+
}
|
951
|
+
|
952
|
+
void XdsClient::ChannelState::AdsCallState::OnRecvMessage(
|
953
|
+
absl::string_view payload) {
|
954
|
+
{
|
955
|
+
MutexLock lock(&xds_client()->mu_);
|
956
|
+
if (!IsCurrentCallOnChannel()) return;
|
957
|
+
// Parse and validate the response.
|
958
|
+
AdsResponseParser parser(this);
|
959
|
+
absl::Status status =
|
960
|
+
xds_client()->api_.ParseAdsResponse(chand()->server_, payload, &parser);
|
961
|
+
if (!status.ok()) {
|
962
|
+
// Ignore unparsable response.
|
963
|
+
gpr_log(GPR_ERROR,
|
964
|
+
"[xds_client %p] xds server %s: error parsing ADS response (%s) "
|
965
|
+
"-- ignoring",
|
966
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
967
|
+
status.ToString().c_str());
|
968
|
+
} else {
|
969
|
+
seen_response_ = true;
|
970
|
+
AdsResponseParser::Result result = parser.TakeResult();
|
971
|
+
// Update nonce.
|
972
|
+
auto& state = state_map_[result.type];
|
973
|
+
state.nonce = result.nonce;
|
974
|
+
// If we got an error, set state.error so that we'll NACK the update.
|
975
|
+
if (!result.errors.empty()) {
|
976
|
+
state.status = absl::UnavailableError(
|
977
|
+
absl::StrCat("xDS response validation errors: [",
|
978
|
+
absl::StrJoin(result.errors, "; "), "]"));
|
979
|
+
gpr_log(GPR_ERROR,
|
980
|
+
"[xds_client %p] xds server %s: ADS response invalid for "
|
981
|
+
"resource "
|
982
|
+
"type %s version %s, will NACK: nonce=%s status=%s",
|
983
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
984
|
+
result.type_url.c_str(), result.version.c_str(),
|
985
|
+
state.nonce.c_str(), state.status.ToString().c_str());
|
1021
986
|
}
|
1022
|
-
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
987
|
+
// Delete resources not seen in update if needed.
|
988
|
+
if (result.type->AllResourcesRequiredInSotW()) {
|
989
|
+
for (auto& a : xds_client()->authority_state_map_) {
|
990
|
+
const std::string& authority = a.first;
|
991
|
+
AuthorityState& authority_state = a.second;
|
992
|
+
// Skip authorities that are not using this xDS channel.
|
993
|
+
if (authority_state.channel_state != chand()) continue;
|
994
|
+
auto seen_authority_it = result.resources_seen.find(authority);
|
995
|
+
// Find this resource type.
|
996
|
+
auto type_it = authority_state.resource_map.find(result.type);
|
997
|
+
if (type_it == authority_state.resource_map.end()) continue;
|
998
|
+
// Iterate over resource ids.
|
999
|
+
for (auto& r : type_it->second) {
|
1000
|
+
const XdsResourceKey& resource_key = r.first;
|
1001
|
+
ResourceState& resource_state = r.second;
|
1002
|
+
if (seen_authority_it == result.resources_seen.end() ||
|
1003
|
+
seen_authority_it->second.find(resource_key) ==
|
1004
|
+
seen_authority_it->second.end()) {
|
1005
|
+
// If the resource was newly requested but has not yet been
|
1006
|
+
// received, we don't want to generate an error for the
|
1007
|
+
// watchers, because this ADS response may be in reaction to an
|
1008
|
+
// earlier request that did not yet request the new resource, so
|
1009
|
+
// its absence from the response does not necessarily indicate
|
1010
|
+
// that the resource does not exist. For that case, we rely on
|
1011
|
+
// the request timeout instead.
|
1012
|
+
if (resource_state.resource == nullptr) continue;
|
1013
|
+
if (chand()->server_.IgnoreResourceDeletion()) {
|
1014
|
+
if (!resource_state.ignored_deletion) {
|
1015
|
+
gpr_log(GPR_ERROR,
|
1016
|
+
"[xds_client %p] xds server %s: ignoring deletion "
|
1017
|
+
"for resource type %s name %s",
|
1018
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1019
|
+
result.type_url.c_str(),
|
1020
|
+
XdsClient::ConstructFullXdsResourceName(
|
1021
|
+
authority, result.type_url.c_str(), resource_key)
|
1022
|
+
.c_str());
|
1023
|
+
resource_state.ignored_deletion = true;
|
1024
|
+
}
|
1025
|
+
} else {
|
1026
|
+
resource_state.resource.reset();
|
1027
|
+
xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
1028
|
+
resource_state.watchers);
|
1029
|
+
}
|
1030
|
+
}
|
1031
|
+
}
|
1046
1032
|
}
|
1047
1033
|
}
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
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();
|
1034
|
+
// If we had valid resources, update the version.
|
1035
|
+
if (result.have_valid_resources) {
|
1036
|
+
chand()->resource_type_version_map_[result.type] =
|
1037
|
+
std::move(result.version);
|
1038
|
+
// Start load reporting if needed.
|
1039
|
+
auto& lrs_call = chand()->lrs_calld_;
|
1040
|
+
if (lrs_call != nullptr) {
|
1041
|
+
LrsCallState* lrs_calld = lrs_call->calld();
|
1042
|
+
if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
|
1068
1043
|
}
|
1069
1044
|
}
|
1045
|
+
// Send ACK or NACK.
|
1046
|
+
SendMessageLocked(result.type);
|
1070
1047
|
}
|
1071
1048
|
}
|
1049
|
+
xds_client()->work_serializer_.DrainQueue();
|
1072
1050
|
}
|
1073
1051
|
|
1074
|
-
void XdsClient::ChannelState::AdsCallState::
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
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();
|
1052
|
+
void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
1053
|
+
absl::Status status) {
|
1054
|
+
{
|
1055
|
+
MutexLock lock(&xds_client()->mu_);
|
1090
1056
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1091
|
-
gpr_log(GPR_INFO,
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
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;
|
1057
|
+
gpr_log(GPR_INFO,
|
1058
|
+
"[xds_client %p] xds server %s: ADS call status received "
|
1059
|
+
"(chand=%p, ads_calld=%p, call=%p): %s",
|
1060
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1061
|
+
call_.get(), status.ToString().c_str());
|
1107
1062
|
}
|
1108
|
-
//
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1063
|
+
// Ignore status from a stale call.
|
1064
|
+
if (IsCurrentCallOnChannel()) {
|
1065
|
+
// Try to restart the call.
|
1066
|
+
parent_->OnCallFinishedLocked();
|
1067
|
+
// Send error to all watchers.
|
1068
|
+
xds_client()->NotifyOnErrorLocked(absl::UnavailableError(absl::StrFormat(
|
1069
|
+
"xDS call failed: xDS server: %s, ADS call status: %s",
|
1070
|
+
chand()->server_.server_uri, status.ToString().c_str())));
|
1115
1071
|
}
|
1116
1072
|
}
|
1073
|
+
xds_client()->work_serializer_.DrainQueue();
|
1117
1074
|
}
|
1118
1075
|
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
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
|
-
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1350
|
-
void* arg, grpc_error_handle error) {
|
1351
|
-
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1352
|
-
{
|
1353
|
-
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1354
|
-
ads_calld->OnRequestSentLocked(GRPC_ERROR_REF(error));
|
1355
|
-
}
|
1356
|
-
ads_calld->Unref(DEBUG_LOCATION, "ADS+OnRequestSentLocked");
|
1357
|
-
}
|
1358
|
-
|
1359
|
-
void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
1360
|
-
grpc_error_handle error) {
|
1361
|
-
if (IsCurrentCallOnChannel() && error == GRPC_ERROR_NONE) {
|
1362
|
-
// Clean up the sent message.
|
1363
|
-
grpc_byte_buffer_destroy(send_message_payload_);
|
1364
|
-
send_message_payload_ = nullptr;
|
1365
|
-
// Continue to send another pending message if any.
|
1366
|
-
// TODO(roth): The current code to handle buffered messages has the
|
1367
|
-
// advantage of sending only the most recent list of resource names for
|
1368
|
-
// each resource type (no matter how many times that resource type has
|
1369
|
-
// been requested to send while the current message sending is still
|
1370
|
-
// pending). But its disadvantage is that we send the requests in fixed
|
1371
|
-
// order of resource types. We need to fix this if we are seeing some
|
1372
|
-
// resource type(s) starved due to frequent requests of other resource
|
1373
|
-
// type(s).
|
1374
|
-
auto it = buffered_requests_.begin();
|
1375
|
-
if (it != buffered_requests_.end()) {
|
1376
|
-
SendMessageLocked(*it);
|
1377
|
-
buffered_requests_.erase(it);
|
1378
|
-
}
|
1379
|
-
}
|
1380
|
-
GRPC_ERROR_UNREF(error);
|
1381
|
-
}
|
1382
|
-
|
1383
|
-
void XdsClient::ChannelState::AdsCallState::OnResponseReceived(
|
1384
|
-
void* arg, grpc_error_handle /* error */) {
|
1385
|
-
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1386
|
-
bool done;
|
1387
|
-
{
|
1388
|
-
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1389
|
-
done = ads_calld->OnResponseReceivedLocked();
|
1390
|
-
}
|
1391
|
-
if (done) ads_calld->Unref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked");
|
1392
|
-
}
|
1393
|
-
|
1394
|
-
bool XdsClient::ChannelState::AdsCallState::OnResponseReceivedLocked() {
|
1395
|
-
// Empty payload means the call was cancelled.
|
1396
|
-
if (!IsCurrentCallOnChannel() || recv_message_payload_ == nullptr) {
|
1397
|
-
return true;
|
1398
|
-
}
|
1399
|
-
// Read the response.
|
1400
|
-
grpc_byte_buffer_reader bbr;
|
1401
|
-
grpc_byte_buffer_reader_init(&bbr, recv_message_payload_);
|
1402
|
-
grpc_slice response_slice = grpc_byte_buffer_reader_readall(&bbr);
|
1403
|
-
grpc_byte_buffer_reader_destroy(&bbr);
|
1404
|
-
grpc_byte_buffer_destroy(recv_message_payload_);
|
1405
|
-
recv_message_payload_ = nullptr;
|
1406
|
-
// Parse and validate the response.
|
1407
|
-
XdsApi::AdsParseResult result = xds_client()->api_.ParseAdsResponse(
|
1408
|
-
chand()->server_, response_slice,
|
1409
|
-
ResourceNamesForRequest(XdsApi::kLdsTypeUrl),
|
1410
|
-
ResourceNamesForRequest(XdsApi::kRdsTypeUrl),
|
1411
|
-
ResourceNamesForRequest(XdsApi::kCdsTypeUrl),
|
1412
|
-
ResourceNamesForRequest(XdsApi::kEdsTypeUrl));
|
1413
|
-
grpc_slice_unref_internal(response_slice);
|
1414
|
-
if (result.type_url.empty()) {
|
1415
|
-
// Ignore unparsable response.
|
1416
|
-
gpr_log(GPR_ERROR,
|
1417
|
-
"[xds_client %p] Error parsing ADS response (%s) -- ignoring",
|
1418
|
-
xds_client(), grpc_error_std_string(result.parse_error).c_str());
|
1419
|
-
GRPC_ERROR_UNREF(result.parse_error);
|
1420
|
-
} else {
|
1421
|
-
grpc_millis update_time = grpc_core::ExecCtx::Get()->Now();
|
1422
|
-
// Update nonce.
|
1423
|
-
auto& state = state_map_[result.type_url];
|
1424
|
-
state.nonce = std::move(result.nonce);
|
1425
|
-
// If we got an error, we'll NACK the update.
|
1426
|
-
if (result.parse_error != GRPC_ERROR_NONE) {
|
1427
|
-
gpr_log(GPR_ERROR,
|
1428
|
-
"[xds_client %p] ADS response invalid for resource type %s "
|
1429
|
-
"version %s, will NACK: nonce=%s error=%s",
|
1430
|
-
xds_client(), result.type_url.c_str(), result.version.c_str(),
|
1431
|
-
state.nonce.c_str(),
|
1432
|
-
grpc_error_std_string(result.parse_error).c_str());
|
1433
|
-
result.parse_error =
|
1434
|
-
grpc_error_set_int(result.parse_error, GRPC_ERROR_INT_GRPC_STATUS,
|
1435
|
-
GRPC_STATUS_UNAVAILABLE);
|
1436
|
-
GRPC_ERROR_UNREF(state.error);
|
1437
|
-
state.error = result.parse_error;
|
1438
|
-
RejectAdsUpdateLocked(update_time, result);
|
1439
|
-
}
|
1440
|
-
// Process any valid resources.
|
1441
|
-
bool have_valid_resources = false;
|
1442
|
-
if (result.type_url == XdsApi::kLdsTypeUrl) {
|
1443
|
-
have_valid_resources = !result.lds_update_map.empty();
|
1444
|
-
AcceptLdsUpdateLocked(result.version, update_time,
|
1445
|
-
std::move(result.lds_update_map),
|
1446
|
-
result.resource_names_failed);
|
1447
|
-
} else if (result.type_url == XdsApi::kRdsTypeUrl) {
|
1448
|
-
have_valid_resources = !result.rds_update_map.empty();
|
1449
|
-
AcceptRdsUpdateLocked(result.version, update_time,
|
1450
|
-
std::move(result.rds_update_map));
|
1451
|
-
} else if (result.type_url == XdsApi::kCdsTypeUrl) {
|
1452
|
-
have_valid_resources = !result.cds_update_map.empty();
|
1453
|
-
AcceptCdsUpdateLocked(result.version, update_time,
|
1454
|
-
std::move(result.cds_update_map),
|
1455
|
-
result.resource_names_failed);
|
1456
|
-
} else if (result.type_url == XdsApi::kEdsTypeUrl) {
|
1457
|
-
have_valid_resources = !result.eds_update_map.empty();
|
1458
|
-
AcceptEdsUpdateLocked(result.version, update_time,
|
1459
|
-
std::move(result.eds_update_map));
|
1460
|
-
}
|
1461
|
-
if (have_valid_resources) {
|
1462
|
-
seen_response_ = true;
|
1463
|
-
chand()->resource_type_version_map_[result.type_url] = result.version;
|
1464
|
-
// Start load reporting if needed.
|
1465
|
-
auto& lrs_call = chand()->lrs_calld_;
|
1466
|
-
if (lrs_call != nullptr) {
|
1467
|
-
LrsCallState* lrs_calld = lrs_call->calld();
|
1468
|
-
if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
|
1469
|
-
}
|
1470
|
-
}
|
1471
|
-
// Send ACK or NACK.
|
1472
|
-
SendMessageLocked(result.type_url);
|
1473
|
-
}
|
1474
|
-
if (xds_client()->shutting_down_) return true;
|
1475
|
-
// Keep listening for updates.
|
1476
|
-
grpc_op op;
|
1477
|
-
memset(&op, 0, sizeof(op));
|
1478
|
-
op.op = GRPC_OP_RECV_MESSAGE;
|
1479
|
-
op.data.recv_message.recv_message = &recv_message_payload_;
|
1480
|
-
op.flags = 0;
|
1481
|
-
op.reserved = nullptr;
|
1482
|
-
GPR_ASSERT(call_ != nullptr);
|
1483
|
-
// Reuse the "ADS+OnResponseReceivedLocked" ref taken in ctor.
|
1484
|
-
const grpc_call_error call_error =
|
1485
|
-
grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
|
1486
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1487
|
-
return false;
|
1488
|
-
}
|
1489
|
-
|
1490
|
-
void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
1491
|
-
void* arg, grpc_error_handle error) {
|
1492
|
-
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1493
|
-
{
|
1494
|
-
MutexLock lock(&ads_calld->xds_client()->mu_);
|
1495
|
-
ads_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1496
|
-
}
|
1497
|
-
ads_calld->Unref(DEBUG_LOCATION, "ADS+OnStatusReceivedLocked");
|
1498
|
-
}
|
1499
|
-
|
1500
|
-
void XdsClient::ChannelState::AdsCallState::OnStatusReceivedLocked(
|
1501
|
-
grpc_error_handle error) {
|
1502
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1503
|
-
char* status_details = grpc_slice_to_c_string(status_details_);
|
1504
|
-
gpr_log(GPR_INFO,
|
1505
|
-
"[xds_client %p] ADS call status received. Status = %d, details "
|
1506
|
-
"= '%s', (chand: %p, ads_calld: %p, call: %p), error '%s'",
|
1507
|
-
xds_client(), status_code_, status_details, chand(), this, call_,
|
1508
|
-
grpc_error_std_string(error).c_str());
|
1509
|
-
gpr_free(status_details);
|
1510
|
-
}
|
1511
|
-
// Ignore status from a stale call.
|
1512
|
-
if (IsCurrentCallOnChannel()) {
|
1513
|
-
// Try to restart the call.
|
1514
|
-
parent_->OnCallFinishedLocked();
|
1515
|
-
// Send error to all watchers.
|
1516
|
-
xds_client()->NotifyOnErrorLocked(
|
1517
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("xds call failed"));
|
1518
|
-
}
|
1519
|
-
GRPC_ERROR_UNREF(error);
|
1520
|
-
}
|
1521
|
-
|
1522
|
-
bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
|
1523
|
-
// If the retryable ADS call is null (which only happens when the xds channel
|
1524
|
-
// is shutting down), all the ADS calls are stale.
|
1525
|
-
if (chand()->ads_calld_ == nullptr) return false;
|
1526
|
-
return this == chand()->ads_calld_->calld();
|
1527
|
-
}
|
1528
|
-
|
1529
|
-
std::map<absl::string_view /*authority*/, std::set<absl::string_view /*name*/>>
|
1530
|
-
XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
1531
|
-
const std::string& type_url) {
|
1532
|
-
std::map<absl::string_view /*authority*/,
|
1533
|
-
std::set<absl::string_view /*name*/>>
|
1534
|
-
resource_map;
|
1535
|
-
auto it = state_map_.find(type_url);
|
1536
|
-
if (it != state_map_.end()) {
|
1537
|
-
for (auto& a : it->second.subscribed_resources) {
|
1538
|
-
for (auto& p : a.second) {
|
1539
|
-
resource_map[a.first].insert(p.first);
|
1540
|
-
OrphanablePtr<ResourceState>& state = p.second;
|
1541
|
-
state->Start(Ref(DEBUG_LOCATION, "ResourceState"));
|
1542
|
-
}
|
1076
|
+
bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
|
1077
|
+
// If the retryable ADS call is null (which only happens when the xds
|
1078
|
+
// channel is shutting down), all the ADS calls are stale.
|
1079
|
+
if (chand()->ads_calld_ == nullptr) return false;
|
1080
|
+
return this == chand()->ads_calld_->calld();
|
1081
|
+
}
|
1082
|
+
|
1083
|
+
std::vector<std::string>
|
1084
|
+
XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
1085
|
+
const XdsResourceType* type) {
|
1086
|
+
std::vector<std::string> resource_names;
|
1087
|
+
auto it = state_map_.find(type);
|
1088
|
+
if (it != state_map_.end()) {
|
1089
|
+
for (auto& a : it->second.subscribed_resources) {
|
1090
|
+
const std::string& authority = a.first;
|
1091
|
+
for (auto& p : a.second) {
|
1092
|
+
const XdsResourceKey& resource_key = p.first;
|
1093
|
+
resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
|
1094
|
+
authority, type->type_url(), resource_key));
|
1095
|
+
OrphanablePtr<ResourceTimer>& resource_timer = p.second;
|
1096
|
+
resource_timer->MaybeStartTimer(Ref(DEBUG_LOCATION, "ResourceTimer"));
|
1097
|
+
}
|
1543
1098
|
}
|
1544
1099
|
}
|
1545
|
-
return
|
1100
|
+
return resource_names;
|
1546
1101
|
}
|
1547
1102
|
|
1548
1103
|
//
|
@@ -1550,38 +1105,30 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
|
1550
1105
|
//
|
1551
1106
|
|
1552
1107
|
void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
1553
|
-
if (
|
1554
|
-
|
1108
|
+
if (timer_handle_.has_value() &&
|
1109
|
+
GetDefaultEventEngine()->Cancel(*timer_handle_)) {
|
1110
|
+
timer_handle_.reset();
|
1111
|
+
Unref(DEBUG_LOCATION, "Orphan");
|
1555
1112
|
}
|
1556
1113
|
}
|
1557
1114
|
|
1558
1115
|
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1559
1116
|
ScheduleNextReportLocked() {
|
1560
|
-
|
1561
|
-
|
1562
|
-
|
1563
|
-
|
1564
|
-
|
1565
|
-
|
1566
|
-
|
1567
|
-
void* arg, grpc_error_handle error) {
|
1568
|
-
Reporter* self = static_cast<Reporter*>(arg);
|
1569
|
-
bool done;
|
1570
|
-
{
|
1571
|
-
MutexLock lock(&self->xds_client()->mu_);
|
1572
|
-
done = self->OnNextReportTimerLocked(GRPC_ERROR_REF(error));
|
1573
|
-
}
|
1574
|
-
if (done) self->Unref(DEBUG_LOCATION, "Reporter+timer");
|
1117
|
+
timer_handle_ = GetDefaultEventEngine()->RunAfter(report_interval_, [this]() {
|
1118
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
1119
|
+
ExecCtx exec_ctx;
|
1120
|
+
if (OnNextReportTimer()) {
|
1121
|
+
Unref(DEBUG_LOCATION, "OnNextReportTimer()");
|
1122
|
+
}
|
1123
|
+
});
|
1575
1124
|
}
|
1576
1125
|
|
1577
|
-
bool XdsClient::ChannelState::LrsCallState::Reporter::
|
1578
|
-
|
1579
|
-
|
1580
|
-
if (
|
1581
|
-
|
1582
|
-
|
1583
|
-
}
|
1584
|
-
return SendReportLocked();
|
1126
|
+
bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer() {
|
1127
|
+
MutexLock lock(&xds_client()->mu_);
|
1128
|
+
timer_handle_.reset();
|
1129
|
+
if (!IsCurrentReporterOnCall()) return true;
|
1130
|
+
SendReportLocked();
|
1131
|
+
return false;
|
1585
1132
|
}
|
1586
1133
|
|
1587
1134
|
namespace {
|
@@ -1603,74 +1150,52 @@ bool LoadReportCountersAreZero(const XdsApi::ClusterLoadReportMap& snapshot) {
|
|
1603
1150
|
bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
1604
1151
|
// Construct snapshot from all reported stats.
|
1605
1152
|
XdsApi::ClusterLoadReportMap snapshot =
|
1606
|
-
xds_client()->BuildLoadReportSnapshotLocked(parent_->
|
1153
|
+
xds_client()->BuildLoadReportSnapshotLocked(parent_->chand()->server_,
|
1154
|
+
parent_->send_all_clusters_,
|
1607
1155
|
parent_->cluster_names_);
|
1608
1156
|
// Skip client load report if the counters were all zero in the last
|
1609
1157
|
// report and they are still zero in this one.
|
1610
1158
|
const bool old_val = last_report_counters_were_zero_;
|
1611
1159
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1612
1160
|
if (old_val && last_report_counters_were_zero_) {
|
1613
|
-
|
1614
|
-
|
1161
|
+
auto it = xds_client()->xds_load_report_server_map_.find(
|
1162
|
+
parent_->chand()->server_);
|
1163
|
+
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1164
|
+
it->second.load_report_map.empty()) {
|
1165
|
+
it->second.channel_state->StopLrsCallLocked();
|
1615
1166
|
return true;
|
1616
1167
|
}
|
1617
1168
|
ScheduleNextReportLocked();
|
1618
1169
|
return false;
|
1619
1170
|
}
|
1620
|
-
//
|
1621
|
-
|
1171
|
+
// Send a request that contains the snapshot.
|
1172
|
+
std::string serialized_payload =
|
1622
1173
|
xds_client()->api_.CreateLrsRequest(std::move(snapshot));
|
1623
|
-
parent_->
|
1624
|
-
|
1625
|
-
grpc_slice_unref_internal(request_payload_slice);
|
1626
|
-
// Send the report.
|
1627
|
-
grpc_op op;
|
1628
|
-
memset(&op, 0, sizeof(op));
|
1629
|
-
op.op = GRPC_OP_SEND_MESSAGE;
|
1630
|
-
op.data.send_message.send_message = parent_->send_message_payload_;
|
1631
|
-
grpc_call_error call_error = grpc_call_start_batch_and_execute(
|
1632
|
-
parent_->call_, &op, 1, &on_report_done_);
|
1633
|
-
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
1634
|
-
gpr_log(GPR_ERROR,
|
1635
|
-
"[xds_client %p] calld=%p call_error=%d sending client load report",
|
1636
|
-
xds_client(), this, call_error);
|
1637
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1638
|
-
}
|
1174
|
+
parent_->call_->SendMessage(std::move(serialized_payload));
|
1175
|
+
parent_->send_message_pending_ = true;
|
1639
1176
|
return false;
|
1640
1177
|
}
|
1641
1178
|
|
1642
|
-
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
if (done) self->Unref(DEBUG_LOCATION, "Reporter+report_done");
|
1651
|
-
}
|
1652
|
-
|
1653
|
-
bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
1654
|
-
grpc_error_handle error) {
|
1655
|
-
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1656
|
-
parent_->send_message_payload_ = nullptr;
|
1179
|
+
void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked() {
|
1180
|
+
// If a reporter starts a send_message op, then the reporting interval
|
1181
|
+
// changes and we destroy that reporter and create a new one, and then
|
1182
|
+
// the send_message op started by the old reporter finishes, this
|
1183
|
+
// method will be called even though it was for a completion started
|
1184
|
+
// by the old reporter. In that case, the timer will be pending, so
|
1185
|
+
// we just ignore the completion and wait for the timer to fire.
|
1186
|
+
if (timer_handle_.has_value()) return;
|
1657
1187
|
// If there are no more registered stats to report, cancel the call.
|
1658
|
-
|
1659
|
-
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
1664
|
-
GRPC_ERROR_UNREF(error);
|
1665
|
-
// If this reporter is no longer the current one on the call, the reason
|
1666
|
-
// might be that it was orphaned for a new one due to config update.
|
1667
|
-
if (!IsCurrentReporterOnCall()) {
|
1668
|
-
parent_->MaybeStartReportingLocked();
|
1188
|
+
auto it =
|
1189
|
+
xds_client()->xds_load_report_server_map_.find(parent_->chand()->server_);
|
1190
|
+
if (it == xds_client()->xds_load_report_server_map_.end()) return;
|
1191
|
+
if (it->second.load_report_map.empty()) {
|
1192
|
+
if (it->second.channel_state != nullptr) {
|
1193
|
+
it->second.channel_state->StopLrsCallLocked();
|
1669
1194
|
}
|
1670
|
-
return
|
1195
|
+
return;
|
1671
1196
|
}
|
1197
|
+
// Otherwise, schedule the next load report.
|
1672
1198
|
ScheduleNextReportLocked();
|
1673
|
-
return false;
|
1674
1199
|
}
|
1675
1200
|
|
1676
1201
|
//
|
@@ -1688,123 +1213,46 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1688
1213
|
// activity in xds_client()->interested_parties_, which is comprised of
|
1689
1214
|
// the polling entities from client_channel.
|
1690
1215
|
GPR_ASSERT(xds_client() != nullptr);
|
1691
|
-
const
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1216
|
+
const char* method = chand()->server_.ShouldUseV3()
|
1217
|
+
? "/envoy.service.load_stats.v3."
|
1218
|
+
"LoadReportingService/StreamLoadStats"
|
1219
|
+
: "/envoy.service.load_stats.v2."
|
1220
|
+
"LoadReportingService/StreamLoadStats";
|
1221
|
+
call_ = chand()->transport_->CreateStreamingCall(
|
1222
|
+
method, absl::make_unique<StreamEventHandler>(
|
1223
|
+
// Passing the initial ref here. This ref will go away when
|
1224
|
+
// the StreamEventHandler is destroyed.
|
1225
|
+
RefCountedPtr<LrsCallState>(this)));
|
1699
1226
|
GPR_ASSERT(call_ != nullptr);
|
1700
|
-
// Init the request payload.
|
1701
|
-
grpc_slice request_payload_slice =
|
1702
|
-
xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
|
1703
|
-
send_message_payload_ =
|
1704
|
-
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
1705
|
-
grpc_slice_unref_internal(request_payload_slice);
|
1706
|
-
// Init other data associated with the LRS call.
|
1707
|
-
grpc_metadata_array_init(&initial_metadata_recv_);
|
1708
|
-
grpc_metadata_array_init(&trailing_metadata_recv_);
|
1709
1227
|
// Start the call.
|
1710
1228
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1711
1229
|
gpr_log(GPR_INFO,
|
1712
|
-
"[xds_client %p]
|
1713
|
-
"call
|
1714
|
-
xds_client(), chand(), this,
|
1715
|
-
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1720
|
-
|
1721
|
-
|
1722
|
-
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
1723
|
-
op->data.send_initial_metadata.count = 0;
|
1724
|
-
op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
|
1725
|
-
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
|
1726
|
-
op->reserved = nullptr;
|
1727
|
-
op++;
|
1728
|
-
// Op: send request message.
|
1729
|
-
GPR_ASSERT(send_message_payload_ != nullptr);
|
1730
|
-
op->op = GRPC_OP_SEND_MESSAGE;
|
1731
|
-
op->data.send_message.send_message = send_message_payload_;
|
1732
|
-
op->flags = 0;
|
1733
|
-
op->reserved = nullptr;
|
1734
|
-
op++;
|
1735
|
-
Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
|
1736
|
-
GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
|
1737
|
-
grpc_schedule_on_exec_ctx);
|
1738
|
-
call_error = grpc_call_start_batch_and_execute(
|
1739
|
-
call_, ops, static_cast<size_t>(op - ops), &on_initial_request_sent_);
|
1740
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1741
|
-
// Op: recv initial metadata.
|
1742
|
-
op = ops;
|
1743
|
-
op->op = GRPC_OP_RECV_INITIAL_METADATA;
|
1744
|
-
op->data.recv_initial_metadata.recv_initial_metadata =
|
1745
|
-
&initial_metadata_recv_;
|
1746
|
-
op->flags = 0;
|
1747
|
-
op->reserved = nullptr;
|
1748
|
-
op++;
|
1749
|
-
// Op: recv response.
|
1750
|
-
op->op = GRPC_OP_RECV_MESSAGE;
|
1751
|
-
op->data.recv_message.recv_message = &recv_message_payload_;
|
1752
|
-
op->flags = 0;
|
1753
|
-
op->reserved = nullptr;
|
1754
|
-
op++;
|
1755
|
-
Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
|
1756
|
-
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
|
1757
|
-
grpc_schedule_on_exec_ctx);
|
1758
|
-
call_error = grpc_call_start_batch_and_execute(
|
1759
|
-
call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
|
1760
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1761
|
-
// Op: recv server status.
|
1762
|
-
op = ops;
|
1763
|
-
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
|
1764
|
-
op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
|
1765
|
-
op->data.recv_status_on_client.status = &status_code_;
|
1766
|
-
op->data.recv_status_on_client.status_details = &status_details_;
|
1767
|
-
op->flags = 0;
|
1768
|
-
op->reserved = nullptr;
|
1769
|
-
op++;
|
1770
|
-
// This callback signals the end of the call, so it relies on the initial
|
1771
|
-
// ref instead of a new ref. When it's invoked, it's the initial ref that is
|
1772
|
-
// unreffed.
|
1773
|
-
GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
|
1774
|
-
grpc_schedule_on_exec_ctx);
|
1775
|
-
call_error = grpc_call_start_batch_and_execute(
|
1776
|
-
call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
|
1777
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1778
|
-
}
|
1779
|
-
|
1780
|
-
XdsClient::ChannelState::LrsCallState::~LrsCallState() {
|
1781
|
-
grpc_metadata_array_destroy(&initial_metadata_recv_);
|
1782
|
-
grpc_metadata_array_destroy(&trailing_metadata_recv_);
|
1783
|
-
grpc_byte_buffer_destroy(send_message_payload_);
|
1784
|
-
grpc_byte_buffer_destroy(recv_message_payload_);
|
1785
|
-
grpc_slice_unref_internal(status_details_);
|
1786
|
-
GPR_ASSERT(call_ != nullptr);
|
1787
|
-
grpc_call_unref(call_);
|
1230
|
+
"[xds_client %p] xds server %s: starting LRS call (calld=%p, "
|
1231
|
+
"call=%p)",
|
1232
|
+
xds_client(), chand()->server_.server_uri.c_str(), this,
|
1233
|
+
call_.get());
|
1234
|
+
}
|
1235
|
+
// Send the initial request.
|
1236
|
+
std::string serialized_payload =
|
1237
|
+
xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
|
1238
|
+
call_->SendMessage(std::move(serialized_payload));
|
1239
|
+
send_message_pending_ = true;
|
1788
1240
|
}
|
1789
1241
|
|
1790
1242
|
void XdsClient::ChannelState::LrsCallState::Orphan() {
|
1791
1243
|
reporter_.reset();
|
1792
|
-
|
1793
|
-
//
|
1794
|
-
//
|
1795
|
-
|
1796
|
-
// following cancellation will be a no-op.
|
1797
|
-
grpc_call_cancel_internal(call_);
|
1798
|
-
// Note that the initial ref is hold by on_status_received_. So the
|
1799
|
-
// corresponding unref happens in on_status_received_ instead of here.
|
1244
|
+
// Note that the initial ref is held by the StreamEventHandler, which
|
1245
|
+
// will be destroyed when call_ is destroyed, which may not happen
|
1246
|
+
// here, since there may be other refs held to call_ by internal callbacks.
|
1247
|
+
call_.reset();
|
1800
1248
|
}
|
1801
1249
|
|
1802
1250
|
void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
1803
1251
|
// Don't start again if already started.
|
1804
1252
|
if (reporter_ != nullptr) return;
|
1805
|
-
// Don't start if the previous send_message op (of the initial request or
|
1806
|
-
// last report of the previous reporter) hasn't completed.
|
1807
|
-
if (
|
1253
|
+
// Don't start if the previous send_message op (of the initial request or
|
1254
|
+
// the last report of the previous reporter) hasn't completed.
|
1255
|
+
if (call_ != nullptr && send_message_pending_) return;
|
1808
1256
|
// Don't start if no LRS response has arrived.
|
1809
1257
|
if (!seen_response()) return;
|
1810
1258
|
// Don't start if the ADS call hasn't received any valid response. Note that
|
@@ -1820,160 +1268,105 @@ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
|
1820
1268
|
Ref(DEBUG_LOCATION, "LRS+load_report+start"), load_reporting_interval_);
|
1821
1269
|
}
|
1822
1270
|
|
1823
|
-
void XdsClient::ChannelState::LrsCallState::
|
1824
|
-
|
1825
|
-
|
1826
|
-
{
|
1827
|
-
|
1828
|
-
|
1271
|
+
void XdsClient::ChannelState::LrsCallState::OnRequestSent(bool /*ok*/) {
|
1272
|
+
MutexLock lock(&xds_client()->mu_);
|
1273
|
+
send_message_pending_ = false;
|
1274
|
+
if (reporter_ != nullptr) {
|
1275
|
+
reporter_->OnReportDoneLocked();
|
1276
|
+
} else {
|
1277
|
+
MaybeStartReportingLocked();
|
1829
1278
|
}
|
1830
|
-
lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked");
|
1831
|
-
}
|
1832
|
-
|
1833
|
-
void XdsClient::ChannelState::LrsCallState::OnInitialRequestSentLocked() {
|
1834
|
-
// Clear the send_message_payload_.
|
1835
|
-
grpc_byte_buffer_destroy(send_message_payload_);
|
1836
|
-
send_message_payload_ = nullptr;
|
1837
|
-
MaybeStartReportingLocked();
|
1838
1279
|
}
|
1839
1280
|
|
1840
|
-
void XdsClient::ChannelState::LrsCallState::
|
1841
|
-
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
1850
|
-
|
1851
|
-
|
1852
|
-
|
1853
|
-
|
1854
|
-
|
1855
|
-
|
1856
|
-
|
1857
|
-
|
1858
|
-
|
1859
|
-
|
1860
|
-
|
1861
|
-
|
1862
|
-
|
1863
|
-
|
1864
|
-
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
1868
|
-
|
1869
|
-
|
1870
|
-
|
1871
|
-
|
1872
|
-
|
1873
|
-
|
1874
|
-
|
1875
|
-
|
1876
|
-
|
1877
|
-
|
1878
|
-
|
1879
|
-
seen_response_ = true;
|
1281
|
+
void XdsClient::ChannelState::LrsCallState::OnRecvMessage(
|
1282
|
+
absl::string_view payload) {
|
1283
|
+
MutexLock lock(&xds_client()->mu_);
|
1284
|
+
// If we're no longer the current call, ignore the result.
|
1285
|
+
if (!IsCurrentCallOnChannel()) return;
|
1286
|
+
// Parse the response.
|
1287
|
+
bool send_all_clusters = false;
|
1288
|
+
std::set<std::string> new_cluster_names;
|
1289
|
+
Duration new_load_reporting_interval;
|
1290
|
+
absl::Status status = xds_client()->api_.ParseLrsResponse(
|
1291
|
+
payload, &send_all_clusters, &new_cluster_names,
|
1292
|
+
&new_load_reporting_interval);
|
1293
|
+
if (!status.ok()) {
|
1294
|
+
gpr_log(GPR_ERROR,
|
1295
|
+
"[xds_client %p] xds server %s: LRS response parsing failed: %s",
|
1296
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1297
|
+
status.ToString().c_str());
|
1298
|
+
return;
|
1299
|
+
}
|
1300
|
+
seen_response_ = true;
|
1301
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1302
|
+
gpr_log(
|
1303
|
+
GPR_INFO,
|
1304
|
+
"[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
|
1305
|
+
" cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
|
1306
|
+
"ms",
|
1307
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1308
|
+
new_cluster_names.size(), send_all_clusters,
|
1309
|
+
new_load_reporting_interval.millis());
|
1310
|
+
size_t i = 0;
|
1311
|
+
for (const auto& name : new_cluster_names) {
|
1312
|
+
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
1313
|
+
xds_client(), i++, name.c_str());
|
1314
|
+
}
|
1315
|
+
}
|
1316
|
+
if (new_load_reporting_interval <
|
1317
|
+
Duration::Milliseconds(GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
|
1318
|
+
new_load_reporting_interval =
|
1319
|
+
Duration::Milliseconds(GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1880
1320
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1881
|
-
gpr_log(
|
1882
|
-
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
xds_client(), new_cluster_names.size(), send_all_clusters,
|
1887
|
-
new_load_reporting_interval);
|
1888
|
-
size_t i = 0;
|
1889
|
-
for (const auto& name : new_cluster_names) {
|
1890
|
-
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
1891
|
-
xds_client(), i++, name.c_str());
|
1892
|
-
}
|
1893
|
-
}
|
1894
|
-
if (new_load_reporting_interval <
|
1895
|
-
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS) {
|
1896
|
-
new_load_reporting_interval =
|
1897
|
-
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS;
|
1898
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1899
|
-
gpr_log(GPR_INFO,
|
1900
|
-
"[xds_client %p] Increased load_report_interval to minimum "
|
1901
|
-
"value %dms",
|
1902
|
-
xds_client(), GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1903
|
-
}
|
1321
|
+
gpr_log(GPR_INFO,
|
1322
|
+
"[xds_client %p] xds server %s: increased load_report_interval "
|
1323
|
+
"to minimum value %dms",
|
1324
|
+
xds_client(), chand()->server_.server_uri.c_str(),
|
1325
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1904
1326
|
}
|
1905
|
-
|
1906
|
-
|
1907
|
-
|
1908
|
-
|
1909
|
-
|
1910
|
-
|
1911
|
-
|
1912
|
-
|
1913
|
-
|
1914
|
-
|
1915
|
-
return;
|
1327
|
+
}
|
1328
|
+
// Ignore identical update.
|
1329
|
+
if (send_all_clusters == send_all_clusters_ &&
|
1330
|
+
cluster_names_ == new_cluster_names &&
|
1331
|
+
load_reporting_interval_ == new_load_reporting_interval) {
|
1332
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1333
|
+
gpr_log(GPR_INFO,
|
1334
|
+
"[xds_client %p] xds server %s: incoming LRS response identical "
|
1335
|
+
"to current, ignoring.",
|
1336
|
+
xds_client(), chand()->server_.server_uri.c_str());
|
1916
1337
|
}
|
1917
|
-
|
1918
|
-
reporter_.reset();
|
1919
|
-
// Record the new config.
|
1920
|
-
send_all_clusters_ = send_all_clusters;
|
1921
|
-
cluster_names_ = std::move(new_cluster_names);
|
1922
|
-
load_reporting_interval_ = new_load_reporting_interval;
|
1923
|
-
// Try starting sending load report.
|
1924
|
-
MaybeStartReportingLocked();
|
1925
|
-
}();
|
1926
|
-
grpc_slice_unref_internal(response_slice);
|
1927
|
-
if (xds_client()->shutting_down_) return true;
|
1928
|
-
// Keep listening for LRS config updates.
|
1929
|
-
grpc_op op;
|
1930
|
-
memset(&op, 0, sizeof(op));
|
1931
|
-
op.op = GRPC_OP_RECV_MESSAGE;
|
1932
|
-
op.data.recv_message.recv_message = &recv_message_payload_;
|
1933
|
-
op.flags = 0;
|
1934
|
-
op.reserved = nullptr;
|
1935
|
-
GPR_ASSERT(call_ != nullptr);
|
1936
|
-
// Reuse the "OnResponseReceivedLocked" ref taken in ctor.
|
1937
|
-
const grpc_call_error call_error =
|
1938
|
-
grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
|
1939
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1940
|
-
return false;
|
1941
|
-
}
|
1942
|
-
|
1943
|
-
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1944
|
-
void* arg, grpc_error_handle error) {
|
1945
|
-
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1946
|
-
{
|
1947
|
-
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
1948
|
-
lrs_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1338
|
+
return;
|
1949
1339
|
}
|
1950
|
-
|
1340
|
+
// Stop current load reporting (if any) to adopt the new config.
|
1341
|
+
reporter_.reset();
|
1342
|
+
// Record the new config.
|
1343
|
+
send_all_clusters_ = send_all_clusters;
|
1344
|
+
cluster_names_ = std::move(new_cluster_names);
|
1345
|
+
load_reporting_interval_ = new_load_reporting_interval;
|
1346
|
+
// Try starting sending load report.
|
1347
|
+
MaybeStartReportingLocked();
|
1951
1348
|
}
|
1952
1349
|
|
1953
|
-
void XdsClient::ChannelState::LrsCallState::
|
1954
|
-
|
1955
|
-
|
1350
|
+
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1351
|
+
absl::Status status) {
|
1352
|
+
MutexLock lock(&xds_client()->mu_);
|
1956
1353
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1957
|
-
char* status_details = grpc_slice_to_c_string(status_details_);
|
1958
1354
|
gpr_log(GPR_INFO,
|
1959
|
-
"[xds_client %p] LRS call status received
|
1960
|
-
"
|
1961
|
-
xds_client(),
|
1962
|
-
|
1963
|
-
gpr_free(status_details);
|
1355
|
+
"[xds_client %p] xds server %s: LRS call status received "
|
1356
|
+
"(chand=%p, calld=%p, call=%p): %s",
|
1357
|
+
xds_client(), chand()->server_.server_uri.c_str(), chand(), this,
|
1358
|
+
call_.get(), status.ToString().c_str());
|
1964
1359
|
}
|
1965
1360
|
// Ignore status from a stale call.
|
1966
1361
|
if (IsCurrentCallOnChannel()) {
|
1967
|
-
GPR_ASSERT(!xds_client()->shutting_down_);
|
1968
1362
|
// Try to restart the call.
|
1969
1363
|
parent_->OnCallFinishedLocked();
|
1970
1364
|
}
|
1971
|
-
GRPC_ERROR_UNREF(error);
|
1972
1365
|
}
|
1973
1366
|
|
1974
1367
|
bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
1975
|
-
// If the retryable LRS call is null (which only happens when the xds
|
1976
|
-
// is shutting down), all the LRS calls are stale.
|
1368
|
+
// If the retryable LRS call is null (which only happens when the xds
|
1369
|
+
// channel is shutting down), all the LRS calls are stale.
|
1977
1370
|
if (chand()->lrs_calld_ == nullptr) return false;
|
1978
1371
|
return this == chand()->lrs_calld_->calld();
|
1979
1372
|
}
|
@@ -1982,95 +1375,51 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1982
1375
|
// XdsClient
|
1983
1376
|
//
|
1984
1377
|
|
1985
|
-
namespace {
|
1986
|
-
|
1987
|
-
grpc_millis GetRequestTimeout(const grpc_channel_args* args) {
|
1988
|
-
return grpc_channel_args_find_integer(
|
1989
|
-
args, GRPC_ARG_XDS_RESOURCE_DOES_NOT_EXIST_TIMEOUT_MS,
|
1990
|
-
{15000, 0, INT_MAX});
|
1991
|
-
}
|
1992
|
-
|
1993
|
-
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
1994
|
-
absl::InlinedVector<grpc_arg, 1> args_to_add = {
|
1995
|
-
grpc_channel_arg_integer_create(
|
1996
|
-
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
1997
|
-
5 * 60 * GPR_MS_PER_SEC),
|
1998
|
-
};
|
1999
|
-
return grpc_channel_args_copy_and_add(args, args_to_add.data(),
|
2000
|
-
args_to_add.size());
|
2001
|
-
}
|
2002
|
-
|
2003
|
-
} // namespace
|
2004
|
-
|
2005
1378
|
XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
2006
|
-
|
1379
|
+
OrphanablePtr<XdsTransportFactory> transport_factory,
|
1380
|
+
Duration resource_request_timeout)
|
2007
1381
|
: DualRefCounted<XdsClient>(
|
2008
1382
|
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
|
2009
1383
|
: nullptr),
|
2010
1384
|
bootstrap_(std::move(bootstrap)),
|
2011
|
-
|
2012
|
-
request_timeout_(
|
2013
|
-
|
2014
|
-
|
2015
|
-
bootstrap_->certificate_providers())),
|
2016
|
-
api_(this, &grpc_xds_client_trace, bootstrap_->node(),
|
2017
|
-
&bootstrap_->certificate_providers()) {
|
1385
|
+
transport_factory_(std::move(transport_factory)),
|
1386
|
+
request_timeout_(resource_request_timeout),
|
1387
|
+
xds_federation_enabled_(XdsFederationEnabled()),
|
1388
|
+
api_(this, &grpc_xds_client_trace, bootstrap_->node(), &symtab_) {
|
2018
1389
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2019
1390
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
2020
1391
|
}
|
2021
|
-
// Calling grpc_init to ensure gRPC does not shut down until the XdsClient is
|
2022
|
-
// destroyed.
|
2023
|
-
grpc_init();
|
2024
1392
|
}
|
2025
1393
|
|
2026
1394
|
XdsClient::~XdsClient() {
|
2027
1395
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2028
1396
|
gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
|
2029
1397
|
}
|
2030
|
-
grpc_channel_args_destroy(args_);
|
2031
|
-
grpc_pollset_set_destroy(interested_parties_);
|
2032
|
-
// Calling grpc_shutdown to ensure gRPC does not shut down until the XdsClient
|
2033
|
-
// is destroyed.
|
2034
|
-
grpc_shutdown();
|
2035
1398
|
}
|
2036
1399
|
|
2037
1400
|
void XdsClient::Orphan() {
|
2038
1401
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2039
1402
|
gpr_log(GPR_INFO, "[xds_client %p] shutting down xds client", this);
|
2040
1403
|
}
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2045
|
-
|
2046
|
-
|
2047
|
-
|
2048
|
-
|
2049
|
-
|
2050
|
-
|
2051
|
-
|
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();
|
1404
|
+
MutexLock lock(&mu_);
|
1405
|
+
shutting_down_ = true;
|
1406
|
+
// Clear cache and any remaining watchers that may not have been cancelled.
|
1407
|
+
authority_state_map_.clear();
|
1408
|
+
invalid_watchers_.clear();
|
1409
|
+
// We may still be sending lingering queued load report data, so don't
|
1410
|
+
// just clear the load reporting map, but we do want to clear the refs
|
1411
|
+
// we're holding to the ChannelState objects, to make sure that
|
1412
|
+
// everything shuts down properly.
|
1413
|
+
for (auto& p : xds_load_report_server_map_) {
|
1414
|
+
p.second.channel_state.reset(DEBUG_LOCATION, "XdsClient::Orphan()");
|
2066
1415
|
}
|
2067
1416
|
}
|
2068
1417
|
|
2069
1418
|
RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
2070
|
-
const XdsBootstrap::XdsServer& server) {
|
1419
|
+
const XdsBootstrap::XdsServer& server, const char* reason) {
|
2071
1420
|
auto it = xds_server_channel_map_.find(server);
|
2072
1421
|
if (it != xds_server_channel_map_.end()) {
|
2073
|
-
return it->second->Ref(DEBUG_LOCATION,
|
1422
|
+
return it->second->Ref(DEBUG_LOCATION, reason);
|
2074
1423
|
}
|
2075
1424
|
// Channel not found, so create a new one.
|
2076
1425
|
auto channel_state = MakeRefCounted<ChannelState>(
|
@@ -2079,297 +1428,247 @@ RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
|
2079
1428
|
return channel_state;
|
2080
1429
|
}
|
2081
1430
|
|
2082
|
-
void XdsClient::
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
1431
|
+
void XdsClient::WatchResource(const XdsResourceType* type,
|
1432
|
+
absl::string_view name,
|
1433
|
+
RefCountedPtr<ResourceWatcherInterface> watcher) {
|
1434
|
+
ResourceWatcherInterface* w = watcher.get();
|
1435
|
+
// Lambda for handling failure cases.
|
1436
|
+
auto fail = [&](absl::Status status) mutable {
|
1437
|
+
{
|
1438
|
+
MutexLock lock(&mu_);
|
1439
|
+
MaybeRegisterResourceTypeLocked(type);
|
1440
|
+
invalid_watchers_[w] = watcher;
|
1441
|
+
}
|
1442
|
+
work_serializer_.Run(
|
1443
|
+
// TODO(yashykt): When we move to C++14, capture watcher using
|
1444
|
+
// std::move()
|
1445
|
+
[watcher, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1446
|
+
watcher->OnError(status);
|
1447
|
+
},
|
1448
|
+
DEBUG_LOCATION);
|
1449
|
+
};
|
1450
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
1451
|
+
if (!resource_name.ok()) {
|
1452
|
+
fail(absl::UnavailableError(absl::StrFormat(
|
1453
|
+
"Unable to parse resource name for listener %s", name)));
|
2094
1454
|
return;
|
2095
1455
|
}
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
1456
|
+
// Find server to use.
|
1457
|
+
const XdsBootstrap::XdsServer* xds_server = nullptr;
|
1458
|
+
absl::string_view authority_name = resource_name->authority;
|
1459
|
+
if (absl::ConsumePrefix(&authority_name, "xdstp:")) {
|
1460
|
+
auto* authority = bootstrap_->LookupAuthority(std::string(authority_name));
|
1461
|
+
if (authority == nullptr) {
|
1462
|
+
fail(absl::UnavailableError(
|
1463
|
+
absl::StrCat("authority \"", authority_name,
|
1464
|
+
"\" not present in bootstrap config")));
|
1465
|
+
return;
|
2105
1466
|
}
|
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());
|
1467
|
+
if (!authority->xds_servers.empty()) {
|
1468
|
+
xds_server = &authority->xds_servers[0];
|
2167
1469
|
}
|
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
1470
|
}
|
2175
|
-
|
2176
|
-
|
2177
|
-
|
2178
|
-
|
2179
|
-
|
2180
|
-
|
2181
|
-
|
2182
|
-
|
2183
|
-
|
2184
|
-
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2189
|
-
|
2190
|
-
|
2191
|
-
|
2192
|
-
|
2193
|
-
|
2194
|
-
|
2195
|
-
|
2196
|
-
|
2197
|
-
|
2198
|
-
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
2204
|
-
|
2205
|
-
|
2206
|
-
|
2207
|
-
|
2208
|
-
|
2209
|
-
|
2210
|
-
|
2211
|
-
|
2212
|
-
|
2213
|
-
|
2214
|
-
|
2215
|
-
|
2216
|
-
return;
|
2217
|
-
}
|
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
|
-
if (shutting_down_) return;
|
2244
|
-
auto resource = XdsApi::ParseResourceName(cluster_name, XdsApi::IsCds);
|
2245
|
-
if (!resource.ok()) return;
|
2246
|
-
auto& authority_state = authority_state_map_[resource->authority];
|
2247
|
-
ClusterState& cluster_state = authority_state.cluster_map[resource->id];
|
2248
|
-
auto it = cluster_state.watchers.find(watcher);
|
2249
|
-
if (it == cluster_state.watchers.end()) {
|
2250
|
-
invalid_cluster_watchers_.erase(watcher);
|
2251
|
-
return;
|
2252
|
-
}
|
2253
|
-
cluster_state.watchers.erase(it);
|
2254
|
-
if (!cluster_state.watchers.empty()) return;
|
2255
|
-
authority_state.cluster_map.erase(resource->id);
|
2256
|
-
xds_server_channel_map_[bootstrap_->server()]->UnsubscribeLocked(
|
2257
|
-
XdsApi::kCdsTypeUrl, *resource, delay_unsubscription);
|
2258
|
-
if (!authority_state.HasSubscribedResources()) {
|
2259
|
-
authority_state.channel_state.reset();
|
2260
|
-
}
|
2261
|
-
}
|
2262
|
-
|
2263
|
-
void XdsClient::WatchEndpointData(
|
2264
|
-
absl::string_view eds_service_name,
|
2265
|
-
std::unique_ptr<EndpointWatcherInterface> watcher) {
|
2266
|
-
std::string eds_service_name_str = std::string(eds_service_name);
|
1471
|
+
if (xds_server == nullptr) xds_server = &bootstrap_->server();
|
1472
|
+
{
|
1473
|
+
MutexLock lock(&mu_);
|
1474
|
+
MaybeRegisterResourceTypeLocked(type);
|
1475
|
+
AuthorityState& authority_state =
|
1476
|
+
authority_state_map_[resource_name->authority];
|
1477
|
+
ResourceState& resource_state =
|
1478
|
+
authority_state.resource_map[type][resource_name->key];
|
1479
|
+
resource_state.watchers[w] = watcher;
|
1480
|
+
// If we already have a cached value for the resource, notify the new
|
1481
|
+
// watcher immediately.
|
1482
|
+
if (resource_state.resource != nullptr) {
|
1483
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1484
|
+
gpr_log(GPR_INFO,
|
1485
|
+
"[xds_client %p] returning cached listener data for %s", this,
|
1486
|
+
std::string(name).c_str());
|
1487
|
+
}
|
1488
|
+
auto* value = type->CopyResource(resource_state.resource.get()).release();
|
1489
|
+
work_serializer_.Schedule(
|
1490
|
+
[watcher, value]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1491
|
+
watcher->OnGenericResourceChanged(value);
|
1492
|
+
delete value;
|
1493
|
+
},
|
1494
|
+
DEBUG_LOCATION);
|
1495
|
+
}
|
1496
|
+
// If the authority doesn't yet have a channel, set it, creating it if
|
1497
|
+
// needed.
|
1498
|
+
if (authority_state.channel_state == nullptr) {
|
1499
|
+
authority_state.channel_state =
|
1500
|
+
GetOrCreateChannelStateLocked(*xds_server, "start watch");
|
1501
|
+
}
|
1502
|
+
authority_state.channel_state->SubscribeLocked(type, *resource_name);
|
1503
|
+
}
|
1504
|
+
work_serializer_.DrainQueue();
|
1505
|
+
}
|
1506
|
+
|
1507
|
+
void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
1508
|
+
absl::string_view name,
|
1509
|
+
ResourceWatcherInterface* watcher,
|
1510
|
+
bool delay_unsubscription) {
|
1511
|
+
auto resource_name = ParseXdsResourceName(name, type);
|
2267
1512
|
MutexLock lock(&mu_);
|
2268
|
-
|
2269
|
-
|
2270
|
-
|
2271
|
-
|
2272
|
-
|
2273
|
-
|
2274
|
-
|
2275
|
-
|
2276
|
-
|
2277
|
-
|
2278
|
-
|
2279
|
-
|
2280
|
-
|
2281
|
-
|
2282
|
-
|
2283
|
-
|
2284
|
-
|
2285
|
-
|
2286
|
-
|
1513
|
+
// We cannot be sure whether the watcher is in invalid_watchers_ or in
|
1514
|
+
// authority_state_map_, so we check both, just to be safe.
|
1515
|
+
invalid_watchers_.erase(watcher);
|
1516
|
+
// Find authority.
|
1517
|
+
if (!resource_name.ok()) return;
|
1518
|
+
auto authority_it = authority_state_map_.find(resource_name->authority);
|
1519
|
+
if (authority_it == authority_state_map_.end()) return;
|
1520
|
+
AuthorityState& authority_state = authority_it->second;
|
1521
|
+
// Find type map.
|
1522
|
+
auto type_it = authority_state.resource_map.find(type);
|
1523
|
+
if (type_it == authority_state.resource_map.end()) return;
|
1524
|
+
auto& type_map = type_it->second;
|
1525
|
+
// Find resource key.
|
1526
|
+
auto resource_it = type_map.find(resource_name->key);
|
1527
|
+
if (resource_it == type_map.end()) return;
|
1528
|
+
ResourceState& resource_state = resource_it->second;
|
1529
|
+
// Remove watcher.
|
1530
|
+
resource_state.watchers.erase(watcher);
|
1531
|
+
// Clean up empty map entries, if any.
|
1532
|
+
if (resource_state.watchers.empty()) {
|
1533
|
+
if (resource_state.ignored_deletion) {
|
1534
|
+
gpr_log(GPR_INFO,
|
1535
|
+
"[xds_client %p] unsubscribing from a resource for which we "
|
1536
|
+
"previously ignored a deletion: type %s name %s",
|
1537
|
+
this, std::string(type->type_url()).c_str(),
|
1538
|
+
std::string(name).c_str());
|
1539
|
+
}
|
1540
|
+
authority_state.channel_state->UnsubscribeLocked(type, *resource_name,
|
1541
|
+
delay_unsubscription);
|
1542
|
+
type_map.erase(resource_it);
|
1543
|
+
if (type_map.empty()) {
|
1544
|
+
authority_state.resource_map.erase(type_it);
|
1545
|
+
if (authority_state.resource_map.empty()) {
|
1546
|
+
authority_state.channel_state.reset();
|
1547
|
+
}
|
2287
1548
|
}
|
2288
|
-
w->OnEndpointChanged(endpoint_state.update.value());
|
2289
1549
|
}
|
2290
|
-
// If the authority doesn't yet have a channel, set it, creating it if needed.
|
2291
|
-
if (authority_state.channel_state == nullptr) {
|
2292
|
-
authority_state.channel_state =
|
2293
|
-
GetOrCreateChannelStateLocked(bootstrap_->server());
|
2294
|
-
}
|
2295
|
-
authority_state.channel_state->SubscribeLocked(XdsApi::kEdsTypeUrl,
|
2296
|
-
*resource);
|
2297
1550
|
}
|
2298
1551
|
|
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);
|
1552
|
+
void XdsClient::MaybeRegisterResourceTypeLocked(
|
1553
|
+
const XdsResourceType* resource_type) {
|
1554
|
+
auto it = resource_types_.find(resource_type->type_url());
|
1555
|
+
if (it != resource_types_.end()) {
|
1556
|
+
GPR_ASSERT(it->second == resource_type);
|
2311
1557
|
return;
|
2312
1558
|
}
|
2313
|
-
|
2314
|
-
|
2315
|
-
|
2316
|
-
|
2317
|
-
|
2318
|
-
|
2319
|
-
|
2320
|
-
|
1559
|
+
resource_types_.emplace(resource_type->type_url(), resource_type);
|
1560
|
+
v2_resource_types_.emplace(resource_type->v2_type_url(), resource_type);
|
1561
|
+
resource_type->InitUpbSymtab(symtab_.ptr());
|
1562
|
+
}
|
1563
|
+
|
1564
|
+
const XdsResourceType* XdsClient::GetResourceTypeLocked(
|
1565
|
+
absl::string_view resource_type) {
|
1566
|
+
auto it = resource_types_.find(resource_type);
|
1567
|
+
if (it != resource_types_.end()) return it->second;
|
1568
|
+
auto it2 = v2_resource_types_.find(resource_type);
|
1569
|
+
if (it2 != v2_resource_types_.end()) return it2->second;
|
1570
|
+
return nullptr;
|
1571
|
+
}
|
1572
|
+
|
1573
|
+
absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
1574
|
+
absl::string_view name, const XdsResourceType* type) {
|
1575
|
+
// Old-style names use the empty string for authority.
|
1576
|
+
// authority is prefixed with "old:" to indicate that it's an old-style
|
1577
|
+
// name.
|
1578
|
+
if (!xds_federation_enabled_ || !absl::StartsWith(name, "xdstp:")) {
|
1579
|
+
return XdsResourceName{"old:", {std::string(name), {}}};
|
1580
|
+
}
|
1581
|
+
// New style name. Parse URI.
|
1582
|
+
auto uri = URI::Parse(name);
|
1583
|
+
if (!uri.ok()) return uri.status();
|
1584
|
+
// Split the resource type off of the path to get the id.
|
1585
|
+
std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
|
1586
|
+
absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
|
1587
|
+
if (!type->IsType(path_parts.first, nullptr)) {
|
1588
|
+
return absl::InvalidArgumentError(
|
1589
|
+
"xdstp URI path must indicate valid xDS resource type");
|
1590
|
+
}
|
1591
|
+
// Canonicalize order of query params.
|
1592
|
+
std::vector<URI::QueryParam> query_params;
|
1593
|
+
for (const auto& p : uri->query_parameter_map()) {
|
1594
|
+
query_params.emplace_back(
|
1595
|
+
URI::QueryParam{std::string(p.first), std::string(p.second)});
|
1596
|
+
}
|
1597
|
+
return XdsResourceName{
|
1598
|
+
absl::StrCat("xdstp:", uri->authority()),
|
1599
|
+
{std::string(path_parts.second), std::move(query_params)}};
|
1600
|
+
}
|
1601
|
+
|
1602
|
+
std::string XdsClient::ConstructFullXdsResourceName(
|
1603
|
+
absl::string_view authority, absl::string_view resource_type,
|
1604
|
+
const XdsResourceKey& key) {
|
1605
|
+
if (absl::ConsumePrefix(&authority, "xdstp:")) {
|
1606
|
+
auto uri = URI::Create("xdstp", std::string(authority),
|
1607
|
+
absl::StrCat("/", resource_type, "/", key.id),
|
1608
|
+
key.query_params, /*fragment=*/"");
|
1609
|
+
GPR_ASSERT(uri.ok());
|
1610
|
+
return uri->ToString();
|
1611
|
+
}
|
1612
|
+
// Old-style name.
|
1613
|
+
return key.id;
|
2321
1614
|
}
|
2322
1615
|
|
2323
1616
|
RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
2324
|
-
|
1617
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2325
1618
|
absl::string_view eds_service_name) {
|
2326
|
-
|
2327
|
-
// server name specified in lrs_server.
|
1619
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2328
1620
|
auto key =
|
2329
1621
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2330
|
-
MutexLock lock(&mu_);
|
2331
|
-
// We jump through some hoops here to make sure that the absl::string_views
|
2332
|
-
// stored in the XdsClusterDropStats object point to the strings
|
2333
|
-
// in the load_report_map_ key, so that they have the same lifetime.
|
2334
|
-
auto it = load_report_map_
|
2335
|
-
.emplace(std::make_pair(std::move(key), LoadReportState()))
|
2336
|
-
.first;
|
2337
|
-
LoadReportState& load_report_state = it->second;
|
2338
1622
|
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
2339
|
-
|
2340
|
-
|
2341
|
-
|
2342
|
-
|
1623
|
+
{
|
1624
|
+
MutexLock lock(&mu_);
|
1625
|
+
// We jump through some hoops here to make sure that the const
|
1626
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
1627
|
+
// stored in the XdsClusterDropStats object point to the
|
1628
|
+
// XdsBootstrap::XdsServer and strings
|
1629
|
+
// in the load_report_map_ key, so that they have the same lifetime.
|
1630
|
+
auto server_it =
|
1631
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer())
|
1632
|
+
.first;
|
1633
|
+
if (server_it->second.channel_state == nullptr) {
|
1634
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(
|
1635
|
+
xds_server, "load report map (drop stats)");
|
1636
|
+
}
|
1637
|
+
auto load_report_it = server_it->second.load_report_map
|
1638
|
+
.emplace(std::move(key), LoadReportState())
|
1639
|
+
.first;
|
1640
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2343
1641
|
if (load_report_state.drop_stats != nullptr) {
|
2344
|
-
load_report_state.
|
2345
|
-
|
1642
|
+
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
1643
|
+
}
|
1644
|
+
if (cluster_drop_stats == nullptr) {
|
1645
|
+
if (load_report_state.drop_stats != nullptr) {
|
1646
|
+
load_report_state.deleted_drop_stats +=
|
1647
|
+
load_report_state.drop_stats->GetSnapshotAndReset();
|
1648
|
+
}
|
1649
|
+
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
1650
|
+
Ref(DEBUG_LOCATION, "DropStats"), server_it->first,
|
1651
|
+
load_report_it->first.first /*cluster_name*/,
|
1652
|
+
load_report_it->first.second /*eds_service_name*/);
|
1653
|
+
load_report_state.drop_stats = cluster_drop_stats.get();
|
2346
1654
|
}
|
2347
|
-
|
2348
|
-
Ref(DEBUG_LOCATION, "DropStats"), lrs_server,
|
2349
|
-
it->first.first /*cluster_name*/,
|
2350
|
-
it->first.second /*eds_service_name*/);
|
2351
|
-
load_report_state.drop_stats = cluster_drop_stats.get();
|
2352
|
-
}
|
2353
|
-
auto resource = XdsApi::ParseResourceName(cluster_name, XdsApi::IsCds);
|
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();
|
1655
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2358
1656
|
}
|
1657
|
+
work_serializer_.DrainQueue();
|
2359
1658
|
return cluster_drop_stats;
|
2360
1659
|
}
|
2361
1660
|
|
2362
1661
|
void XdsClient::RemoveClusterDropStats(
|
2363
|
-
|
1662
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2364
1663
|
absl::string_view eds_service_name,
|
2365
1664
|
XdsClusterDropStats* cluster_drop_stats) {
|
2366
1665
|
MutexLock lock(&mu_);
|
2367
|
-
|
2368
|
-
|
2369
|
-
auto
|
1666
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
1667
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
1668
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2370
1669
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2371
|
-
if (
|
2372
|
-
LoadReportState& load_report_state =
|
1670
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
1671
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2373
1672
|
if (load_report_state.drop_stats == cluster_drop_stats) {
|
2374
1673
|
// Record final snapshot in deleted_drop_stats, which will be
|
2375
1674
|
// added to the next load report.
|
@@ -2380,59 +1679,66 @@ void XdsClient::RemoveClusterDropStats(
|
|
2380
1679
|
}
|
2381
1680
|
|
2382
1681
|
RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
2383
|
-
|
1682
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2384
1683
|
absl::string_view eds_service_name,
|
2385
1684
|
RefCountedPtr<XdsLocalityName> locality) {
|
2386
|
-
|
2387
|
-
// server name specified in lrs_server.
|
1685
|
+
if (!bootstrap_->XdsServerExists(xds_server)) return nullptr;
|
2388
1686
|
auto key =
|
2389
1687
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2390
|
-
MutexLock lock(&mu_);
|
2391
|
-
// We jump through some hoops here to make sure that the absl::string_views
|
2392
|
-
// stored in the XdsClusterLocalityStats object point to the strings
|
2393
|
-
// in the load_report_map_ key, so that they have the same lifetime.
|
2394
|
-
auto it = load_report_map_
|
2395
|
-
.emplace(std::make_pair(std::move(key), LoadReportState()))
|
2396
|
-
.first;
|
2397
|
-
LoadReportState& load_report_state = it->second;
|
2398
|
-
LoadReportState::LocalityState& locality_state =
|
2399
|
-
load_report_state.locality_stats[locality];
|
2400
1688
|
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
2401
|
-
|
2402
|
-
|
2403
|
-
|
2404
|
-
|
1689
|
+
{
|
1690
|
+
MutexLock lock(&mu_);
|
1691
|
+
// We jump through some hoops here to make sure that the const
|
1692
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
1693
|
+
// stored in the XdsClusterDropStats object point to the
|
1694
|
+
// XdsBootstrap::XdsServer and strings
|
1695
|
+
// in the load_report_map_ key, so that they have the same lifetime.
|
1696
|
+
auto server_it =
|
1697
|
+
xds_load_report_server_map_.emplace(xds_server, LoadReportServer())
|
1698
|
+
.first;
|
1699
|
+
if (server_it->second.channel_state == nullptr) {
|
1700
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(
|
1701
|
+
xds_server, "load report map (locality stats)");
|
1702
|
+
}
|
1703
|
+
auto load_report_it = server_it->second.load_report_map
|
1704
|
+
.emplace(std::move(key), LoadReportState())
|
1705
|
+
.first;
|
1706
|
+
LoadReportState& load_report_state = load_report_it->second;
|
1707
|
+
LoadReportState::LocalityState& locality_state =
|
1708
|
+
load_report_state.locality_stats[locality];
|
2405
1709
|
if (locality_state.locality_stats != nullptr) {
|
2406
|
-
locality_state.
|
2407
|
-
locality_state.locality_stats->GetSnapshotAndReset();
|
1710
|
+
cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
|
2408
1711
|
}
|
2409
|
-
cluster_locality_stats
|
2410
|
-
|
2411
|
-
|
2412
|
-
|
2413
|
-
|
2414
|
-
|
2415
|
-
|
2416
|
-
|
2417
|
-
|
2418
|
-
|
2419
|
-
|
1712
|
+
if (cluster_locality_stats == nullptr) {
|
1713
|
+
if (locality_state.locality_stats != nullptr) {
|
1714
|
+
locality_state.deleted_locality_stats +=
|
1715
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
1716
|
+
}
|
1717
|
+
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
1718
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
|
1719
|
+
load_report_it->first.first /*cluster_name*/,
|
1720
|
+
load_report_it->first.second /*eds_service_name*/,
|
1721
|
+
std::move(locality));
|
1722
|
+
locality_state.locality_stats = cluster_locality_stats.get();
|
1723
|
+
}
|
1724
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2420
1725
|
}
|
1726
|
+
work_serializer_.DrainQueue();
|
2421
1727
|
return cluster_locality_stats;
|
2422
1728
|
}
|
2423
1729
|
|
2424
1730
|
void XdsClient::RemoveClusterLocalityStats(
|
2425
|
-
|
1731
|
+
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2426
1732
|
absl::string_view eds_service_name,
|
2427
1733
|
const RefCountedPtr<XdsLocalityName>& locality,
|
2428
1734
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
2429
1735
|
MutexLock lock(&mu_);
|
2430
|
-
|
2431
|
-
|
2432
|
-
auto
|
1736
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
1737
|
+
if (server_it == xds_load_report_server_map_.end()) return;
|
1738
|
+
auto load_report_it = server_it->second.load_report_map.find(
|
2433
1739
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
2434
|
-
if (
|
2435
|
-
LoadReportState& load_report_state =
|
1740
|
+
if (load_report_it == server_it->second.load_report_map.end()) return;
|
1741
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2436
1742
|
auto locality_it = load_report_state.locality_stats.find(locality);
|
2437
1743
|
if (locality_it == load_report_state.locality_stats.end()) return;
|
2438
1744
|
LoadReportState::LocalityState& locality_state = locality_it->second;
|
@@ -2448,48 +1754,81 @@ void XdsClient::RemoveClusterLocalityStats(
|
|
2448
1754
|
void XdsClient::ResetBackoff() {
|
2449
1755
|
MutexLock lock(&mu_);
|
2450
1756
|
for (auto& p : xds_server_channel_map_) {
|
2451
|
-
|
1757
|
+
p.second->ResetBackoff();
|
2452
1758
|
}
|
2453
1759
|
}
|
2454
1760
|
|
2455
|
-
void XdsClient::NotifyOnErrorLocked(
|
2456
|
-
|
2457
|
-
|
2458
|
-
|
2459
|
-
|
2460
|
-
|
2461
|
-
|
2462
|
-
|
2463
|
-
|
2464
|
-
|
2465
|
-
for (const auto&
|
2466
|
-
|
2467
|
-
|
2468
|
-
|
2469
|
-
for (const auto& p : a.second.cluster_map) {
|
2470
|
-
const ClusterState& cluster_state = p.second;
|
2471
|
-
for (const auto& p : cluster_state.watchers) {
|
2472
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
2473
|
-
}
|
2474
|
-
}
|
2475
|
-
for (const auto& p : a.second.endpoint_map) {
|
2476
|
-
const EndpointState& endpoint_state = p.second;
|
2477
|
-
for (const auto& p : endpoint_state.watchers) {
|
2478
|
-
p.first->OnError(GRPC_ERROR_REF(error));
|
1761
|
+
void XdsClient::NotifyOnErrorLocked(absl::Status status) {
|
1762
|
+
const auto* node = bootstrap_->node();
|
1763
|
+
if (node != nullptr) {
|
1764
|
+
status = absl::Status(
|
1765
|
+
status.code(), absl::StrCat(status.message(),
|
1766
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
1767
|
+
}
|
1768
|
+
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
1769
|
+
for (const auto& a : authority_state_map_) { // authority
|
1770
|
+
for (const auto& t : a.second.resource_map) { // type
|
1771
|
+
for (const auto& r : t.second) { // resource id
|
1772
|
+
for (const auto& w : r.second.watchers) { // watchers
|
1773
|
+
watchers.insert(w.second);
|
1774
|
+
}
|
2479
1775
|
}
|
2480
1776
|
}
|
2481
1777
|
}
|
2482
|
-
|
1778
|
+
work_serializer_.Schedule(
|
1779
|
+
// TODO(yashykt): When we move to C++14, capture watchers using
|
1780
|
+
// std::move()
|
1781
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
1782
|
+
for (const auto& watcher : watchers) {
|
1783
|
+
watcher->OnError(status);
|
1784
|
+
}
|
1785
|
+
},
|
1786
|
+
DEBUG_LOCATION);
|
1787
|
+
}
|
1788
|
+
|
1789
|
+
void XdsClient::NotifyWatchersOnErrorLocked(
|
1790
|
+
const std::map<ResourceWatcherInterface*,
|
1791
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
1792
|
+
absl::Status status) {
|
1793
|
+
const auto* node = bootstrap_->node();
|
1794
|
+
if (node != nullptr) {
|
1795
|
+
status = absl::Status(
|
1796
|
+
status.code(), absl::StrCat(status.message(),
|
1797
|
+
" (node ID:", bootstrap_->node()->id, ")"));
|
1798
|
+
}
|
1799
|
+
work_serializer_.Schedule(
|
1800
|
+
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1801
|
+
for (const auto& p : watchers) {
|
1802
|
+
p.first->OnError(status);
|
1803
|
+
}
|
1804
|
+
},
|
1805
|
+
DEBUG_LOCATION);
|
1806
|
+
}
|
1807
|
+
|
1808
|
+
void XdsClient::NotifyWatchersOnResourceDoesNotExist(
|
1809
|
+
const std::map<ResourceWatcherInterface*,
|
1810
|
+
RefCountedPtr<ResourceWatcherInterface>>& watchers) {
|
1811
|
+
work_serializer_.Schedule(
|
1812
|
+
[watchers]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1813
|
+
for (const auto& p : watchers) {
|
1814
|
+
p.first->OnResourceDoesNotExist();
|
1815
|
+
}
|
1816
|
+
},
|
1817
|
+
DEBUG_LOCATION);
|
2483
1818
|
}
|
2484
1819
|
|
2485
1820
|
XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
2486
|
-
|
1821
|
+
const XdsBootstrap::XdsServer& xds_server, bool send_all_clusters,
|
1822
|
+
const std::set<std::string>& clusters) {
|
2487
1823
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2488
1824
|
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2489
1825
|
}
|
2490
1826
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
2491
|
-
|
2492
|
-
|
1827
|
+
auto server_it = xds_load_report_server_map_.find(xds_server);
|
1828
|
+
if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
|
1829
|
+
auto& load_report_map = server_it->second.load_report_map;
|
1830
|
+
for (auto load_report_it = load_report_map.begin();
|
1831
|
+
load_report_it != load_report_map.end();) {
|
2493
1832
|
// Cluster key is cluster and EDS service name.
|
2494
1833
|
const auto& cluster_key = load_report_it->first;
|
2495
1834
|
LoadReportState& load_report = load_report_it->second;
|
@@ -2544,7 +1883,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2544
1883
|
}
|
2545
1884
|
}
|
2546
1885
|
// Compute load report interval.
|
2547
|
-
const
|
1886
|
+
const Timestamp now = ExecCtx::Get()->Now();
|
2548
1887
|
snapshot.load_report_interval = now - load_report.last_report_time;
|
2549
1888
|
load_report.last_report_time = now;
|
2550
1889
|
// Record snapshot.
|
@@ -2555,7 +1894,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2555
1894
|
// deleted stats objects, remove the entry.
|
2556
1895
|
if (load_report.locality_stats.empty() &&
|
2557
1896
|
load_report.drop_stats == nullptr) {
|
2558
|
-
load_report_it =
|
1897
|
+
load_report_it = load_report_map.erase(load_report_it);
|
2559
1898
|
} else {
|
2560
1899
|
++load_report_it;
|
2561
1900
|
}
|
@@ -2566,226 +1905,22 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2566
1905
|
std::string XdsClient::DumpClientConfigBinary() {
|
2567
1906
|
MutexLock lock(&mu_);
|
2568
1907
|
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_) {
|
1908
|
+
for (const auto& a : authority_state_map_) { // authority
|
2574
1909
|
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;
|
1910
|
+
for (const auto& t : a.second.resource_map) { // type
|
1911
|
+
const XdsResourceType* type = t.first;
|
1912
|
+
auto& resource_metadata_map =
|
1913
|
+
resource_type_metadata_map[type->type_url()];
|
1914
|
+
for (const auto& r : t.second) { // resource id
|
1915
|
+
const XdsResourceKey& resource_key = r.first;
|
1916
|
+
const ResourceState& resource_state = r.second;
|
1917
|
+
resource_metadata_map[ConstructFullXdsResourceName(
|
1918
|
+
authority, type->type_url(), resource_key)] = &resource_state.meta;
|
1919
|
+
}
|
2598
1920
|
}
|
2599
1921
|
}
|
2600
1922
|
// Assemble config dump messages
|
2601
1923
|
return api_.AssembleClientConfig(resource_type_metadata_map);
|
2602
1924
|
}
|
2603
1925
|
|
2604
|
-
//
|
2605
|
-
// accessors for global state
|
2606
|
-
//
|
2607
|
-
|
2608
|
-
void XdsClientGlobalInit() {
|
2609
|
-
g_mu = new Mutex;
|
2610
|
-
XdsHttpFilterRegistry::Init();
|
2611
|
-
}
|
2612
|
-
|
2613
|
-
// TODO(roth): Find a better way to clear the fallback config that does
|
2614
|
-
// not require using ABSL_NO_THREAD_SAFETY_ANALYSIS.
|
2615
|
-
void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
2616
|
-
gpr_free(g_fallback_bootstrap_config);
|
2617
|
-
g_fallback_bootstrap_config = nullptr;
|
2618
|
-
delete g_mu;
|
2619
|
-
g_mu = nullptr;
|
2620
|
-
XdsHttpFilterRegistry::Shutdown();
|
2621
|
-
}
|
2622
|
-
|
2623
|
-
namespace {
|
2624
|
-
|
2625
|
-
std::string GetBootstrapContents(const char* fallback_config,
|
2626
|
-
grpc_error_handle* error) {
|
2627
|
-
// First, try GRPC_XDS_BOOTSTRAP env var.
|
2628
|
-
grpc_core::UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
2629
|
-
if (path != nullptr) {
|
2630
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2631
|
-
gpr_log(GPR_INFO,
|
2632
|
-
"Got bootstrap file location from GRPC_XDS_BOOTSTRAP "
|
2633
|
-
"environment variable: %s",
|
2634
|
-
path.get());
|
2635
|
-
}
|
2636
|
-
grpc_slice contents;
|
2637
|
-
*error =
|
2638
|
-
grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
|
2639
|
-
if (*error != GRPC_ERROR_NONE) return "";
|
2640
|
-
std::string contents_str(StringViewFromSlice(contents));
|
2641
|
-
grpc_slice_unref_internal(contents);
|
2642
|
-
return contents_str;
|
2643
|
-
}
|
2644
|
-
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
2645
|
-
grpc_core::UniquePtr<char> env_config(
|
2646
|
-
gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2647
|
-
if (env_config != nullptr) {
|
2648
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2649
|
-
gpr_log(GPR_INFO,
|
2650
|
-
"Got bootstrap contents from GRPC_XDS_BOOTSTRAP_CONFIG "
|
2651
|
-
"environment variable");
|
2652
|
-
}
|
2653
|
-
return env_config.get();
|
2654
|
-
}
|
2655
|
-
// Finally, try fallback config.
|
2656
|
-
if (fallback_config != nullptr) {
|
2657
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2658
|
-
gpr_log(GPR_INFO, "Got bootstrap contents from fallback config");
|
2659
|
-
}
|
2660
|
-
return fallback_config;
|
2661
|
-
}
|
2662
|
-
// No bootstrap config found.
|
2663
|
-
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2664
|
-
"Environment variables GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG "
|
2665
|
-
"not defined");
|
2666
|
-
return "";
|
2667
|
-
}
|
2668
|
-
|
2669
|
-
} // namespace
|
2670
|
-
|
2671
|
-
RefCountedPtr<XdsClient> XdsClient::GetOrCreate(const grpc_channel_args* args,
|
2672
|
-
grpc_error_handle* error) {
|
2673
|
-
RefCountedPtr<XdsClient> xds_client;
|
2674
|
-
// If getting bootstrap from channel args, create a local XdsClient
|
2675
|
-
// instance for the channel or server instead of using the global instance.
|
2676
|
-
const char* bootstrap_config = grpc_channel_args_find_string(
|
2677
|
-
args, GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG);
|
2678
|
-
if (bootstrap_config != nullptr) {
|
2679
|
-
std::unique_ptr<XdsBootstrap> bootstrap =
|
2680
|
-
XdsBootstrap::Create(bootstrap_config, error);
|
2681
|
-
if (*error == GRPC_ERROR_NONE) {
|
2682
|
-
grpc_channel_args* xds_channel_args =
|
2683
|
-
grpc_channel_args_find_pointer<grpc_channel_args>(
|
2684
|
-
args,
|
2685
|
-
GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_CLIENT_CHANNEL_ARGS);
|
2686
|
-
return MakeRefCounted<XdsClient>(std::move(bootstrap), xds_channel_args);
|
2687
|
-
}
|
2688
|
-
return nullptr;
|
2689
|
-
}
|
2690
|
-
// Otherwise, use the global instance.
|
2691
|
-
{
|
2692
|
-
MutexLock lock(g_mu);
|
2693
|
-
if (g_xds_client != nullptr) {
|
2694
|
-
auto xds_client = g_xds_client->RefIfNonZero();
|
2695
|
-
if (xds_client != nullptr) return xds_client;
|
2696
|
-
}
|
2697
|
-
// Find bootstrap contents.
|
2698
|
-
std::string bootstrap_contents =
|
2699
|
-
GetBootstrapContents(g_fallback_bootstrap_config, error);
|
2700
|
-
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2701
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2702
|
-
gpr_log(GPR_INFO, "xDS bootstrap contents: %s",
|
2703
|
-
bootstrap_contents.c_str());
|
2704
|
-
}
|
2705
|
-
// Parse bootstrap.
|
2706
|
-
std::unique_ptr<XdsBootstrap> bootstrap =
|
2707
|
-
XdsBootstrap::Create(bootstrap_contents, error);
|
2708
|
-
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2709
|
-
// Instantiate XdsClient.
|
2710
|
-
xds_client =
|
2711
|
-
MakeRefCounted<XdsClient>(std::move(bootstrap), g_channel_args);
|
2712
|
-
g_xds_client = xds_client.get();
|
2713
|
-
}
|
2714
|
-
return xds_client;
|
2715
|
-
}
|
2716
|
-
|
2717
|
-
namespace internal {
|
2718
|
-
|
2719
|
-
void SetXdsChannelArgsForTest(grpc_channel_args* args) {
|
2720
|
-
MutexLock lock(g_mu);
|
2721
|
-
g_channel_args = args;
|
2722
|
-
}
|
2723
|
-
|
2724
|
-
void UnsetGlobalXdsClientForTest() {
|
2725
|
-
MutexLock lock(g_mu);
|
2726
|
-
g_xds_client = nullptr;
|
2727
|
-
}
|
2728
|
-
|
2729
|
-
void SetXdsFallbackBootstrapConfig(const char* config) {
|
2730
|
-
MutexLock lock(g_mu);
|
2731
|
-
gpr_free(g_fallback_bootstrap_config);
|
2732
|
-
g_fallback_bootstrap_config = gpr_strdup(config);
|
2733
|
-
}
|
2734
|
-
|
2735
|
-
} // namespace internal
|
2736
|
-
|
2737
|
-
//
|
2738
|
-
// embedding XdsClient in channel args
|
2739
|
-
//
|
2740
|
-
|
2741
|
-
#define GRPC_ARG_XDS_CLIENT "grpc.internal.xds_client"
|
2742
|
-
|
2743
|
-
namespace {
|
2744
|
-
|
2745
|
-
void* XdsClientArgCopy(void* p) {
|
2746
|
-
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2747
|
-
xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
|
2748
|
-
return p;
|
2749
|
-
}
|
2750
|
-
|
2751
|
-
void XdsClientArgDestroy(void* p) {
|
2752
|
-
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2753
|
-
xds_client->Unref(DEBUG_LOCATION, "channel arg");
|
2754
|
-
}
|
2755
|
-
|
2756
|
-
int XdsClientArgCmp(void* p, void* q) { return QsortCompare(p, q); }
|
2757
|
-
|
2758
|
-
const grpc_arg_pointer_vtable kXdsClientArgVtable = {
|
2759
|
-
XdsClientArgCopy, XdsClientArgDestroy, XdsClientArgCmp};
|
2760
|
-
|
2761
|
-
} // namespace
|
2762
|
-
|
2763
|
-
grpc_arg XdsClient::MakeChannelArg() const {
|
2764
|
-
return grpc_channel_arg_pointer_create(const_cast<char*>(GRPC_ARG_XDS_CLIENT),
|
2765
|
-
const_cast<XdsClient*>(this),
|
2766
|
-
&kXdsClientArgVtable);
|
2767
|
-
}
|
2768
|
-
|
2769
|
-
RefCountedPtr<XdsClient> XdsClient::GetFromChannelArgs(
|
2770
|
-
const grpc_channel_args& args) {
|
2771
|
-
XdsClient* xds_client =
|
2772
|
-
grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
|
2773
|
-
if (xds_client == nullptr) return nullptr;
|
2774
|
-
return xds_client->Ref(DEBUG_LOCATION, "GetFromChannelArgs");
|
2775
|
-
}
|
2776
|
-
|
2777
1926
|
} // namespace grpc_core
|
2778
|
-
|
2779
|
-
// The returned bytes may contain NULL(0), so we can't use c-string.
|
2780
|
-
grpc_slice grpc_dump_xds_configs() {
|
2781
|
-
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2782
|
-
grpc_core::ExecCtx exec_ctx;
|
2783
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
2784
|
-
auto xds_client = grpc_core::XdsClient::GetOrCreate(nullptr, &error);
|
2785
|
-
if (error != GRPC_ERROR_NONE) {
|
2786
|
-
// If we isn't using xDS, just return an empty string.
|
2787
|
-
GRPC_ERROR_UNREF(error);
|
2788
|
-
return grpc_empty_slice();
|
2789
|
-
}
|
2790
|
-
return grpc_slice_from_cpp_string(xds_client->DumpClientConfigBinary());
|
2791
|
-
}
|