grpc 1.46.3 → 1.53.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 +419 -241
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +129 -39
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -16
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +306 -0
- data/include/grpc/event_engine/slice_buffer.h +159 -0
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +4 -14
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
- data/include/grpc/impl/codegen/atm_windows.h +3 -108
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +5 -83
- data/include/grpc/impl/codegen/connectivity_state.h +5 -21
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +4 -35
- data/include/grpc/impl/codegen/grpc_types.h +5 -791
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -699
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +4 -107
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +836 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +5 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +31 -6
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/census/grpc_context.cc +19 -17
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +67 -61
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +26 -6
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
- data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
- data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
- data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
- data/src/core/ext/filters/client_channel/client_channel.cc +401 -451
- data/src/core/ext/filters/client_channel/client_channel.h +68 -26
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
- data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +29 -23
- data/src/core/ext/filters/client_channel/connector.h +19 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
- data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -4
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -3
- data/src/core/ext/filters/client_channel/http_proxy.cc +100 -112
- data/src/core/ext/filters/client_channel/http_proxy.h +38 -31
- data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
- 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 +37 -16
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -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/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +366 -407
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -405
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +619 -634
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +223 -220
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +214 -153
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +199 -210
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +382 -368
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +531 -163
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
- 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 +22 -22
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +54 -22
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +136 -68
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +29 -14
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +368 -305
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +166 -163
- data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
- data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
- data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
- data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
- data/src/core/ext/filters/client_channel/subchannel.cc +332 -384
- data/src/core/ext/filters/client_channel/subchannel.h +112 -82
- 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 +41 -47
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +34 -108
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +20 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
- data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +44 -22
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +76 -54
- data/src/core/ext/filters/http/client/http_client_filter.h +36 -23
- data/src/core/ext/filters/http/client_authority_filter.cc +33 -38
- data/src/core/ext/filters/http/client_authority_filter.h +27 -24
- data/src/core/ext/filters/http/http_filters_plugin.cc +46 -55
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +111 -271
- data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
- data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
- data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
- data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +185 -241
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +204 -211
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +43 -38
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +801 -1067
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
- data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
- data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
- data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
- data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +44 -77
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +221 -372
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +338 -158
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +6 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +16 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +516 -751
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +38 -27
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +86 -76
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +79 -49
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
- data/src/core/ext/transport/chttp2/transport/internal.h +248 -296
- data/src/core/ext/transport/chttp2/transport/parsing.cc +363 -132
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
- data/src/core/ext/transport/chttp2/transport/writing.cc +121 -94
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
- data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
- data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -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/common.upb.c +10 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
- 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.h +3 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
- data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -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/cel.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -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/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
- 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 +10 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
- data/src/core/ext/xds/certificate_provider_store.cc +69 -5
- data/src/core/ext/xds/certificate_provider_store.h +22 -5
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
- data/src/core/ext/xds/upb_utils.h +3 -25
- data/src/core/ext/xds/xds_api.cc +90 -196
- data/src/core/ext/xds/xds_api.h +41 -39
- data/src/core/ext/xds/xds_bootstrap.cc +5 -537
- data/src/core/ext/xds/xds_bootstrap.h +41 -96
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +35 -26
- data/src/core/ext/xds/xds_certificate_provider.h +29 -5
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
- data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
- data/src/core/ext/xds/xds_client.cc +849 -1316
- data/src/core/ext/xds/xds_client.h +57 -61
- data/src/core/ext/xds/xds_client_grpc.cc +235 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +24 -25
- data/src/core/ext/xds/xds_client_stats.h +26 -24
- data/src/core/ext/xds/xds_cluster.cc +505 -247
- data/src/core/ext/xds/xds_cluster.h +69 -40
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
- data/src/core/ext/xds/xds_common_types.cc +238 -123
- data/src/core/ext/xds/xds_common_types.h +29 -16
- data/src/core/ext/xds/xds_endpoint.cc +265 -162
- data/src/core/ext/xds/xds_endpoint.h +19 -15
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +109 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +67 -58
- data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
- data/src/core/ext/xds/xds_http_filters.cc +70 -71
- data/src/core/ext/xds/xds_http_filters.h +73 -25
- data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
- data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
- data/src/core/ext/xds/xds_listener.cc +573 -481
- data/src/core/ext/xds/xds_listener.h +57 -51
- data/src/core/ext/xds/xds_resource_type.h +28 -22
- data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
- data/src/core/ext/xds/xds_route_config.cc +592 -570
- data/src/core/ext/xds/xds_route_config.h +74 -40
- data/src/core/ext/xds/xds_routing.cc +21 -7
- data/src/core/ext/xds/xds_routing.h +17 -12
- data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -178
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +52 -52
- data/src/core/lib/address_utils/parse_address.h +46 -42
- data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
- data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
- data/src/core/lib/avl/avl.h +57 -33
- data/src/core/lib/backoff/backoff.cc +19 -21
- data/src/core/lib/backoff/backoff.h +21 -21
- data/src/core/lib/backoff/random_early_detection.cc +31 -0
- data/src/core/lib/backoff/random_early_detection.h +59 -0
- data/src/core/lib/channel/call_finalization.h +6 -4
- data/src/core/lib/channel/call_tracer.h +23 -8
- data/src/core/lib/channel/channel_args.cc +149 -61
- data/src/core/lib/channel/channel_args.h +308 -104
- data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +6 -5
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +92 -52
- data/src/core/lib/channel/channel_stack.h +184 -135
- data/src/core/lib/channel/channel_stack_builder.cc +26 -39
- data/src/core/lib/channel/channel_stack_builder.h +33 -40
- data/src/core/lib/channel/channel_stack_builder_impl.cc +84 -60
- data/src/core/lib/channel/channel_stack_builder_impl.h +9 -9
- data/src/core/lib/channel/channel_trace.cc +29 -36
- data/src/core/lib/channel/channel_trace.h +27 -24
- data/src/core/lib/channel/channelz.cc +50 -65
- data/src/core/lib/channel/channelz.h +50 -33
- data/src/core/lib/channel/channelz_registry.cc +28 -36
- data/src/core/lib/channel/channelz_registry.h +31 -30
- data/src/core/lib/channel/connected_channel.cc +1267 -78
- data/src/core/lib/channel/connected_channel.h +21 -23
- data/src/core/lib/channel/context.h +25 -21
- data/src/core/lib/channel/promise_based_filter.cc +1896 -377
- data/src/core/lib/channel/promise_based_filter.h +592 -92
- data/src/core/lib/channel/status_util.cc +64 -17
- data/src/core/lib/channel/status_util.h +38 -24
- data/src/core/lib/compression/compression.cc +24 -19
- data/src/core/lib/compression/compression_internal.cc +88 -63
- data/src/core/lib/compression/compression_internal.h +28 -27
- data/src/core/lib/compression/message_compress.cc +28 -26
- data/src/core/lib/compression/message_compress.h +28 -29
- data/src/core/lib/config/core_configuration.cc +8 -1
- data/src/core/lib/config/core_configuration.h +86 -39
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/debug/histogram_view.h +37 -0
- data/src/core/lib/debug/stats.cc +48 -152
- data/src/core/lib/debug/stats.h +50 -57
- data/src/core/lib/debug/stats_data.cc +302 -645
- data/src/core/lib/debug/stats_data.h +293 -545
- data/src/core/lib/debug/trace.cc +18 -20
- data/src/core/lib/debug/trace.h +27 -48
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +99 -0
- data/src/core/lib/event_engine/default_event_engine.h +73 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
- data/src/core/lib/event_engine/event_engine.cc +3 -30
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/forkable.cc +106 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +74 -0
- data/src/core/lib/event_engine/memory_allocator.cc +11 -3
- data/src/core/lib/event_engine/poller.h +62 -0
- data/src/core/lib/event_engine/posix.h +158 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +194 -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 +173 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
- data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/resolved_address.cc +23 -2
- data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
- data/src/core/lib/event_engine/shim.cc +56 -0
- data/src/core/lib/event_engine/shim.h +33 -0
- data/src/core/lib/event_engine/slice.cc +103 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool.cc +253 -0
- data/src/core/lib/event_engine/thread_pool.h +141 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.cc} +9 -17
- data/src/core/lib/event_engine/trace.h +43 -0
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +44 -0
- data/src/core/lib/event_engine/windows/iocp.cc +140 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
- data/src/core/lib/event_engine/windows/win_socket.h +129 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
- data/src/core/lib/experiments/config.cc +161 -0
- data/src/core/lib/experiments/config.h +53 -0
- data/src/core/lib/experiments/experiments.cc +81 -0
- data/src/core/lib/experiments/experiments.h +117 -0
- data/src/core/lib/gpr/alloc.cc +19 -25
- data/src/core/lib/gpr/alloc.h +20 -20
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/cpu_iphone.cc +24 -24
- data/src/core/lib/gpr/cpu_linux.cc +28 -23
- data/src/core/lib/gpr/cpu_posix.cc +23 -22
- data/src/core/lib/gpr/cpu_windows.cc +20 -18
- data/src/core/lib/gpr/log.cc +30 -17
- data/src/core/lib/gpr/log_android.cc +22 -20
- data/src/core/lib/gpr/log_linux.cc +24 -24
- data/src/core/lib/gpr/log_posix.cc +20 -19
- data/src/core/lib/gpr/log_windows.cc +25 -25
- data/src/core/lib/gpr/spinlock.h +20 -20
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +61 -61
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +25 -52
- data/src/core/lib/gpr/string_windows.cc +24 -24
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +36 -40
- data/src/core/lib/gpr/sync_posix.cc +22 -34
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +34 -30
- data/src/core/lib/gpr/time_posix.cc +41 -45
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +21 -22
- data/src/core/lib/gpr/time_windows.cc +35 -29
- data/src/core/lib/gpr/tmpfile.h +24 -24
- data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
- data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
- data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
- data/src/core/lib/gpr/useful.h +83 -30
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +20 -20
- data/src/core/lib/gprpp/bitset.h +35 -17
- data/src/core/lib/gprpp/chunked_vector.h +7 -3
- data/src/core/lib/gprpp/construct_destruct.h +4 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +60 -31
- data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
- data/src/core/lib/gprpp/env.h +53 -0
- data/src/core/lib/gprpp/env_linux.cc +80 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +21 -22
- data/src/core/lib/gprpp/fork.cc +58 -53
- data/src/core/lib/gprpp/fork.h +29 -35
- data/src/core/lib/gprpp/global_config.h +22 -24
- data/src/core/lib/gprpp/global_config_custom.h +20 -20
- data/src/core/lib/gprpp/global_config_env.cc +28 -25
- data/src/core/lib/gprpp/global_config_env.h +29 -27
- data/src/core/lib/gprpp/global_config_generic.h +21 -25
- data/src/core/lib/gprpp/host_port.cc +30 -26
- data/src/core/lib/gprpp/host_port.h +32 -31
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/manual_constructor.h +21 -89
- data/src/core/lib/gprpp/match.h +5 -3
- data/src/core/lib/gprpp/memory.h +22 -26
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +21 -21
- data/src/core/lib/gprpp/no_destruct.h +95 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/orphanable.h +22 -25
- data/src/core/lib/gprpp/overload.h +3 -3
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +22 -24
- data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
- data/src/core/lib/gprpp/single_set_ptr.h +3 -3
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/stat.h +3 -5
- data/src/core/lib/gprpp/stat_posix.cc +10 -4
- data/src/core/lib/gprpp/stat_windows.cc +4 -2
- data/src/core/lib/gprpp/status_helper.cc +55 -35
- data/src/core/lib/gprpp/status_helper.h +13 -5
- data/src/core/lib/gprpp/strerror.cc +43 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +26 -24
- data/src/core/lib/gprpp/table.h +22 -4
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/thd.h +25 -28
- data/src/core/lib/gprpp/thd_posix.cc +33 -32
- data/src/core/lib/gprpp/thd_windows.cc +28 -26
- data/src/core/lib/gprpp/time.cc +52 -9
- data/src/core/lib/gprpp/time.h +78 -4
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +3 -3
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +127 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
- data/src/core/lib/handshaker/proxy_mapper.h +53 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/format_request.cc +53 -22
- data/src/core/lib/http/format_request.h +23 -21
- data/src/core/lib/http/httpcli.cc +139 -141
- data/src/core/lib/http/httpcli.h +86 -38
- data/src/core/lib/http/httpcli_security_connector.cc +50 -42
- data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
- data/src/core/lib/http/parser.cc +78 -90
- data/src/core/lib/http/parser.h +38 -35
- data/src/core/lib/iomgr/block_annotate.h +23 -23
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +123 -101
- data/src/core/lib/iomgr/call_combiner.cc +32 -64
- data/src/core/lib/iomgr/call_combiner.h +24 -25
- data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
- data/src/core/lib/iomgr/cfstream_handle.h +25 -25
- data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
- data/src/core/lib/iomgr/closure.h +95 -58
- data/src/core/lib/iomgr/combiner.cc +20 -39
- data/src/core/lib/iomgr/combiner.h +20 -20
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
- data/src/core/lib/iomgr/endpoint.cc +21 -21
- data/src/core/lib/iomgr/endpoint.h +53 -51
- data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
- data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
- data/src/core/lib/iomgr/endpoint_pair.h +22 -22
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -29
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
- data/src/core/lib/iomgr/error.cc +51 -834
- data/src/core/lib/iomgr/error.h +45 -317
- data/src/core/lib/iomgr/error_cfstream.cc +18 -23
- data/src/core/lib/iomgr/error_cfstream.h +21 -21
- data/src/core/lib/iomgr/ev_apple.cc +21 -21
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
- data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
- data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
- data/src/core/lib/iomgr/ev_posix.cc +88 -121
- data/src/core/lib/iomgr/ev_posix.h +93 -87
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.cc +34 -56
- data/src/core/lib/iomgr/exec_ctx.h +152 -177
- data/src/core/lib/iomgr/executor.cc +21 -31
- data/src/core/lib/iomgr/executor.h +27 -30
- data/src/core/lib/iomgr/fork_posix.cc +30 -27
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +20 -20
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
- data/src/core/lib/iomgr/internal_errqueue.h +84 -89
- data/src/core/lib/iomgr/iocp_windows.cc +23 -23
- data/src/core/lib/iomgr/iocp_windows.h +21 -21
- data/src/core/lib/iomgr/iomgr.cc +25 -20
- data/src/core/lib/iomgr/iomgr.h +35 -35
- data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +28 -28
- data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
- data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +22 -22
- data/src/core/lib/iomgr/lockfree_event.cc +114 -131
- data/src/core/lib/iomgr/lockfree_event.h +23 -23
- data/src/core/lib/iomgr/nameser.h +86 -86
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +29 -29
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +55 -55
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +26 -28
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
- data/src/core/lib/iomgr/pollset_windows.cc +32 -31
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +59 -37
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +34 -20
- data/src/core/lib/iomgr/resolve_address.h +73 -43
- data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
- data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
- data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
- data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
- data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +25 -26
- data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
- data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +39 -39
- data/src/core/lib/iomgr/socket_utils.h +27 -27
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
- data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +37 -36
- data/src/core/lib/iomgr/socket_windows.h +59 -61
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +28 -24
- data/src/core/lib/iomgr/tcp_client.h +49 -38
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
- data/src/core/lib/iomgr/tcp_client_posix.cc +243 -105
- data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
- data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
- data/src/core/lib/iomgr/tcp_posix.cc +505 -362
- data/src/core/lib/iomgr/tcp_posix.h +32 -30
- data/src/core/lib/iomgr/tcp_server.cc +33 -24
- data/src/core/lib/iomgr/tcp_server.h +78 -69
- data/src/core/lib/iomgr/tcp_server_posix.cc +381 -133
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
- data/src/core/lib/iomgr/tcp_windows.cc +116 -98
- data/src/core/lib/iomgr/tcp_windows.h +34 -35
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +68 -68
- data/src/core/lib/iomgr/timer_generic.cc +125 -134
- data/src/core/lib/iomgr/timer_generic.h +21 -21
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +22 -22
- data/src/core/lib/iomgr/timer_manager.cc +31 -31
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
- data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
- data/src/core/lib/json/json.h +23 -27
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +217 -0
- data/src/core/lib/json/json_object_loader.h +634 -0
- data/src/core/lib/json/json_reader.cc +123 -90
- data/src/core/lib/json/json_util.cc +14 -34
- data/src/core/lib/json/json_util.h +17 -8
- data/src/core/lib/json/json_writer.cc +62 -57
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
- data/src/core/lib/matchers/matchers.cc +12 -7
- data/src/core/lib/matchers/matchers.h +5 -3
- data/src/core/lib/promise/activity.cc +23 -8
- data/src/core/lib/promise/activity.h +116 -58
- data/src/core/lib/promise/arena_promise.h +115 -72
- data/src/core/lib/promise/context.h +18 -11
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +28 -33
- data/src/core/lib/promise/detail/promise_factory.h +61 -14
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +31 -3
- data/src/core/lib/promise/detail/switch.h +21 -21
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
- data/src/core/lib/promise/if.h +195 -0
- data/src/core/lib/promise/interceptor_list.h +308 -0
- data/src/core/lib/promise/intra_activity_waiter.h +9 -3
- data/src/core/lib/promise/latch.h +109 -22
- data/src/core/lib/promise/loop.h +13 -9
- data/src/core/lib/promise/map.h +4 -6
- data/src/core/lib/promise/pipe.h +608 -0
- data/src/core/lib/promise/poll.h +129 -11
- data/src/core/lib/promise/promise.h +5 -5
- data/src/core/lib/promise/race.h +6 -10
- data/src/core/lib/promise/seq.h +32 -14
- data/src/core/lib/promise/sleep.cc +58 -42
- data/src/core/lib/promise/sleep.h +44 -26
- data/src/core/lib/promise/trace.cc +20 -0
- data/src/core/lib/promise/trace.h +24 -0
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +41 -23
- data/src/core/lib/resolver/resolver.cc +17 -59
- data/src/core/lib/resolver/resolver.h +21 -18
- data/src/core/lib/resolver/resolver_factory.h +11 -10
- data/src/core/lib/resolver/resolver_registry.cc +17 -9
- data/src/core/lib/resolver/resolver_registry.h +15 -5
- data/src/core/lib/resolver/server_address.cc +46 -34
- data/src/core/lib/resolver/server_address.h +36 -35
- data/src/core/lib/resource_quota/api.cc +23 -2
- data/src/core/lib/resource_quota/api.h +13 -4
- data/src/core/lib/resource_quota/arena.cc +85 -27
- data/src/core/lib/resource_quota/arena.h +197 -25
- data/src/core/lib/resource_quota/memory_quota.cc +322 -101
- data/src/core/lib/resource_quota/memory_quota.h +191 -56
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/resource_quota/resource_quota.h +12 -4
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +7 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
- data/src/core/lib/security/authorization/evaluate_args.h +9 -6
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +19 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
- data/src/core/lib/security/authorization/matchers.cc +44 -30
- data/src/core/lib/security/authorization/matchers.h +10 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
- data/src/core/lib/security/authorization/rbac_policy.h +10 -3
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/context/security_context.cc +27 -25
- data/src/core/lib/security/context/security_context.h +56 -34
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +31 -24
- data/src/core/lib/security/credentials/alts/alts_credentials.h +63 -59
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
- data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
- data/src/core/lib/security/credentials/call_creds_util.h +4 -3
- data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +34 -34
- data/src/core/lib/security/credentials/composite/composite_credentials.h +45 -33
- data/src/core/lib/security/credentials/credentials.cc +23 -26
- data/src/core/lib/security/credentials/credentials.h +79 -65
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
- data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -39
- data/src/core/lib/security/credentials/fake/fake_credentials.h +51 -44
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +146 -114
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +33 -27
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -21
- data/src/core/lib/security/credentials/iam/iam_credentials.h +33 -23
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +15 -5
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +14 -10
- data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
- data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +32 -29
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +37 -23
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
- data/src/core/lib/security/credentials/local/local_credentials.cc +32 -26
- data/src/core/lib/security/credentials/local/local_credentials.h +34 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +95 -87
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +46 -25
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +35 -31
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +48 -24
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +44 -42
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +39 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +27 -16
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +36 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +37 -14
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +46 -44
- data/src/core/lib/security/credentials/tls/tls_credentials.h +30 -27
- data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +33 -35
- data/src/core/lib/security/credentials/xds/xds_credentials.h +24 -10
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
- data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
- data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
- data/src/core/lib/security/security_connector/security_connector.cc +37 -35
- data/src/core/lib/security/security_connector/security_connector.h +58 -45
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -46
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
- data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
- data/src/core/lib/security/transport/auth_filters.h +53 -24
- data/src/core/lib/security/transport/client_auth_filter.cc +57 -40
- data/src/core/lib/security/transport/secure_endpoint.cc +130 -75
- data/src/core/lib/security/transport/secure_endpoint.h +28 -27
- data/src/core/lib/security/transport/security_handshaker.cc +144 -114
- data/src/core/lib/security/transport/security_handshaker.h +28 -23
- data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +20 -20
- data/src/core/lib/security/util/json_util.cc +24 -24
- data/src/core/lib/security/util/json_util.h +21 -23
- data/src/core/lib/service_config/service_config.h +19 -12
- data/src/core/lib/service_config/service_config_call_data.h +15 -5
- data/src/core/lib/service_config/service_config_impl.cc +111 -150
- data/src/core/lib/service_config/service_config_impl.h +27 -27
- data/src/core/lib/service_config/service_config_parser.cc +16 -28
- data/src/core/lib/service_config/service_config_parser.h +18 -19
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +34 -32
- data/src/core/lib/slice/percent_encoding.cc +24 -30
- data/src/core/lib/slice/percent_encoding.h +28 -34
- data/src/core/lib/slice/slice.cc +59 -46
- data/src/core/lib/slice/slice.h +64 -20
- data/src/core/lib/slice/slice_buffer.cc +136 -76
- data/src/core/lib/slice/slice_buffer.h +168 -0
- data/src/core/lib/slice/slice_internal.h +38 -45
- data/src/core/lib/slice/slice_refcount.cc +3 -18
- data/src/core/lib/slice/slice_refcount.h +53 -19
- data/src/core/lib/slice/slice_string_helpers.cc +17 -33
- data/src/core/lib/slice/slice_string_helpers.h +23 -30
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +25 -25
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/builtins.h +3 -3
- data/src/core/lib/surface/byte_buffer.cc +26 -21
- data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
- data/src/core/lib/surface/call.cc +2232 -483
- data/src/core/lib/surface/call.h +135 -42
- data/src/core/lib/surface/call_details.cc +22 -23
- data/src/core/lib/surface/call_log_batch.cc +25 -18
- data/src/core/lib/surface/call_test_only.h +34 -31
- data/src/core/lib/surface/call_trace.cc +123 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/surface/call_trace.h} +12 -10
- data/src/core/lib/surface/channel.cc +217 -284
- data/src/core/lib/surface/channel.h +137 -90
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +22 -20
- data/src/core/lib/surface/channel_ping.cc +26 -20
- data/src/core/lib/surface/channel_stack_type.cc +21 -19
- data/src/core/lib/surface/channel_stack_type.h +22 -22
- data/src/core/lib/surface/completion_queue.cc +200 -222
- data/src/core/lib/surface/completion_queue.h +42 -40
- data/src/core/lib/surface/completion_queue_factory.cc +34 -28
- data/src/core/lib/surface/completion_queue_factory.h +21 -23
- data/src/core/lib/surface/event_string.cc +19 -24
- data/src/core/lib/surface/event_string.h +21 -21
- data/src/core/lib/surface/init.cc +57 -114
- data/src/core/lib/surface/init.h +20 -28
- data/src/core/lib/surface/init_internally.cc +25 -0
- data/src/core/lib/surface/init_internally.h +37 -0
- data/src/core/lib/surface/lame_client.cc +87 -130
- data/src/core/lib/surface/lame_client.h +62 -24
- data/src/core/lib/surface/metadata_array.cc +18 -17
- data/src/core/lib/surface/server.cc +406 -174
- data/src/core/lib/surface/server.h +56 -24
- data/src/core/lib/surface/validate_metadata.cc +64 -77
- data/src/core/lib/surface/validate_metadata.h +33 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +19 -19
- data/src/core/lib/transport/bdp_estimator.h +22 -24
- data/src/core/lib/transport/connectivity_state.cc +24 -23
- data/src/core/lib/transport/connectivity_state.h +24 -25
- data/src/core/lib/transport/error_utils.cc +57 -79
- data/src/core/lib/transport/error_utils.h +29 -25
- data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
- data/src/core/lib/{channel → transport}/handshaker.h +59 -48
- data/src/core/lib/transport/handshaker_factory.h +74 -0
- data/src/core/lib/transport/handshaker_registry.cc +61 -0
- data/src/core/lib/transport/handshaker_registry.h +69 -0
- data/src/core/lib/transport/http2_errors.h +22 -22
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
- data/src/core/lib/transport/http_connect_handshaker.h +42 -0
- data/src/core/lib/transport/metadata_batch.cc +305 -0
- data/src/core/lib/transport/metadata_batch.h +405 -304
- data/src/core/lib/transport/parsed_metadata.cc +2 -4
- data/src/core/lib/transport/parsed_metadata.h +33 -14
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +27 -27
- data/src/core/lib/transport/status_conversion.cc +23 -23
- data/src/core/lib/transport/status_conversion.h +24 -24
- data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +24 -28
- data/src/core/lib/transport/timeout_encoding.h +25 -21
- data/src/core/lib/transport/transport.cc +97 -57
- data/src/core/lib/transport/transport.h +243 -213
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +55 -45
- data/src/core/lib/transport/transport_op_string.cc +40 -39
- data/src/core/lib/uri/uri_parser.cc +12 -4
- data/src/core/lib/uri/uri_parser.h +3 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +60 -69
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +336 -336
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
- data/src/core/tsi/fake_transport_security.cc +146 -110
- data/src/core/tsi/fake_transport_security.h +36 -30
- data/src/core/tsi/local_transport_security.cc +43 -38
- data/src/core/tsi/local_transport_security.h +33 -33
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
- data/src/core/tsi/ssl_transport_security.cc +299 -370
- data/src/core/tsi/ssl_transport_security.h +206 -203
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +27 -27
- data/src/core/tsi/transport_security.cc +44 -32
- data/src/core/tsi/transport_security.h +49 -48
- data/src/core/tsi/transport_security_grpc.cc +23 -22
- data/src/core/tsi/transport_security_grpc.h +44 -41
- data/src/core/tsi/transport_security_interface.h +344 -332
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -1
- data/src/ruby/ext/grpc/extconf.rb +98 -20
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +0 -6
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/channel_spec.rb +5 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
- data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +221 -39
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- 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 +14 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -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 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- 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/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -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 +503 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
- data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
- 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 +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
- 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 +59 -102
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/random.h +6 -6
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/status.cc +193 -14
- data/third_party/abseil-cpp/absl/status/status.h +24 -14
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
- data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
- 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 +575 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- 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 +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- 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 +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
- 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 +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- 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 +8 -19
- data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
- 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/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- 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 +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- 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/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +268 -169
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +31 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
- 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 +161 -65
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +10 -2
- data/third_party/upb/upb/def.h +8 -1
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +29 -20
- data/third_party/upb/upb/encode.h +16 -6
- 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} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- 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 +7 -3
- data/third_party/upb/upb/json_encode.h +6 -3
- 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 +2 -62
- data/third_party/upb/upb/msg.h +2 -45
- data/third_party/upb/upb/msg_internal.h +28 -22
- data/third_party/upb/upb/port_def.inc +2 -1
- data/third_party/upb/upb/port_undef.inc +1 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- 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 +2 -2
- data/third_party/upb/upb/table_internal.h +3 -352
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +7 -196
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +372 -102
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
- 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/lb_policy_registry.h +0 -65
- data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -57
- data/src/core/lib/channel/handshaker_factory.h +0 -50
- data/src/core/lib/channel/handshaker_registry.cc +0 -50
- data/src/core/lib/channel/handshaker_registry.h +0 -71
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gpr/env.h +0 -40
- data/src/core/lib/gpr/env_linux.cc +0 -75
- data/src/core/lib/gpr/env_posix.cc +0 -46
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/gpr/tls.h +0 -158
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- 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/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/promise/call_push_pull.h +0 -144
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_refcount_base.h +0 -61
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/transport/byte_stream.cc +0 -164
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -19,48 +19,32 @@
|
|
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
|
26
|
-
#include
|
24
|
+
#include <algorithm>
|
25
|
+
#include <type_traits>
|
26
|
+
|
27
|
+
#include "absl/strings/match.h"
|
28
|
+
#include "absl/strings/str_cat.h"
|
27
29
|
#include "absl/strings/str_join.h"
|
30
|
+
#include "absl/strings/str_split.h"
|
28
31
|
#include "absl/strings/string_view.h"
|
32
|
+
#include "absl/strings/strip.h"
|
33
|
+
#include "absl/types/optional.h"
|
34
|
+
#include "upb/arena.h"
|
29
35
|
|
30
|
-
#include <grpc/
|
31
|
-
#include <grpc/
|
32
|
-
#include <grpc/support/alloc.h>
|
33
|
-
#include <grpc/support/time.h>
|
36
|
+
#include <grpc/event_engine/event_engine.h>
|
37
|
+
#include <grpc/support/log.h>
|
34
38
|
|
35
|
-
#include "src/core/ext/filters/client_channel/client_channel.h"
|
36
39
|
#include "src/core/ext/xds/xds_api.h"
|
37
40
|
#include "src/core/ext/xds/xds_bootstrap.h"
|
38
|
-
#include "src/core/ext/xds/xds_channel_args.h"
|
39
41
|
#include "src/core/ext/xds/xds_client_stats.h"
|
40
|
-
#include "src/core/ext/xds/xds_cluster.h"
|
41
|
-
#include "src/core/ext/xds/xds_cluster_specifier_plugin.h"
|
42
|
-
#include "src/core/ext/xds/xds_endpoint.h"
|
43
|
-
#include "src/core/ext/xds/xds_http_filters.h"
|
44
|
-
#include "src/core/ext/xds/xds_listener.h"
|
45
|
-
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
46
42
|
#include "src/core/lib/backoff/backoff.h"
|
47
|
-
#include "src/core/lib/
|
48
|
-
#include "src/core/lib/channel/channel_stack.h"
|
49
|
-
#include "src/core/lib/config/core_configuration.h"
|
50
|
-
#include "src/core/lib/gpr/env.h"
|
51
|
-
#include "src/core/lib/gpr/string.h"
|
52
|
-
#include "src/core/lib/gprpp/memory.h"
|
43
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
53
44
|
#include "src/core/lib/gprpp/orphanable.h"
|
54
45
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
55
46
|
#include "src/core/lib/gprpp/sync.h"
|
56
|
-
#include "src/core/lib/iomgr/
|
57
|
-
#include "src/core/lib/iomgr/timer.h"
|
58
|
-
#include "src/core/lib/security/credentials/channel_creds_registry.h"
|
59
|
-
#include "src/core/lib/slice/slice_internal.h"
|
60
|
-
#include "src/core/lib/slice/slice_string_helpers.h"
|
61
|
-
#include "src/core/lib/surface/call.h"
|
62
|
-
#include "src/core/lib/surface/channel.h"
|
63
|
-
#include "src/core/lib/surface/lame_client.h"
|
47
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
64
48
|
#include "src/core/lib/uri/uri_parser.h"
|
65
49
|
|
66
50
|
#define GRPC_XDS_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
@@ -71,19 +55,11 @@
|
|
71
55
|
|
72
56
|
namespace grpc_core {
|
73
57
|
|
58
|
+
using ::grpc_event_engine::experimental::EventEngine;
|
59
|
+
|
74
60
|
TraceFlag grpc_xds_client_trace(false, "xds_client");
|
75
61
|
TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount");
|
76
62
|
|
77
|
-
namespace {
|
78
|
-
|
79
|
-
Mutex* g_mu = nullptr;
|
80
|
-
|
81
|
-
const grpc_channel_args* g_channel_args ABSL_GUARDED_BY(*g_mu) = nullptr;
|
82
|
-
XdsClient* g_xds_client ABSL_GUARDED_BY(*g_mu) = nullptr;
|
83
|
-
char* g_fallback_bootstrap_config ABSL_GUARDED_BY(*g_mu) = nullptr;
|
84
|
-
|
85
|
-
} // namespace
|
86
|
-
|
87
63
|
//
|
88
64
|
// Internal class declarations
|
89
65
|
//
|
@@ -96,9 +72,12 @@ class XdsClient::ChannelState::RetryableCall
|
|
96
72
|
public:
|
97
73
|
explicit RetryableCall(WeakRefCountedPtr<ChannelState> chand);
|
98
74
|
|
99
|
-
|
75
|
+
// Disable thread-safety analysis because this method is called via
|
76
|
+
// OrphanablePtr<>, but there's no way to pass the lock annotation
|
77
|
+
// through there.
|
78
|
+
void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
100
79
|
|
101
|
-
void OnCallFinishedLocked();
|
80
|
+
void OnCallFinishedLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
102
81
|
|
103
82
|
T* calld() const { return calld_.get(); }
|
104
83
|
ChannelState* chand() const { return chand_.get(); }
|
@@ -107,9 +86,9 @@ class XdsClient::ChannelState::RetryableCall
|
|
107
86
|
|
108
87
|
private:
|
109
88
|
void StartNewCallLocked();
|
110
|
-
void StartRetryTimerLocked();
|
111
|
-
|
112
|
-
void
|
89
|
+
void StartRetryTimerLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
90
|
+
|
91
|
+
void OnRetryTimer();
|
113
92
|
|
114
93
|
// The wrapped xds call that talks to the xds server. It's instantiated
|
115
94
|
// every time we start a new call. It's null during call retry backoff.
|
@@ -119,9 +98,8 @@ class XdsClient::ChannelState::RetryableCall
|
|
119
98
|
|
120
99
|
// Retry state.
|
121
100
|
BackOff backoff_;
|
122
|
-
|
123
|
-
|
124
|
-
bool retry_timer_callback_pending_ = false;
|
101
|
+
absl::optional<EventEngine::TaskHandle> timer_handle_
|
102
|
+
ABSL_GUARDED_BY(&XdsClient::mu_);
|
125
103
|
|
126
104
|
bool shutting_down_ = false;
|
127
105
|
};
|
@@ -132,7 +110,6 @@ class XdsClient::ChannelState::AdsCallState
|
|
132
110
|
public:
|
133
111
|
// The ctor and dtor should not be used directly.
|
134
112
|
explicit AdsCallState(RefCountedPtr<RetryableCall<AdsCallState>> parent);
|
135
|
-
~AdsCallState() override;
|
136
113
|
|
137
114
|
void Orphan() override;
|
138
115
|
|
@@ -170,106 +147,159 @@ class XdsClient::ChannelState::AdsCallState
|
|
170
147
|
absl::Status ProcessAdsResponseFields(AdsResponseFields fields) override
|
171
148
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
172
149
|
|
173
|
-
void ParseResource(
|
174
|
-
absl::string_view
|
150
|
+
void ParseResource(upb_Arena* arena, size_t idx, absl::string_view type_url,
|
151
|
+
absl::string_view resource_name,
|
175
152
|
absl::string_view serialized_resource) override
|
176
153
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
177
154
|
|
155
|
+
void ResourceWrapperParsingFailed(size_t idx) override;
|
156
|
+
|
178
157
|
Result TakeResult() { return std::move(result_); }
|
179
158
|
|
180
159
|
private:
|
181
160
|
XdsClient* xds_client() const { return ads_call_state_->xds_client(); }
|
182
161
|
|
183
162
|
AdsCallState* ads_call_state_;
|
184
|
-
const Timestamp update_time_ =
|
163
|
+
const Timestamp update_time_ = Timestamp::Now();
|
185
164
|
Result result_;
|
186
165
|
};
|
187
166
|
|
188
167
|
class ResourceTimer : public InternallyRefCounted<ResourceTimer> {
|
189
168
|
public:
|
190
169
|
ResourceTimer(const XdsResourceType* type, const XdsResourceName& name)
|
191
|
-
: type_(type), name_(name) {
|
192
|
-
GRPC_CLOSURE_INIT(&timer_callback_, OnTimer, this,
|
193
|
-
grpc_schedule_on_exec_ctx);
|
194
|
-
}
|
170
|
+
: type_(type), name_(name) {}
|
195
171
|
|
196
|
-
|
172
|
+
// Disable thread-safety analysis because this method is called via
|
173
|
+
// OrphanablePtr<>, but there's no way to pass the lock annotation
|
174
|
+
// through there.
|
175
|
+
void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
197
176
|
MaybeCancelTimer();
|
198
177
|
Unref(DEBUG_LOCATION, "Orphan");
|
199
178
|
}
|
200
179
|
|
201
|
-
void
|
202
|
-
|
203
|
-
|
204
|
-
ads_calld_ = std::move(ads_calld);
|
205
|
-
Ref(DEBUG_LOCATION, "timer").release();
|
206
|
-
timer_pending_ = true;
|
207
|
-
grpc_timer_init(
|
208
|
-
&timer_,
|
209
|
-
ExecCtx::Get()->Now() + ads_calld_->xds_client()->request_timeout_,
|
210
|
-
&timer_callback_);
|
180
|
+
void MarkSubscriptionSendStarted()
|
181
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
182
|
+
subscription_sent_ = true;
|
211
183
|
}
|
212
184
|
|
213
|
-
void
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
}
|
185
|
+
void MaybeMarkSubscriptionSendComplete(
|
186
|
+
RefCountedPtr<AdsCallState> ads_calld)
|
187
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
188
|
+
if (subscription_sent_) MaybeStartTimer(std::move(ads_calld));
|
218
189
|
}
|
219
190
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
191
|
+
void MarkSeen() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
192
|
+
resource_seen_ = true;
|
193
|
+
MaybeCancelTimer();
|
194
|
+
}
|
195
|
+
|
196
|
+
void MaybeCancelTimer() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
197
|
+
if (timer_handle_.has_value() &&
|
198
|
+
ads_calld_->xds_client()->engine()->Cancel(*timer_handle_)) {
|
199
|
+
timer_handle_.reset();
|
226
200
|
}
|
227
|
-
self->ads_calld_->xds_client()->work_serializer_.DrainQueue();
|
228
|
-
self->ads_calld_.reset();
|
229
|
-
self->Unref(DEBUG_LOCATION, "timer");
|
230
201
|
}
|
231
202
|
|
232
|
-
|
203
|
+
private:
|
204
|
+
void MaybeStartTimer(RefCountedPtr<AdsCallState> ads_calld)
|
233
205
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
234
|
-
if
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
206
|
+
// Don't start timer if we've already either seen the resource or
|
207
|
+
// marked it as non-existing.
|
208
|
+
// Note: There are edge cases where we can have seen the resource
|
209
|
+
// before we have sent the initial subscription request, such as
|
210
|
+
// when we unsubscribe and then resubscribe to a given resource
|
211
|
+
// and then get a response containing that resource, all while a
|
212
|
+
// send_message op is in flight.
|
213
|
+
if (resource_seen_) return;
|
214
|
+
// Don't start timer if we haven't yet sent the initial subscription
|
215
|
+
// request for the resource.
|
216
|
+
if (!subscription_sent_) return;
|
217
|
+
// Don't start timer if it's already running.
|
218
|
+
if (timer_handle_.has_value()) return;
|
219
|
+
// Check if we already have a cached version of this resource
|
220
|
+
// (i.e., if this is the initial request for the resource after an
|
221
|
+
// ADS stream restart). If so, we don't start the timer, because
|
222
|
+
// (a) we already have the resource and (b) the server may
|
223
|
+
// optimize by not resending the resource that we already have.
|
224
|
+
auto& authority_state =
|
225
|
+
ads_calld->xds_client()->authority_state_map_[name_.authority];
|
226
|
+
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
227
|
+
if (state.resource != nullptr) return;
|
228
|
+
// Start timer.
|
229
|
+
ads_calld_ = std::move(ads_calld);
|
230
|
+
timer_handle_ = ads_calld_->xds_client()->engine()->RunAfter(
|
231
|
+
ads_calld_->xds_client()->request_timeout_,
|
232
|
+
[self = Ref(DEBUG_LOCATION, "timer")]() {
|
233
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
234
|
+
ExecCtx exec_ctx;
|
235
|
+
self->OnTimer();
|
236
|
+
});
|
237
|
+
}
|
238
|
+
|
239
|
+
void OnTimer() {
|
240
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
241
|
+
gpr_log(GPR_INFO,
|
242
|
+
"[xds_client %p] xds server %s: timeout obtaining resource "
|
243
|
+
"{type=%s name=%s} from xds server",
|
244
|
+
ads_calld_->xds_client(),
|
245
|
+
ads_calld_->chand()->server_.server_uri().c_str(),
|
246
|
+
std::string(type_->type_url()).c_str(),
|
247
|
+
XdsClient::ConstructFullXdsResourceName(
|
248
|
+
name_.authority, type_->type_url(), name_.key)
|
249
|
+
.c_str());
|
250
|
+
}
|
251
|
+
{
|
252
|
+
MutexLock lock(&ads_calld_->xds_client()->mu_);
|
253
|
+
timer_handle_.reset();
|
254
|
+
resource_seen_ = true;
|
247
255
|
auto& authority_state =
|
248
256
|
ads_calld_->xds_client()->authority_state_map_[name_.authority];
|
249
257
|
ResourceState& state = authority_state.resource_map[type_][name_.key];
|
250
258
|
state.meta.client_status = XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
251
|
-
ads_calld_->xds_client()->
|
252
|
-
|
259
|
+
ads_calld_->xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
260
|
+
state.watchers);
|
253
261
|
}
|
254
|
-
|
262
|
+
ads_calld_->xds_client()->work_serializer_.DrainQueue();
|
263
|
+
ads_calld_.reset();
|
255
264
|
}
|
256
265
|
|
257
266
|
const XdsResourceType* type_;
|
258
267
|
const XdsResourceName name_;
|
259
268
|
|
260
269
|
RefCountedPtr<AdsCallState> ads_calld_;
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
270
|
+
// True if we have sent the initial subscription request for this
|
271
|
+
// resource on this ADS stream.
|
272
|
+
bool subscription_sent_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
|
273
|
+
// True if we have either (a) seen the resource in a response on this
|
274
|
+
// stream or (b) declared the resource to not exist due to the timer
|
275
|
+
// firing.
|
276
|
+
bool resource_seen_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
|
277
|
+
absl::optional<EventEngine::TaskHandle> timer_handle_
|
278
|
+
ABSL_GUARDED_BY(&XdsClient::mu_);
|
265
279
|
};
|
266
280
|
|
267
|
-
|
268
|
-
|
281
|
+
class StreamEventHandler
|
282
|
+
: public XdsTransportFactory::XdsTransport::StreamingCall::EventHandler {
|
283
|
+
public:
|
284
|
+
explicit StreamEventHandler(RefCountedPtr<AdsCallState> ads_calld)
|
285
|
+
: ads_calld_(std::move(ads_calld)) {}
|
286
|
+
|
287
|
+
void OnRequestSent(bool ok) override { ads_calld_->OnRequestSent(ok); }
|
288
|
+
void OnRecvMessage(absl::string_view payload) override {
|
289
|
+
ads_calld_->OnRecvMessage(payload);
|
290
|
+
}
|
291
|
+
void OnStatusReceived(absl::Status status) override {
|
292
|
+
ads_calld_->OnStatusReceived(std::move(status));
|
293
|
+
}
|
294
|
+
|
295
|
+
private:
|
296
|
+
RefCountedPtr<AdsCallState> ads_calld_;
|
297
|
+
};
|
269
298
|
|
270
|
-
|
299
|
+
struct ResourceTypeState {
|
300
|
+
// Nonce and status for this resource type.
|
271
301
|
std::string nonce;
|
272
|
-
|
302
|
+
absl::Status status;
|
273
303
|
|
274
304
|
// Subscribed resources of this type.
|
275
305
|
std::map<std::string /*authority*/,
|
@@ -280,47 +310,27 @@ class XdsClient::ChannelState::AdsCallState
|
|
280
310
|
void SendMessageLocked(const XdsResourceType* type)
|
281
311
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
282
312
|
|
283
|
-
|
284
|
-
void
|
285
|
-
|
286
|
-
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
287
|
-
bool OnResponseReceivedLocked()
|
288
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
289
|
-
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
290
|
-
void OnStatusReceivedLocked(grpc_error_handle error)
|
291
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
313
|
+
void OnRequestSent(bool ok);
|
314
|
+
void OnRecvMessage(absl::string_view payload);
|
315
|
+
void OnStatusReceived(absl::Status status);
|
292
316
|
|
293
317
|
bool IsCurrentCallOnChannel() const;
|
294
318
|
|
295
319
|
// Constructs a list of resource names of a given type for an ADS
|
296
320
|
// request. Also starts the timer for each resource if needed.
|
297
|
-
std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type)
|
321
|
+
std::vector<std::string> ResourceNamesForRequest(const XdsResourceType* type)
|
322
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
298
323
|
|
299
324
|
// The owning RetryableCall<>.
|
300
325
|
RefCountedPtr<RetryableCall<AdsCallState>> parent_;
|
301
326
|
|
327
|
+
OrphanablePtr<XdsTransportFactory::XdsTransport::StreamingCall> call_;
|
328
|
+
|
302
329
|
bool sent_initial_message_ = false;
|
303
330
|
bool seen_response_ = false;
|
304
331
|
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
// recv_initial_metadata
|
309
|
-
grpc_metadata_array initial_metadata_recv_;
|
310
|
-
|
311
|
-
// send_message
|
312
|
-
grpc_byte_buffer* send_message_payload_ = nullptr;
|
313
|
-
grpc_closure on_request_sent_;
|
314
|
-
|
315
|
-
// recv_message
|
316
|
-
grpc_byte_buffer* recv_message_payload_ = nullptr;
|
317
|
-
grpc_closure on_response_received_;
|
318
|
-
|
319
|
-
// recv_trailing_metadata
|
320
|
-
grpc_metadata_array trailing_metadata_recv_;
|
321
|
-
grpc_status_code status_code_;
|
322
|
-
grpc_slice status_details_;
|
323
|
-
grpc_closure on_status_received_;
|
332
|
+
const XdsResourceType* send_message_pending_
|
333
|
+
ABSL_GUARDED_BY(&XdsClient::mu_) = nullptr;
|
324
334
|
|
325
335
|
// Resource types for which requests need to be sent.
|
326
336
|
std::set<const XdsResourceType*> buffered_requests_;
|
@@ -335,11 +345,11 @@ class XdsClient::ChannelState::LrsCallState
|
|
335
345
|
public:
|
336
346
|
// The ctor and dtor should not be used directly.
|
337
347
|
explicit LrsCallState(RefCountedPtr<RetryableCall<LrsCallState>> parent);
|
338
|
-
~LrsCallState() override;
|
339
348
|
|
340
349
|
void Orphan() override;
|
341
350
|
|
342
|
-
void MaybeStartReportingLocked()
|
351
|
+
void MaybeStartReportingLocked()
|
352
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
343
353
|
|
344
354
|
RetryableCall<LrsCallState>* parent() { return parent_.get(); }
|
345
355
|
ChannelState* chand() const { return parent_->chand(); }
|
@@ -347,30 +357,44 @@ class XdsClient::ChannelState::LrsCallState
|
|
347
357
|
bool seen_response() const { return seen_response_; }
|
348
358
|
|
349
359
|
private:
|
360
|
+
class StreamEventHandler
|
361
|
+
: public XdsTransportFactory::XdsTransport::StreamingCall::EventHandler {
|
362
|
+
public:
|
363
|
+
explicit StreamEventHandler(RefCountedPtr<LrsCallState> lrs_calld)
|
364
|
+
: lrs_calld_(std::move(lrs_calld)) {}
|
365
|
+
|
366
|
+
void OnRequestSent(bool ok) override { lrs_calld_->OnRequestSent(ok); }
|
367
|
+
void OnRecvMessage(absl::string_view payload) override {
|
368
|
+
lrs_calld_->OnRecvMessage(payload);
|
369
|
+
}
|
370
|
+
void OnStatusReceived(absl::Status status) override {
|
371
|
+
lrs_calld_->OnStatusReceived(std::move(status));
|
372
|
+
}
|
373
|
+
|
374
|
+
private:
|
375
|
+
RefCountedPtr<LrsCallState> lrs_calld_;
|
376
|
+
};
|
377
|
+
|
350
378
|
// Reports client-side load stats according to a fixed interval.
|
351
379
|
class Reporter : public InternallyRefCounted<Reporter> {
|
352
380
|
public:
|
353
381
|
Reporter(RefCountedPtr<LrsCallState> parent, Duration report_interval)
|
354
382
|
: parent_(std::move(parent)), report_interval_(report_interval) {
|
355
|
-
GRPC_CLOSURE_INIT(&on_next_report_timer_, OnNextReportTimer, this,
|
356
|
-
grpc_schedule_on_exec_ctx);
|
357
|
-
GRPC_CLOSURE_INIT(&on_report_done_, OnReportDone, this,
|
358
|
-
grpc_schedule_on_exec_ctx);
|
359
383
|
ScheduleNextReportLocked();
|
360
384
|
}
|
361
385
|
|
362
|
-
|
386
|
+
// Disable thread-safety analysis because this method is called via
|
387
|
+
// OrphanablePtr<>, but there's no way to pass the lock annotation
|
388
|
+
// through there.
|
389
|
+
void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
|
390
|
+
|
391
|
+
void OnReportDoneLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
363
392
|
|
364
393
|
private:
|
365
394
|
void ScheduleNextReportLocked()
|
366
395
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
367
|
-
|
368
|
-
bool OnNextReportTimerLocked(grpc_error_handle error)
|
369
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
396
|
+
bool OnNextReportTimer();
|
370
397
|
bool SendReportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
371
|
-
static void OnReportDone(void* arg, grpc_error_handle error);
|
372
|
-
bool OnReportDoneLocked(grpc_error_handle error)
|
373
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
374
398
|
|
375
399
|
bool IsCurrentReporterOnCall() const {
|
376
400
|
return this == parent_->reporter_.get();
|
@@ -383,47 +407,23 @@ class XdsClient::ChannelState::LrsCallState
|
|
383
407
|
// The load reporting state.
|
384
408
|
const Duration report_interval_;
|
385
409
|
bool last_report_counters_were_zero_ = false;
|
386
|
-
|
387
|
-
|
388
|
-
grpc_closure on_next_report_timer_;
|
389
|
-
grpc_closure on_report_done_;
|
410
|
+
absl::optional<EventEngine::TaskHandle> timer_handle_
|
411
|
+
ABSL_GUARDED_BY(&XdsClient::mu_);
|
390
412
|
};
|
391
413
|
|
392
|
-
|
393
|
-
void
|
394
|
-
|
395
|
-
static void OnResponseReceived(void* arg, grpc_error_handle error);
|
396
|
-
bool OnResponseReceivedLocked()
|
397
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
398
|
-
static void OnStatusReceived(void* arg, grpc_error_handle error);
|
399
|
-
void OnStatusReceivedLocked(grpc_error_handle error)
|
400
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
|
414
|
+
void OnRequestSent(bool ok);
|
415
|
+
void OnRecvMessage(absl::string_view payload);
|
416
|
+
void OnStatusReceived(absl::Status status);
|
401
417
|
|
402
418
|
bool IsCurrentCallOnChannel() const;
|
403
419
|
|
404
420
|
// The owning RetryableCall<>.
|
405
421
|
RefCountedPtr<RetryableCall<LrsCallState>> parent_;
|
406
|
-
bool seen_response_ = false;
|
407
|
-
|
408
|
-
// Always non-NULL.
|
409
|
-
grpc_call* call_;
|
410
|
-
|
411
|
-
// recv_initial_metadata
|
412
|
-
grpc_metadata_array initial_metadata_recv_;
|
413
|
-
|
414
|
-
// send_message
|
415
|
-
grpc_byte_buffer* send_message_payload_ = nullptr;
|
416
|
-
grpc_closure on_initial_request_sent_;
|
417
422
|
|
418
|
-
|
419
|
-
grpc_byte_buffer* recv_message_payload_ = nullptr;
|
420
|
-
grpc_closure on_response_received_;
|
423
|
+
OrphanablePtr<XdsTransportFactory::XdsTransport::StreamingCall> call_;
|
421
424
|
|
422
|
-
|
423
|
-
|
424
|
-
grpc_status_code status_code_;
|
425
|
-
grpc_slice status_details_;
|
426
|
-
grpc_closure on_status_received_;
|
425
|
+
bool seen_response_ = false;
|
426
|
+
bool send_message_pending_ ABSL_GUARDED_BY(&XdsClient::mu_) = false;
|
427
427
|
|
428
428
|
// Load reporting state.
|
429
429
|
bool send_all_clusters_ = false;
|
@@ -432,58 +432,10 @@ class XdsClient::ChannelState::LrsCallState
|
|
432
432
|
OrphanablePtr<Reporter> reporter_;
|
433
433
|
};
|
434
434
|
|
435
|
-
//
|
436
|
-
// XdsClient::ChannelState::StateWatcher
|
437
|
-
//
|
438
|
-
|
439
|
-
class XdsClient::ChannelState::StateWatcher
|
440
|
-
: public AsyncConnectivityStateWatcherInterface {
|
441
|
-
public:
|
442
|
-
explicit StateWatcher(WeakRefCountedPtr<ChannelState> parent)
|
443
|
-
: parent_(std::move(parent)) {}
|
444
|
-
|
445
|
-
private:
|
446
|
-
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
447
|
-
const absl::Status& status) override {
|
448
|
-
{
|
449
|
-
MutexLock lock(&parent_->xds_client_->mu_);
|
450
|
-
if (!parent_->shutting_down_ &&
|
451
|
-
new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
452
|
-
// In TRANSIENT_FAILURE. Notify all watchers of error.
|
453
|
-
gpr_log(GPR_INFO,
|
454
|
-
"[xds_client %p] xds channel for server %s in "
|
455
|
-
"state TRANSIENT_FAILURE: %s",
|
456
|
-
parent_->xds_client(), parent_->server_.server_uri.c_str(),
|
457
|
-
status.ToString().c_str());
|
458
|
-
parent_->xds_client_->NotifyOnErrorLocked(
|
459
|
-
absl::UnavailableError(absl::StrCat(
|
460
|
-
"xds channel in TRANSIENT_FAILURE, connectivity error: ",
|
461
|
-
status.ToString())));
|
462
|
-
}
|
463
|
-
}
|
464
|
-
parent_->xds_client()->work_serializer_.DrainQueue();
|
465
|
-
}
|
466
|
-
|
467
|
-
WeakRefCountedPtr<ChannelState> parent_;
|
468
|
-
};
|
469
|
-
|
470
435
|
//
|
471
436
|
// XdsClient::ChannelState
|
472
437
|
//
|
473
438
|
|
474
|
-
namespace {
|
475
|
-
|
476
|
-
grpc_channel* CreateXdsChannel(grpc_channel_args* args,
|
477
|
-
const XdsBootstrap::XdsServer& server) {
|
478
|
-
RefCountedPtr<grpc_channel_credentials> channel_creds =
|
479
|
-
CoreConfiguration::Get().channel_creds_registry().CreateChannelCreds(
|
480
|
-
server.channel_creds_type, server.channel_creds_config);
|
481
|
-
return grpc_channel_create(server.server_uri.c_str(), channel_creds.get(),
|
482
|
-
args);
|
483
|
-
}
|
484
|
-
|
485
|
-
} // namespace
|
486
|
-
|
487
439
|
XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
488
440
|
const XdsBootstrap::XdsServer& server)
|
489
441
|
: DualRefCounted<ChannelState>(
|
@@ -494,37 +446,45 @@ XdsClient::ChannelState::ChannelState(WeakRefCountedPtr<XdsClient> xds_client,
|
|
494
446
|
server_(server) {
|
495
447
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
496
448
|
gpr_log(GPR_INFO, "[xds_client %p] creating channel to %s",
|
497
|
-
xds_client_.get(), server.server_uri.c_str());
|
498
|
-
}
|
499
|
-
|
500
|
-
|
501
|
-
|
449
|
+
xds_client_.get(), server.server_uri().c_str());
|
450
|
+
}
|
451
|
+
absl::Status status;
|
452
|
+
transport_ = xds_client_->transport_factory_->Create(
|
453
|
+
server,
|
454
|
+
[self = WeakRef(DEBUG_LOCATION, "OnConnectivityFailure")](
|
455
|
+
absl::Status status) {
|
456
|
+
self->OnConnectivityFailure(std::move(status));
|
457
|
+
},
|
458
|
+
&status);
|
459
|
+
GPR_ASSERT(transport_ != nullptr);
|
460
|
+
if (!status.ok()) SetChannelStatusLocked(std::move(status));
|
502
461
|
}
|
503
462
|
|
504
463
|
XdsClient::ChannelState::~ChannelState() {
|
505
464
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
506
465
|
gpr_log(GPR_INFO, "[xds_client %p] destroying xds channel %p for server %s",
|
507
|
-
xds_client(), this, server_.server_uri.c_str());
|
466
|
+
xds_client(), this, server_.server_uri().c_str());
|
508
467
|
}
|
509
|
-
grpc_channel_destroy(channel_);
|
510
468
|
xds_client_.reset(DEBUG_LOCATION, "ChannelState");
|
511
469
|
}
|
512
470
|
|
513
471
|
// This method should only ever be called when holding the lock, but we can't
|
514
472
|
// use a ABSL_EXCLUSIVE_LOCKS_REQUIRED annotation, because Orphan() will be
|
515
|
-
// called from DualRefCounted::Unref, which cannot have a lock annotation for
|
516
|
-
// lock in this subclass.
|
473
|
+
// called from DualRefCounted::Unref, which cannot have a lock annotation for
|
474
|
+
// a lock in this subclass.
|
517
475
|
void XdsClient::ChannelState::Orphan() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
518
476
|
shutting_down_ = true;
|
519
|
-
|
477
|
+
transport_.reset();
|
520
478
|
// At this time, all strong refs are removed, remove from channel map to
|
521
|
-
// prevent subsequent subscription from trying to use this ChannelState as
|
522
|
-
// is shutting down.
|
523
|
-
xds_client_->xds_server_channel_map_.erase(server_);
|
479
|
+
// prevent subsequent subscription from trying to use this ChannelState as
|
480
|
+
// it is shutting down.
|
481
|
+
xds_client_->xds_server_channel_map_.erase(&server_);
|
524
482
|
ads_calld_.reset();
|
525
483
|
lrs_calld_.reset();
|
526
484
|
}
|
527
485
|
|
486
|
+
void XdsClient::ChannelState::ResetBackoff() { transport_->ResetBackoff(); }
|
487
|
+
|
528
488
|
XdsClient::ChannelState::AdsCallState* XdsClient::ChannelState::ads_calld()
|
529
489
|
const {
|
530
490
|
return ads_calld_->calld();
|
@@ -535,10 +495,6 @@ XdsClient::ChannelState::LrsCallState* XdsClient::ChannelState::lrs_calld()
|
|
535
495
|
return lrs_calld_->calld();
|
536
496
|
}
|
537
497
|
|
538
|
-
bool XdsClient::ChannelState::HasActiveAdsCall() const {
|
539
|
-
return ads_calld_ != nullptr && ads_calld_->calld() != nullptr;
|
540
|
-
}
|
541
|
-
|
542
498
|
void XdsClient::ChannelState::MaybeStartLrsCall() {
|
543
499
|
if (lrs_calld_ != nullptr) return;
|
544
500
|
lrs_calld_.reset(new RetryableCall<LrsCallState>(
|
@@ -546,43 +502,10 @@ void XdsClient::ChannelState::MaybeStartLrsCall() {
|
|
546
502
|
}
|
547
503
|
|
548
504
|
void XdsClient::ChannelState::StopLrsCallLocked() {
|
549
|
-
xds_client_->xds_load_report_server_map_.erase(server_);
|
505
|
+
xds_client_->xds_load_report_server_map_.erase(&server_);
|
550
506
|
lrs_calld_.reset();
|
551
507
|
}
|
552
508
|
|
553
|
-
namespace {
|
554
|
-
|
555
|
-
bool IsLameChannel(grpc_channel* channel) {
|
556
|
-
grpc_channel_element* elem =
|
557
|
-
grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
|
558
|
-
return elem->filter == &grpc_lame_filter;
|
559
|
-
}
|
560
|
-
|
561
|
-
} // namespace
|
562
|
-
|
563
|
-
void XdsClient::ChannelState::StartConnectivityWatchLocked() {
|
564
|
-
if (IsLameChannel(channel_)) {
|
565
|
-
xds_client()->NotifyOnErrorLocked(
|
566
|
-
absl::UnavailableError("xds client has a lame channel"));
|
567
|
-
return;
|
568
|
-
}
|
569
|
-
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
570
|
-
GPR_ASSERT(client_channel != nullptr);
|
571
|
-
watcher_ = new StateWatcher(WeakRef(DEBUG_LOCATION, "ChannelState+watch"));
|
572
|
-
client_channel->AddConnectivityWatcher(
|
573
|
-
GRPC_CHANNEL_IDLE,
|
574
|
-
OrphanablePtr<AsyncConnectivityStateWatcherInterface>(watcher_));
|
575
|
-
}
|
576
|
-
|
577
|
-
void XdsClient::ChannelState::CancelConnectivityWatchLocked() {
|
578
|
-
if (IsLameChannel(channel_)) {
|
579
|
-
return;
|
580
|
-
}
|
581
|
-
ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
|
582
|
-
GPR_ASSERT(client_channel != nullptr);
|
583
|
-
client_channel->RemoveConnectivityWatcher(watcher_);
|
584
|
-
}
|
585
|
-
|
586
509
|
void XdsClient::ChannelState::SubscribeLocked(const XdsResourceType* type,
|
587
510
|
const XdsResourceName& name) {
|
588
511
|
if (ads_calld_ == nullptr) {
|
@@ -615,6 +538,56 @@ void XdsClient::ChannelState::UnsubscribeLocked(const XdsResourceType* type,
|
|
615
538
|
}
|
616
539
|
}
|
617
540
|
|
541
|
+
void XdsClient::ChannelState::OnConnectivityFailure(absl::Status status) {
|
542
|
+
{
|
543
|
+
MutexLock lock(&xds_client_->mu_);
|
544
|
+
SetChannelStatusLocked(std::move(status));
|
545
|
+
}
|
546
|
+
xds_client_->work_serializer_.DrainQueue();
|
547
|
+
}
|
548
|
+
|
549
|
+
void XdsClient::ChannelState::SetChannelStatusLocked(absl::Status status) {
|
550
|
+
if (shutting_down_) return;
|
551
|
+
status = absl::Status(status.code(), absl::StrCat("xDS channel for server ",
|
552
|
+
server_.server_uri(), ": ",
|
553
|
+
status.message()));
|
554
|
+
gpr_log(GPR_INFO, "[xds_client %p] %s", xds_client(),
|
555
|
+
status.ToString().c_str());
|
556
|
+
// If the node ID is set, append that to the status message that we send to
|
557
|
+
// the watchers, so that it will appear in log messages visible to users.
|
558
|
+
const auto* node = xds_client_->bootstrap_->node();
|
559
|
+
if (node != nullptr) {
|
560
|
+
status = absl::Status(
|
561
|
+
status.code(),
|
562
|
+
absl::StrCat(status.message(),
|
563
|
+
" (node ID:", xds_client_->bootstrap_->node()->id(), ")"));
|
564
|
+
}
|
565
|
+
// Save status in channel, so that we can immediately generate an
|
566
|
+
// error for any new watchers that may be started.
|
567
|
+
status_ = status;
|
568
|
+
// Find all watchers for this channel.
|
569
|
+
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
570
|
+
for (const auto& a : xds_client_->authority_state_map_) { // authority
|
571
|
+
if (a.second.channel_state != this) continue;
|
572
|
+
for (const auto& t : a.second.resource_map) { // type
|
573
|
+
for (const auto& r : t.second) { // resource id
|
574
|
+
for (const auto& w : r.second.watchers) { // watchers
|
575
|
+
watchers.insert(w.second);
|
576
|
+
}
|
577
|
+
}
|
578
|
+
}
|
579
|
+
}
|
580
|
+
// Enqueue notification for the watchers.
|
581
|
+
xds_client_->work_serializer_.Schedule(
|
582
|
+
[watchers = std::move(watchers), status = std::move(status)]()
|
583
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(xds_client_->work_serializer_) {
|
584
|
+
for (const auto& watcher : watchers) {
|
585
|
+
watcher->OnError(status);
|
586
|
+
}
|
587
|
+
},
|
588
|
+
DEBUG_LOCATION);
|
589
|
+
}
|
590
|
+
|
618
591
|
//
|
619
592
|
// XdsClient::ChannelState::RetryableCall<>
|
620
593
|
//
|
@@ -630,9 +603,6 @@ XdsClient::ChannelState::RetryableCall<T>::RetryableCall(
|
|
630
603
|
.set_jitter(GRPC_XDS_RECONNECT_JITTER)
|
631
604
|
.set_max_backoff(Duration::Seconds(
|
632
605
|
GRPC_XDS_RECONNECT_MAX_BACKOFF_SECONDS))) {
|
633
|
-
// Closure Initialization
|
634
|
-
GRPC_CLOSURE_INIT(&on_retry_timer_, OnRetryTimer, this,
|
635
|
-
grpc_schedule_on_exec_ctx);
|
636
606
|
StartNewCallLocked();
|
637
607
|
}
|
638
608
|
|
@@ -640,7 +610,10 @@ template <typename T>
|
|
640
610
|
void XdsClient::ChannelState::RetryableCall<T>::Orphan() {
|
641
611
|
shutting_down_ = true;
|
642
612
|
calld_.reset();
|
643
|
-
if (
|
613
|
+
if (timer_handle_.has_value()) {
|
614
|
+
chand()->xds_client()->engine()->Cancel(*timer_handle_);
|
615
|
+
timer_handle_.reset();
|
616
|
+
}
|
644
617
|
this->Unref(DEBUG_LOCATION, "RetryableCall+orphaned");
|
645
618
|
}
|
646
619
|
|
@@ -656,13 +629,13 @@ void XdsClient::ChannelState::RetryableCall<T>::OnCallFinishedLocked() {
|
|
656
629
|
template <typename T>
|
657
630
|
void XdsClient::ChannelState::RetryableCall<T>::StartNewCallLocked() {
|
658
631
|
if (shutting_down_) return;
|
659
|
-
GPR_ASSERT(chand_->
|
632
|
+
GPR_ASSERT(chand_->transport_ != nullptr);
|
660
633
|
GPR_ASSERT(calld_ == nullptr);
|
661
634
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
662
|
-
gpr_log(
|
663
|
-
|
664
|
-
|
665
|
-
|
635
|
+
gpr_log(GPR_INFO,
|
636
|
+
"[xds_client %p] xds server %s: start new call from retryable "
|
637
|
+
"call %p",
|
638
|
+
chand()->xds_client(), chand()->server_.server_uri().c_str(), this);
|
666
639
|
}
|
667
640
|
calld_ = MakeOrphanable<T>(
|
668
641
|
this->Ref(DEBUG_LOCATION, "RetryableCall+start_new_call"));
|
@@ -672,45 +645,39 @@ template <typename T>
|
|
672
645
|
void XdsClient::ChannelState::RetryableCall<T>::StartRetryTimerLocked() {
|
673
646
|
if (shutting_down_) return;
|
674
647
|
const Timestamp next_attempt_time = backoff_.NextAttemptTime();
|
648
|
+
const Duration timeout =
|
649
|
+
std::max(next_attempt_time - Timestamp::Now(), Duration::Zero());
|
675
650
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
676
|
-
Duration timeout =
|
677
|
-
std::max(next_attempt_time - ExecCtx::Get()->Now(), Duration::Zero());
|
678
651
|
gpr_log(GPR_INFO,
|
679
652
|
"[xds_client %p] xds server %s: call attempt failed; "
|
680
653
|
"retry timer will fire in %" PRId64 "ms.",
|
681
|
-
chand()->xds_client(), chand()->server_.server_uri.c_str(),
|
654
|
+
chand()->xds_client(), chand()->server_.server_uri().c_str(),
|
682
655
|
timeout.millis());
|
683
656
|
}
|
684
|
-
|
685
|
-
|
686
|
-
|
657
|
+
timer_handle_ = chand()->xds_client()->engine()->RunAfter(
|
658
|
+
timeout,
|
659
|
+
[self = this->Ref(DEBUG_LOCATION, "RetryableCall+retry_timer_start")]() {
|
660
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
661
|
+
ExecCtx exec_ctx;
|
662
|
+
self->OnRetryTimer();
|
663
|
+
});
|
687
664
|
}
|
688
665
|
|
689
666
|
template <typename T>
|
690
|
-
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer(
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
calld->OnRetryTimerLocked(GRPC_ERROR_REF(error));
|
696
|
-
}
|
697
|
-
calld->Unref(DEBUG_LOCATION, "RetryableCall+retry_timer_done");
|
698
|
-
}
|
699
|
-
|
700
|
-
template <typename T>
|
701
|
-
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimerLocked(
|
702
|
-
grpc_error_handle error) {
|
703
|
-
retry_timer_callback_pending_ = false;
|
704
|
-
if (!shutting_down_ && error == GRPC_ERROR_NONE) {
|
667
|
+
void XdsClient::ChannelState::RetryableCall<T>::OnRetryTimer() {
|
668
|
+
MutexLock lock(&chand_->xds_client()->mu_);
|
669
|
+
if (timer_handle_.has_value()) {
|
670
|
+
timer_handle_.reset();
|
671
|
+
if (shutting_down_) return;
|
705
672
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
706
673
|
gpr_log(GPR_INFO,
|
707
674
|
"[xds_client %p] xds server %s: retry timer fired (retryable "
|
708
675
|
"call: %p)",
|
709
|
-
chand()->xds_client(), chand()->server_.server_uri.c_str(),
|
676
|
+
chand()->xds_client(), chand()->server_.server_uri().c_str(),
|
677
|
+
this);
|
710
678
|
}
|
711
679
|
StartNewCallLocked();
|
712
680
|
}
|
713
|
-
GRPC_ERROR_UNREF(error);
|
714
681
|
}
|
715
682
|
|
716
683
|
//
|
@@ -725,7 +692,7 @@ absl::Status XdsClient::ChannelState::AdsCallState::AdsResponseParser::
|
|
725
692
|
"[xds_client %p] xds server %s: received ADS response: type_url=%s, "
|
726
693
|
"version=%s, nonce=%s, num_resources=%" PRIuPTR,
|
727
694
|
ads_call_state_->xds_client(),
|
728
|
-
ads_call_state_->chand()->server_.server_uri.c_str(),
|
695
|
+
ads_call_state_->chand()->server_.server_uri().c_str(),
|
729
696
|
fields.type_url.c_str(), fields.version.c_str(), fields.nonce.c_str(),
|
730
697
|
fields.num_resources);
|
731
698
|
}
|
@@ -768,48 +735,68 @@ void UpdateResourceMetadataNacked(const std::string& version,
|
|
768
735
|
} // namespace
|
769
736
|
|
770
737
|
void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
771
|
-
|
772
|
-
absl::string_view serialized_resource) {
|
738
|
+
upb_Arena* arena, size_t idx, absl::string_view type_url,
|
739
|
+
absl::string_view resource_name, absl::string_view serialized_resource) {
|
740
|
+
std::string error_prefix = absl::StrCat(
|
741
|
+
"resource index ", idx, ": ",
|
742
|
+
resource_name.empty() ? "" : absl::StrCat(resource_name, ": "));
|
773
743
|
// Check the type_url of the resource.
|
774
|
-
|
775
|
-
if (!result_.type->IsType(type_url, &is_v2)) {
|
744
|
+
if (result_.type_url != type_url) {
|
776
745
|
result_.errors.emplace_back(
|
777
|
-
absl::StrCat(
|
778
|
-
|
746
|
+
absl::StrCat(error_prefix, "incorrect resource type \"", type_url,
|
747
|
+
"\" (should be \"", result_.type_url, "\")"));
|
779
748
|
return;
|
780
749
|
}
|
781
750
|
// Parse the resource.
|
782
|
-
|
783
|
-
|
784
|
-
|
751
|
+
XdsResourceType::DecodeContext context = {
|
752
|
+
xds_client(), ads_call_state_->chand()->server_, &grpc_xds_client_trace,
|
753
|
+
xds_client()->symtab_.ptr(), arena};
|
754
|
+
XdsResourceType::DecodeResult decode_result =
|
755
|
+
result_.type->Decode(context, serialized_resource);
|
756
|
+
// If we didn't already have the resource name from the Resource
|
757
|
+
// wrapper, try to get it from the decoding result.
|
758
|
+
if (resource_name.empty()) {
|
759
|
+
if (decode_result.name.has_value()) {
|
760
|
+
resource_name = *decode_result.name;
|
761
|
+
error_prefix =
|
762
|
+
absl::StrCat("resource index ", idx, ": ", resource_name, ": ");
|
763
|
+
} else {
|
764
|
+
// We don't have any way of determining the resource name, so
|
765
|
+
// there's nothing more we can do here.
|
766
|
+
result_.errors.emplace_back(absl::StrCat(
|
767
|
+
error_prefix, decode_result.resource.status().ToString()));
|
768
|
+
return;
|
769
|
+
}
|
770
|
+
}
|
771
|
+
// If decoding failed, make sure we include the error in the NACK.
|
772
|
+
const absl::Status& decode_status = decode_result.resource.status();
|
773
|
+
if (!decode_status.ok()) {
|
785
774
|
result_.errors.emplace_back(
|
786
|
-
absl::StrCat(
|
787
|
-
return;
|
775
|
+
absl::StrCat(error_prefix, decode_status.ToString()));
|
788
776
|
}
|
789
777
|
// Check the resource name.
|
790
|
-
auto
|
791
|
-
xds_client()->ParseXdsResourceName(
|
792
|
-
if (!
|
793
|
-
result_.errors.emplace_back(
|
794
|
-
|
795
|
-
result->name, "\""));
|
778
|
+
auto parsed_resource_name =
|
779
|
+
xds_client()->ParseXdsResourceName(resource_name, result_.type);
|
780
|
+
if (!parsed_resource_name.ok()) {
|
781
|
+
result_.errors.emplace_back(
|
782
|
+
absl::StrCat(error_prefix, "Cannot parse xDS resource name"));
|
796
783
|
return;
|
797
784
|
}
|
798
785
|
// Cancel resource-does-not-exist timer, if needed.
|
799
786
|
auto timer_it = ads_call_state_->state_map_.find(result_.type);
|
800
787
|
if (timer_it != ads_call_state_->state_map_.end()) {
|
801
|
-
auto it =
|
802
|
-
|
788
|
+
auto it = timer_it->second.subscribed_resources.find(
|
789
|
+
parsed_resource_name->authority);
|
803
790
|
if (it != timer_it->second.subscribed_resources.end()) {
|
804
|
-
auto res_it = it->second.find(
|
791
|
+
auto res_it = it->second.find(parsed_resource_name->key);
|
805
792
|
if (res_it != it->second.end()) {
|
806
|
-
res_it->second->
|
793
|
+
res_it->second->MarkSeen();
|
807
794
|
}
|
808
795
|
}
|
809
796
|
}
|
810
797
|
// Lookup the authority in the cache.
|
811
798
|
auto authority_it =
|
812
|
-
xds_client()->authority_state_map_.find(
|
799
|
+
xds_client()->authority_state_map_.find(parsed_resource_name->authority);
|
813
800
|
if (authority_it == xds_client()->authority_state_map_.end()) {
|
814
801
|
return; // Skip resource -- we don't have a subscription for it.
|
815
802
|
}
|
@@ -821,26 +808,35 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
821
808
|
}
|
822
809
|
auto& type_map = type_it->second;
|
823
810
|
// Found type, so look up resource key.
|
824
|
-
auto it = type_map.find(
|
811
|
+
auto it = type_map.find(parsed_resource_name->key);
|
825
812
|
if (it == type_map.end()) {
|
826
813
|
return; // Skip resource -- we don't have a subscription for it.
|
827
814
|
}
|
828
815
|
ResourceState& resource_state = it->second;
|
829
816
|
// If needed, record that we've seen this resource.
|
830
817
|
if (result_.type->AllResourcesRequiredInSotW()) {
|
831
|
-
result_.resources_seen[
|
818
|
+
result_.resources_seen[parsed_resource_name->authority].insert(
|
819
|
+
parsed_resource_name->key);
|
820
|
+
}
|
821
|
+
// If we previously ignored the resource's deletion, log that we're
|
822
|
+
// now re-adding it.
|
823
|
+
if (resource_state.ignored_deletion) {
|
824
|
+
gpr_log(GPR_INFO,
|
825
|
+
"[xds_client %p] xds server %s: server returned new version of "
|
826
|
+
"resource for which we previously ignored a deletion: type %s "
|
827
|
+
"name %s",
|
828
|
+
xds_client(),
|
829
|
+
ads_call_state_->chand()->server_.server_uri().c_str(),
|
830
|
+
std::string(type_url).c_str(), std::string(resource_name).c_str());
|
831
|
+
resource_state.ignored_deletion = false;
|
832
832
|
}
|
833
833
|
// Update resource state based on whether the resource is valid.
|
834
|
-
if (!
|
835
|
-
result_.errors.emplace_back(absl::StrCat(
|
836
|
-
"resource index ", idx, ": ", result->name,
|
837
|
-
": validation error: ", result->resource.status().ToString()));
|
834
|
+
if (!decode_status.ok()) {
|
838
835
|
xds_client()->NotifyWatchersOnErrorLocked(
|
839
836
|
resource_state.watchers,
|
840
|
-
absl::UnavailableError(
|
841
|
-
"invalid resource: ",
|
842
|
-
UpdateResourceMetadataNacked(result_.version,
|
843
|
-
result->resource.status().ToString(),
|
837
|
+
absl::UnavailableError(
|
838
|
+
absl::StrCat("invalid resource: ", decode_status.ToString())));
|
839
|
+
UpdateResourceMetadataNacked(result_.version, decode_status.ToString(),
|
844
840
|
update_time_, &resource_state.meta);
|
845
841
|
return;
|
846
842
|
}
|
@@ -849,16 +845,17 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
849
845
|
// If it didn't change, ignore it.
|
850
846
|
if (resource_state.resource != nullptr &&
|
851
847
|
result_.type->ResourcesEqual(resource_state.resource.get(),
|
852
|
-
|
848
|
+
decode_result.resource->get())) {
|
853
849
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
854
850
|
gpr_log(GPR_INFO,
|
855
851
|
"[xds_client %p] %s resource %s identical to current, ignoring.",
|
856
|
-
xds_client(), result_.type_url.c_str(),
|
852
|
+
xds_client(), result_.type_url.c_str(),
|
853
|
+
std::string(resource_name).c_str());
|
857
854
|
}
|
858
855
|
return;
|
859
856
|
}
|
860
857
|
// Update the resource state.
|
861
|
-
resource_state.resource = std::move(*
|
858
|
+
resource_state.resource = std::move(*decode_result.resource);
|
862
859
|
resource_state.meta = CreateResourceMetadataAcked(
|
863
860
|
std::string(serialized_resource), result_.version, update_time_);
|
864
861
|
// Notify watchers.
|
@@ -876,6 +873,12 @@ void XdsClient::ChannelState::AdsCallState::AdsResponseParser::ParseResource(
|
|
876
873
|
DEBUG_LOCATION);
|
877
874
|
}
|
878
875
|
|
876
|
+
void XdsClient::ChannelState::AdsCallState::AdsResponseParser::
|
877
|
+
ResourceWrapperParsingFailed(size_t idx) {
|
878
|
+
result_.errors.emplace_back(absl::StrCat(
|
879
|
+
"resource index ", idx, ": Can't decode Resource proto wrapper"));
|
880
|
+
}
|
881
|
+
|
879
882
|
//
|
880
883
|
// XdsClient::ChannelState::AdsCallState
|
881
884
|
//
|
@@ -887,51 +890,27 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
887
890
|
? "AdsCallState"
|
888
891
|
: nullptr),
|
889
892
|
parent_(std::move(parent)) {
|
890
|
-
// Init the ADS call. Note that the call will progress every time there's
|
891
|
-
// activity in xds_client()->interested_parties_, which is comprised of
|
892
|
-
// the polling entities from client_channel.
|
893
893
|
GPR_ASSERT(xds_client() != nullptr);
|
894
|
-
//
|
894
|
+
// Init the ADS call.
|
895
895
|
const char* method =
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
xds_client()->interested_parties_,
|
904
|
-
StaticSlice::FromStaticString(method).c_slice(), nullptr,
|
905
|
-
Timestamp::InfFuture(), nullptr);
|
896
|
+
"/envoy.service.discovery.v3.AggregatedDiscoveryService/"
|
897
|
+
"StreamAggregatedResources";
|
898
|
+
call_ = chand()->transport_->CreateStreamingCall(
|
899
|
+
method, std::make_unique<StreamEventHandler>(
|
900
|
+
// Passing the initial ref here. This ref will go away when
|
901
|
+
// the StreamEventHandler is destroyed.
|
902
|
+
RefCountedPtr<AdsCallState>(this)));
|
906
903
|
GPR_ASSERT(call_ != nullptr);
|
907
|
-
// Init data associated with the call.
|
908
|
-
grpc_metadata_array_init(&initial_metadata_recv_);
|
909
|
-
grpc_metadata_array_init(&trailing_metadata_recv_);
|
910
904
|
// Start the call.
|
911
905
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
912
906
|
gpr_log(GPR_INFO,
|
913
907
|
"[xds_client %p] xds server %s: starting ADS call "
|
914
908
|
"(calld: %p, call: %p)",
|
915
|
-
xds_client(), chand()->server_.server_uri.c_str(), this,
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
memset(ops, 0, sizeof(ops));
|
921
|
-
// Op: send initial metadata.
|
922
|
-
grpc_op* op = ops;
|
923
|
-
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
924
|
-
op->data.send_initial_metadata.count = 0;
|
925
|
-
op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
|
926
|
-
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
|
927
|
-
op->reserved = nullptr;
|
928
|
-
op++;
|
929
|
-
call_error = grpc_call_start_batch_and_execute(
|
930
|
-
call_, ops, static_cast<size_t>(op - ops), nullptr);
|
931
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
932
|
-
// Op: send request message.
|
933
|
-
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
934
|
-
grpc_schedule_on_exec_ctx);
|
909
|
+
xds_client(), chand()->server_.server_uri().c_str(), this,
|
910
|
+
call_.get());
|
911
|
+
}
|
912
|
+
// If this is a reconnect, add any necessary subscriptions from what's
|
913
|
+
// already in the cache.
|
935
914
|
for (const auto& a : xds_client()->authority_state_map_) {
|
936
915
|
const std::string& authority = a.first;
|
937
916
|
// Skip authorities that are not using this xDS channel.
|
@@ -944,120 +923,45 @@ XdsClient::ChannelState::AdsCallState::AdsCallState(
|
|
944
923
|
}
|
945
924
|
}
|
946
925
|
}
|
926
|
+
// Send initial message if we added any subscriptions above.
|
947
927
|
for (const auto& p : state_map_) {
|
948
928
|
SendMessageLocked(p.first);
|
949
929
|
}
|
950
|
-
// Op: recv initial metadata.
|
951
|
-
op = ops;
|
952
|
-
op->op = GRPC_OP_RECV_INITIAL_METADATA;
|
953
|
-
op->data.recv_initial_metadata.recv_initial_metadata =
|
954
|
-
&initial_metadata_recv_;
|
955
|
-
op->flags = 0;
|
956
|
-
op->reserved = nullptr;
|
957
|
-
op++;
|
958
|
-
// Op: recv response.
|
959
|
-
op->op = GRPC_OP_RECV_MESSAGE;
|
960
|
-
op->data.recv_message.recv_message = &recv_message_payload_;
|
961
|
-
op->flags = 0;
|
962
|
-
op->reserved = nullptr;
|
963
|
-
op++;
|
964
|
-
Ref(DEBUG_LOCATION, "ADS+OnResponseReceivedLocked").release();
|
965
|
-
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
|
966
|
-
grpc_schedule_on_exec_ctx);
|
967
|
-
call_error = grpc_call_start_batch_and_execute(
|
968
|
-
call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
|
969
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
970
|
-
// Op: recv server status.
|
971
|
-
op = ops;
|
972
|
-
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
|
973
|
-
op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
|
974
|
-
op->data.recv_status_on_client.status = &status_code_;
|
975
|
-
op->data.recv_status_on_client.status_details = &status_details_;
|
976
|
-
op->flags = 0;
|
977
|
-
op->reserved = nullptr;
|
978
|
-
op++;
|
979
|
-
// This callback signals the end of the call, so it relies on the initial
|
980
|
-
// ref instead of a new ref. When it's invoked, it's the initial ref that is
|
981
|
-
// unreffed.
|
982
|
-
GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
|
983
|
-
grpc_schedule_on_exec_ctx);
|
984
|
-
call_error = grpc_call_start_batch_and_execute(
|
985
|
-
call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
|
986
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
987
|
-
}
|
988
|
-
|
989
|
-
XdsClient::ChannelState::AdsCallState::~AdsCallState() {
|
990
|
-
grpc_metadata_array_destroy(&initial_metadata_recv_);
|
991
|
-
grpc_metadata_array_destroy(&trailing_metadata_recv_);
|
992
|
-
grpc_byte_buffer_destroy(send_message_payload_);
|
993
|
-
grpc_byte_buffer_destroy(recv_message_payload_);
|
994
|
-
grpc_slice_unref_internal(status_details_);
|
995
|
-
GPR_ASSERT(call_ != nullptr);
|
996
|
-
grpc_call_unref(call_);
|
997
930
|
}
|
998
931
|
|
999
932
|
void XdsClient::ChannelState::AdsCallState::Orphan() {
|
1000
|
-
GPR_ASSERT(call_ != nullptr);
|
1001
|
-
// If we are here because xds_client wants to cancel the call,
|
1002
|
-
// on_status_received_ will complete the cancellation and clean up. Otherwise,
|
1003
|
-
// we are here because xds_client has to orphan a failed call, then the
|
1004
|
-
// following cancellation will be a no-op.
|
1005
|
-
grpc_call_cancel_internal(call_);
|
1006
933
|
state_map_.clear();
|
1007
|
-
// Note that the initial ref is
|
1008
|
-
//
|
934
|
+
// Note that the initial ref is held by the StreamEventHandler, which
|
935
|
+
// will be destroyed when call_ is destroyed, which may not happen
|
936
|
+
// here, since there may be other refs held to call_ by internal callbacks.
|
937
|
+
call_.reset();
|
1009
938
|
}
|
1010
939
|
|
1011
940
|
void XdsClient::ChannelState::AdsCallState::SendMessageLocked(
|
1012
941
|
const XdsResourceType* type)
|
1013
942
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_) {
|
1014
943
|
// Buffer message sending if an existing message is in flight.
|
1015
|
-
if (
|
944
|
+
if (send_message_pending_ != nullptr) {
|
1016
945
|
buffered_requests_.insert(type);
|
1017
946
|
return;
|
1018
947
|
}
|
1019
948
|
auto& state = state_map_[type];
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1023
|
-
chand()->server_.ShouldUseV3() ? type->type_url() : type->v2_type_url(),
|
1024
|
-
chand()->resource_type_version_map_[type], state.nonce,
|
1025
|
-
ResourceNamesForRequest(type), GRPC_ERROR_REF(state.error),
|
1026
|
-
!sent_initial_message_);
|
949
|
+
std::string serialized_message = xds_client()->api_.CreateAdsRequest(
|
950
|
+
type->type_url(), chand()->resource_type_version_map_[type], state.nonce,
|
951
|
+
ResourceNamesForRequest(type), state.status, !sent_initial_message_);
|
1027
952
|
sent_initial_message_ = true;
|
1028
953
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1029
954
|
gpr_log(GPR_INFO,
|
1030
955
|
"[xds_client %p] xds server %s: sending ADS request: type=%s "
|
1031
956
|
"version=%s nonce=%s error=%s",
|
1032
|
-
xds_client(), chand()->server_.server_uri.c_str(),
|
957
|
+
xds_client(), chand()->server_.server_uri().c_str(),
|
1033
958
|
std::string(type->type_url()).c_str(),
|
1034
959
|
chand()->resource_type_version_map_[type].c_str(),
|
1035
|
-
state.nonce.c_str(),
|
1036
|
-
}
|
1037
|
-
GRPC_ERROR_UNREF(state.error);
|
1038
|
-
state.error = GRPC_ERROR_NONE;
|
1039
|
-
// Create message payload.
|
1040
|
-
send_message_payload_ =
|
1041
|
-
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
1042
|
-
grpc_slice_unref_internal(request_payload_slice);
|
1043
|
-
// Send the message.
|
1044
|
-
grpc_op op;
|
1045
|
-
memset(&op, 0, sizeof(op));
|
1046
|
-
op.op = GRPC_OP_SEND_MESSAGE;
|
1047
|
-
op.data.send_message.send_message = send_message_payload_;
|
1048
|
-
Ref(DEBUG_LOCATION, "ADS+OnRequestSentLocked").release();
|
1049
|
-
GRPC_CLOSURE_INIT(&on_request_sent_, OnRequestSent, this,
|
1050
|
-
grpc_schedule_on_exec_ctx);
|
1051
|
-
grpc_call_error call_error =
|
1052
|
-
grpc_call_start_batch_and_execute(call_, &op, 1, &on_request_sent_);
|
1053
|
-
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
1054
|
-
gpr_log(GPR_ERROR,
|
1055
|
-
"[xds_client %p] xds server %s: error starting ADS send_message "
|
1056
|
-
"batch on calld=%p: call_error=%d",
|
1057
|
-
xds_client(), chand()->server_.server_uri.c_str(), this,
|
1058
|
-
call_error);
|
1059
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
960
|
+
state.nonce.c_str(), state.status.ToString().c_str());
|
1060
961
|
}
|
962
|
+
state.status = absl::OkStatus();
|
963
|
+
call_->SendMessage(std::move(serialized_message));
|
964
|
+
send_message_pending_ = type;
|
1061
965
|
}
|
1062
966
|
|
1063
967
|
void XdsClient::ChannelState::AdsCallState::SubscribeLocked(
|
@@ -1078,7 +982,12 @@ void XdsClient::ChannelState::AdsCallState::UnsubscribeLocked(
|
|
1078
982
|
if (authority_map.empty()) {
|
1079
983
|
type_state_map.subscribed_resources.erase(name.authority);
|
1080
984
|
}
|
1081
|
-
if
|
985
|
+
// Don't need to send unsubscription message if this was the last
|
986
|
+
// resource we were subscribed to, since we'll be closing the stream
|
987
|
+
// immediately in that case.
|
988
|
+
if (!delay_unsubscription && HasSubscribedResources()) {
|
989
|
+
SendMessageLocked(type);
|
990
|
+
}
|
1082
991
|
}
|
1083
992
|
|
1084
993
|
bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
@@ -1088,22 +997,21 @@ bool XdsClient::ChannelState::AdsCallState::HasSubscribedResources() const {
|
|
1088
997
|
return false;
|
1089
998
|
}
|
1090
999
|
|
1091
|
-
void XdsClient::ChannelState::AdsCallState::OnRequestSent(
|
1092
|
-
|
1093
|
-
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1000
|
+
void XdsClient::ChannelState::AdsCallState::OnRequestSent(bool ok) {
|
1001
|
+
MutexLock lock(&xds_client()->mu_);
|
1002
|
+
// For each resource that was in the message we just sent, start the
|
1003
|
+
// resource timer if needed.
|
1004
|
+
if (ok) {
|
1005
|
+
auto& resource_type_state = state_map_[send_message_pending_];
|
1006
|
+
for (const auto& p : resource_type_state.subscribed_resources) {
|
1007
|
+
for (auto& q : p.second) {
|
1008
|
+
q.second->MaybeMarkSubscriptionSendComplete(
|
1009
|
+
Ref(DEBUG_LOCATION, "ResourceTimer"));
|
1010
|
+
}
|
1011
|
+
}
|
1097
1012
|
}
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
1102
|
-
grpc_error_handle error) {
|
1103
|
-
if (IsCurrentCallOnChannel() && error == GRPC_ERROR_NONE) {
|
1104
|
-
// Clean up the sent message.
|
1105
|
-
grpc_byte_buffer_destroy(send_message_payload_);
|
1106
|
-
send_message_payload_ = nullptr;
|
1013
|
+
send_message_pending_ = nullptr;
|
1014
|
+
if (ok && IsCurrentCallOnChannel()) {
|
1107
1015
|
// Continue to send another pending message if any.
|
1108
1016
|
// TODO(roth): The current code to handle buffered messages has the
|
1109
1017
|
// advantage of sending only the most recent list of resource names for
|
@@ -1119,170 +1027,149 @@ void XdsClient::ChannelState::AdsCallState::OnRequestSentLocked(
|
|
1119
1027
|
buffered_requests_.erase(it);
|
1120
1028
|
}
|
1121
1029
|
}
|
1122
|
-
GRPC_ERROR_UNREF(error);
|
1123
1030
|
}
|
1124
1031
|
|
1125
|
-
void XdsClient::ChannelState::AdsCallState::
|
1126
|
-
|
1127
|
-
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1128
|
-
bool done;
|
1032
|
+
void XdsClient::ChannelState::AdsCallState::OnRecvMessage(
|
1033
|
+
absl::string_view payload) {
|
1129
1034
|
{
|
1130
|
-
MutexLock lock(&
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
resource_state.resource.reset();
|
1209
|
-
xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
1210
|
-
resource_state.watchers);
|
1035
|
+
MutexLock lock(&xds_client()->mu_);
|
1036
|
+
if (!IsCurrentCallOnChannel()) return;
|
1037
|
+
// Parse and validate the response.
|
1038
|
+
AdsResponseParser parser(this);
|
1039
|
+
absl::Status status = xds_client()->api_.ParseAdsResponse(payload, &parser);
|
1040
|
+
if (!status.ok()) {
|
1041
|
+
// Ignore unparsable response.
|
1042
|
+
gpr_log(GPR_ERROR,
|
1043
|
+
"[xds_client %p] xds server %s: error parsing ADS response (%s) "
|
1044
|
+
"-- ignoring",
|
1045
|
+
xds_client(), chand()->server_.server_uri().c_str(),
|
1046
|
+
status.ToString().c_str());
|
1047
|
+
} else {
|
1048
|
+
seen_response_ = true;
|
1049
|
+
chand()->status_ = absl::OkStatus();
|
1050
|
+
AdsResponseParser::Result result = parser.TakeResult();
|
1051
|
+
// Update nonce.
|
1052
|
+
auto& state = state_map_[result.type];
|
1053
|
+
state.nonce = result.nonce;
|
1054
|
+
// If we got an error, set state.status so that we'll NACK the update.
|
1055
|
+
if (!result.errors.empty()) {
|
1056
|
+
state.status = absl::UnavailableError(
|
1057
|
+
absl::StrCat("xDS response validation errors: [",
|
1058
|
+
absl::StrJoin(result.errors, "; "), "]"));
|
1059
|
+
gpr_log(GPR_ERROR,
|
1060
|
+
"[xds_client %p] xds server %s: ADS response invalid for "
|
1061
|
+
"resource "
|
1062
|
+
"type %s version %s, will NACK: nonce=%s status=%s",
|
1063
|
+
xds_client(), chand()->server_.server_uri().c_str(),
|
1064
|
+
result.type_url.c_str(), result.version.c_str(),
|
1065
|
+
state.nonce.c_str(), state.status.ToString().c_str());
|
1066
|
+
}
|
1067
|
+
// Delete resources not seen in update if needed.
|
1068
|
+
if (result.type->AllResourcesRequiredInSotW()) {
|
1069
|
+
for (auto& a : xds_client()->authority_state_map_) {
|
1070
|
+
const std::string& authority = a.first;
|
1071
|
+
AuthorityState& authority_state = a.second;
|
1072
|
+
// Skip authorities that are not using this xDS channel.
|
1073
|
+
if (authority_state.channel_state != chand()) continue;
|
1074
|
+
auto seen_authority_it = result.resources_seen.find(authority);
|
1075
|
+
// Find this resource type.
|
1076
|
+
auto type_it = authority_state.resource_map.find(result.type);
|
1077
|
+
if (type_it == authority_state.resource_map.end()) continue;
|
1078
|
+
// Iterate over resource ids.
|
1079
|
+
for (auto& r : type_it->second) {
|
1080
|
+
const XdsResourceKey& resource_key = r.first;
|
1081
|
+
ResourceState& resource_state = r.second;
|
1082
|
+
if (seen_authority_it == result.resources_seen.end() ||
|
1083
|
+
seen_authority_it->second.find(resource_key) ==
|
1084
|
+
seen_authority_it->second.end()) {
|
1085
|
+
// If the resource was newly requested but has not yet been
|
1086
|
+
// received, we don't want to generate an error for the
|
1087
|
+
// watchers, because this ADS response may be in reaction to an
|
1088
|
+
// earlier request that did not yet request the new resource, so
|
1089
|
+
// its absence from the response does not necessarily indicate
|
1090
|
+
// that the resource does not exist. For that case, we rely on
|
1091
|
+
// the request timeout instead.
|
1092
|
+
if (resource_state.resource == nullptr) continue;
|
1093
|
+
if (chand()->server_.IgnoreResourceDeletion()) {
|
1094
|
+
if (!resource_state.ignored_deletion) {
|
1095
|
+
gpr_log(GPR_ERROR,
|
1096
|
+
"[xds_client %p] xds server %s: ignoring deletion "
|
1097
|
+
"for resource type %s name %s",
|
1098
|
+
xds_client(), chand()->server_.server_uri().c_str(),
|
1099
|
+
result.type_url.c_str(),
|
1100
|
+
XdsClient::ConstructFullXdsResourceName(
|
1101
|
+
authority, result.type_url.c_str(), resource_key)
|
1102
|
+
.c_str());
|
1103
|
+
resource_state.ignored_deletion = true;
|
1104
|
+
}
|
1105
|
+
} else {
|
1106
|
+
resource_state.resource.reset();
|
1107
|
+
resource_state.meta.client_status =
|
1108
|
+
XdsApi::ResourceMetadata::DOES_NOT_EXIST;
|
1109
|
+
xds_client()->NotifyWatchersOnResourceDoesNotExist(
|
1110
|
+
resource_state.watchers);
|
1111
|
+
}
|
1112
|
+
}
|
1211
1113
|
}
|
1212
1114
|
}
|
1213
1115
|
}
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1116
|
+
// If we had valid resources or the update was empty, update the version.
|
1117
|
+
if (result.have_valid_resources || result.errors.empty()) {
|
1118
|
+
chand()->resource_type_version_map_[result.type] =
|
1119
|
+
std::move(result.version);
|
1120
|
+
// Start load reporting if needed.
|
1121
|
+
auto& lrs_call = chand()->lrs_calld_;
|
1122
|
+
if (lrs_call != nullptr) {
|
1123
|
+
LrsCallState* lrs_calld = lrs_call->calld();
|
1124
|
+
if (lrs_calld != nullptr) lrs_calld->MaybeStartReportingLocked();
|
1125
|
+
}
|
1224
1126
|
}
|
1127
|
+
// Send ACK or NACK.
|
1128
|
+
SendMessageLocked(result.type);
|
1225
1129
|
}
|
1226
|
-
|
1227
|
-
|
1228
|
-
}
|
1229
|
-
if (xds_client()->shutting_down_) return true;
|
1230
|
-
// Keep listening for updates.
|
1231
|
-
grpc_op op;
|
1232
|
-
memset(&op, 0, sizeof(op));
|
1233
|
-
op.op = GRPC_OP_RECV_MESSAGE;
|
1234
|
-
op.data.recv_message.recv_message = &recv_message_payload_;
|
1235
|
-
op.flags = 0;
|
1236
|
-
op.reserved = nullptr;
|
1237
|
-
GPR_ASSERT(call_ != nullptr);
|
1238
|
-
// Reuse the "ADS+OnResponseReceivedLocked" ref taken in ctor.
|
1239
|
-
const grpc_call_error call_error =
|
1240
|
-
grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
|
1241
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1242
|
-
return false;
|
1130
|
+
}
|
1131
|
+
xds_client()->work_serializer_.DrainQueue();
|
1243
1132
|
}
|
1244
1133
|
|
1245
1134
|
void XdsClient::ChannelState::AdsCallState::OnStatusReceived(
|
1246
|
-
|
1247
|
-
AdsCallState* ads_calld = static_cast<AdsCallState*>(arg);
|
1135
|
+
absl::Status status) {
|
1248
1136
|
{
|
1249
|
-
MutexLock lock(&
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1260
|
-
|
1261
|
-
|
1262
|
-
|
1263
|
-
|
1264
|
-
|
1265
|
-
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
StringViewFromSlice(status_details_), grpc_error_std_string(error))));
|
1137
|
+
MutexLock lock(&xds_client()->mu_);
|
1138
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1139
|
+
gpr_log(GPR_INFO,
|
1140
|
+
"[xds_client %p] xds server %s: ADS call status received "
|
1141
|
+
"(chand=%p, ads_calld=%p, call=%p): %s",
|
1142
|
+
xds_client(), chand()->server_.server_uri().c_str(), chand(),
|
1143
|
+
this, call_.get(), status.ToString().c_str());
|
1144
|
+
}
|
1145
|
+
// Cancel any does-not-exist timers that may be pending.
|
1146
|
+
for (const auto& p : state_map_) {
|
1147
|
+
for (const auto& q : p.second.subscribed_resources) {
|
1148
|
+
for (auto& r : q.second) {
|
1149
|
+
r.second->MaybeCancelTimer();
|
1150
|
+
}
|
1151
|
+
}
|
1152
|
+
}
|
1153
|
+
// Ignore status from a stale call.
|
1154
|
+
if (IsCurrentCallOnChannel()) {
|
1155
|
+
// Try to restart the call.
|
1156
|
+
parent_->OnCallFinishedLocked();
|
1157
|
+
// If we didn't receive a response on the stream, report the
|
1158
|
+
// stream failure as a connectivity failure, which will report the
|
1159
|
+
// error to all watchers of resources on this channel.
|
1160
|
+
if (!seen_response_) {
|
1161
|
+
chand()->SetChannelStatusLocked(absl::UnavailableError(
|
1162
|
+
absl::StrCat("xDS call failed with no responses received; status: ",
|
1163
|
+
status.ToString())));
|
1164
|
+
}
|
1165
|
+
}
|
1279
1166
|
}
|
1280
|
-
|
1167
|
+
xds_client()->work_serializer_.DrainQueue();
|
1281
1168
|
}
|
1282
1169
|
|
1283
1170
|
bool XdsClient::ChannelState::AdsCallState::IsCurrentCallOnChannel() const {
|
1284
|
-
// If the retryable ADS call is null (which only happens when the xds
|
1285
|
-
// is shutting down), all the ADS calls are stale.
|
1171
|
+
// If the retryable ADS call is null (which only happens when the xds
|
1172
|
+
// channel is shutting down), all the ADS calls are stale.
|
1286
1173
|
if (chand()->ads_calld_ == nullptr) return false;
|
1287
1174
|
return this == chand()->ads_calld_->calld();
|
1288
1175
|
}
|
@@ -1300,7 +1187,7 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
|
1300
1187
|
resource_names.emplace_back(XdsClient::ConstructFullXdsResourceName(
|
1301
1188
|
authority, type->type_url(), resource_key));
|
1302
1189
|
OrphanablePtr<ResourceTimer>& resource_timer = p.second;
|
1303
|
-
resource_timer->
|
1190
|
+
resource_timer->MarkSubscriptionSendStarted();
|
1304
1191
|
}
|
1305
1192
|
}
|
1306
1193
|
}
|
@@ -1312,38 +1199,30 @@ XdsClient::ChannelState::AdsCallState::ResourceNamesForRequest(
|
|
1312
1199
|
//
|
1313
1200
|
|
1314
1201
|
void XdsClient::ChannelState::LrsCallState::Reporter::Orphan() {
|
1315
|
-
if (
|
1316
|
-
|
1202
|
+
if (timer_handle_.has_value() &&
|
1203
|
+
xds_client()->engine()->Cancel(*timer_handle_)) {
|
1204
|
+
timer_handle_.reset();
|
1205
|
+
Unref(DEBUG_LOCATION, "Orphan");
|
1317
1206
|
}
|
1318
1207
|
}
|
1319
1208
|
|
1320
1209
|
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1321
1210
|
ScheduleNextReportLocked() {
|
1322
|
-
|
1323
|
-
|
1324
|
-
|
1325
|
-
|
1326
|
-
|
1327
|
-
|
1328
|
-
|
1329
|
-
void* arg, grpc_error_handle error) {
|
1330
|
-
Reporter* self = static_cast<Reporter*>(arg);
|
1331
|
-
bool done;
|
1332
|
-
{
|
1333
|
-
MutexLock lock(&self->xds_client()->mu_);
|
1334
|
-
done = self->OnNextReportTimerLocked(GRPC_ERROR_REF(error));
|
1335
|
-
}
|
1336
|
-
if (done) self->Unref(DEBUG_LOCATION, "Reporter+timer");
|
1211
|
+
timer_handle_ = xds_client()->engine()->RunAfter(report_interval_, [this]() {
|
1212
|
+
ApplicationCallbackExecCtx callback_exec_ctx;
|
1213
|
+
ExecCtx exec_ctx;
|
1214
|
+
if (OnNextReportTimer()) {
|
1215
|
+
Unref(DEBUG_LOCATION, "OnNextReportTimer()");
|
1216
|
+
}
|
1217
|
+
});
|
1337
1218
|
}
|
1338
1219
|
|
1339
|
-
bool XdsClient::ChannelState::LrsCallState::Reporter::
|
1340
|
-
|
1341
|
-
|
1342
|
-
if (
|
1343
|
-
|
1344
|
-
|
1345
|
-
}
|
1346
|
-
return SendReportLocked();
|
1220
|
+
bool XdsClient::ChannelState::LrsCallState::Reporter::OnNextReportTimer() {
|
1221
|
+
MutexLock lock(&xds_client()->mu_);
|
1222
|
+
timer_handle_.reset();
|
1223
|
+
if (!IsCurrentReporterOnCall()) return true;
|
1224
|
+
SendReportLocked();
|
1225
|
+
return false;
|
1347
1226
|
}
|
1348
1227
|
|
1349
1228
|
namespace {
|
@@ -1374,7 +1253,7 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1374
1253
|
last_report_counters_were_zero_ = LoadReportCountersAreZero(snapshot);
|
1375
1254
|
if (old_val && last_report_counters_were_zero_) {
|
1376
1255
|
auto it = xds_client()->xds_load_report_server_map_.find(
|
1377
|
-
parent_->chand()->server_);
|
1256
|
+
&parent_->chand()->server_);
|
1378
1257
|
if (it == xds_client()->xds_load_report_server_map_.end() ||
|
1379
1258
|
it->second.load_report_map.empty()) {
|
1380
1259
|
it->second.channel_state->StopLrsCallLocked();
|
@@ -1383,65 +1262,34 @@ bool XdsClient::ChannelState::LrsCallState::Reporter::SendReportLocked() {
|
|
1383
1262
|
ScheduleNextReportLocked();
|
1384
1263
|
return false;
|
1385
1264
|
}
|
1386
|
-
//
|
1387
|
-
|
1265
|
+
// Send a request that contains the snapshot.
|
1266
|
+
std::string serialized_payload =
|
1388
1267
|
xds_client()->api_.CreateLrsRequest(std::move(snapshot));
|
1389
|
-
parent_->
|
1390
|
-
|
1391
|
-
grpc_slice_unref_internal(request_payload_slice);
|
1392
|
-
// Send the report.
|
1393
|
-
grpc_op op;
|
1394
|
-
memset(&op, 0, sizeof(op));
|
1395
|
-
op.op = GRPC_OP_SEND_MESSAGE;
|
1396
|
-
op.data.send_message.send_message = parent_->send_message_payload_;
|
1397
|
-
grpc_call_error call_error = grpc_call_start_batch_and_execute(
|
1398
|
-
parent_->call_, &op, 1, &on_report_done_);
|
1399
|
-
if (GPR_UNLIKELY(call_error != GRPC_CALL_OK)) {
|
1400
|
-
gpr_log(GPR_ERROR,
|
1401
|
-
"[xds_client %p] xds server %s: error starting LRS send_message "
|
1402
|
-
"batch on calld=%p: call_error=%d",
|
1403
|
-
xds_client(), parent_->chand()->server_.server_uri.c_str(), this,
|
1404
|
-
call_error);
|
1405
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1406
|
-
}
|
1268
|
+
parent_->call_->SendMessage(std::move(serialized_payload));
|
1269
|
+
parent_->send_message_pending_ = true;
|
1407
1270
|
return false;
|
1408
1271
|
}
|
1409
1272
|
|
1410
|
-
void XdsClient::ChannelState::LrsCallState::Reporter::
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
if (done) self->Unref(DEBUG_LOCATION, "Reporter+report_done");
|
1419
|
-
}
|
1420
|
-
|
1421
|
-
bool XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked(
|
1422
|
-
grpc_error_handle error) {
|
1423
|
-
grpc_byte_buffer_destroy(parent_->send_message_payload_);
|
1424
|
-
parent_->send_message_payload_ = nullptr;
|
1273
|
+
void XdsClient::ChannelState::LrsCallState::Reporter::OnReportDoneLocked() {
|
1274
|
+
// If a reporter starts a send_message op, then the reporting interval
|
1275
|
+
// changes and we destroy that reporter and create a new one, and then
|
1276
|
+
// the send_message op started by the old reporter finishes, this
|
1277
|
+
// method will be called even though it was for a completion started
|
1278
|
+
// by the old reporter. In that case, the timer will be pending, so
|
1279
|
+
// we just ignore the completion and wait for the timer to fire.
|
1280
|
+
if (timer_handle_.has_value()) return;
|
1425
1281
|
// If there are no more registered stats to report, cancel the call.
|
1426
|
-
auto it =
|
1427
|
-
|
1428
|
-
if (it == xds_client()->xds_load_report_server_map_.end()
|
1429
|
-
|
1430
|
-
it->second.channel_state
|
1431
|
-
|
1432
|
-
return true;
|
1433
|
-
}
|
1434
|
-
if (error != GRPC_ERROR_NONE || !IsCurrentReporterOnCall()) {
|
1435
|
-
GRPC_ERROR_UNREF(error);
|
1436
|
-
// If this reporter is no longer the current one on the call, the reason
|
1437
|
-
// might be that it was orphaned for a new one due to config update.
|
1438
|
-
if (!IsCurrentReporterOnCall()) {
|
1439
|
-
parent_->MaybeStartReportingLocked();
|
1282
|
+
auto it = xds_client()->xds_load_report_server_map_.find(
|
1283
|
+
&parent_->chand()->server_);
|
1284
|
+
if (it == xds_client()->xds_load_report_server_map_.end()) return;
|
1285
|
+
if (it->second.load_report_map.empty()) {
|
1286
|
+
if (it->second.channel_state != nullptr) {
|
1287
|
+
it->second.channel_state->StopLrsCallLocked();
|
1440
1288
|
}
|
1441
|
-
return
|
1289
|
+
return;
|
1442
1290
|
}
|
1291
|
+
// Otherwise, schedule the next load report.
|
1443
1292
|
ScheduleNextReportLocked();
|
1444
|
-
return false;
|
1445
1293
|
}
|
1446
1294
|
|
1447
1295
|
//
|
@@ -1460,123 +1308,41 @@ XdsClient::ChannelState::LrsCallState::LrsCallState(
|
|
1460
1308
|
// the polling entities from client_channel.
|
1461
1309
|
GPR_ASSERT(xds_client() != nullptr);
|
1462
1310
|
const char* method =
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1469
|
-
Slice::FromStaticString(method).c_slice(), nullptr,
|
1470
|
-
Timestamp::InfFuture(), nullptr);
|
1311
|
+
"/envoy.service.load_stats.v3.LoadReportingService/StreamLoadStats";
|
1312
|
+
call_ = chand()->transport_->CreateStreamingCall(
|
1313
|
+
method, std::make_unique<StreamEventHandler>(
|
1314
|
+
// Passing the initial ref here. This ref will go away when
|
1315
|
+
// the StreamEventHandler is destroyed.
|
1316
|
+
RefCountedPtr<LrsCallState>(this)));
|
1471
1317
|
GPR_ASSERT(call_ != nullptr);
|
1472
|
-
// Init the request payload.
|
1473
|
-
grpc_slice request_payload_slice =
|
1474
|
-
xds_client()->api_.CreateLrsInitialRequest(chand()->server_);
|
1475
|
-
send_message_payload_ =
|
1476
|
-
grpc_raw_byte_buffer_create(&request_payload_slice, 1);
|
1477
|
-
grpc_slice_unref_internal(request_payload_slice);
|
1478
|
-
// Init other data associated with the LRS call.
|
1479
|
-
grpc_metadata_array_init(&initial_metadata_recv_);
|
1480
|
-
grpc_metadata_array_init(&trailing_metadata_recv_);
|
1481
1318
|
// Start the call.
|
1482
1319
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1483
|
-
gpr_log(
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
grpc_op* op = ops;
|
1494
|
-
op->op = GRPC_OP_SEND_INITIAL_METADATA;
|
1495
|
-
op->data.send_initial_metadata.count = 0;
|
1496
|
-
op->flags = GRPC_INITIAL_METADATA_WAIT_FOR_READY |
|
1497
|
-
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET;
|
1498
|
-
op->reserved = nullptr;
|
1499
|
-
op++;
|
1500
|
-
// Op: send request message.
|
1501
|
-
GPR_ASSERT(send_message_payload_ != nullptr);
|
1502
|
-
op->op = GRPC_OP_SEND_MESSAGE;
|
1503
|
-
op->data.send_message.send_message = send_message_payload_;
|
1504
|
-
op->flags = 0;
|
1505
|
-
op->reserved = nullptr;
|
1506
|
-
op++;
|
1507
|
-
Ref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked").release();
|
1508
|
-
GRPC_CLOSURE_INIT(&on_initial_request_sent_, OnInitialRequestSent, this,
|
1509
|
-
grpc_schedule_on_exec_ctx);
|
1510
|
-
call_error = grpc_call_start_batch_and_execute(
|
1511
|
-
call_, ops, static_cast<size_t>(op - ops), &on_initial_request_sent_);
|
1512
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1513
|
-
// Op: recv initial metadata.
|
1514
|
-
op = ops;
|
1515
|
-
op->op = GRPC_OP_RECV_INITIAL_METADATA;
|
1516
|
-
op->data.recv_initial_metadata.recv_initial_metadata =
|
1517
|
-
&initial_metadata_recv_;
|
1518
|
-
op->flags = 0;
|
1519
|
-
op->reserved = nullptr;
|
1520
|
-
op++;
|
1521
|
-
// Op: recv response.
|
1522
|
-
op->op = GRPC_OP_RECV_MESSAGE;
|
1523
|
-
op->data.recv_message.recv_message = &recv_message_payload_;
|
1524
|
-
op->flags = 0;
|
1525
|
-
op->reserved = nullptr;
|
1526
|
-
op++;
|
1527
|
-
Ref(DEBUG_LOCATION, "LRS+OnResponseReceivedLocked").release();
|
1528
|
-
GRPC_CLOSURE_INIT(&on_response_received_, OnResponseReceived, this,
|
1529
|
-
grpc_schedule_on_exec_ctx);
|
1530
|
-
call_error = grpc_call_start_batch_and_execute(
|
1531
|
-
call_, ops, static_cast<size_t>(op - ops), &on_response_received_);
|
1532
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1533
|
-
// Op: recv server status.
|
1534
|
-
op = ops;
|
1535
|
-
op->op = GRPC_OP_RECV_STATUS_ON_CLIENT;
|
1536
|
-
op->data.recv_status_on_client.trailing_metadata = &trailing_metadata_recv_;
|
1537
|
-
op->data.recv_status_on_client.status = &status_code_;
|
1538
|
-
op->data.recv_status_on_client.status_details = &status_details_;
|
1539
|
-
op->flags = 0;
|
1540
|
-
op->reserved = nullptr;
|
1541
|
-
op++;
|
1542
|
-
// This callback signals the end of the call, so it relies on the initial
|
1543
|
-
// ref instead of a new ref. When it's invoked, it's the initial ref that is
|
1544
|
-
// unreffed.
|
1545
|
-
GRPC_CLOSURE_INIT(&on_status_received_, OnStatusReceived, this,
|
1546
|
-
grpc_schedule_on_exec_ctx);
|
1547
|
-
call_error = grpc_call_start_batch_and_execute(
|
1548
|
-
call_, ops, static_cast<size_t>(op - ops), &on_status_received_);
|
1549
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1550
|
-
}
|
1551
|
-
|
1552
|
-
XdsClient::ChannelState::LrsCallState::~LrsCallState() {
|
1553
|
-
grpc_metadata_array_destroy(&initial_metadata_recv_);
|
1554
|
-
grpc_metadata_array_destroy(&trailing_metadata_recv_);
|
1555
|
-
grpc_byte_buffer_destroy(send_message_payload_);
|
1556
|
-
grpc_byte_buffer_destroy(recv_message_payload_);
|
1557
|
-
grpc_slice_unref_internal(status_details_);
|
1558
|
-
GPR_ASSERT(call_ != nullptr);
|
1559
|
-
grpc_call_unref(call_);
|
1320
|
+
gpr_log(GPR_INFO,
|
1321
|
+
"[xds_client %p] xds server %s: starting LRS call (calld=%p, "
|
1322
|
+
"call=%p)",
|
1323
|
+
xds_client(), chand()->server_.server_uri().c_str(), this,
|
1324
|
+
call_.get());
|
1325
|
+
}
|
1326
|
+
// Send the initial request.
|
1327
|
+
std::string serialized_payload = xds_client()->api_.CreateLrsInitialRequest();
|
1328
|
+
call_->SendMessage(std::move(serialized_payload));
|
1329
|
+
send_message_pending_ = true;
|
1560
1330
|
}
|
1561
1331
|
|
1562
1332
|
void XdsClient::ChannelState::LrsCallState::Orphan() {
|
1563
1333
|
reporter_.reset();
|
1564
|
-
|
1565
|
-
//
|
1566
|
-
//
|
1567
|
-
|
1568
|
-
// following cancellation will be a no-op.
|
1569
|
-
grpc_call_cancel_internal(call_);
|
1570
|
-
// Note that the initial ref is hold by on_status_received_. So the
|
1571
|
-
// corresponding unref happens in on_status_received_ instead of here.
|
1334
|
+
// Note that the initial ref is held by the StreamEventHandler, which
|
1335
|
+
// will be destroyed when call_ is destroyed, which may not happen
|
1336
|
+
// here, since there may be other refs held to call_ by internal callbacks.
|
1337
|
+
call_.reset();
|
1572
1338
|
}
|
1573
1339
|
|
1574
1340
|
void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
1575
1341
|
// Don't start again if already started.
|
1576
1342
|
if (reporter_ != nullptr) return;
|
1577
|
-
// Don't start if the previous send_message op (of the initial request or
|
1578
|
-
// last report of the previous reporter) hasn't completed.
|
1579
|
-
if (
|
1343
|
+
// Don't start if the previous send_message op (of the initial request or
|
1344
|
+
// the last report of the previous reporter) hasn't completed.
|
1345
|
+
if (call_ != nullptr && send_message_pending_) return;
|
1580
1346
|
// Don't start if no LRS response has arrived.
|
1581
1347
|
if (!seen_response()) return;
|
1582
1348
|
// Don't start if the ADS call hasn't received any valid response. Note that
|
@@ -1592,166 +1358,105 @@ void XdsClient::ChannelState::LrsCallState::MaybeStartReportingLocked() {
|
|
1592
1358
|
Ref(DEBUG_LOCATION, "LRS+load_report+start"), load_reporting_interval_);
|
1593
1359
|
}
|
1594
1360
|
|
1595
|
-
void XdsClient::ChannelState::LrsCallState::
|
1596
|
-
|
1597
|
-
|
1598
|
-
{
|
1599
|
-
|
1600
|
-
|
1361
|
+
void XdsClient::ChannelState::LrsCallState::OnRequestSent(bool /*ok*/) {
|
1362
|
+
MutexLock lock(&xds_client()->mu_);
|
1363
|
+
send_message_pending_ = false;
|
1364
|
+
if (reporter_ != nullptr) {
|
1365
|
+
reporter_->OnReportDoneLocked();
|
1366
|
+
} else {
|
1367
|
+
MaybeStartReportingLocked();
|
1601
1368
|
}
|
1602
|
-
lrs_calld->Unref(DEBUG_LOCATION, "LRS+OnInitialRequestSentLocked");
|
1603
1369
|
}
|
1604
1370
|
|
1605
|
-
void XdsClient::ChannelState::LrsCallState::
|
1606
|
-
|
1607
|
-
|
1608
|
-
|
1609
|
-
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
|
1620
|
-
|
1621
|
-
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
if (
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1629
|
-
|
1630
|
-
|
1631
|
-
|
1632
|
-
|
1633
|
-
|
1634
|
-
|
1635
|
-
|
1636
|
-
|
1637
|
-
|
1638
|
-
bool send_all_clusters = false;
|
1639
|
-
std::set<std::string> new_cluster_names;
|
1640
|
-
Duration new_load_reporting_interval;
|
1641
|
-
grpc_error_handle parse_error = xds_client()->api_.ParseLrsResponse(
|
1642
|
-
response_slice, &send_all_clusters, &new_cluster_names,
|
1643
|
-
&new_load_reporting_interval);
|
1644
|
-
if (parse_error != GRPC_ERROR_NONE) {
|
1645
|
-
gpr_log(GPR_ERROR,
|
1646
|
-
"[xds_client %p] xds server %s: LRS response parsing failed: %s",
|
1647
|
-
xds_client(), chand()->server_.server_uri.c_str(),
|
1648
|
-
grpc_error_std_string(parse_error).c_str());
|
1649
|
-
GRPC_ERROR_UNREF(parse_error);
|
1650
|
-
return;
|
1371
|
+
void XdsClient::ChannelState::LrsCallState::OnRecvMessage(
|
1372
|
+
absl::string_view payload) {
|
1373
|
+
MutexLock lock(&xds_client()->mu_);
|
1374
|
+
// If we're no longer the current call, ignore the result.
|
1375
|
+
if (!IsCurrentCallOnChannel()) return;
|
1376
|
+
// Parse the response.
|
1377
|
+
bool send_all_clusters = false;
|
1378
|
+
std::set<std::string> new_cluster_names;
|
1379
|
+
Duration new_load_reporting_interval;
|
1380
|
+
absl::Status status = xds_client()->api_.ParseLrsResponse(
|
1381
|
+
payload, &send_all_clusters, &new_cluster_names,
|
1382
|
+
&new_load_reporting_interval);
|
1383
|
+
if (!status.ok()) {
|
1384
|
+
gpr_log(GPR_ERROR,
|
1385
|
+
"[xds_client %p] xds server %s: LRS response parsing failed: %s",
|
1386
|
+
xds_client(), chand()->server_.server_uri().c_str(),
|
1387
|
+
status.ToString().c_str());
|
1388
|
+
return;
|
1389
|
+
}
|
1390
|
+
seen_response_ = true;
|
1391
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1392
|
+
gpr_log(
|
1393
|
+
GPR_INFO,
|
1394
|
+
"[xds_client %p] xds server %s: LRS response received, %" PRIuPTR
|
1395
|
+
" cluster names, send_all_clusters=%d, load_report_interval=%" PRId64
|
1396
|
+
"ms",
|
1397
|
+
xds_client(), chand()->server_.server_uri().c_str(),
|
1398
|
+
new_cluster_names.size(), send_all_clusters,
|
1399
|
+
new_load_reporting_interval.millis());
|
1400
|
+
size_t i = 0;
|
1401
|
+
for (const auto& name : new_cluster_names) {
|
1402
|
+
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
1403
|
+
xds_client(), i++, name.c_str());
|
1651
1404
|
}
|
1652
|
-
|
1405
|
+
}
|
1406
|
+
if (new_load_reporting_interval <
|
1407
|
+
Duration::Milliseconds(GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
|
1408
|
+
new_load_reporting_interval =
|
1409
|
+
Duration::Milliseconds(GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1653
1410
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1654
|
-
gpr_log(
|
1655
|
-
|
1656
|
-
|
1657
|
-
|
1658
|
-
|
1659
|
-
xds_client(), chand()->server_.server_uri.c_str(),
|
1660
|
-
new_cluster_names.size(), send_all_clusters,
|
1661
|
-
new_load_reporting_interval.millis());
|
1662
|
-
size_t i = 0;
|
1663
|
-
for (const auto& name : new_cluster_names) {
|
1664
|
-
gpr_log(GPR_INFO, "[xds_client %p] cluster_name %" PRIuPTR ": %s",
|
1665
|
-
xds_client(), i++, name.c_str());
|
1666
|
-
}
|
1667
|
-
}
|
1668
|
-
if (new_load_reporting_interval <
|
1669
|
-
Duration::Milliseconds(
|
1670
|
-
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS)) {
|
1671
|
-
new_load_reporting_interval = Duration::Milliseconds(
|
1672
|
-
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1673
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1674
|
-
gpr_log(GPR_INFO,
|
1675
|
-
"[xds_client %p] xds server %s: increased load_report_interval "
|
1676
|
-
"to minimum value %dms",
|
1677
|
-
xds_client(), chand()->server_.server_uri.c_str(),
|
1678
|
-
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1679
|
-
}
|
1411
|
+
gpr_log(GPR_INFO,
|
1412
|
+
"[xds_client %p] xds server %s: increased load_report_interval "
|
1413
|
+
"to minimum value %dms",
|
1414
|
+
xds_client(), chand()->server_.server_uri().c_str(),
|
1415
|
+
GRPC_XDS_MIN_CLIENT_LOAD_REPORTING_INTERVAL_MS);
|
1680
1416
|
}
|
1681
|
-
|
1682
|
-
|
1683
|
-
|
1684
|
-
|
1685
|
-
|
1686
|
-
|
1687
|
-
|
1688
|
-
|
1689
|
-
|
1690
|
-
|
1691
|
-
}
|
1692
|
-
return;
|
1417
|
+
}
|
1418
|
+
// Ignore identical update.
|
1419
|
+
if (send_all_clusters == send_all_clusters_ &&
|
1420
|
+
cluster_names_ == new_cluster_names &&
|
1421
|
+
load_reporting_interval_ == new_load_reporting_interval) {
|
1422
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1423
|
+
gpr_log(GPR_INFO,
|
1424
|
+
"[xds_client %p] xds server %s: incoming LRS response identical "
|
1425
|
+
"to current, ignoring.",
|
1426
|
+
xds_client(), chand()->server_.server_uri().c_str());
|
1693
1427
|
}
|
1694
|
-
|
1695
|
-
reporter_.reset();
|
1696
|
-
// Record the new config.
|
1697
|
-
send_all_clusters_ = send_all_clusters;
|
1698
|
-
cluster_names_ = std::move(new_cluster_names);
|
1699
|
-
load_reporting_interval_ = new_load_reporting_interval;
|
1700
|
-
// Try starting sending load report.
|
1701
|
-
MaybeStartReportingLocked();
|
1702
|
-
}();
|
1703
|
-
grpc_slice_unref_internal(response_slice);
|
1704
|
-
if (xds_client()->shutting_down_) return true;
|
1705
|
-
// Keep listening for LRS config updates.
|
1706
|
-
grpc_op op;
|
1707
|
-
memset(&op, 0, sizeof(op));
|
1708
|
-
op.op = GRPC_OP_RECV_MESSAGE;
|
1709
|
-
op.data.recv_message.recv_message = &recv_message_payload_;
|
1710
|
-
op.flags = 0;
|
1711
|
-
op.reserved = nullptr;
|
1712
|
-
GPR_ASSERT(call_ != nullptr);
|
1713
|
-
// Reuse the "OnResponseReceivedLocked" ref taken in ctor.
|
1714
|
-
const grpc_call_error call_error =
|
1715
|
-
grpc_call_start_batch_and_execute(call_, &op, 1, &on_response_received_);
|
1716
|
-
GPR_ASSERT(GRPC_CALL_OK == call_error);
|
1717
|
-
return false;
|
1718
|
-
}
|
1719
|
-
|
1720
|
-
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1721
|
-
void* arg, grpc_error_handle error) {
|
1722
|
-
LrsCallState* lrs_calld = static_cast<LrsCallState*>(arg);
|
1723
|
-
{
|
1724
|
-
MutexLock lock(&lrs_calld->xds_client()->mu_);
|
1725
|
-
lrs_calld->OnStatusReceivedLocked(GRPC_ERROR_REF(error));
|
1428
|
+
return;
|
1726
1429
|
}
|
1727
|
-
|
1430
|
+
// Stop current load reporting (if any) to adopt the new config.
|
1431
|
+
reporter_.reset();
|
1432
|
+
// Record the new config.
|
1433
|
+
send_all_clusters_ = send_all_clusters;
|
1434
|
+
cluster_names_ = std::move(new_cluster_names);
|
1435
|
+
load_reporting_interval_ = new_load_reporting_interval;
|
1436
|
+
// Try starting sending load report.
|
1437
|
+
MaybeStartReportingLocked();
|
1728
1438
|
}
|
1729
1439
|
|
1730
|
-
void XdsClient::ChannelState::LrsCallState::
|
1731
|
-
|
1732
|
-
|
1440
|
+
void XdsClient::ChannelState::LrsCallState::OnStatusReceived(
|
1441
|
+
absl::Status status) {
|
1442
|
+
MutexLock lock(&xds_client()->mu_);
|
1733
1443
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1734
|
-
char* status_details = grpc_slice_to_c_string(status_details_);
|
1735
1444
|
gpr_log(GPR_INFO,
|
1736
1445
|
"[xds_client %p] xds server %s: LRS call status received "
|
1737
|
-
"(chand=%p, calld=%p, call=%p): "
|
1738
|
-
|
1739
|
-
|
1740
|
-
call_, status_code_, status_details,
|
1741
|
-
grpc_error_std_string(error).c_str());
|
1742
|
-
gpr_free(status_details);
|
1446
|
+
"(chand=%p, calld=%p, call=%p): %s",
|
1447
|
+
xds_client(), chand()->server_.server_uri().c_str(), chand(), this,
|
1448
|
+
call_.get(), status.ToString().c_str());
|
1743
1449
|
}
|
1744
1450
|
// Ignore status from a stale call.
|
1745
1451
|
if (IsCurrentCallOnChannel()) {
|
1746
1452
|
// Try to restart the call.
|
1747
1453
|
parent_->OnCallFinishedLocked();
|
1748
1454
|
}
|
1749
|
-
GRPC_ERROR_UNREF(error);
|
1750
1455
|
}
|
1751
1456
|
|
1752
1457
|
bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
1753
|
-
// If the retryable LRS call is null (which only happens when the xds
|
1754
|
-
// is shutting down), all the LRS calls are stale.
|
1458
|
+
// If the retryable LRS call is null (which only happens when the xds
|
1459
|
+
// channel is shutting down), all the LRS calls are stale.
|
1755
1460
|
if (chand()->lrs_calld_ == nullptr) return false;
|
1756
1461
|
return this == chand()->lrs_calld_->calld();
|
1757
1462
|
}
|
@@ -1760,86 +1465,66 @@ bool XdsClient::ChannelState::LrsCallState::IsCurrentCallOnChannel() const {
|
|
1760
1465
|
// XdsClient
|
1761
1466
|
//
|
1762
1467
|
|
1763
|
-
|
1764
|
-
|
1765
|
-
|
1766
|
-
|
1767
|
-
|
1768
|
-
|
1769
|
-
}
|
1770
|
-
|
1771
|
-
grpc_channel_args* ModifyChannelArgs(const grpc_channel_args* args) {
|
1772
|
-
absl::InlinedVector<grpc_arg, 1> args_to_add = {
|
1773
|
-
grpc_channel_arg_integer_create(
|
1774
|
-
const_cast<char*>(GRPC_ARG_KEEPALIVE_TIME_MS),
|
1775
|
-
5 * 60 * GPR_MS_PER_SEC),
|
1776
|
-
};
|
1777
|
-
return grpc_channel_args_copy_and_add(args, args_to_add.data(),
|
1778
|
-
args_to_add.size());
|
1779
|
-
}
|
1780
|
-
|
1781
|
-
} // namespace
|
1782
|
-
|
1783
|
-
XdsClient::XdsClient(std::unique_ptr<XdsBootstrap> bootstrap,
|
1784
|
-
const grpc_channel_args* args)
|
1468
|
+
XdsClient::XdsClient(
|
1469
|
+
std::unique_ptr<XdsBootstrap> bootstrap,
|
1470
|
+
OrphanablePtr<XdsTransportFactory> transport_factory,
|
1471
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine> engine,
|
1472
|
+
std::string user_agent_name, std::string user_agent_version,
|
1473
|
+
Duration resource_request_timeout)
|
1785
1474
|
: DualRefCounted<XdsClient>(
|
1786
1475
|
GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_refcount_trace) ? "XdsClient"
|
1787
1476
|
: nullptr),
|
1788
1477
|
bootstrap_(std::move(bootstrap)),
|
1789
|
-
|
1790
|
-
request_timeout_(
|
1478
|
+
transport_factory_(std::move(transport_factory)),
|
1479
|
+
request_timeout_(resource_request_timeout),
|
1791
1480
|
xds_federation_enabled_(XdsFederationEnabled()),
|
1792
|
-
|
1793
|
-
|
1794
|
-
|
1795
|
-
api_(this, &grpc_xds_client_trace, bootstrap_->node(),
|
1796
|
-
&bootstrap_->certificate_providers(), &symtab_) {
|
1481
|
+
api_(this, &grpc_xds_client_trace, bootstrap_->node(), &symtab_,
|
1482
|
+
std::move(user_agent_name), std::move(user_agent_version)),
|
1483
|
+
engine_(std::move(engine)) {
|
1797
1484
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1798
1485
|
gpr_log(GPR_INFO, "[xds_client %p] creating xds client", this);
|
1799
1486
|
}
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
1487
|
+
GPR_ASSERT(bootstrap_ != nullptr);
|
1488
|
+
if (bootstrap_->node() != nullptr) {
|
1489
|
+
gpr_log(GPR_INFO, "[xds_client %p] xDS node ID: %s", this,
|
1490
|
+
bootstrap_->node()->id().c_str());
|
1491
|
+
}
|
1803
1492
|
}
|
1804
1493
|
|
1805
1494
|
XdsClient::~XdsClient() {
|
1806
1495
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1807
1496
|
gpr_log(GPR_INFO, "[xds_client %p] destroying xds client", this);
|
1808
1497
|
}
|
1809
|
-
grpc_channel_args_destroy(args_);
|
1810
|
-
grpc_pollset_set_destroy(interested_parties_);
|
1811
|
-
// Calling grpc_shutdown to ensure gRPC does not shut down until the XdsClient
|
1812
|
-
// is destroyed.
|
1813
|
-
grpc_shutdown();
|
1814
1498
|
}
|
1815
1499
|
|
1816
1500
|
void XdsClient::Orphan() {
|
1817
1501
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1818
1502
|
gpr_log(GPR_INFO, "[xds_client %p] shutting down xds client", this);
|
1819
1503
|
}
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1829
|
-
|
1504
|
+
MutexLock lock(&mu_);
|
1505
|
+
shutting_down_ = true;
|
1506
|
+
// Clear cache and any remaining watchers that may not have been cancelled.
|
1507
|
+
authority_state_map_.clear();
|
1508
|
+
invalid_watchers_.clear();
|
1509
|
+
// We may still be sending lingering queued load report data, so don't
|
1510
|
+
// just clear the load reporting map, but we do want to clear the refs
|
1511
|
+
// we're holding to the ChannelState objects, to make sure that
|
1512
|
+
// everything shuts down properly.
|
1513
|
+
for (auto& p : xds_load_report_server_map_) {
|
1514
|
+
p.second.channel_state.reset(DEBUG_LOCATION, "XdsClient::Orphan()");
|
1830
1515
|
}
|
1831
1516
|
}
|
1832
1517
|
|
1833
1518
|
RefCountedPtr<XdsClient::ChannelState> XdsClient::GetOrCreateChannelStateLocked(
|
1834
|
-
const XdsBootstrap::XdsServer& server) {
|
1835
|
-
auto it = xds_server_channel_map_.find(server);
|
1519
|
+
const XdsBootstrap::XdsServer& server, const char* reason) {
|
1520
|
+
auto it = xds_server_channel_map_.find(&server);
|
1836
1521
|
if (it != xds_server_channel_map_.end()) {
|
1837
|
-
return it->second->Ref(DEBUG_LOCATION,
|
1522
|
+
return it->second->Ref(DEBUG_LOCATION, reason);
|
1838
1523
|
}
|
1839
1524
|
// Channel not found, so create a new one.
|
1840
1525
|
auto channel_state = MakeRefCounted<ChannelState>(
|
1841
1526
|
WeakRef(DEBUG_LOCATION, "ChannelState"), server);
|
1842
|
-
xds_server_channel_map_[server] = channel_state.get();
|
1527
|
+
xds_server_channel_map_[&server] = channel_state.get();
|
1843
1528
|
return channel_state;
|
1844
1529
|
}
|
1845
1530
|
|
@@ -1855,17 +1540,16 @@ void XdsClient::WatchResource(const XdsResourceType* type,
|
|
1855
1540
|
invalid_watchers_[w] = watcher;
|
1856
1541
|
}
|
1857
1542
|
work_serializer_.Run(
|
1858
|
-
|
1859
|
-
|
1860
|
-
|
1861
|
-
|
1862
|
-
},
|
1543
|
+
[watcher = std::move(watcher), status = std::move(status)]()
|
1544
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1545
|
+
watcher->OnError(status);
|
1546
|
+
},
|
1863
1547
|
DEBUG_LOCATION);
|
1864
1548
|
};
|
1865
1549
|
auto resource_name = ParseXdsResourceName(name, type);
|
1866
1550
|
if (!resource_name.ok()) {
|
1867
|
-
fail(absl::UnavailableError(
|
1868
|
-
"Unable to parse resource name
|
1551
|
+
fail(absl::UnavailableError(
|
1552
|
+
absl::StrCat("Unable to parse resource name ", name)));
|
1869
1553
|
return;
|
1870
1554
|
}
|
1871
1555
|
// Find server to use.
|
@@ -1879,9 +1563,7 @@ void XdsClient::WatchResource(const XdsResourceType* type,
|
|
1879
1563
|
"\" not present in bootstrap config")));
|
1880
1564
|
return;
|
1881
1565
|
}
|
1882
|
-
|
1883
|
-
xds_server = &authority->xds_servers[0];
|
1884
|
-
}
|
1566
|
+
xds_server = authority->server();
|
1885
1567
|
}
|
1886
1568
|
if (xds_server == nullptr) xds_server = &bootstrap_->server();
|
1887
1569
|
{
|
@@ -1907,12 +1589,60 @@ void XdsClient::WatchResource(const XdsResourceType* type,
|
|
1907
1589
|
delete value;
|
1908
1590
|
},
|
1909
1591
|
DEBUG_LOCATION);
|
1592
|
+
} else if (resource_state.meta.client_status ==
|
1593
|
+
XdsApi::ResourceMetadata::DOES_NOT_EXIST) {
|
1594
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1595
|
+
gpr_log(GPR_INFO,
|
1596
|
+
"[xds_client %p] reporting cached does-not-exist for %s", this,
|
1597
|
+
std::string(name).c_str());
|
1598
|
+
}
|
1599
|
+
work_serializer_.Schedule(
|
1600
|
+
[watcher]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1601
|
+
watcher->OnResourceDoesNotExist();
|
1602
|
+
},
|
1603
|
+
DEBUG_LOCATION);
|
1604
|
+
} else if (resource_state.meta.client_status ==
|
1605
|
+
XdsApi::ResourceMetadata::NACKED) {
|
1606
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1607
|
+
gpr_log(
|
1608
|
+
GPR_INFO,
|
1609
|
+
"[xds_client %p] reporting cached validation failure for %s: %s",
|
1610
|
+
this, std::string(name).c_str(),
|
1611
|
+
resource_state.meta.failed_details.c_str());
|
1612
|
+
}
|
1613
|
+
std::string details = resource_state.meta.failed_details;
|
1614
|
+
const auto* node = bootstrap_->node();
|
1615
|
+
if (node != nullptr) {
|
1616
|
+
absl::StrAppend(&details, " (node ID:", bootstrap_->node()->id(), ")");
|
1617
|
+
}
|
1618
|
+
work_serializer_.Schedule(
|
1619
|
+
[watcher, details = std::move(details)]()
|
1620
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1621
|
+
watcher->OnError(absl::UnavailableError(
|
1622
|
+
absl::StrCat("invalid resource: ", details)));
|
1623
|
+
},
|
1624
|
+
DEBUG_LOCATION);
|
1910
1625
|
}
|
1911
1626
|
// If the authority doesn't yet have a channel, set it, creating it if
|
1912
1627
|
// needed.
|
1913
1628
|
if (authority_state.channel_state == nullptr) {
|
1914
1629
|
authority_state.channel_state =
|
1915
|
-
GetOrCreateChannelStateLocked(*xds_server);
|
1630
|
+
GetOrCreateChannelStateLocked(*xds_server, "start watch");
|
1631
|
+
}
|
1632
|
+
absl::Status channel_status = authority_state.channel_state->status();
|
1633
|
+
if (!channel_status.ok()) {
|
1634
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
1635
|
+
gpr_log(GPR_INFO,
|
1636
|
+
"[xds_client %p] returning cached channel error for %s: %s",
|
1637
|
+
this, std::string(name).c_str(),
|
1638
|
+
channel_status.ToString().c_str());
|
1639
|
+
}
|
1640
|
+
work_serializer_.Schedule(
|
1641
|
+
[watcher = std::move(watcher), status = std::move(channel_status)]()
|
1642
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) mutable {
|
1643
|
+
watcher->OnError(std::move(status));
|
1644
|
+
},
|
1645
|
+
DEBUG_LOCATION);
|
1916
1646
|
}
|
1917
1647
|
authority_state.channel_state->SubscribeLocked(type, *resource_name);
|
1918
1648
|
}
|
@@ -1925,11 +1655,9 @@ void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
|
1925
1655
|
bool delay_unsubscription) {
|
1926
1656
|
auto resource_name = ParseXdsResourceName(name, type);
|
1927
1657
|
MutexLock lock(&mu_);
|
1928
|
-
|
1929
|
-
|
1930
|
-
|
1931
|
-
}
|
1932
|
-
if (shutting_down_) return;
|
1658
|
+
// We cannot be sure whether the watcher is in invalid_watchers_ or in
|
1659
|
+
// authority_state_map_, so we check both, just to be safe.
|
1660
|
+
invalid_watchers_.erase(watcher);
|
1933
1661
|
// Find authority.
|
1934
1662
|
if (!resource_name.ok()) return;
|
1935
1663
|
auto authority_it = authority_state_map_.find(resource_name->authority);
|
@@ -1947,6 +1675,13 @@ void XdsClient::CancelResourceWatch(const XdsResourceType* type,
|
|
1947
1675
|
resource_state.watchers.erase(watcher);
|
1948
1676
|
// Clean up empty map entries, if any.
|
1949
1677
|
if (resource_state.watchers.empty()) {
|
1678
|
+
if (resource_state.ignored_deletion) {
|
1679
|
+
gpr_log(GPR_INFO,
|
1680
|
+
"[xds_client %p] unsubscribing from a resource for which we "
|
1681
|
+
"previously ignored a deletion: type %s name %s",
|
1682
|
+
this, std::string(type->type_url()).c_str(),
|
1683
|
+
std::string(name).c_str());
|
1684
|
+
}
|
1950
1685
|
authority_state.channel_state->UnsubscribeLocked(type, *resource_name,
|
1951
1686
|
delay_unsubscription);
|
1952
1687
|
type_map.erase(resource_it);
|
@@ -1967,23 +1702,21 @@ void XdsClient::MaybeRegisterResourceTypeLocked(
|
|
1967
1702
|
return;
|
1968
1703
|
}
|
1969
1704
|
resource_types_.emplace(resource_type->type_url(), resource_type);
|
1970
|
-
|
1971
|
-
resource_type->InitUpbSymtab(symtab_.ptr());
|
1705
|
+
resource_type->InitUpbSymtab(this, symtab_.ptr());
|
1972
1706
|
}
|
1973
1707
|
|
1974
1708
|
const XdsResourceType* XdsClient::GetResourceTypeLocked(
|
1975
1709
|
absl::string_view resource_type) {
|
1976
1710
|
auto it = resource_types_.find(resource_type);
|
1977
1711
|
if (it != resource_types_.end()) return it->second;
|
1978
|
-
auto it2 = v2_resource_types_.find(resource_type);
|
1979
|
-
if (it2 != v2_resource_types_.end()) return it2->second;
|
1980
1712
|
return nullptr;
|
1981
1713
|
}
|
1982
1714
|
|
1983
1715
|
absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
1984
1716
|
absl::string_view name, const XdsResourceType* type) {
|
1985
1717
|
// Old-style names use the empty string for authority.
|
1986
|
-
// authority is prefixed with "old:" to indicate that it's an old-style
|
1718
|
+
// authority is prefixed with "old:" to indicate that it's an old-style
|
1719
|
+
// name.
|
1987
1720
|
if (!xds_federation_enabled_ || !absl::StartsWith(name, "xdstp:")) {
|
1988
1721
|
return XdsResourceName{"old:", {std::string(name), {}}};
|
1989
1722
|
}
|
@@ -1993,7 +1726,7 @@ absl::StatusOr<XdsClient::XdsResourceName> XdsClient::ParseXdsResourceName(
|
|
1993
1726
|
// Split the resource type off of the path to get the id.
|
1994
1727
|
std::pair<absl::string_view, absl::string_view> path_parts = absl::StrSplit(
|
1995
1728
|
absl::StripPrefix(uri->path(), "/"), absl::MaxSplits('/', 1));
|
1996
|
-
if (
|
1729
|
+
if (type->type_url() != path_parts.first) {
|
1997
1730
|
return absl::InvalidArgumentError(
|
1998
1731
|
"xdstp URI path must indicate valid xDS resource type");
|
1999
1732
|
}
|
@@ -2025,40 +1758,45 @@ std::string XdsClient::ConstructFullXdsResourceName(
|
|
2025
1758
|
RefCountedPtr<XdsClusterDropStats> XdsClient::AddClusterDropStats(
|
2026
1759
|
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2027
1760
|
absl::string_view eds_service_name) {
|
2028
|
-
|
1761
|
+
const auto* server = bootstrap_->FindXdsServer(xds_server);
|
1762
|
+
if (server == nullptr) return nullptr;
|
2029
1763
|
auto key =
|
2030
1764
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2031
|
-
MutexLock lock(&mu_);
|
2032
|
-
// We jump through some hoops here to make sure that the const
|
2033
|
-
// XdsBootstrap::XdsServer& and absl::string_views
|
2034
|
-
// stored in the XdsClusterDropStats object point to the
|
2035
|
-
// XdsBootstrap::XdsServer and strings
|
2036
|
-
// in the load_report_map_ key, so that they have the same lifetime.
|
2037
|
-
auto server_it =
|
2038
|
-
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2039
|
-
if (server_it->second.channel_state == nullptr) {
|
2040
|
-
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2041
|
-
}
|
2042
|
-
auto load_report_it = server_it->second.load_report_map
|
2043
|
-
.emplace(std::move(key), LoadReportState())
|
2044
|
-
.first;
|
2045
|
-
LoadReportState& load_report_state = load_report_it->second;
|
2046
1765
|
RefCountedPtr<XdsClusterDropStats> cluster_drop_stats;
|
2047
|
-
|
2048
|
-
|
2049
|
-
|
2050
|
-
|
1766
|
+
{
|
1767
|
+
MutexLock lock(&mu_);
|
1768
|
+
// We jump through some hoops here to make sure that the const
|
1769
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
1770
|
+
// stored in the XdsClusterDropStats object point to the
|
1771
|
+
// XdsBootstrap::XdsServer and strings
|
1772
|
+
// in the load_report_map_ key, so that they have the same lifetime.
|
1773
|
+
auto server_it =
|
1774
|
+
xds_load_report_server_map_.emplace(server, LoadReportServer()).first;
|
1775
|
+
if (server_it->second.channel_state == nullptr) {
|
1776
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(
|
1777
|
+
*server, "load report map (drop stats)");
|
1778
|
+
}
|
1779
|
+
auto load_report_it = server_it->second.load_report_map
|
1780
|
+
.emplace(std::move(key), LoadReportState())
|
1781
|
+
.first;
|
1782
|
+
LoadReportState& load_report_state = load_report_it->second;
|
2051
1783
|
if (load_report_state.drop_stats != nullptr) {
|
2052
|
-
load_report_state.
|
2053
|
-
load_report_state.drop_stats->GetSnapshotAndReset();
|
1784
|
+
cluster_drop_stats = load_report_state.drop_stats->RefIfNonZero();
|
2054
1785
|
}
|
2055
|
-
cluster_drop_stats
|
2056
|
-
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
1786
|
+
if (cluster_drop_stats == nullptr) {
|
1787
|
+
if (load_report_state.drop_stats != nullptr) {
|
1788
|
+
load_report_state.deleted_drop_stats +=
|
1789
|
+
load_report_state.drop_stats->GetSnapshotAndReset();
|
1790
|
+
}
|
1791
|
+
cluster_drop_stats = MakeRefCounted<XdsClusterDropStats>(
|
1792
|
+
Ref(DEBUG_LOCATION, "DropStats"), *server,
|
1793
|
+
load_report_it->first.first /*cluster_name*/,
|
1794
|
+
load_report_it->first.second /*eds_service_name*/);
|
1795
|
+
load_report_state.drop_stats = cluster_drop_stats.get();
|
1796
|
+
}
|
1797
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2060
1798
|
}
|
2061
|
-
|
1799
|
+
work_serializer_.DrainQueue();
|
2062
1800
|
return cluster_drop_stats;
|
2063
1801
|
}
|
2064
1802
|
|
@@ -2066,8 +1804,10 @@ void XdsClient::RemoveClusterDropStats(
|
|
2066
1804
|
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2067
1805
|
absl::string_view eds_service_name,
|
2068
1806
|
XdsClusterDropStats* cluster_drop_stats) {
|
1807
|
+
const auto* server = bootstrap_->FindXdsServer(xds_server);
|
1808
|
+
if (server == nullptr) return;
|
2069
1809
|
MutexLock lock(&mu_);
|
2070
|
-
auto server_it = xds_load_report_server_map_.find(
|
1810
|
+
auto server_it = xds_load_report_server_map_.find(server);
|
2071
1811
|
if (server_it == xds_load_report_server_map_.end()) return;
|
2072
1812
|
auto load_report_it = server_it->second.load_report_map.find(
|
2073
1813
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
@@ -2086,42 +1826,48 @@ RefCountedPtr<XdsClusterLocalityStats> XdsClient::AddClusterLocalityStats(
|
|
2086
1826
|
const XdsBootstrap::XdsServer& xds_server, absl::string_view cluster_name,
|
2087
1827
|
absl::string_view eds_service_name,
|
2088
1828
|
RefCountedPtr<XdsLocalityName> locality) {
|
2089
|
-
|
1829
|
+
const auto* server = bootstrap_->FindXdsServer(xds_server);
|
1830
|
+
if (server == nullptr) return nullptr;
|
2090
1831
|
auto key =
|
2091
1832
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name));
|
2092
|
-
MutexLock lock(&mu_);
|
2093
|
-
// We jump through some hoops here to make sure that the const
|
2094
|
-
// XdsBootstrap::XdsServer& and absl::string_views
|
2095
|
-
// stored in the XdsClusterDropStats object point to the
|
2096
|
-
// XdsBootstrap::XdsServer and strings
|
2097
|
-
// in the load_report_map_ key, so that they have the same lifetime.
|
2098
|
-
auto server_it =
|
2099
|
-
xds_load_report_server_map_.emplace(xds_server, LoadReportServer()).first;
|
2100
|
-
if (server_it->second.channel_state == nullptr) {
|
2101
|
-
server_it->second.channel_state = GetOrCreateChannelStateLocked(xds_server);
|
2102
|
-
}
|
2103
|
-
auto load_report_it = server_it->second.load_report_map
|
2104
|
-
.emplace(std::move(key), LoadReportState())
|
2105
|
-
.first;
|
2106
|
-
LoadReportState& load_report_state = load_report_it->second;
|
2107
|
-
LoadReportState::LocalityState& locality_state =
|
2108
|
-
load_report_state.locality_stats[locality];
|
2109
1833
|
RefCountedPtr<XdsClusterLocalityStats> cluster_locality_stats;
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
1834
|
+
{
|
1835
|
+
MutexLock lock(&mu_);
|
1836
|
+
// We jump through some hoops here to make sure that the const
|
1837
|
+
// XdsBootstrap::XdsServer& and absl::string_views
|
1838
|
+
// stored in the XdsClusterDropStats object point to the
|
1839
|
+
// XdsBootstrap::XdsServer and strings
|
1840
|
+
// in the load_report_map_ key, so that they have the same lifetime.
|
1841
|
+
auto server_it =
|
1842
|
+
xds_load_report_server_map_.emplace(server, LoadReportServer()).first;
|
1843
|
+
if (server_it->second.channel_state == nullptr) {
|
1844
|
+
server_it->second.channel_state = GetOrCreateChannelStateLocked(
|
1845
|
+
*server, "load report map (locality stats)");
|
1846
|
+
}
|
1847
|
+
auto load_report_it = server_it->second.load_report_map
|
1848
|
+
.emplace(std::move(key), LoadReportState())
|
1849
|
+
.first;
|
1850
|
+
LoadReportState& load_report_state = load_report_it->second;
|
1851
|
+
LoadReportState::LocalityState& locality_state =
|
1852
|
+
load_report_state.locality_stats[locality];
|
2114
1853
|
if (locality_state.locality_stats != nullptr) {
|
2115
|
-
locality_state.
|
2116
|
-
|
1854
|
+
cluster_locality_stats = locality_state.locality_stats->RefIfNonZero();
|
1855
|
+
}
|
1856
|
+
if (cluster_locality_stats == nullptr) {
|
1857
|
+
if (locality_state.locality_stats != nullptr) {
|
1858
|
+
locality_state.deleted_locality_stats +=
|
1859
|
+
locality_state.locality_stats->GetSnapshotAndReset();
|
1860
|
+
}
|
1861
|
+
cluster_locality_stats = MakeRefCounted<XdsClusterLocalityStats>(
|
1862
|
+
Ref(DEBUG_LOCATION, "LocalityStats"), *server,
|
1863
|
+
load_report_it->first.first /*cluster_name*/,
|
1864
|
+
load_report_it->first.second /*eds_service_name*/,
|
1865
|
+
std::move(locality));
|
1866
|
+
locality_state.locality_stats = cluster_locality_stats.get();
|
2117
1867
|
}
|
2118
|
-
|
2119
|
-
Ref(DEBUG_LOCATION, "LocalityStats"), server_it->first,
|
2120
|
-
load_report_it->first.first /*cluster_name*/,
|
2121
|
-
load_report_it->first.second /*eds_service_name*/, std::move(locality));
|
2122
|
-
locality_state.locality_stats = cluster_locality_stats.get();
|
1868
|
+
server_it->second.channel_state->MaybeStartLrsCall();
|
2123
1869
|
}
|
2124
|
-
|
1870
|
+
work_serializer_.DrainQueue();
|
2125
1871
|
return cluster_locality_stats;
|
2126
1872
|
}
|
2127
1873
|
|
@@ -2130,8 +1876,10 @@ void XdsClient::RemoveClusterLocalityStats(
|
|
2130
1876
|
absl::string_view eds_service_name,
|
2131
1877
|
const RefCountedPtr<XdsLocalityName>& locality,
|
2132
1878
|
XdsClusterLocalityStats* cluster_locality_stats) {
|
1879
|
+
const auto* server = bootstrap_->FindXdsServer(xds_server);
|
1880
|
+
if (server == nullptr) return;
|
2133
1881
|
MutexLock lock(&mu_);
|
2134
|
-
auto server_it = xds_load_report_server_map_.find(
|
1882
|
+
auto server_it = xds_load_report_server_map_.find(server);
|
2135
1883
|
if (server_it == xds_load_report_server_map_.end()) return;
|
2136
1884
|
auto load_report_it = server_it->second.load_report_map.find(
|
2137
1885
|
std::make_pair(std::string(cluster_name), std::string(eds_service_name)));
|
@@ -2152,38 +1900,10 @@ void XdsClient::RemoveClusterLocalityStats(
|
|
2152
1900
|
void XdsClient::ResetBackoff() {
|
2153
1901
|
MutexLock lock(&mu_);
|
2154
1902
|
for (auto& p : xds_server_channel_map_) {
|
2155
|
-
|
1903
|
+
p.second->ResetBackoff();
|
2156
1904
|
}
|
2157
1905
|
}
|
2158
1906
|
|
2159
|
-
void XdsClient::NotifyOnErrorLocked(absl::Status status) {
|
2160
|
-
const auto* node = bootstrap_->node();
|
2161
|
-
if (node != nullptr) {
|
2162
|
-
status = absl::Status(
|
2163
|
-
status.code(), absl::StrCat(status.message(),
|
2164
|
-
" (node ID:", bootstrap_->node()->id, ")"));
|
2165
|
-
}
|
2166
|
-
std::set<RefCountedPtr<ResourceWatcherInterface>> watchers;
|
2167
|
-
for (const auto& a : authority_state_map_) { // authority
|
2168
|
-
for (const auto& t : a.second.resource_map) { // type
|
2169
|
-
for (const auto& r : t.second) { // resource id
|
2170
|
-
for (const auto& w : r.second.watchers) { // watchers
|
2171
|
-
watchers.insert(w.second);
|
2172
|
-
}
|
2173
|
-
}
|
2174
|
-
}
|
2175
|
-
}
|
2176
|
-
work_serializer_.Schedule(
|
2177
|
-
// TODO(yashykt): When we move to C++14, capture watchers using
|
2178
|
-
// std::move()
|
2179
|
-
[watchers, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(work_serializer_) {
|
2180
|
-
for (const auto& watcher : watchers) {
|
2181
|
-
watcher->OnError(status);
|
2182
|
-
}
|
2183
|
-
},
|
2184
|
-
DEBUG_LOCATION);
|
2185
|
-
}
|
2186
|
-
|
2187
1907
|
void XdsClient::NotifyWatchersOnErrorLocked(
|
2188
1908
|
const std::map<ResourceWatcherInterface*,
|
2189
1909
|
RefCountedPtr<ResourceWatcherInterface>>& watchers,
|
@@ -2191,15 +1911,16 @@ void XdsClient::NotifyWatchersOnErrorLocked(
|
|
2191
1911
|
const auto* node = bootstrap_->node();
|
2192
1912
|
if (node != nullptr) {
|
2193
1913
|
status = absl::Status(
|
2194
|
-
status.code(),
|
2195
|
-
|
1914
|
+
status.code(),
|
1915
|
+
absl::StrCat(status.message(), " (node ID:", node->id(), ")"));
|
2196
1916
|
}
|
2197
1917
|
work_serializer_.Schedule(
|
2198
|
-
[watchers, status
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
1918
|
+
[watchers, status = std::move(status)]()
|
1919
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&work_serializer_) {
|
1920
|
+
for (const auto& p : watchers) {
|
1921
|
+
p.first->OnError(status);
|
1922
|
+
}
|
1923
|
+
},
|
2203
1924
|
DEBUG_LOCATION);
|
2204
1925
|
}
|
2205
1926
|
|
@@ -2222,7 +1943,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2222
1943
|
gpr_log(GPR_INFO, "[xds_client %p] start building load report", this);
|
2223
1944
|
}
|
2224
1945
|
XdsApi::ClusterLoadReportMap snapshot_map;
|
2225
|
-
auto server_it = xds_load_report_server_map_.find(xds_server);
|
1946
|
+
auto server_it = xds_load_report_server_map_.find(&xds_server);
|
2226
1947
|
if (server_it == xds_load_report_server_map_.end()) return snapshot_map;
|
2227
1948
|
auto& load_report_map = server_it->second.load_report_map;
|
2228
1949
|
for (auto load_report_it = load_report_map.begin();
|
@@ -2281,7 +2002,7 @@ XdsApi::ClusterLoadReportMap XdsClient::BuildLoadReportSnapshotLocked(
|
|
2281
2002
|
}
|
2282
2003
|
}
|
2283
2004
|
// Compute load report interval.
|
2284
|
-
const Timestamp now =
|
2005
|
+
const Timestamp now = Timestamp::Now();
|
2285
2006
|
snapshot.load_report_interval = now - load_report.last_report_time;
|
2286
2007
|
load_report.last_report_time = now;
|
2287
2008
|
// Record snapshot.
|
@@ -2321,192 +2042,4 @@ std::string XdsClient::DumpClientConfigBinary() {
|
|
2321
2042
|
return api_.AssembleClientConfig(resource_type_metadata_map);
|
2322
2043
|
}
|
2323
2044
|
|
2324
|
-
//
|
2325
|
-
// accessors for global state
|
2326
|
-
//
|
2327
|
-
|
2328
|
-
void XdsClientGlobalInit() {
|
2329
|
-
g_mu = new Mutex;
|
2330
|
-
XdsHttpFilterRegistry::Init();
|
2331
|
-
XdsClusterSpecifierPluginRegistry::Init();
|
2332
|
-
}
|
2333
|
-
|
2334
|
-
// TODO(roth): Find a better way to clear the fallback config that does
|
2335
|
-
// not require using ABSL_NO_THREAD_SAFETY_ANALYSIS.
|
2336
|
-
void XdsClientGlobalShutdown() ABSL_NO_THREAD_SAFETY_ANALYSIS {
|
2337
|
-
gpr_free(g_fallback_bootstrap_config);
|
2338
|
-
g_fallback_bootstrap_config = nullptr;
|
2339
|
-
delete g_mu;
|
2340
|
-
g_mu = nullptr;
|
2341
|
-
XdsHttpFilterRegistry::Shutdown();
|
2342
|
-
XdsClusterSpecifierPluginRegistry::Shutdown();
|
2343
|
-
}
|
2344
|
-
|
2345
|
-
namespace {
|
2346
|
-
|
2347
|
-
std::string GetBootstrapContents(const char* fallback_config,
|
2348
|
-
grpc_error_handle* error) {
|
2349
|
-
// First, try GRPC_XDS_BOOTSTRAP env var.
|
2350
|
-
UniquePtr<char> path(gpr_getenv("GRPC_XDS_BOOTSTRAP"));
|
2351
|
-
if (path != nullptr) {
|
2352
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2353
|
-
gpr_log(GPR_INFO,
|
2354
|
-
"Got bootstrap file location from GRPC_XDS_BOOTSTRAP "
|
2355
|
-
"environment variable: %s",
|
2356
|
-
path.get());
|
2357
|
-
}
|
2358
|
-
grpc_slice contents;
|
2359
|
-
*error =
|
2360
|
-
grpc_load_file(path.get(), /*add_null_terminator=*/true, &contents);
|
2361
|
-
if (*error != GRPC_ERROR_NONE) return "";
|
2362
|
-
std::string contents_str(StringViewFromSlice(contents));
|
2363
|
-
grpc_slice_unref_internal(contents);
|
2364
|
-
return contents_str;
|
2365
|
-
}
|
2366
|
-
// Next, try GRPC_XDS_BOOTSTRAP_CONFIG env var.
|
2367
|
-
UniquePtr<char> env_config(gpr_getenv("GRPC_XDS_BOOTSTRAP_CONFIG"));
|
2368
|
-
if (env_config != nullptr) {
|
2369
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2370
|
-
gpr_log(GPR_INFO,
|
2371
|
-
"Got bootstrap contents from GRPC_XDS_BOOTSTRAP_CONFIG "
|
2372
|
-
"environment variable");
|
2373
|
-
}
|
2374
|
-
return env_config.get();
|
2375
|
-
}
|
2376
|
-
// Finally, try fallback config.
|
2377
|
-
if (fallback_config != nullptr) {
|
2378
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2379
|
-
gpr_log(GPR_INFO, "Got bootstrap contents from fallback config");
|
2380
|
-
}
|
2381
|
-
return fallback_config;
|
2382
|
-
}
|
2383
|
-
// No bootstrap config found.
|
2384
|
-
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
2385
|
-
"Environment variables GRPC_XDS_BOOTSTRAP or GRPC_XDS_BOOTSTRAP_CONFIG "
|
2386
|
-
"not defined");
|
2387
|
-
return "";
|
2388
|
-
}
|
2389
|
-
|
2390
|
-
} // namespace
|
2391
|
-
|
2392
|
-
RefCountedPtr<XdsClient> XdsClient::GetOrCreate(const grpc_channel_args* args,
|
2393
|
-
grpc_error_handle* error) {
|
2394
|
-
RefCountedPtr<XdsClient> xds_client;
|
2395
|
-
// If getting bootstrap from channel args, create a local XdsClient
|
2396
|
-
// instance for the channel or server instead of using the global instance.
|
2397
|
-
const char* bootstrap_config = grpc_channel_args_find_string(
|
2398
|
-
args, GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_BOOTSTRAP_CONFIG);
|
2399
|
-
if (bootstrap_config != nullptr) {
|
2400
|
-
std::unique_ptr<XdsBootstrap> bootstrap =
|
2401
|
-
XdsBootstrap::Create(bootstrap_config, error);
|
2402
|
-
if (*error == GRPC_ERROR_NONE) {
|
2403
|
-
grpc_channel_args* xds_channel_args =
|
2404
|
-
grpc_channel_args_find_pointer<grpc_channel_args>(
|
2405
|
-
args,
|
2406
|
-
GRPC_ARG_TEST_ONLY_DO_NOT_USE_IN_PROD_XDS_CLIENT_CHANNEL_ARGS);
|
2407
|
-
return MakeRefCounted<XdsClient>(std::move(bootstrap), xds_channel_args);
|
2408
|
-
}
|
2409
|
-
return nullptr;
|
2410
|
-
}
|
2411
|
-
// Otherwise, use the global instance.
|
2412
|
-
{
|
2413
|
-
MutexLock lock(g_mu);
|
2414
|
-
if (g_xds_client != nullptr) {
|
2415
|
-
auto xds_client = g_xds_client->RefIfNonZero();
|
2416
|
-
if (xds_client != nullptr) return xds_client;
|
2417
|
-
}
|
2418
|
-
// Find bootstrap contents.
|
2419
|
-
std::string bootstrap_contents =
|
2420
|
-
GetBootstrapContents(g_fallback_bootstrap_config, error);
|
2421
|
-
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2422
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_client_trace)) {
|
2423
|
-
gpr_log(GPR_INFO, "xDS bootstrap contents: %s",
|
2424
|
-
bootstrap_contents.c_str());
|
2425
|
-
}
|
2426
|
-
// Parse bootstrap.
|
2427
|
-
std::unique_ptr<XdsBootstrap> bootstrap =
|
2428
|
-
XdsBootstrap::Create(bootstrap_contents, error);
|
2429
|
-
if (*error != GRPC_ERROR_NONE) return nullptr;
|
2430
|
-
// Instantiate XdsClient.
|
2431
|
-
xds_client =
|
2432
|
-
MakeRefCounted<XdsClient>(std::move(bootstrap), g_channel_args);
|
2433
|
-
g_xds_client = xds_client.get();
|
2434
|
-
}
|
2435
|
-
return xds_client;
|
2436
|
-
}
|
2437
|
-
|
2438
|
-
namespace internal {
|
2439
|
-
|
2440
|
-
void SetXdsChannelArgsForTest(grpc_channel_args* args) {
|
2441
|
-
MutexLock lock(g_mu);
|
2442
|
-
g_channel_args = args;
|
2443
|
-
}
|
2444
|
-
|
2445
|
-
void UnsetGlobalXdsClientForTest() {
|
2446
|
-
MutexLock lock(g_mu);
|
2447
|
-
g_xds_client = nullptr;
|
2448
|
-
}
|
2449
|
-
|
2450
|
-
void SetXdsFallbackBootstrapConfig(const char* config) {
|
2451
|
-
MutexLock lock(g_mu);
|
2452
|
-
gpr_free(g_fallback_bootstrap_config);
|
2453
|
-
g_fallback_bootstrap_config = gpr_strdup(config);
|
2454
|
-
}
|
2455
|
-
|
2456
|
-
} // namespace internal
|
2457
|
-
|
2458
|
-
//
|
2459
|
-
// embedding XdsClient in channel args
|
2460
|
-
//
|
2461
|
-
|
2462
|
-
#define GRPC_ARG_XDS_CLIENT "grpc.internal.xds_client"
|
2463
|
-
|
2464
|
-
namespace {
|
2465
|
-
|
2466
|
-
void* XdsClientArgCopy(void* p) {
|
2467
|
-
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2468
|
-
xds_client->Ref(DEBUG_LOCATION, "channel arg").release();
|
2469
|
-
return p;
|
2470
|
-
}
|
2471
|
-
|
2472
|
-
void XdsClientArgDestroy(void* p) {
|
2473
|
-
XdsClient* xds_client = static_cast<XdsClient*>(p);
|
2474
|
-
xds_client->Unref(DEBUG_LOCATION, "channel arg");
|
2475
|
-
}
|
2476
|
-
|
2477
|
-
int XdsClientArgCmp(void* p, void* q) { return QsortCompare(p, q); }
|
2478
|
-
|
2479
|
-
const grpc_arg_pointer_vtable kXdsClientArgVtable = {
|
2480
|
-
XdsClientArgCopy, XdsClientArgDestroy, XdsClientArgCmp};
|
2481
|
-
|
2482
|
-
} // namespace
|
2483
|
-
|
2484
|
-
grpc_arg XdsClient::MakeChannelArg() const {
|
2485
|
-
return grpc_channel_arg_pointer_create(const_cast<char*>(GRPC_ARG_XDS_CLIENT),
|
2486
|
-
const_cast<XdsClient*>(this),
|
2487
|
-
&kXdsClientArgVtable);
|
2488
|
-
}
|
2489
|
-
|
2490
|
-
RefCountedPtr<XdsClient> XdsClient::GetFromChannelArgs(
|
2491
|
-
const grpc_channel_args& args) {
|
2492
|
-
XdsClient* xds_client =
|
2493
|
-
grpc_channel_args_find_pointer<XdsClient>(&args, GRPC_ARG_XDS_CLIENT);
|
2494
|
-
if (xds_client == nullptr) return nullptr;
|
2495
|
-
return xds_client->Ref(DEBUG_LOCATION, "GetFromChannelArgs");
|
2496
|
-
}
|
2497
|
-
|
2498
2045
|
} // namespace grpc_core
|
2499
|
-
|
2500
|
-
// The returned bytes may contain NULL(0), so we can't use c-string.
|
2501
|
-
grpc_slice grpc_dump_xds_configs() {
|
2502
|
-
grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
|
2503
|
-
grpc_core::ExecCtx exec_ctx;
|
2504
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
2505
|
-
auto xds_client = grpc_core::XdsClient::GetOrCreate(nullptr, &error);
|
2506
|
-
if (error != GRPC_ERROR_NONE) {
|
2507
|
-
// If we isn't using xDS, just return an empty string.
|
2508
|
-
GRPC_ERROR_UNREF(error);
|
2509
|
-
return grpc_empty_slice();
|
2510
|
-
}
|
2511
|
-
return grpc_slice_from_cpp_string(xds_client->DumpClientConfigBinary());
|
2512
|
-
}
|