grpc 1.62.0 → 1.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +463 -2007
- data/include/grpc/byte_buffer.h +1 -2
- data/include/grpc/census.h +1 -2
- data/include/grpc/compression.h +1 -2
- data/include/grpc/credentials.h +1222 -0
- data/include/grpc/event_engine/endpoint_config.h +2 -2
- data/include/grpc/event_engine/event_engine.h +4 -2
- data/include/grpc/event_engine/extensible.h +2 -2
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -2
- data/include/grpc/event_engine/memory_allocator.h +1 -2
- data/include/grpc/event_engine/memory_request.h +2 -2
- data/include/grpc/event_engine/slice.h +1 -2
- data/include/grpc/event_engine/slice_buffer.h +1 -2
- data/include/grpc/grpc.h +8 -8
- data/include/grpc/grpc_audit_logging.h +1 -2
- data/include/grpc/grpc_crl_provider.h +3 -2
- data/include/grpc/grpc_cronet.h +1 -2
- data/include/grpc/grpc_posix.h +1 -2
- data/include/grpc/grpc_security.h +1 -1173
- data/include/grpc/impl/call.h +1 -2
- data/include/grpc/impl/channel_arg_names.h +4 -3
- data/include/grpc/impl/grpc_types.h +1 -2
- data/include/grpc/impl/slice_type.h +2 -2
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/slice.h +1 -2
- data/include/grpc/slice_buffer.h +1 -2
- data/include/grpc/support/alloc.h +2 -2
- data/include/grpc/support/json.h +2 -2
- data/include/grpc/support/log.h +3 -3
- data/include/grpc/support/metrics.h +51 -0
- data/include/grpc/support/string_util.h +0 -1
- data/include/grpc/support/sync.h +0 -1
- data/include/grpc/support/sync_abseil.h +0 -1
- data/include/grpc/support/sync_custom.h +0 -1
- data/include/grpc/support/sync_generic.h +1 -2
- data/include/grpc/support/sync_posix.h +1 -2
- data/include/grpc/support/time.h +2 -2
- data/src/core/{lib/channel → channelz}/channel_trace.cc +56 -62
- data/src/core/{lib/channel → channelz}/channel_trace.h +21 -19
- data/src/core/{lib/channel → channelz}/channelz.cc +68 -6
- data/src/core/{lib/channel → channelz}/channelz.h +54 -12
- data/src/core/{lib/channel → channelz}/channelz_registry.cc +7 -6
- data/src/core/{lib/channel → channelz}/channelz_registry.h +7 -7
- data/src/core/client_channel/client_channel_filter.cc +106 -100
- data/src/core/client_channel/client_channel_filter.h +8 -18
- data/src/core/client_channel/client_channel_internal.h +4 -3
- data/src/core/client_channel/client_channel_service_config.h +5 -4
- data/src/core/client_channel/config_selector.h +5 -4
- data/src/core/client_channel/connector.h +1 -1
- data/src/core/client_channel/dynamic_filters.cc +3 -2
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/local_subchannel_pool.cc +5 -3
- data/src/core/client_channel/retry_filter.cc +1 -1
- data/src/core/client_channel/retry_filter.h +4 -3
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +9 -9
- data/src/core/client_channel/retry_service_config.h +3 -3
- data/src/core/client_channel/retry_throttle.h +3 -2
- data/src/core/client_channel/subchannel.cc +15 -14
- data/src/core/client_channel/subchannel.h +7 -8
- data/src/core/client_channel/subchannel_pool_interface.h +1 -1
- data/src/core/client_channel/subchannel_stream_client.cc +6 -8
- data/src/core/client_channel/subchannel_stream_client.h +2 -2
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -52
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +2 -14
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +27 -25
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +10 -11
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +8 -9
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +4 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +5 -4
- data/src/core/ext/filters/http/client/http_client_filter.h +5 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +4 -3
- data/src/core/ext/filters/http/client_authority_filter.h +5 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +15 -35
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +17 -15
- data/src/core/ext/filters/http/message_compress/compression_filter.h +10 -9
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/http/server/http_server_filter.h +5 -5
- data/src/core/ext/filters/message_size/message_size_filter.cc +24 -28
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -6
- data/src/core/ext/filters/rbac/rbac_filter.cc +5 -7
- data/src/core/ext/filters/rbac/rbac_filter.h +5 -5
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +12 -12
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +3 -2
- data/src/core/ext/gcp/metadata_query.cc +4 -3
- data/src/core/ext/gcp/metadata_query.h +2 -2
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +4 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.h +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -22
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +48 -11
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -7
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +80 -128
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +25 -7
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +15 -12
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +10 -9
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -73
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -4
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +7 -7
- data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +19 -24
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +1 -2
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +2 -2
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/varint.h +4 -3
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/write_size_policy.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +69 -53
- data/src/core/ext/transport/inproc/inproc_transport.cc +18 -16
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -2
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +16 -16
- data/src/core/ext/transport/inproc/legacy_inproc_transport.h +1 -2
- data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +243 -230
- data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +42 -48
- data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +289 -265
- data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +62 -70
- data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +238 -226
- data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +42 -50
- data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +937 -882
- data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +182 -208
- data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +77 -76
- data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +9 -9
- data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +86 -84
- data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +13 -13
- data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +49 -42
- data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +13 -13
- data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +28 -24
- data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +7 -7
- data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +28 -24
- data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +7 -7
- data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +357 -318
- data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +86 -86
- data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +23 -20
- data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +5 -7
- data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +40 -32
- data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +24 -20
- data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +517 -473
- data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +105 -125
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +1207 -1108
- data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +261 -289
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +163 -152
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +29 -43
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +1265 -1137
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +276 -346
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +32 -28
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +7 -9
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +212 -188
- data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +53 -69
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +564 -508
- data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +123 -131
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +340 -309
- data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +69 -83
- data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +25 -22
- data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +5 -11
- data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +786 -688
- data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +171 -189
- data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +367 -343
- data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +72 -80
- data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +19 -16
- data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +23 -20
- data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +5 -7
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +77 -76
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +9 -9
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +539 -471
- data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +125 -141
- data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +672 -632
- data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +137 -137
- data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +44 -43
- data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +7 -7
- data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +35 -30
- data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +713 -637
- data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +166 -208
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +65 -61
- data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +10 -12
- data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +65 -61
- data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +11 -13
- data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +91 -83
- data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +17 -17
- data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +102 -93
- data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +22 -22
- data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +25 -22
- data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +5 -11
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +162 -145
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +32 -40
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +314 -287
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +70 -74
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +330 -309
- data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +66 -66
- data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +16 -14
- data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +3 -7
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +516 -478
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +110 -120
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +495 -468
- data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +89 -101
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +88 -78
- data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +19 -37
- data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +41 -36
- data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +8 -26
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +46 -40
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +13 -13
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +307 -279
- data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +60 -64
- data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +382 -358
- data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +70 -70
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +540 -490
- data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +122 -136
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +339 -327
- data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +48 -70
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +3407 -3145
- data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +700 -752
- data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +100 -91
- data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +20 -20
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +472 -430
- data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +102 -116
- data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +28 -24
- data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +7 -7
- data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +23 -20
- data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +5 -7
- data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +42 -36
- data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +9 -13
- data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +58 -55
- data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +9 -13
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb.h +146 -136
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.c +30 -30
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +69 -65
- data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +15 -15
- data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +16 -14
- data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +3 -7
- data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +67 -58
- data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +14 -24
- data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +64 -56
- data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +14 -20
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +58 -50
- data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +16 -16
- data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +986 -832
- data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +269 -281
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +35 -35
- data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +102 -88
- data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +25 -25
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +224 -204
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +46 -62
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +66 -58
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +14 -24
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +160 -153
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +28 -30
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +51 -44
- data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +12 -12
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1349 -1230
- data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +293 -309
- data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +16 -14
- data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +3 -7
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +61 -54
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +13 -23
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +124 -108
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +29 -37
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +14 -12
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +66 -58
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +20 -20
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +16 -14
- data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +3 -7
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +518 -493
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +82 -108
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +92 -80
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +23 -29
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +497 -457
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +110 -124
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +58 -55
- data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +9 -11
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +206 -185
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -64
- data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +7 -6
- data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +1 -1
- data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +766 -710
- data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +140 -150
- data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +102 -98
- data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +17 -17
- data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +310 -288
- data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +67 -67
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +30 -26
- data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +77 -71
- data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +13 -13
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +26 -22
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +70 -60
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +15 -15
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +77 -71
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +14 -14
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +44 -43
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +7 -7
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +28 -24
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +19 -16
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +65 -56
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +15 -19
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +14 -12
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +2 -2
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +97 -89
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +18 -18
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +63 -59
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +10 -10
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +134 -121
- data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +29 -29
- data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +135 -121
- data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +26 -26
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +141 -122
- data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +37 -37
- data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +49 -42
- data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +11 -11
- data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +14 -12
- data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +35 -30
- data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +63 -54
- data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +15 -15
- data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +58 -50
- data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +14 -14
- data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +28 -24
- data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +7 -7
- data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +32 -28
- data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +7 -9
- data/src/core/ext/upb-gen/google/api/annotations.upb.h +10 -8
- data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +1 -1
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +581 -524
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +118 -146
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +616 -544
- data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +136 -152
- data/src/core/ext/upb-gen/google/api/http.upb.h +176 -162
- data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +34 -34
- data/src/core/ext/upb-gen/google/api/httpbody.upb.h +49 -47
- data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/google/protobuf/any.upb.h +21 -18
- data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +5 -5
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +2456 -2358
- data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +367 -486
- data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +21 -18
- data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +5 -5
- data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +7 -6
- data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +1 -1
- data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +134 -116
- data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +27 -29
- data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +21 -18
- data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +5 -5
- data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +126 -108
- data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +27 -27
- data/src/core/ext/upb-gen/google/rpc/status.upb.h +49 -47
- data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb.h +107 -92
- data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.c +27 -27
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +77 -61
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +21 -21
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +577 -518
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +121 -127
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +46 -40
- data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +10 -16
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +28 -24
- data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +265 -238
- data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +57 -63
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +96 -82
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +19 -19
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +496 -466
- data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +81 -85
- data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +99 -82
- data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +16 -16
- data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +31 -26
- data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +10 -8
- data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +1 -1
- data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +31 -26
- data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +24 -20
- data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/validate/validate.upb.h +2620 -2458
- data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +363 -507
- data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +99 -82
- data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +16 -16
- data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +31 -26
- data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +10 -8
- data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +1 -1
- data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +93 -78
- data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +17 -17
- data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +24 -20
- data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +4 -4
- data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +14 -12
- data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +3 -3
- data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +23 -20
- data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +5 -7
- data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +58 -50
- data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +15 -15
- data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +33 -23
- data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +8 -8
- data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +23 -20
- data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +5 -7
- data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +32 -28
- data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +9 -9
- data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +103 -93
- data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +21 -21
- data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +37 -32
- data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +9 -13
- data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +127 -93
- data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +34 -34
- data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +44 -43
- data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +23 -20
- data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +6 -6
- data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +79 -78
- data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +9 -11
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +7 -6
- data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +1 -1
- data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +86 -84
- data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +13 -13
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +324 -285
- data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +74 -82
- data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +237 -234
- data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +30 -36
- data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +33 -28
- data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +7 -7
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +97 -89
- data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +18 -18
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +53 -46
- data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +12 -18
- data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +63 -54
- data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +15 -15
- data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +23 -20
- data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +5 -7
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +385 -384
- data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.h +2 -5
- data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.h +2 -5
- data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +80 -0
- data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.h +37 -0
- data/src/core/{lib/transport → handshaker}/handshaker.cc +8 -6
- data/src/core/{lib/transport → handshaker}/handshaker.h +4 -5
- data/src/core/{lib/transport → handshaker}/handshaker_factory.h +20 -5
- data/src/core/{lib/transport → handshaker}/handshaker_registry.cc +3 -3
- data/src/core/{lib/transport → handshaker}/handshaker_registry.h +6 -6
- data/src/core/{lib/transport → handshaker/http_connect}/http_connect_handshaker.cc +5 -6
- data/src/core/{lib/transport → handshaker/http_connect}/http_connect_handshaker.h +3 -3
- data/src/core/{client_channel → handshaker/http_connect}/http_proxy_mapper.cc +9 -10
- data/src/core/{client_channel → handshaker/http_connect}/http_proxy_mapper.h +7 -7
- data/src/core/{lib/handshaker → handshaker}/proxy_mapper.h +5 -5
- data/src/core/{lib/handshaker → handshaker}/proxy_mapper_registry.cc +3 -3
- data/src/core/{lib/handshaker → handshaker}/proxy_mapper_registry.h +6 -6
- data/src/core/{lib/security/transport → handshaker/security}/secure_endpoint.cc +5 -5
- data/src/core/{lib/security/transport → handshaker/security}/secure_endpoint.h +4 -5
- data/src/core/{lib/security/transport → handshaker/security}/security_handshaker.cc +29 -20
- data/src/core/{lib/security/transport → handshaker/security}/security_handshaker.h +8 -7
- data/src/core/{lib/security/transport → handshaker/security}/tsi_error.cc +2 -2
- data/src/core/{lib/security/transport → handshaker/security}/tsi_error.h +3 -3
- data/src/core/{lib/transport → handshaker/tcp_connect}/tcp_connect_handshaker.cc +8 -8
- data/src/core/{lib/transport → handshaker/tcp_connect}/tcp_connect_handshaker.h +3 -3
- data/src/core/lib/address_utils/parse_address.cc +13 -4
- data/src/core/lib/address_utils/parse_address.h +2 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +23 -10
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
- data/src/core/lib/avl/avl.h +2 -2
- data/src/core/lib/backoff/backoff.cc +2 -2
- data/src/core/lib/backoff/backoff.h +2 -2
- data/src/core/lib/backoff/random_early_detection.cc +2 -2
- data/src/core/lib/backoff/random_early_detection.h +2 -2
- data/src/core/lib/channel/call_finalization.h +3 -3
- data/src/core/lib/channel/call_tracer.cc +10 -11
- data/src/core/lib/channel/call_tracer.h +15 -14
- data/src/core/lib/channel/channel_args.cc +4 -4
- data/src/core/lib/channel/channel_args.h +1 -2
- data/src/core/lib/channel/channel_args_preconditioning.cc +2 -2
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
- data/src/core/lib/channel/channel_stack.cc +17 -7
- data/src/core/lib/channel/channel_stack.h +6 -2
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +2 -2
- data/src/core/lib/channel/channel_stack_builder_impl.cc +135 -2
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -2
- data/src/core/lib/channel/channel_stack_trace.cc +2 -2
- data/src/core/lib/channel/connected_channel.cc +25 -43
- data/src/core/lib/channel/context.h +29 -1
- data/src/core/lib/channel/metrics.cc +334 -0
- data/src/core/lib/channel/metrics.h +365 -0
- data/src/core/lib/channel/promise_based_filter.cc +70 -75
- data/src/core/lib/channel/promise_based_filter.h +251 -154
- data/src/core/lib/channel/status_util.cc +2 -2
- data/src/core/lib/channel/status_util.h +1 -2
- data/src/core/lib/channel/tcp_tracer.h +6 -2
- data/src/core/lib/compression/compression.cc +1 -2
- data/src/core/lib/compression/compression_internal.cc +36 -3
- data/src/core/lib/compression/compression_internal.h +4 -2
- data/src/core/lib/compression/message_compress.cc +9 -8
- data/src/core/lib/compression/message_compress.h +1 -2
- data/src/core/lib/config/config_vars.cc +8 -6
- data/src/core/lib/config/config_vars.h +6 -2
- data/src/core/lib/config/config_vars_non_generated.cc +2 -2
- data/src/core/lib/config/core_configuration.cc +9 -8
- data/src/core/lib/config/core_configuration.h +8 -8
- data/src/core/lib/config/load_config.cc +4 -4
- data/src/core/lib/config/load_config.h +2 -2
- data/src/core/lib/debug/event_log.cc +3 -3
- data/src/core/lib/debug/event_log.h +2 -2
- data/src/core/lib/debug/histogram_view.cc +2 -2
- data/src/core/lib/debug/histogram_view.h +2 -2
- data/src/core/lib/debug/stats.cc +2 -2
- data/src/core/lib/debug/stats.h +2 -2
- data/src/core/lib/debug/stats_data.cc +271 -28
- data/src/core/lib/debug/stats_data.h +178 -2
- data/src/core/lib/debug/trace.cc +1 -2
- data/src/core/lib/debug/trace.h +2 -2
- data/src/core/lib/event_engine/ares_resolver.cc +18 -19
- data/src/core/lib/event_engine/ares_resolver.h +2 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +3 -3
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +1 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -2
- data/src/core/lib/event_engine/common_closures.h +1 -2
- data/src/core/lib/event_engine/default_event_engine.cc +1 -2
- data/src/core/lib/event_engine/default_event_engine.h +1 -8
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -2
- data/src/core/lib/event_engine/default_event_engine_factory.h +1 -2
- data/src/core/lib/event_engine/event_engine.cc +1 -2
- data/src/core/lib/event_engine/event_engine_context.h +30 -0
- data/src/core/lib/event_engine/extensions/can_track_errors.h +2 -2
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +65 -0
- data/src/core/lib/event_engine/extensions/supports_fd.h +1 -2
- data/src/core/lib/event_engine/forkable.cc +7 -6
- data/src/core/lib/event_engine/forkable.h +1 -2
- data/src/core/lib/event_engine/grpc_polled_fd.h +1 -2
- data/src/core/lib/event_engine/handle_containers.h +1 -2
- data/src/core/lib/event_engine/memory_allocator_factory.h +1 -2
- data/src/core/lib/event_engine/poller.h +1 -2
- data/src/core/lib/event_engine/posix.h +9 -2
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +1 -2
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +11 -11
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +1 -2
- data/src/core/lib/event_engine/posix_engine/event_poller.h +1 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +2 -2
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +24 -25
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +10 -10
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +1 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +1 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +7 -6
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +10 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -3
- data/src/core/lib/event_engine/posix_engine/timer.cc +1 -2
- data/src/core/lib/event_engine/posix_engine/timer.h +1 -2
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +2 -2
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -2
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +1 -2
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +2 -2
- data/src/core/lib/event_engine/query_extensions.h +3 -2
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -2
- data/src/core/lib/event_engine/resolved_address.cc +5 -4
- data/src/core/lib/event_engine/resolved_address_internal.h +1 -2
- data/src/core/lib/event_engine/shim.cc +2 -2
- data/src/core/lib/event_engine/slice.cc +4 -3
- data/src/core/lib/event_engine/slice_buffer.cc +1 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +20 -9
- data/src/core/lib/event_engine/tcp_socket_utils.h +3 -4
- data/src/core/lib/event_engine/thread_local.cc +2 -2
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -2
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -2
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +1 -2
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +2 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +8 -8
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +1 -2
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +2 -2
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +1 -2
- data/src/core/lib/event_engine/time_util.cc +1 -2
- data/src/core/lib/event_engine/time_util.h +1 -2
- data/src/core/lib/event_engine/trace.cc +2 -2
- data/src/core/lib/event_engine/trace.h +1 -2
- data/src/core/lib/event_engine/utils.cc +1 -2
- data/src/core/lib/event_engine/utils.h +1 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -30
- data/src/core/lib/event_engine/windows/iocp.cc +10 -8
- data/src/core/lib/event_engine/windows/win_socket.cc +11 -5
- data/src/core/lib/event_engine/windows/win_socket.h +3 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +13 -12
- data/src/core/lib/event_engine/windows/windows_engine.cc +48 -14
- data/src/core/lib/event_engine/windows/windows_listener.cc +61 -12
- data/src/core/lib/event_engine/windows/windows_listener.h +14 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +2 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +1 -2
- data/src/core/lib/event_engine/work_queue/work_queue.h +1 -2
- data/src/core/lib/experiments/config.cc +66 -48
- data/src/core/lib/experiments/config.h +2 -2
- data/src/core/lib/experiments/experiments.cc +42 -246
- data/src/core/lib/experiments/experiments.h +26 -124
- data/src/core/lib/gpr/alloc.cc +3 -1
- data/src/core/lib/gpr/android/log.cc +1 -1
- data/src/core/lib/gpr/linux/log.cc +1 -1
- data/src/core/lib/gpr/log.cc +26 -0
- data/src/core/lib/gpr/posix/log.cc +1 -1
- data/src/core/lib/gpr/posix/sync.cc +25 -23
- data/src/core/lib/gpr/posix/time.cc +9 -66
- data/src/core/lib/gpr/posix/tmpfile.cc +3 -1
- data/src/core/lib/gpr/sync.cc +5 -3
- data/src/core/lib/gpr/time.cc +10 -8
- data/src/core/lib/gpr/windows/log.cc +1 -1
- data/src/core/lib/gpr/windows/sync.cc +3 -1
- data/src/core/lib/gpr/windows/time.cc +4 -1
- data/src/core/lib/gprpp/atomic_utils.h +2 -2
- data/src/core/lib/gprpp/bitset.h +2 -2
- data/src/core/lib/gprpp/chunked_vector.h +6 -5
- data/src/core/lib/gprpp/construct_destruct.h +2 -2
- data/src/core/lib/gprpp/crash.cc +1 -2
- data/src/core/lib/gprpp/crash.h +2 -2
- data/src/core/lib/gprpp/debug_location.h +2 -2
- data/src/core/lib/gprpp/directory_reader.h +2 -2
- data/src/core/lib/gprpp/down_cast.h +7 -7
- data/src/core/lib/gprpp/dual_ref_counted.h +26 -17
- data/src/core/lib/gprpp/env.h +2 -2
- data/src/core/lib/gprpp/examine_stack.cc +2 -2
- data/src/core/lib/gprpp/examine_stack.h +2 -2
- data/src/core/lib/gprpp/fork.cc +1 -2
- data/src/core/lib/gprpp/fork.h +2 -2
- data/src/core/lib/gprpp/host_port.cc +6 -4
- data/src/core/lib/gprpp/host_port.h +2 -2
- data/src/core/lib/gprpp/linux/env.cc +2 -2
- data/src/core/lib/gprpp/load_file.cc +4 -3
- data/src/core/lib/gprpp/load_file.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -2
- data/src/core/lib/gprpp/match.h +2 -2
- data/src/core/lib/gprpp/memory.h +1 -2
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/mpscq.h +5 -4
- data/src/core/lib/gprpp/no_destruct.h +2 -2
- data/src/core/lib/gprpp/notification.h +2 -2
- data/src/core/lib/gprpp/orphanable.h +7 -4
- data/src/core/lib/gprpp/overload.h +2 -2
- data/src/core/lib/gprpp/per_cpu.cc +1 -2
- data/src/core/lib/gprpp/per_cpu.h +1 -2
- data/src/core/lib/gprpp/posix/directory_reader.cc +2 -2
- data/src/core/lib/gprpp/posix/stat.cc +6 -4
- data/src/core/lib/gprpp/posix/thd.cc +10 -10
- data/src/core/lib/gprpp/ref_counted.h +10 -6
- data/src/core/lib/gprpp/ref_counted_ptr.h +4 -3
- data/src/core/lib/gprpp/ref_counted_string.cc +1 -2
- data/src/core/lib/gprpp/ref_counted_string.h +2 -2
- data/src/core/lib/gprpp/single_set_ptr.h +4 -3
- data/src/core/lib/gprpp/sorted_pack.h +2 -2
- data/src/core/lib/gprpp/stat.h +2 -2
- data/src/core/lib/gprpp/status_helper.cc +3 -3
- data/src/core/lib/gprpp/status_helper.h +2 -2
- data/src/core/lib/gprpp/strerror.cc +2 -2
- data/src/core/lib/gprpp/strerror.h +2 -2
- data/src/core/lib/gprpp/sync.h +5 -5
- data/src/core/lib/gprpp/table.h +2 -2
- data/src/core/lib/gprpp/tchar.cc +2 -2
- data/src/core/lib/gprpp/thd.h +7 -7
- data/src/core/lib/gprpp/time.cc +6 -6
- data/src/core/lib/gprpp/time.h +7 -2
- data/src/core/lib/gprpp/time_averaged_stats.cc +2 -2
- data/src/core/lib/gprpp/time_util.cc +5 -4
- data/src/core/lib/gprpp/time_util.h +1 -2
- data/src/core/lib/gprpp/unique_type_name.h +2 -2
- data/src/core/lib/gprpp/uuid_v4.cc +37 -0
- data/src/core/lib/gprpp/uuid_v4.h +36 -0
- data/src/core/lib/gprpp/validation_errors.cc +2 -2
- data/src/core/lib/gprpp/validation_errors.h +2 -2
- data/src/core/lib/gprpp/windows/stat.cc +4 -2
- data/src/core/lib/gprpp/windows/thd.cc +4 -2
- data/src/core/lib/gprpp/work_serializer.cc +5 -5
- data/src/core/lib/gprpp/work_serializer.h +1 -2
- data/src/core/lib/http/format_request.cc +1 -2
- data/src/core/lib/http/format_request.h +1 -2
- data/src/core/lib/http/httpcli.cc +6 -6
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +4 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +1 -2
- data/src/core/lib/http/parser.cc +5 -5
- data/src/core/lib/http/parser.h +1 -2
- data/src/core/lib/iomgr/buffer_list.cc +1 -2
- data/src/core/lib/iomgr/buffer_list.h +1 -2
- data/src/core/lib/iomgr/call_combiner.cc +5 -4
- data/src/core/lib/iomgr/call_combiner.h +1 -2
- data/src/core/lib/iomgr/closure.cc +2 -2
- data/src/core/lib/iomgr/closure.h +4 -3
- data/src/core/lib/iomgr/combiner.cc +7 -6
- data/src/core/lib/iomgr/combiner.h +1 -2
- data/src/core/lib/iomgr/endpoint.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -5
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -4
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +11 -10
- data/src/core/lib/iomgr/error.cc +3 -3
- data/src/core/lib/iomgr/error.h +3 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +14 -13
- data/src/core/lib/iomgr/ev_poll_posix.cc +9 -9
- data/src/core/lib/iomgr/ev_posix.cc +1 -2
- data/src/core/lib/iomgr/ev_posix.h +2 -2
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -2
- data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -2
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +1 -2
- data/src/core/lib/iomgr/exec_ctx.cc +5 -5
- data/src/core/lib/iomgr/exec_ctx.h +6 -4
- data/src/core/lib/iomgr/executor.cc +7 -8
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +2 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +1 -2
- data/src/core/lib/iomgr/iocp_windows.cc +9 -6
- data/src/core/lib/iomgr/iocp_windows.h +0 -1
- data/src/core/lib/iomgr/iomgr.cc +1 -2
- data/src/core/lib/iomgr/iomgr.h +2 -2
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +4 -2
- data/src/core/lib/iomgr/lockfree_event.cc +4 -3
- data/src/core/lib/iomgr/lockfree_event.h +1 -2
- data/src/core/lib/iomgr/polling_entity.cc +5 -5
- data/src/core/lib/iomgr/pollset.cc +2 -2
- data/src/core/lib/iomgr/pollset.h +0 -1
- data/src/core/lib/iomgr/pollset_set.cc +2 -2
- data/src/core/lib/iomgr/pollset_set_windows.cc +2 -2
- data/src/core/lib/iomgr/pollset_windows.h +0 -1
- data/src/core/lib/iomgr/port.h +3 -0
- data/src/core/lib/iomgr/python_util.h +1 -2
- data/src/core/lib/iomgr/resolve_address.cc +1 -2
- data/src/core/lib/iomgr/resolve_address.h +1 -2
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.h +2 -2
- data/src/core/lib/iomgr/resolve_address_windows.h +2 -2
- data/src/core/lib/iomgr/resolved_address.h +2 -2
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +3 -1
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -2
- data/src/core/lib/iomgr/socket_mutator.cc +1 -2
- data/src/core/lib/iomgr/socket_mutator.h +1 -2
- data/src/core/lib/iomgr/socket_utils.h +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -2
- data/src/core/lib/iomgr/socket_windows.cc +4 -3
- data/src/core/lib/iomgr/tcp_client.cc +2 -2
- data/src/core/lib/iomgr/tcp_client.h +1 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +5 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +31 -10
- data/src/core/lib/iomgr/tcp_posix.cc +89 -41
- data/src/core/lib/iomgr/tcp_server.cc +2 -2
- data/src/core/lib/iomgr/tcp_server.h +1 -2
- data/src/core/lib/iomgr/tcp_server_posix.cc +123 -109
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +6 -6
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +75 -23
- data/src/core/lib/iomgr/tcp_windows.cc +8 -6
- data/src/core/lib/iomgr/timer.cc +2 -2
- data/src/core/lib/iomgr/timer.h +1 -2
- data/src/core/lib/iomgr/timer_generic.cc +3 -3
- data/src/core/lib/iomgr/timer_generic.h +0 -1
- data/src/core/lib/iomgr/timer_heap.cc +1 -2
- data/src/core/lib/iomgr/timer_manager.cc +4 -3
- data/src/core/lib/iomgr/timer_manager.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -1
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +3 -1
- data/src/core/lib/iomgr/vsock.cc +2 -2
- data/src/core/lib/iomgr/vsock.h +1 -2
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_args.h +2 -2
- data/src/core/lib/json/json_channel_args.h +2 -2
- data/src/core/lib/json/json_object_loader.cc +1 -2
- data/src/core/lib/json/json_object_loader.h +2 -2
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/json/json_reader.h +2 -2
- data/src/core/lib/json/json_util.cc +2 -2
- data/src/core/lib/json/json_util.h +2 -2
- data/src/core/lib/json/json_writer.cc +2 -2
- data/src/core/lib/json/json_writer.h +2 -2
- data/src/core/lib/matchers/matchers.cc +2 -2
- data/src/core/lib/matchers/matchers.h +2 -2
- data/src/core/lib/promise/activity.cc +4 -3
- data/src/core/lib/promise/activity.h +8 -7
- data/src/core/lib/promise/all_ok.h +2 -2
- data/src/core/lib/promise/arena_promise.h +2 -2
- data/src/core/lib/promise/context.h +5 -5
- data/src/core/lib/promise/detail/join_state.h +11 -10
- data/src/core/lib/promise/detail/promise_factory.h +2 -2
- data/src/core/lib/promise/detail/promise_like.h +2 -2
- data/src/core/lib/promise/detail/seq_state.h +194 -194
- data/src/core/lib/promise/detail/status.h +4 -3
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +2 -2
- data/src/core/lib/promise/for_each.h +88 -27
- data/src/core/lib/promise/if.h +2 -2
- data/src/core/lib/promise/interceptor_list.h +3 -3
- data/src/core/lib/promise/latch.h +8 -8
- data/src/core/lib/promise/loop.h +2 -2
- data/src/core/lib/promise/map.h +2 -2
- data/src/core/lib/promise/party.cc +45 -15
- data/src/core/lib/promise/party.h +21 -23
- data/src/core/lib/promise/pipe.h +15 -15
- data/src/core/lib/promise/poll.h +6 -5
- data/src/core/lib/promise/prioritized_race.h +2 -2
- data/src/core/lib/promise/promise.h +2 -2
- data/src/core/lib/promise/race.h +2 -2
- data/src/core/lib/promise/seq.h +2 -2
- data/src/core/lib/promise/sleep.cc +2 -3
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/status_flag.h +16 -8
- data/src/core/lib/promise/trace.cc +2 -2
- data/src/core/lib/promise/try_join.h +4 -3
- data/src/core/lib/promise/try_seq.h +4 -3
- data/src/core/lib/resource_quota/api.cc +1 -2
- data/src/core/lib/resource_quota/api.h +1 -2
- data/src/core/lib/resource_quota/arena.cc +1 -2
- data/src/core/lib/resource_quota/arena.h +4 -2
- data/src/core/lib/resource_quota/connection_quota.cc +70 -0
- data/src/core/lib/resource_quota/connection_quota.h +61 -0
- data/src/core/lib/resource_quota/memory_quota.cc +11 -11
- data/src/core/lib/resource_quota/memory_quota.h +4 -4
- data/src/core/lib/resource_quota/periodic_update.cc +2 -2
- data/src/core/lib/resource_quota/periodic_update.h +2 -2
- data/src/core/lib/resource_quota/resource_quota.cc +2 -2
- data/src/core/lib/resource_quota/resource_quota.h +1 -2
- data/src/core/lib/resource_quota/thread_quota.cc +4 -3
- data/src/core/lib/resource_quota/thread_quota.h +2 -2
- data/src/core/lib/resource_quota/trace.cc +2 -2
- data/src/core/lib/security/authorization/audit_logging.cc +6 -6
- data/src/core/lib/security/authorization/audit_logging.h +1 -2
- data/src/core/lib/security/authorization/authorization_engine.h +2 -2
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -2
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -2
- data/src/core/lib/security/authorization/evaluate_args.cc +7 -7
- data/src/core/lib/security/authorization/evaluate_args.h +4 -5
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +4 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +8 -12
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +7 -9
- data/src/core/lib/security/authorization/matchers.cc +1 -2
- data/src/core/lib/security/authorization/matchers.h +2 -2
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -2
- data/src/core/lib/security/authorization/rbac_policy.h +1 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +4 -3
- data/src/core/lib/security/authorization/stdout_logger.h +1 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +4 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +2 -2
- data/src/core/lib/security/context/security_context.cc +5 -3
- data/src/core/lib/security/context/security_context.h +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +1 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +1 -2
- data/src/core/lib/security/credentials/call_creds_util.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +9 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -3
- data/src/core/lib/security/credentials/credentials.h +5 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -2
- data/src/core/lib/security/credentials/external/aws_request_signer.h +2 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -6
- data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -2
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +8 -7
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -5
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +13 -8
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +26 -31
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +1 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +9 -8
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +2 -2
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +3 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -13
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +5 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +26 -25
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_match.cc +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +7 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +4 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +19 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +1 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +19 -12
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +8 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/tls_utils.cc +1 -2
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +7 -7
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -14
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +6 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/load_system_roots.h +4 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +3 -2
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +2 -2
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +1 -2
- data/src/core/lib/security/security_connector/load_system_roots_windows.cc +87 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +11 -11
- data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +7 -6
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +6 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +10 -9
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +13 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +3 -3
- data/src/core/lib/security/transport/auth_filters.h +11 -36
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -5
- data/src/core/lib/security/transport/server_auth_filter.cc +7 -5
- data/src/core/lib/security/util/json_util.cc +1 -2
- data/src/core/lib/slice/percent_encoding.cc +4 -3
- data/src/core/lib/slice/slice.cc +42 -15
- data/src/core/lib/slice/slice.h +4 -4
- data/src/core/lib/slice/slice_buffer.cc +64 -25
- data/src/core/lib/slice/slice_buffer.h +15 -3
- data/src/core/lib/slice/slice_internal.h +10 -3
- data/src/core/lib/slice/slice_refcount.cc +2 -2
- data/src/core/lib/slice/slice_refcount.h +1 -2
- data/src/core/lib/slice/slice_string_helpers.cc +2 -2
- data/src/core/lib/slice/slice_string_helpers.h +1 -2
- data/src/core/lib/surface/api_trace.cc +2 -2
- data/src/core/lib/surface/api_trace.h +1 -2
- data/src/core/lib/surface/byte_buffer.cc +1 -2
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -3
- data/src/core/lib/surface/call.cc +212 -339
- data/src/core/lib/surface/call.h +181 -11
- data/src/core/lib/surface/call_details.cc +1 -2
- data/src/core/lib/surface/call_log_batch.cc +1 -2
- data/src/core/lib/surface/call_test_only.h +1 -2
- data/src/core/lib/surface/call_trace.h +0 -6
- data/src/core/lib/surface/channel.cc +111 -321
- data/src/core/lib/surface/channel.h +90 -110
- data/src/core/lib/surface/channel_create.cc +110 -0
- data/src/core/lib/surface/{builtins.cc → channel_create.h} +21 -16
- data/src/core/lib/surface/channel_init.cc +13 -12
- data/src/core/lib/surface/channel_init.h +31 -10
- data/src/core/lib/surface/channel_stack_type.cc +2 -2
- data/src/core/lib/surface/completion_queue.cc +17 -18
- data/src/core/lib/surface/completion_queue.h +1 -2
- data/src/core/lib/surface/completion_queue_factory.cc +9 -8
- data/src/core/lib/surface/completion_queue_factory.h +1 -2
- data/src/core/lib/surface/event_string.cc +2 -2
- data/src/core/lib/surface/event_string.h +1 -2
- data/src/core/lib/surface/init.cc +10 -16
- data/src/core/lib/surface/init_internally.cc +2 -2
- data/src/core/lib/surface/lame_client.cc +12 -40
- data/src/core/lib/surface/lame_client.h +13 -13
- data/src/core/lib/surface/legacy_channel.cc +414 -0
- data/src/core/lib/surface/legacy_channel.h +123 -0
- data/src/core/lib/surface/metadata_array.cc +1 -2
- data/src/core/lib/surface/validate_metadata.cc +1 -2
- data/src/core/lib/surface/validate_metadata.h +3 -3
- data/src/core/lib/surface/version.cc +3 -4
- data/src/core/lib/surface/wait_for_cq_end_op.cc +2 -2
- data/src/core/lib/transport/batch_builder.cc +14 -21
- data/src/core/lib/transport/batch_builder.h +6 -10
- data/src/core/lib/transport/bdp_estimator.cc +5 -3
- data/src/core/lib/transport/bdp_estimator.h +4 -4
- data/src/core/lib/transport/{call_size_estimator.cc → call_arena_allocator.cc} +3 -3
- data/src/core/lib/transport/{call_size_estimator.h → call_arena_allocator.h} +26 -5
- data/src/core/lib/transport/call_filters.cc +143 -28
- data/src/core/lib/transport/call_filters.h +412 -63
- data/src/core/lib/transport/call_final_info.cc +2 -2
- data/src/core/lib/transport/call_final_info.h +1 -2
- data/src/core/lib/transport/call_spine.cc +18 -19
- data/src/core/lib/transport/call_spine.h +393 -190
- data/src/core/lib/transport/connectivity_state.cc +1 -2
- data/src/core/lib/transport/connectivity_state.h +1 -2
- data/src/core/lib/transport/error_utils.cc +1 -2
- data/src/core/lib/transport/error_utils.h +1 -2
- data/src/core/lib/transport/message.cc +1 -2
- data/src/core/lib/transport/metadata.cc +3 -3
- data/src/core/lib/transport/metadata_batch.cc +68 -7
- data/src/core/lib/transport/metadata_batch.h +45 -20
- data/src/core/lib/transport/metadata_compression_traits.h +2 -2
- data/src/core/lib/transport/metadata_info.cc +55 -0
- data/src/core/lib/transport/metadata_info.h +85 -0
- data/src/core/lib/transport/parsed_metadata.cc +2 -2
- data/src/core/lib/transport/parsed_metadata.h +1 -2
- data/src/core/lib/transport/simple_slice_based_metadata.h +2 -2
- data/src/core/lib/transport/status_conversion.cc +2 -2
- data/src/core/lib/transport/status_conversion.h +1 -2
- data/src/core/lib/transport/timeout_encoding.cc +5 -5
- data/src/core/lib/transport/timeout_encoding.h +2 -2
- data/src/core/lib/transport/transport.cc +1 -2
- data/src/core/lib/transport/transport.h +41 -38
- data/src/core/lib/transport/transport_op_string.cc +1 -10
- data/src/core/lib/uri/uri_parser.cc +3 -3
- data/src/core/lib/uri/uri_parser.h +2 -2
- data/src/core/load_balancing/address_filtering.cc +3 -3
- data/src/core/load_balancing/address_filtering.h +3 -3
- data/src/core/load_balancing/backend_metric_data.h +2 -2
- data/src/core/{client_channel/backend_metric.cc → load_balancing/backend_metric_parser.cc} +3 -3
- data/src/core/{client_channel/backend_metric.h → load_balancing/backend_metric_parser.h} +5 -5
- data/src/core/load_balancing/child_policy_handler.cc +7 -7
- data/src/core/load_balancing/child_policy_handler.h +2 -2
- data/src/core/load_balancing/delegating_helper.h +10 -3
- data/src/core/load_balancing/endpoint_list.cc +7 -9
- data/src/core/load_balancing/endpoint_list.h +15 -9
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +28 -30
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +21 -8
- data/src/core/load_balancing/grpclb/grpclb.cc +65 -70
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +2 -2
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.h +1 -2
- data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -3
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +10 -11
- data/src/core/load_balancing/health_check_client.h +2 -2
- data/src/core/load_balancing/health_check_client_internal.h +5 -7
- data/src/core/load_balancing/lb_policy.cc +2 -2
- data/src/core/load_balancing/lb_policy.h +14 -6
- data/src/core/load_balancing/lb_policy_factory.h +2 -2
- data/src/core/load_balancing/lb_policy_registry.cc +3 -3
- data/src/core/load_balancing/lb_policy_registry.h +4 -4
- data/src/core/load_balancing/oob_backend_metric.cc +10 -11
- data/src/core/load_balancing/oob_backend_metric.h +3 -3
- data/src/core/load_balancing/oob_backend_metric_internal.h +7 -8
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +32 -32
- data/src/core/load_balancing/outlier_detection/outlier_detection.h +2 -2
- data/src/core/load_balancing/pick_first/pick_first.cc +1152 -245
- data/src/core/load_balancing/priority/priority.cc +23 -17
- data/src/core/load_balancing/ring_hash/ring_hash.cc +42 -25
- data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
- data/src/core/load_balancing/rls/rls.cc +225 -95
- data/src/core/load_balancing/rls/rls.h +26 -0
- data/src/core/load_balancing/round_robin/round_robin.cc +33 -477
- data/src/core/load_balancing/subchannel_interface.h +4 -4
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +4 -4
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.h +3 -3
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +203 -988
- data/src/core/load_balancing/weighted_target/weighted_target.cc +20 -17
- data/src/core/load_balancing/weighted_target/weighted_target.h +28 -0
- data/src/core/load_balancing/xds/cds.cc +19 -20
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +113 -67
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +8 -9
- data/src/core/load_balancing/xds/xds_override_host.cc +21 -21
- data/src/core/load_balancing/xds/xds_override_host.h +3 -3
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +11 -11
- data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -9
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +1 -3
- data/src/core/resolver/binder/binder_resolver.cc +12 -5
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +13 -13
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -3
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +6 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +38 -37
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +14 -14
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/resolver/dns/dns_resolver_plugin.cc +4 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +7 -7
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +6 -4
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
- data/src/core/resolver/dns/event_engine/service_config_helper.h +2 -2
- data/src/core/resolver/dns/native/dns_resolver.cc +6 -7
- data/src/core/resolver/endpoint_addresses.cc +4 -4
- data/src/core/resolver/endpoint_addresses.h +6 -6
- data/src/core/resolver/fake/fake_resolver.cc +6 -6
- data/src/core/resolver/fake/fake_resolver.h +2 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +18 -13
- data/src/core/resolver/polling_resolver.cc +5 -5
- data/src/core/resolver/polling_resolver.h +1 -2
- data/src/core/resolver/resolver.cc +2 -2
- data/src/core/resolver/resolver.h +2 -2
- data/src/core/resolver/resolver_factory.h +3 -3
- data/src/core/resolver/resolver_registry.cc +5 -5
- data/src/core/resolver/resolver_registry.h +5 -5
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +8 -9
- data/src/core/resolver/xds/xds_dependency_manager.cc +19 -13
- data/src/core/resolver/xds/xds_dependency_manager.h +12 -12
- data/src/core/resolver/xds/xds_resolver.cc +36 -40
- data/src/core/resolver/xds/xds_resolver_attributes.h +3 -3
- data/src/core/resolver/xds/xds_resolver_trace.cc +2 -2
- data/src/core/{lib/surface → server}/server.cc +81 -94
- data/src/core/{lib/surface → server}/server.h +16 -13
- data/src/core/{lib/channel → server}/server_call_tracer_filter.cc +10 -5
- data/src/core/{lib/surface/builtins.h → server/server_call_tracer_filter.h} +7 -5
- data/src/core/{ext/filters/server_config_selector → server}/server_config_selector.h +5 -5
- data/src/core/{ext/filters/server_config_selector → server}/server_config_selector_filter.cc +37 -37
- data/src/core/{ext/filters/server_config_selector → server}/server_config_selector_filter.h +3 -3
- data/src/core/server/server_interface.h +43 -0
- data/src/core/{ext/xds → server}/xds_channel_stack_modifier.cc +3 -3
- data/src/core/{ext/xds → server}/xds_channel_stack_modifier.h +6 -6
- data/src/core/{ext/xds → server}/xds_server_config_fetcher.cc +43 -41
- data/src/core/service_config/service_config.h +1 -2
- data/src/core/service_config/service_config_call_data.h +2 -2
- data/src/core/{client_channel → service_config}/service_config_channel_arg_filter.cc +7 -8
- data/src/core/service_config/service_config_impl.cc +2 -2
- data/src/core/service_config/service_config_impl.h +3 -3
- data/src/core/service_config/service_config_parser.cc +1 -2
- data/src/core/service_config/service_config_parser.h +3 -3
- data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -2
- data/src/core/tsi/alts/crypt/gsec.cc +1 -2
- data/src/core/tsi/alts/crypt/gsec.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_counter.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +2 -2
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +44 -41
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -2
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +1 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +1 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +9 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +1 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +2 -2
- data/src/core/tsi/fake_transport_security.cc +6 -4
- data/src/core/tsi/local_transport_security.cc +1 -2
- data/src/core/tsi/local_transport_security.h +1 -2
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -6
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -10
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -4
- data/src/core/tsi/ssl_transport_security.cc +218 -89
- data/src/core/tsi/ssl_transport_security.h +1 -2
- data/src/core/tsi/ssl_transport_security_utils.cc +138 -10
- data/src/core/tsi/ssl_transport_security_utils.h +28 -2
- data/src/core/tsi/ssl_types.h +2 -2
- data/src/core/tsi/transport_security.cc +1 -2
- data/src/core/tsi/transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +2 -2
- data/src/core/tsi/transport_security_grpc.h +1 -2
- data/src/core/tsi/transport_security_interface.h +2 -2
- data/src/core/{ext/xds → xds/grpc}/certificate_provider_store.cc +2 -3
- data/src/core/{ext/xds → xds/grpc}/certificate_provider_store.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/file_watcher_certificate_provider_factory.cc +2 -3
- data/src/core/{ext/xds → xds/grpc}/file_watcher_certificate_provider_factory.h +6 -7
- data/src/core/{ext/xds → xds/grpc}/upb_utils.h +5 -5
- data/src/core/{ext/xds → xds/grpc}/xds_audit_logger_registry.cc +6 -5
- data/src/core/{ext/xds → xds/grpc}/xds_audit_logger_registry.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_bootstrap_grpc.cc +40 -9
- data/src/core/{ext/xds → xds/grpc}/xds_bootstrap_grpc.h +33 -18
- data/src/core/{ext/xds → xds/grpc}/xds_certificate_provider.cc +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_certificate_provider.h +5 -6
- data/src/core/{ext/xds → xds/grpc}/xds_client_grpc.cc +208 -66
- data/src/core/{ext/xds → xds/grpc}/xds_client_grpc.h +30 -17
- data/src/core/{ext/xds → xds/grpc}/xds_cluster.cc +27 -18
- data/src/core/{ext/xds → xds/grpc}/xds_cluster.h +16 -14
- data/src/core/{ext/xds → xds/grpc}/xds_cluster_specifier_plugin.cc +4 -4
- data/src/core/{ext/xds → xds/grpc}/xds_cluster_specifier_plugin.h +8 -8
- data/src/core/{ext/xds → xds/grpc}/xds_common_types.cc +5 -6
- data/src/core/{ext/xds → xds/grpc}/xds_common_types.h +6 -6
- data/src/core/{ext/xds → xds/grpc}/xds_endpoint.cc +10 -9
- data/src/core/{ext/xds → xds/grpc}/xds_endpoint.h +11 -11
- data/src/core/{ext/xds → xds/grpc}/xds_health_status.cc +3 -3
- data/src/core/{ext/xds → xds/grpc}/xds_health_status.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_http_fault_filter.cc +4 -5
- data/src/core/{ext/xds → xds/grpc}/xds_http_fault_filter.h +9 -9
- data/src/core/{ext/xds → xds/grpc}/xds_http_filters.cc +8 -9
- data/src/core/{ext/xds → xds/grpc}/xds_http_filters.h +9 -9
- data/src/core/{ext/xds → xds/grpc}/xds_http_rbac_filter.cc +6 -7
- data/src/core/{ext/xds → xds/grpc}/xds_http_rbac_filter.h +9 -9
- data/src/core/{ext/xds → xds/grpc}/xds_http_stateful_session_filter.cc +5 -6
- data/src/core/{ext/xds → xds/grpc}/xds_http_stateful_session_filter.h +9 -9
- data/src/core/{ext/xds → xds/grpc}/xds_lb_policy_registry.cc +8 -9
- data/src/core/{ext/xds → xds/grpc}/xds_lb_policy_registry.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_listener.cc +8 -8
- data/src/core/{ext/xds → xds/grpc}/xds_listener.h +13 -13
- data/src/core/{ext/xds → xds/grpc}/xds_route_config.cc +16 -16
- data/src/core/{ext/xds → xds/grpc}/xds_route_config.h +12 -12
- data/src/core/{ext/xds → xds/grpc}/xds_routing.cc +6 -6
- data/src/core/{ext/xds → xds/grpc}/xds_routing.h +9 -9
- data/src/core/{ext/xds → xds/grpc}/xds_transport_grpc.cc +31 -46
- data/src/core/{ext/xds → xds/grpc}/xds_transport_grpc.h +12 -13
- data/src/core/{ext/xds → xds/xds_client}/xds_api.cc +4 -5
- data/src/core/{ext/xds → xds/xds_client}/xds_api.h +8 -8
- data/src/core/{ext/xds → xds/xds_client}/xds_bootstrap.cc +3 -3
- data/src/core/{ext/xds → xds/xds_client}/xds_bootstrap.h +7 -9
- data/src/core/{ext/xds → xds/xds_client}/xds_channel_args.h +3 -3
- data/src/core/{ext/xds → xds/xds_client}/xds_client.cc +304 -120
- data/src/core/{ext/xds → xds/xds_client}/xds_client.h +50 -18
- data/src/core/{ext/xds → xds/xds_client}/xds_client_stats.cc +5 -6
- data/src/core/{ext/xds → xds/xds_client}/xds_client_stats.h +20 -13
- data/src/core/xds/xds_client/xds_metrics.h +41 -0
- data/src/core/{ext/xds → xds/xds_client}/xds_resource_type.h +6 -6
- data/src/core/{ext/xds → xds/xds_client}/xds_resource_type_impl.h +7 -7
- data/src/core/{ext/xds → xds/xds_client}/xds_transport.h +6 -6
- data/src/ruby/ext/grpc/extconf.rb +0 -3
- data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_call_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +130 -132
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +196 -198
- data/src/ruby/ext/grpc/rb_server.c +1 -0
- data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +1 -0
- data/src/ruby/lib/grpc/generic/active_call.rb +8 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/rpc_server_spec.rb +25 -0
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +320 -0
- data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +64 -0
- data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +93 -0
- data/third_party/abseil-cpp/absl/log/check.h +209 -0
- data/third_party/abseil-cpp/absl/log/globals.cc +178 -0
- data/third_party/abseil-cpp/absl/log/globals.h +218 -0
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +47 -0
- data/third_party/abseil-cpp/absl/log/internal/check_impl.h +150 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +118 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +420 -0
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +83 -0
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +239 -0
- data/third_party/abseil-cpp/absl/log/internal/config.h +45 -0
- data/third_party/abseil-cpp/absl/log/internal/fnmatch.cc +73 -0
- data/third_party/abseil-cpp/absl/log/internal/fnmatch.h +35 -0
- data/third_party/abseil-cpp/absl/log/internal/globals.cc +145 -0
- data/third_party/abseil-cpp/absl/log/internal/globals.h +101 -0
- data/third_party/abseil-cpp/absl/log/internal/log_format.cc +205 -0
- data/third_party/abseil-cpp/absl/log/internal/log_format.h +78 -0
- data/third_party/abseil-cpp/absl/log/internal/log_impl.h +282 -0
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +633 -0
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +375 -0
- data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +296 -0
- data/third_party/abseil-cpp/absl/log/internal/log_sink_set.h +54 -0
- data/third_party/abseil-cpp/absl/log/internal/nullguard.cc +35 -0
- data/third_party/abseil-cpp/absl/log/internal/nullguard.h +88 -0
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +136 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +220 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.h +288 -0
- data/third_party/abseil-cpp/absl/log/internal/strip.h +72 -0
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +340 -0
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +163 -0
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +44 -0
- data/third_party/abseil-cpp/absl/log/log.h +361 -0
- data/third_party/abseil-cpp/absl/log/log_entry.cc +41 -0
- data/third_party/abseil-cpp/absl/log/log_entry.h +221 -0
- data/third_party/abseil-cpp/absl/log/log_sink.cc +23 -0
- data/third_party/abseil-cpp/absl/log/log_sink.h +64 -0
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +61 -0
- data/third_party/abseil-cpp/absl/log/vlog_is_on.h +72 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +50 -39
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +3 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +25 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +19 -15
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_des.c +63 -94
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +20 -28
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/des/des.c +45 -32
- data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +24 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +26 -17
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +81 -60
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +41 -120
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +13 -13
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh_asn1.c +120 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +6 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +8 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +14 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +11 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +11 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +22 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +73 -29
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +45 -21
- data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -17
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +44 -41
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +13 -12
- data/third_party/boringssl-with-bazel/src/crypto/spx/spx.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +26 -33
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_cpols.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_crld.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_lib.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_purp.c +40 -61
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +24 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +51 -78
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -12
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +13 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +1 -6
- data/third_party/boringssl-with-bazel/{err_data.c → src/gen/crypto/err_data.c} +487 -485
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +10 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +80 -39
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +12 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +17 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +13 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +15 -3
- data/third_party/boringssl-with-bazel/src/{crypto/spx/internal.h → include/openssl/experimental/spx.h} +24 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +63 -53
- data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +19 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +19 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +14 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +291 -73
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +10 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +13 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2959 -2403
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +3 -9
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +43 -43
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +17 -7
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +67 -15
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +143 -113
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +227 -167
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +66 -385
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +21 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +423 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +70 -54
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +59 -75
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +6 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +48 -116
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +19 -26
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +36 -3
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +53 -18
- data/third_party/upb/upb/base/descriptor_constants.h +29 -2
- data/third_party/upb/upb/{wire/internal/swap.h → base/internal/endian.h} +12 -11
- data/third_party/upb/upb/base/status.h +1 -1
- data/third_party/upb/upb/base/status.hpp +5 -1
- data/third_party/upb/upb/base/string_view.h +7 -5
- data/third_party/upb/upb/base/upcast.h +29 -0
- data/third_party/upb/upb/generated_code_support.h +2 -1
- data/third_party/upb/upb/json/decode.c +103 -53
- data/third_party/upb/upb/json/decode.h +3 -26
- data/third_party/upb/upb/json/encode.c +3 -26
- data/third_party/upb/upb/json/encode.h +3 -26
- data/third_party/upb/upb/mem/arena.c +233 -106
- data/third_party/upb/upb/mem/arena.h +14 -66
- data/third_party/upb/upb/mem/arena.hpp +8 -4
- data/third_party/upb/upb/mem/internal/arena.h +76 -58
- data/third_party/upb/upb/message/accessors.c +19 -46
- data/third_party/upb/upb/message/accessors.h +208 -123
- data/third_party/upb/upb/message/array.c +55 -83
- data/third_party/upb/upb/message/array.h +18 -30
- data/third_party/upb/upb/message/compat.c +39 -0
- data/third_party/upb/upb/message/compat.h +41 -0
- data/third_party/upb/upb/message/copy.c +322 -0
- data/third_party/upb/upb/message/copy.h +56 -0
- data/third_party/upb/upb/message/internal/accessors.h +178 -178
- data/third_party/upb/upb/message/internal/array.h +80 -81
- data/third_party/upb/upb/message/internal/extension.c +63 -0
- data/third_party/upb/upb/message/internal/extension.h +12 -12
- data/third_party/upb/upb/message/internal/map.h +28 -41
- data/third_party/upb/upb/message/internal/map_entry.h +14 -39
- data/third_party/upb/upb/message/internal/map_sorter.h +18 -37
- data/third_party/upb/upb/message/internal/message.c +59 -0
- data/third_party/upb/upb/message/internal/message.h +26 -42
- data/third_party/upb/upb/message/internal/tagged_ptr.h +56 -0
- data/third_party/upb/upb/message/internal/types.h +7 -12
- data/third_party/upb/upb/message/map.c +3 -26
- data/third_party/upb/upb/message/map.h +5 -33
- data/third_party/upb/upb/message/map_gencode_util.h +3 -26
- data/third_party/upb/upb/message/map_sorter.c +22 -34
- data/third_party/upb/upb/message/message.c +28 -104
- data/third_party/upb/upb/message/message.h +4 -8
- data/third_party/upb/upb/message/tagged_ptr.h +14 -31
- data/third_party/upb/upb/message/value.h +3 -5
- data/third_party/upb/upb/mini_descriptor/build_enum.c +20 -11
- data/third_party/upb/upb/mini_descriptor/decode.c +127 -107
- data/third_party/upb/upb/mini_descriptor/decode.h +3 -8
- data/third_party/upb/upb/mini_descriptor/link.c +34 -22
- data/third_party/upb/upb/mini_descriptor/link.h +1 -1
- data/third_party/upb/upb/mini_table/enum.h +4 -6
- data/third_party/upb/upb/mini_table/extension.h +37 -0
- data/third_party/upb/upb/mini_table/extension_registry.c +9 -2
- data/third_party/upb/upb/mini_table/field.h +46 -60
- data/third_party/upb/upb/mini_table/file.h +44 -0
- data/third_party/upb/upb/mini_table/internal/enum.h +19 -20
- data/third_party/upb/upb/mini_table/internal/extension.h +34 -3
- data/third_party/upb/upb/mini_table/internal/field.h +136 -27
- data/third_party/upb/upb/mini_table/internal/file.h +47 -10
- data/third_party/upb/upb/mini_table/internal/message.c +17 -9
- data/third_party/upb/upb/mini_table/internal/message.h +94 -23
- data/third_party/upb/upb/mini_table/internal/size_log2.h +77 -0
- data/third_party/upb/upb/mini_table/internal/sub.h +39 -4
- data/third_party/upb/upb/mini_table/message.c +18 -19
- data/third_party/upb/upb/mini_table/message.h +29 -20
- data/third_party/upb/upb/mini_table/sub.h +40 -1
- data/third_party/upb/upb/port/def.inc +18 -0
- data/third_party/upb/upb/port/undef.inc +3 -0
- data/third_party/upb/upb/reflection/def.hpp +8 -4
- data/third_party/upb/upb/reflection/def_pool.c +81 -2
- data/third_party/upb/upb/reflection/def_pool.h +8 -0
- data/third_party/upb/upb/reflection/enum_def.c +42 -19
- data/third_party/upb/upb/reflection/enum_def.h +1 -0
- data/third_party/upb/upb/reflection/enum_value_def.c +43 -14
- data/third_party/upb/upb/reflection/enum_value_def.h +2 -0
- data/third_party/upb/upb/reflection/extension_range.c +13 -5
- data/third_party/upb/upb/reflection/extension_range.h +2 -0
- data/third_party/upb/upb/reflection/field_def.c +177 -130
- data/third_party/upb/upb/reflection/field_def.h +10 -1
- data/third_party/upb/upb/reflection/file_def.c +98 -9
- data/third_party/upb/upb/reflection/file_def.h +3 -0
- data/third_party/upb/upb/reflection/internal/def_builder.c +85 -7
- data/third_party/upb/upb/reflection/internal/def_builder.h +23 -0
- data/third_party/upb/upb/reflection/internal/enum_def.h +5 -4
- data/third_party/upb/upb/reflection/internal/enum_reserved_range.h +1 -1
- data/third_party/upb/upb/reflection/internal/enum_value_def.h +2 -1
- data/third_party/upb/upb/reflection/internal/extension_range.h +2 -2
- data/third_party/upb/upb/reflection/internal/field_def.h +11 -10
- data/third_party/upb/upb/reflection/internal/message_def.h +6 -3
- data/third_party/upb/upb/reflection/internal/method_def.h +5 -3
- data/third_party/upb/upb/reflection/internal/oneof_def.h +5 -3
- data/third_party/upb/upb/reflection/internal/service_def.h +5 -3
- data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +20 -0
- data/third_party/upb/upb/reflection/message.c +27 -12
- data/third_party/upb/upb/reflection/message.h +5 -5
- data/third_party/upb/upb/reflection/message_def.c +56 -27
- data/third_party/upb/upb/reflection/message_def.h +2 -0
- data/third_party/upb/upb/reflection/method_def.c +20 -9
- data/third_party/upb/upb/reflection/method_def.h +2 -0
- data/third_party/upb/upb/reflection/oneof_def.c +20 -11
- data/third_party/upb/upb/reflection/oneof_def.h +3 -1
- data/third_party/upb/upb/reflection/service_def.c +25 -13
- data/third_party/upb/upb/reflection/service_def.h +2 -0
- data/third_party/upb/upb/text/encode.c +126 -36
- data/third_party/upb/upb/wire/decode.c +214 -196
- data/third_party/upb/upb/wire/decode.h +10 -0
- data/third_party/upb/upb/wire/encode.c +105 -91
- data/third_party/upb/upb/wire/encode.h +4 -3
- data/third_party/upb/upb/wire/{decode_fast.c → internal/decode_fast.c} +53 -48
- data/third_party/upb/upb/wire/{decode_fast.h → internal/decode_fast.h} +6 -5
- data/third_party/upb/upb/wire/internal/{decode.h → decoder.h} +15 -31
- data/third_party/upb/upb/wire/internal/reader.h +61 -0
- data/third_party/upb/upb/wire/reader.c +9 -6
- data/third_party/upb/upb/wire/reader.h +18 -47
- data/third_party/utf8_range/utf8_range.c +467 -0
- data/third_party/utf8_range/utf8_range.h +9 -8
- metadata +182 -128
- data/src/core/client_channel/channel_connectivity.cc +0 -265
- data/src/core/client_channel/client_channel_channelz.cc +0 -93
- data/src/core/client_channel/client_channel_channelz.h +0 -85
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +0 -318
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +0 -150
- data/src/core/ext/filters/deadline/deadline_filter.cc +0 -407
- data/src/core/ext/filters/deadline/deadline_filter.h +0 -85
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +0 -325
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +0 -139
- data/src/core/lib/gpr/log_internal.h +0 -55
- data/src/core/lib/gpr/wrap_memcpy.cc +0 -43
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +0 -244
- data/src/core/lib/slice/b64.cc +0 -239
- data/src/core/lib/slice/b64.h +0 -52
- data/src/core/lib/surface/call_trace.cc +0 -163
- data/src/core/lib/surface/channel_ping.cc +0 -69
- data/src/core/lib/transport/call_factory.cc +0 -41
- data/src/core/lib/transport/call_factory.h +0 -56
- data/src/core/load_balancing/subchannel_list.h +0 -455
- data/third_party/upb/upb/message/types.h +0 -15
- data/third_party/utf8_range/naive.c +0 -92
- data/third_party/utf8_range/range2-neon.c +0 -157
- data/third_party/utf8_range/range2-sse.c +0 -170
- /data/third_party/boringssl-with-bazel/src/include/openssl/{kyber.h → experimental/kyber.h} +0 -0
@@ -14,8 +14,6 @@
|
|
14
14
|
// limitations under the License.
|
15
15
|
//
|
16
16
|
|
17
|
-
#include <grpc/support/port_platform.h>
|
18
|
-
|
19
17
|
#include "src/core/load_balancing/pick_first/pick_first.h"
|
20
18
|
|
21
19
|
#include <inttypes.h>
|
@@ -29,6 +27,7 @@
|
|
29
27
|
#include <vector>
|
30
28
|
|
31
29
|
#include "absl/algorithm/container.h"
|
30
|
+
#include "absl/log/check.h"
|
32
31
|
#include "absl/random/random.h"
|
33
32
|
#include "absl/status/status.h"
|
34
33
|
#include "absl/status/statusor.h"
|
@@ -40,10 +39,11 @@
|
|
40
39
|
#include <grpc/impl/channel_arg_names.h>
|
41
40
|
#include <grpc/impl/connectivity_state.h>
|
42
41
|
#include <grpc/support/log.h>
|
42
|
+
#include <grpc/support/port_platform.h>
|
43
43
|
|
44
|
-
#include "src/core/load_balancing/health_check_client.h"
|
45
44
|
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
46
45
|
#include "src/core/lib/channel/channel_args.h"
|
46
|
+
#include "src/core/lib/channel/metrics.h"
|
47
47
|
#include "src/core/lib/config/core_configuration.h"
|
48
48
|
#include "src/core/lib/debug/trace.h"
|
49
49
|
#include "src/core/lib/experiments/experiments.h"
|
@@ -61,6 +61,7 @@
|
|
61
61
|
#include "src/core/lib/json/json_args.h"
|
62
62
|
#include "src/core/lib/json/json_object_loader.h"
|
63
63
|
#include "src/core/lib/transport/connectivity_state.h"
|
64
|
+
#include "src/core/load_balancing/health_check_client.h"
|
64
65
|
#include "src/core/load_balancing/lb_policy.h"
|
65
66
|
#include "src/core/load_balancing/lb_policy_factory.h"
|
66
67
|
#include "src/core/load_balancing/subchannel_interface.h"
|
@@ -73,32 +74,1060 @@ TraceFlag grpc_lb_pick_first_trace(false, "pick_first");
|
|
73
74
|
namespace {
|
74
75
|
|
75
76
|
//
|
76
|
-
// pick_first LB policy
|
77
|
+
// pick_first LB policy
|
78
|
+
//
|
79
|
+
|
80
|
+
constexpr absl::string_view kPickFirst = "pick_first";
|
81
|
+
|
82
|
+
const auto kMetricDisconnections =
|
83
|
+
GlobalInstrumentsRegistry::RegisterUInt64Counter(
|
84
|
+
"grpc.lb.pick_first.disconnections",
|
85
|
+
"EXPERIMENTAL. Number of times the selected subchannel becomes "
|
86
|
+
"disconnected.",
|
87
|
+
"{disconnection}", {kMetricLabelTarget}, {}, false);
|
88
|
+
|
89
|
+
const auto kMetricConnectionAttemptsSucceeded =
|
90
|
+
GlobalInstrumentsRegistry::RegisterUInt64Counter(
|
91
|
+
"grpc.lb.pick_first.connection_attempts_succeeded",
|
92
|
+
"EXPERIMENTAL. Number of successful connection attempts.", "{attempt}",
|
93
|
+
{kMetricLabelTarget}, {}, false);
|
94
|
+
|
95
|
+
const auto kMetricConnectionAttemptsFailed =
|
96
|
+
GlobalInstrumentsRegistry::RegisterUInt64Counter(
|
97
|
+
"grpc.lb.pick_first.connection_attempts_failed",
|
98
|
+
"EXPERIMENTAL. Number of failed connection attempts.", "{attempt}",
|
99
|
+
{kMetricLabelTarget}, {}, false);
|
100
|
+
|
101
|
+
class PickFirstConfig final : public LoadBalancingPolicy::Config {
|
102
|
+
public:
|
103
|
+
absl::string_view name() const override { return kPickFirst; }
|
104
|
+
bool shuffle_addresses() const { return shuffle_addresses_; }
|
105
|
+
|
106
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
107
|
+
static const auto kJsonLoader =
|
108
|
+
JsonObjectLoader<PickFirstConfig>()
|
109
|
+
.OptionalField("shuffleAddressList",
|
110
|
+
&PickFirstConfig::shuffle_addresses_)
|
111
|
+
.Finish();
|
112
|
+
return kJsonLoader;
|
113
|
+
}
|
114
|
+
|
115
|
+
private:
|
116
|
+
bool shuffle_addresses_ = false;
|
117
|
+
};
|
118
|
+
|
119
|
+
class PickFirst final : public LoadBalancingPolicy {
|
120
|
+
public:
|
121
|
+
explicit PickFirst(Args args);
|
122
|
+
|
123
|
+
absl::string_view name() const override { return kPickFirst; }
|
124
|
+
|
125
|
+
absl::Status UpdateLocked(UpdateArgs args) override;
|
126
|
+
void ExitIdleLocked() override;
|
127
|
+
void ResetBackoffLocked() override;
|
128
|
+
|
129
|
+
private:
|
130
|
+
~PickFirst() override;
|
131
|
+
|
132
|
+
// A list of subchannels that we will attempt connections on.
|
133
|
+
class SubchannelList final : public InternallyRefCounted<SubchannelList> {
|
134
|
+
public:
|
135
|
+
// Data about the subchannel that is needed only while attempting to
|
136
|
+
// connect.
|
137
|
+
class SubchannelData final {
|
138
|
+
public:
|
139
|
+
// Stores the subchannel and its watcher. This is the state that
|
140
|
+
// is retained once a subchannel is chosen.
|
141
|
+
class SubchannelState final
|
142
|
+
: public InternallyRefCounted<SubchannelState> {
|
143
|
+
public:
|
144
|
+
SubchannelState(SubchannelData* subchannel_data,
|
145
|
+
RefCountedPtr<SubchannelInterface> subchannel);
|
146
|
+
|
147
|
+
void Orphan() override;
|
148
|
+
|
149
|
+
SubchannelInterface* subchannel() const { return subchannel_.get(); }
|
150
|
+
|
151
|
+
void RequestConnection() { subchannel_->RequestConnection(); }
|
152
|
+
|
153
|
+
void ResetBackoffLocked() { subchannel_->ResetBackoff(); }
|
154
|
+
|
155
|
+
private:
|
156
|
+
// Watcher for subchannel connectivity state.
|
157
|
+
class Watcher
|
158
|
+
: public SubchannelInterface::ConnectivityStateWatcherInterface {
|
159
|
+
public:
|
160
|
+
explicit Watcher(RefCountedPtr<SubchannelState> subchannel_state)
|
161
|
+
: subchannel_state_(std::move(subchannel_state)) {}
|
162
|
+
|
163
|
+
~Watcher() override {
|
164
|
+
subchannel_state_.reset(DEBUG_LOCATION, "Watcher dtor");
|
165
|
+
}
|
166
|
+
|
167
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
168
|
+
absl::Status status) override {
|
169
|
+
subchannel_state_->OnConnectivityStateChange(new_state,
|
170
|
+
std::move(status));
|
171
|
+
}
|
172
|
+
|
173
|
+
grpc_pollset_set* interested_parties() override {
|
174
|
+
return subchannel_state_->pick_first_->interested_parties();
|
175
|
+
}
|
176
|
+
|
177
|
+
private:
|
178
|
+
RefCountedPtr<SubchannelState> subchannel_state_;
|
179
|
+
};
|
180
|
+
|
181
|
+
// Selects this subchannel. Called when the subchannel reports READY.
|
182
|
+
void Select();
|
183
|
+
|
184
|
+
// This method will be invoked once soon after instantiation to report
|
185
|
+
// the current connectivity state, and it will then be invoked again
|
186
|
+
// whenever the connectivity state changes.
|
187
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
188
|
+
absl::Status status);
|
189
|
+
|
190
|
+
// If non-null, then we are still part of a subchannel list
|
191
|
+
// trying to connect.
|
192
|
+
SubchannelData* subchannel_data_;
|
193
|
+
|
194
|
+
// TODO(roth): Once we remove pollset_set, we should no longer
|
195
|
+
// need to hold a ref to PickFirst. Instead, we can make this a
|
196
|
+
// raw pointer and put it in an absl::variant with subchannel_data_.
|
197
|
+
RefCountedPtr<PickFirst> pick_first_;
|
198
|
+
|
199
|
+
RefCountedPtr<SubchannelInterface> subchannel_;
|
200
|
+
SubchannelInterface::ConnectivityStateWatcherInterface* watcher_ =
|
201
|
+
nullptr;
|
202
|
+
};
|
203
|
+
|
204
|
+
SubchannelData(SubchannelList* subchannel_list, size_t index,
|
205
|
+
RefCountedPtr<SubchannelInterface> subchannel);
|
206
|
+
|
207
|
+
absl::optional<grpc_connectivity_state> connectivity_state() const {
|
208
|
+
return connectivity_state_;
|
209
|
+
}
|
210
|
+
const absl::Status& connectivity_status() const {
|
211
|
+
return connectivity_status_;
|
212
|
+
}
|
213
|
+
|
214
|
+
void RequestConnection() { subchannel_state_->RequestConnection(); }
|
215
|
+
|
216
|
+
// Resets the connection backoff.
|
217
|
+
void ResetBackoffLocked() { subchannel_state_->ResetBackoffLocked(); }
|
218
|
+
|
219
|
+
// Requests a connection attempt to start on this subchannel,
|
220
|
+
// with appropriate Connection Attempt Delay.
|
221
|
+
// Used only during the Happy Eyeballs pass.
|
222
|
+
void RequestConnectionWithTimer();
|
223
|
+
|
224
|
+
bool seen_transient_failure() const { return seen_transient_failure_; }
|
225
|
+
|
226
|
+
private:
|
227
|
+
// This method will be invoked once soon after instantiation to report
|
228
|
+
// the current connectivity state, and it will then be invoked again
|
229
|
+
// whenever the connectivity state changes.
|
230
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
231
|
+
absl::Status status);
|
232
|
+
|
233
|
+
// Backpointer to owning subchannel list. Not owned.
|
234
|
+
SubchannelList* subchannel_list_;
|
235
|
+
// Our index within subchannel_list_.
|
236
|
+
const size_t index_;
|
237
|
+
// Subchannel state.
|
238
|
+
OrphanablePtr<SubchannelState> subchannel_state_;
|
239
|
+
// Data updated by the watcher.
|
240
|
+
absl::optional<grpc_connectivity_state> connectivity_state_;
|
241
|
+
absl::Status connectivity_status_;
|
242
|
+
bool seen_transient_failure_ = false;
|
243
|
+
};
|
244
|
+
|
245
|
+
SubchannelList(RefCountedPtr<PickFirst> policy,
|
246
|
+
EndpointAddressesIterator* addresses,
|
247
|
+
const ChannelArgs& args);
|
248
|
+
|
249
|
+
~SubchannelList() override;
|
250
|
+
|
251
|
+
void Orphan() override;
|
252
|
+
|
253
|
+
// The number of subchannels in the list.
|
254
|
+
size_t size() const { return subchannels_.size(); }
|
255
|
+
|
256
|
+
// Resets connection backoff of all subchannels.
|
257
|
+
void ResetBackoffLocked();
|
258
|
+
|
259
|
+
bool IsHappyEyeballsPassComplete() const {
|
260
|
+
// Checking attempting_index_ here is just an optimization -- if
|
261
|
+
// we haven't actually tried all subchannels yet, then we don't
|
262
|
+
// need to iterate.
|
263
|
+
if (attempting_index_ < size()) return false;
|
264
|
+
for (const auto& sd : subchannels_) {
|
265
|
+
if (!sd->seen_transient_failure()) return false;
|
266
|
+
}
|
267
|
+
return true;
|
268
|
+
}
|
269
|
+
|
270
|
+
private:
|
271
|
+
// Returns true if all subchannels have seen their initial
|
272
|
+
// connectivity state notifications.
|
273
|
+
bool AllSubchannelsSeenInitialState() const {
|
274
|
+
return num_subchannels_seen_initial_notification_ == size();
|
275
|
+
}
|
276
|
+
|
277
|
+
// Looks through subchannels_ starting from attempting_index_ to
|
278
|
+
// find the first one not currently in TRANSIENT_FAILURE, then
|
279
|
+
// triggers a connection attempt for that subchannel. If there are
|
280
|
+
// no more subchannels not in TRANSIENT_FAILURE, calls
|
281
|
+
// MaybeFinishHappyEyeballsPass().
|
282
|
+
void StartConnectingNextSubchannel();
|
283
|
+
|
284
|
+
// Checks to see if the initial Happy Eyeballs pass is complete --
|
285
|
+
// i.e., all subchannels have seen TRANSIENT_FAILURE state at least once.
|
286
|
+
// If so, transitions to a mode where we try to connect to all subchannels
|
287
|
+
// in parallel and returns true.
|
288
|
+
void MaybeFinishHappyEyeballsPass();
|
289
|
+
|
290
|
+
// Backpointer to owning policy.
|
291
|
+
RefCountedPtr<PickFirst> policy_;
|
292
|
+
|
293
|
+
ChannelArgs args_;
|
294
|
+
|
295
|
+
// The list of subchannels.
|
296
|
+
std::vector<std::unique_ptr<SubchannelData>> subchannels_;
|
297
|
+
|
298
|
+
// Is this list shutting down? This may be true due to the shutdown of the
|
299
|
+
// policy itself or because a newer update has arrived while this one hadn't
|
300
|
+
// finished processing.
|
301
|
+
bool shutting_down_ = false;
|
302
|
+
|
303
|
+
size_t num_subchannels_seen_initial_notification_ = 0;
|
304
|
+
|
305
|
+
// The index into subchannels_ to which we are currently attempting
|
306
|
+
// to connect during the initial Happy Eyeballs pass. Once the
|
307
|
+
// initial pass is over, this will be equal to size().
|
308
|
+
size_t attempting_index_ = 0;
|
309
|
+
// Happy Eyeballs timer handle.
|
310
|
+
absl::optional<grpc_event_engine::experimental::EventEngine::TaskHandle>
|
311
|
+
timer_handle_;
|
312
|
+
|
313
|
+
// After the initial Happy Eyeballs pass, the number of failures
|
314
|
+
// we've seen. Every size() failures, we trigger re-resolution.
|
315
|
+
size_t num_failures_ = 0;
|
316
|
+
|
317
|
+
// The status from the last subchannel that reported TRANSIENT_FAILURE.
|
318
|
+
absl::Status last_failure_;
|
319
|
+
};
|
320
|
+
|
321
|
+
class HealthWatcher final
|
322
|
+
: public SubchannelInterface::ConnectivityStateWatcherInterface {
|
323
|
+
public:
|
324
|
+
explicit HealthWatcher(RefCountedPtr<PickFirst> policy)
|
325
|
+
: policy_(std::move(policy)) {}
|
326
|
+
|
327
|
+
~HealthWatcher() override {
|
328
|
+
policy_.reset(DEBUG_LOCATION, "HealthWatcher dtor");
|
329
|
+
}
|
330
|
+
|
331
|
+
void OnConnectivityStateChange(grpc_connectivity_state new_state,
|
332
|
+
absl::Status status) override;
|
333
|
+
|
334
|
+
grpc_pollset_set* interested_parties() override {
|
335
|
+
return policy_->interested_parties();
|
336
|
+
}
|
337
|
+
|
338
|
+
private:
|
339
|
+
RefCountedPtr<PickFirst> policy_;
|
340
|
+
};
|
341
|
+
|
342
|
+
class Picker final : public SubchannelPicker {
|
343
|
+
public:
|
344
|
+
explicit Picker(RefCountedPtr<SubchannelInterface> subchannel)
|
345
|
+
: subchannel_(std::move(subchannel)) {}
|
346
|
+
|
347
|
+
PickResult Pick(PickArgs /*args*/) override {
|
348
|
+
return PickResult::Complete(subchannel_);
|
349
|
+
}
|
350
|
+
|
351
|
+
private:
|
352
|
+
RefCountedPtr<SubchannelInterface> subchannel_;
|
353
|
+
};
|
354
|
+
|
355
|
+
void ShutdownLocked() override;
|
356
|
+
|
357
|
+
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
358
|
+
RefCountedPtr<SubchannelPicker> picker);
|
359
|
+
|
360
|
+
void AttemptToConnectUsingLatestUpdateArgsLocked();
|
361
|
+
|
362
|
+
void UnsetSelectedSubchannel();
|
363
|
+
|
364
|
+
void GoIdle();
|
365
|
+
|
366
|
+
// When ExitIdleLocked() is called, we create a subchannel_list_ and start
|
367
|
+
// trying to connect, but we don't actually change state_ until the first
|
368
|
+
// subchannel reports CONNECTING. So in order to know if we're really
|
369
|
+
// idle, we need to check both state_ and subchannel_list_.
|
370
|
+
bool IsIdle() const {
|
371
|
+
return state_ == GRPC_CHANNEL_IDLE && subchannel_list_ == nullptr;
|
372
|
+
}
|
373
|
+
|
374
|
+
// Whether we should enable health watching.
|
375
|
+
const bool enable_health_watch_;
|
376
|
+
// Whether we should omit our status message prefix.
|
377
|
+
const bool omit_status_message_prefix_;
|
378
|
+
// Connection Attempt Delay for Happy Eyeballs.
|
379
|
+
const Duration connection_attempt_delay_;
|
380
|
+
|
381
|
+
// Lateset update args.
|
382
|
+
UpdateArgs latest_update_args_;
|
383
|
+
// The list of subchannels that we're currently trying to connect to.
|
384
|
+
// Will generally be null when selected_ is set, except when we get a
|
385
|
+
// resolver update and need to check initial connectivity states for
|
386
|
+
// the new list to decide whether we keep using the existing
|
387
|
+
// connection or go IDLE.
|
388
|
+
OrphanablePtr<SubchannelList> subchannel_list_;
|
389
|
+
// Selected subchannel. Will generally be null when subchannel_list_
|
390
|
+
// is non-null, with the exception mentioned above.
|
391
|
+
OrphanablePtr<SubchannelList::SubchannelData::SubchannelState> selected_;
|
392
|
+
// Health watcher for the selected subchannel.
|
393
|
+
SubchannelInterface::ConnectivityStateWatcherInterface* health_watcher_ =
|
394
|
+
nullptr;
|
395
|
+
SubchannelInterface::DataWatcherInterface* health_data_watcher_ = nullptr;
|
396
|
+
// Current connectivity state.
|
397
|
+
grpc_connectivity_state state_ = GRPC_CHANNEL_CONNECTING;
|
398
|
+
// Are we shut down?
|
399
|
+
bool shutdown_ = false;
|
400
|
+
// Random bit generator used for shuffling addresses if configured
|
401
|
+
absl::BitGen bit_gen_;
|
402
|
+
};
|
403
|
+
|
404
|
+
PickFirst::PickFirst(Args args)
|
405
|
+
: LoadBalancingPolicy(std::move(args)),
|
406
|
+
enable_health_watch_(
|
407
|
+
channel_args()
|
408
|
+
.GetBool(GRPC_ARG_INTERNAL_PICK_FIRST_ENABLE_HEALTH_CHECKING)
|
409
|
+
.value_or(false)),
|
410
|
+
omit_status_message_prefix_(
|
411
|
+
channel_args()
|
412
|
+
.GetBool(GRPC_ARG_INTERNAL_PICK_FIRST_OMIT_STATUS_MESSAGE_PREFIX)
|
413
|
+
.value_or(false)),
|
414
|
+
connection_attempt_delay_(Duration::Milliseconds(
|
415
|
+
Clamp(channel_args()
|
416
|
+
.GetInt(GRPC_ARG_HAPPY_EYEBALLS_CONNECTION_ATTEMPT_DELAY_MS)
|
417
|
+
.value_or(250),
|
418
|
+
100, 2000))) {
|
419
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
420
|
+
gpr_log(GPR_INFO, "Pick First %p created.", this);
|
421
|
+
}
|
422
|
+
}
|
423
|
+
|
424
|
+
PickFirst::~PickFirst() {
|
425
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
426
|
+
gpr_log(GPR_INFO, "Destroying Pick First %p", this);
|
427
|
+
}
|
428
|
+
CHECK(subchannel_list_ == nullptr);
|
429
|
+
}
|
430
|
+
|
431
|
+
void PickFirst::ShutdownLocked() {
|
432
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
433
|
+
gpr_log(GPR_INFO, "Pick First %p Shutting down", this);
|
434
|
+
}
|
435
|
+
shutdown_ = true;
|
436
|
+
UnsetSelectedSubchannel();
|
437
|
+
subchannel_list_.reset();
|
438
|
+
}
|
439
|
+
|
440
|
+
void PickFirst::ExitIdleLocked() {
|
441
|
+
if (shutdown_) return;
|
442
|
+
if (IsIdle()) {
|
443
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
444
|
+
gpr_log(GPR_INFO, "Pick First %p exiting idle", this);
|
445
|
+
}
|
446
|
+
AttemptToConnectUsingLatestUpdateArgsLocked();
|
447
|
+
}
|
448
|
+
}
|
449
|
+
|
450
|
+
void PickFirst::ResetBackoffLocked() {
|
451
|
+
if (subchannel_list_ != nullptr) subchannel_list_->ResetBackoffLocked();
|
452
|
+
}
|
453
|
+
|
454
|
+
void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
|
455
|
+
// Create a subchannel list from latest_update_args_.
|
456
|
+
EndpointAddressesIterator* addresses = nullptr;
|
457
|
+
if (latest_update_args_.addresses.ok()) {
|
458
|
+
addresses = latest_update_args_.addresses->get();
|
459
|
+
}
|
460
|
+
// Replace subchannel_list_.
|
461
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) &&
|
462
|
+
subchannel_list_ != nullptr) {
|
463
|
+
gpr_log(GPR_INFO, "[PF %p] Shutting down previous subchannel list %p", this,
|
464
|
+
subchannel_list_.get());
|
465
|
+
}
|
466
|
+
subchannel_list_ = MakeOrphanable<SubchannelList>(
|
467
|
+
RefAsSubclass<PickFirst>(DEBUG_LOCATION, "SubchannelList"), addresses,
|
468
|
+
latest_update_args_.args);
|
469
|
+
// Empty update or no valid subchannels. Put the channel in
|
470
|
+
// TRANSIENT_FAILURE and request re-resolution. Also unset the
|
471
|
+
// current selected subchannel.
|
472
|
+
if (subchannel_list_->size() == 0) {
|
473
|
+
channel_control_helper()->RequestReresolution();
|
474
|
+
absl::Status status =
|
475
|
+
latest_update_args_.addresses.ok()
|
476
|
+
? absl::UnavailableError(absl::StrCat(
|
477
|
+
"empty address list: ", latest_update_args_.resolution_note))
|
478
|
+
: latest_update_args_.addresses.status();
|
479
|
+
UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
480
|
+
MakeRefCounted<TransientFailurePicker>(status));
|
481
|
+
UnsetSelectedSubchannel();
|
482
|
+
}
|
483
|
+
}
|
484
|
+
|
485
|
+
absl::string_view GetAddressFamily(const grpc_resolved_address& address) {
|
486
|
+
const char* uri_scheme = grpc_sockaddr_get_uri_scheme(&address);
|
487
|
+
return absl::string_view(uri_scheme == nullptr ? "other" : uri_scheme);
|
488
|
+
};
|
489
|
+
|
490
|
+
// An endpoint list iterator that returns only entries for a specific
|
491
|
+
// address family, as indicated by the URI scheme.
|
492
|
+
class AddressFamilyIterator final {
|
493
|
+
public:
|
494
|
+
AddressFamilyIterator(absl::string_view scheme, size_t index)
|
495
|
+
: scheme_(scheme), index_(index) {}
|
496
|
+
|
497
|
+
EndpointAddresses* Next(EndpointAddressesList& endpoints,
|
498
|
+
std::vector<bool>* endpoints_moved) {
|
499
|
+
for (; index_ < endpoints.size(); ++index_) {
|
500
|
+
if (!(*endpoints_moved)[index_] &&
|
501
|
+
GetAddressFamily(endpoints[index_].address()) == scheme_) {
|
502
|
+
(*endpoints_moved)[index_] = true;
|
503
|
+
return &endpoints[index_++];
|
504
|
+
}
|
505
|
+
}
|
506
|
+
return nullptr;
|
507
|
+
}
|
508
|
+
|
509
|
+
private:
|
510
|
+
absl::string_view scheme_;
|
511
|
+
size_t index_;
|
512
|
+
};
|
513
|
+
|
514
|
+
absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
|
515
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
516
|
+
if (args.addresses.ok()) {
|
517
|
+
gpr_log(GPR_INFO, "Pick First %p received update", this);
|
518
|
+
} else {
|
519
|
+
gpr_log(GPR_INFO, "Pick First %p received update with address error: %s",
|
520
|
+
this, args.addresses.status().ToString().c_str());
|
521
|
+
}
|
522
|
+
}
|
523
|
+
// Set return status based on the address list.
|
524
|
+
absl::Status status;
|
525
|
+
if (!args.addresses.ok()) {
|
526
|
+
status = args.addresses.status();
|
527
|
+
} else {
|
528
|
+
EndpointAddressesList endpoints;
|
529
|
+
(*args.addresses)->ForEach([&](const EndpointAddresses& endpoint) {
|
530
|
+
endpoints.push_back(endpoint);
|
531
|
+
});
|
532
|
+
if (endpoints.empty()) {
|
533
|
+
status = absl::UnavailableError("address list must not be empty");
|
534
|
+
} else {
|
535
|
+
// Shuffle the list if needed.
|
536
|
+
auto config = static_cast<PickFirstConfig*>(args.config.get());
|
537
|
+
if (config->shuffle_addresses()) {
|
538
|
+
absl::c_shuffle(endpoints, bit_gen_);
|
539
|
+
}
|
540
|
+
// Flatten the list so that we have one address per endpoint.
|
541
|
+
// While we're iterating, also determine the desired address family
|
542
|
+
// order and the index of the first element of each family, for use in
|
543
|
+
// the interleaving below.
|
544
|
+
std::set<absl::string_view> address_families;
|
545
|
+
std::vector<AddressFamilyIterator> address_family_order;
|
546
|
+
EndpointAddressesList flattened_endpoints;
|
547
|
+
for (const auto& endpoint : endpoints) {
|
548
|
+
for (const auto& address : endpoint.addresses()) {
|
549
|
+
flattened_endpoints.emplace_back(address, endpoint.args());
|
550
|
+
absl::string_view scheme = GetAddressFamily(address);
|
551
|
+
bool inserted = address_families.insert(scheme).second;
|
552
|
+
if (inserted) {
|
553
|
+
address_family_order.emplace_back(scheme,
|
554
|
+
flattened_endpoints.size() - 1);
|
555
|
+
}
|
556
|
+
}
|
557
|
+
}
|
558
|
+
endpoints = std::move(flattened_endpoints);
|
559
|
+
// Interleave addresses as per RFC-8305 section 4.
|
560
|
+
EndpointAddressesList interleaved_endpoints;
|
561
|
+
interleaved_endpoints.reserve(endpoints.size());
|
562
|
+
std::vector<bool> endpoints_moved(endpoints.size());
|
563
|
+
size_t scheme_index = 0;
|
564
|
+
for (size_t i = 0; i < endpoints.size(); ++i) {
|
565
|
+
EndpointAddresses* endpoint;
|
566
|
+
do {
|
567
|
+
auto& iterator = address_family_order[scheme_index++ %
|
568
|
+
address_family_order.size()];
|
569
|
+
endpoint = iterator.Next(endpoints, &endpoints_moved);
|
570
|
+
} while (endpoint == nullptr);
|
571
|
+
interleaved_endpoints.emplace_back(std::move(*endpoint));
|
572
|
+
}
|
573
|
+
endpoints = std::move(interleaved_endpoints);
|
574
|
+
args.addresses =
|
575
|
+
std::make_shared<EndpointAddressesListIterator>(std::move(endpoints));
|
576
|
+
}
|
577
|
+
}
|
578
|
+
// If the update contains a resolver error and we have a previous update
|
579
|
+
// that was not a resolver error, keep using the previous addresses.
|
580
|
+
if (!args.addresses.ok() && latest_update_args_.config != nullptr) {
|
581
|
+
args.addresses = std::move(latest_update_args_.addresses);
|
582
|
+
}
|
583
|
+
// Update latest_update_args_.
|
584
|
+
latest_update_args_ = std::move(args);
|
585
|
+
// If we are not in idle, start connection attempt immediately.
|
586
|
+
// Otherwise, we defer the attempt into ExitIdleLocked().
|
587
|
+
if (!IsIdle()) {
|
588
|
+
AttemptToConnectUsingLatestUpdateArgsLocked();
|
589
|
+
}
|
590
|
+
return status;
|
591
|
+
}
|
592
|
+
|
593
|
+
void PickFirst::UpdateState(grpc_connectivity_state state,
|
594
|
+
const absl::Status& status,
|
595
|
+
RefCountedPtr<SubchannelPicker> picker) {
|
596
|
+
state_ = state;
|
597
|
+
channel_control_helper()->UpdateState(state, status, std::move(picker));
|
598
|
+
}
|
599
|
+
|
600
|
+
void PickFirst::UnsetSelectedSubchannel() {
|
601
|
+
if (selected_ != nullptr && health_data_watcher_ != nullptr) {
|
602
|
+
selected_->subchannel()->CancelDataWatcher(health_data_watcher_);
|
603
|
+
}
|
604
|
+
selected_.reset();
|
605
|
+
health_watcher_ = nullptr;
|
606
|
+
health_data_watcher_ = nullptr;
|
607
|
+
}
|
608
|
+
|
609
|
+
void PickFirst::GoIdle() {
|
610
|
+
// Unset the selected subchannel.
|
611
|
+
UnsetSelectedSubchannel();
|
612
|
+
// Drop the current subchannel list, if any.
|
613
|
+
subchannel_list_.reset();
|
614
|
+
// Request a re-resolution.
|
615
|
+
// TODO(qianchengz): We may want to request re-resolution in
|
616
|
+
// ExitIdleLocked() instead.
|
617
|
+
channel_control_helper()->RequestReresolution();
|
618
|
+
// Enter idle.
|
619
|
+
UpdateState(GRPC_CHANNEL_IDLE, absl::Status(),
|
620
|
+
MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
|
621
|
+
}
|
622
|
+
|
623
|
+
//
|
624
|
+
// PickFirst::HealthWatcher
|
625
|
+
//
|
626
|
+
|
627
|
+
void PickFirst::HealthWatcher::OnConnectivityStateChange(
|
628
|
+
grpc_connectivity_state new_state, absl::Status status) {
|
629
|
+
if (policy_->health_watcher_ != this) return;
|
630
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
631
|
+
gpr_log(GPR_INFO, "[PF %p] health watch state update: %s (%s)",
|
632
|
+
policy_.get(), ConnectivityStateName(new_state),
|
633
|
+
status.ToString().c_str());
|
634
|
+
}
|
635
|
+
switch (new_state) {
|
636
|
+
case GRPC_CHANNEL_READY:
|
637
|
+
policy_->channel_control_helper()->UpdateState(
|
638
|
+
GRPC_CHANNEL_READY, absl::OkStatus(),
|
639
|
+
MakeRefCounted<Picker>(policy_->selected_->subchannel()->Ref()));
|
640
|
+
break;
|
641
|
+
case GRPC_CHANNEL_IDLE:
|
642
|
+
// If the subchannel becomes disconnected, the health watcher
|
643
|
+
// might happen to see the change before the raw connectivity
|
644
|
+
// state watcher does. In this case, ignore it, since the raw
|
645
|
+
// connectivity state watcher will handle it shortly.
|
646
|
+
break;
|
647
|
+
case GRPC_CHANNEL_CONNECTING:
|
648
|
+
policy_->channel_control_helper()->UpdateState(
|
649
|
+
new_state, absl::OkStatus(),
|
650
|
+
MakeRefCounted<QueuePicker>(policy_->Ref()));
|
651
|
+
break;
|
652
|
+
case GRPC_CHANNEL_TRANSIENT_FAILURE:
|
653
|
+
policy_->channel_control_helper()->UpdateState(
|
654
|
+
GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
655
|
+
MakeRefCounted<TransientFailurePicker>(status));
|
656
|
+
break;
|
657
|
+
case GRPC_CHANNEL_SHUTDOWN:
|
658
|
+
Crash("health watcher reported state SHUTDOWN");
|
659
|
+
}
|
660
|
+
}
|
661
|
+
|
662
|
+
//
|
663
|
+
// PickFirst::SubchannelList::SubchannelData::SubchannelState
|
664
|
+
//
|
665
|
+
|
666
|
+
PickFirst::SubchannelList::SubchannelData::SubchannelState::SubchannelState(
|
667
|
+
SubchannelData* subchannel_data,
|
668
|
+
RefCountedPtr<SubchannelInterface> subchannel)
|
669
|
+
: subchannel_data_(subchannel_data),
|
670
|
+
pick_first_(subchannel_data_->subchannel_list_->policy_),
|
671
|
+
subchannel_(std::move(subchannel)) {
|
672
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
673
|
+
gpr_log(GPR_INFO,
|
674
|
+
"[PF %p] subchannel state %p (subchannel %p): starting watch",
|
675
|
+
pick_first_.get(), this, subchannel_.get());
|
676
|
+
}
|
677
|
+
auto watcher = std::make_unique<Watcher>(Ref(DEBUG_LOCATION, "Watcher"));
|
678
|
+
watcher_ = watcher.get();
|
679
|
+
subchannel_->WatchConnectivityState(std::move(watcher));
|
680
|
+
}
|
681
|
+
|
682
|
+
void PickFirst::SubchannelList::SubchannelData::SubchannelState::Orphan() {
|
683
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
684
|
+
gpr_log(GPR_INFO,
|
685
|
+
"[PF %p] subchannel state %p (subchannel %p): "
|
686
|
+
"cancelling watch and unreffing subchannel",
|
687
|
+
pick_first_.get(), this, subchannel_.get());
|
688
|
+
}
|
689
|
+
subchannel_data_ = nullptr;
|
690
|
+
subchannel_->CancelConnectivityStateWatch(watcher_);
|
691
|
+
watcher_ = nullptr;
|
692
|
+
subchannel_.reset();
|
693
|
+
pick_first_.reset();
|
694
|
+
Unref();
|
695
|
+
}
|
696
|
+
|
697
|
+
void PickFirst::SubchannelList::SubchannelData::SubchannelState::Select() {
|
698
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
699
|
+
gpr_log(GPR_INFO, "Pick First %p selected subchannel %p", pick_first_.get(),
|
700
|
+
subchannel_.get());
|
701
|
+
}
|
702
|
+
CHECK_NE(subchannel_data_, nullptr);
|
703
|
+
pick_first_->UnsetSelectedSubchannel(); // Cancel health watch, if any.
|
704
|
+
pick_first_->selected_ = std::move(subchannel_data_->subchannel_state_);
|
705
|
+
// If health checking is enabled, start the health watch, but don't
|
706
|
+
// report a new picker -- we want to stay in CONNECTING while we wait
|
707
|
+
// for the health status notification.
|
708
|
+
// If health checking is NOT enabled, report READY.
|
709
|
+
if (pick_first_->enable_health_watch_) {
|
710
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
711
|
+
gpr_log(GPR_INFO, "[PF %p] starting health watch", pick_first_.get());
|
712
|
+
}
|
713
|
+
auto watcher = std::make_unique<HealthWatcher>(
|
714
|
+
pick_first_.Ref(DEBUG_LOCATION, "HealthWatcher"));
|
715
|
+
pick_first_->health_watcher_ = watcher.get();
|
716
|
+
auto health_data_watcher = MakeHealthCheckWatcher(
|
717
|
+
pick_first_->work_serializer(),
|
718
|
+
subchannel_data_->subchannel_list_->args_, std::move(watcher));
|
719
|
+
pick_first_->health_data_watcher_ = health_data_watcher.get();
|
720
|
+
subchannel_->AddDataWatcher(std::move(health_data_watcher));
|
721
|
+
} else {
|
722
|
+
pick_first_->UpdateState(GRPC_CHANNEL_READY, absl::Status(),
|
723
|
+
MakeRefCounted<Picker>(subchannel_));
|
724
|
+
}
|
725
|
+
// Report successful connection.
|
726
|
+
// We consider it a successful connection attempt only if the
|
727
|
+
// previous state was CONNECTING. In particular, we don't want to
|
728
|
+
// increment this counter if we got a new address list and found the
|
729
|
+
// existing connection already in state READY.
|
730
|
+
if (subchannel_data_->connectivity_state_ == GRPC_CHANNEL_CONNECTING) {
|
731
|
+
auto& stats_plugins =
|
732
|
+
pick_first_->channel_control_helper()->GetStatsPluginGroup();
|
733
|
+
stats_plugins.AddCounter(
|
734
|
+
kMetricConnectionAttemptsSucceeded, 1,
|
735
|
+
{pick_first_->channel_control_helper()->GetTarget()}, {});
|
736
|
+
}
|
737
|
+
// Drop our pointer to subchannel_data_, so that we know not to
|
738
|
+
// interact with it on subsequent connectivity state updates.
|
739
|
+
subchannel_data_ = nullptr;
|
740
|
+
// Clean up subchannel list.
|
741
|
+
pick_first_->subchannel_list_.reset();
|
742
|
+
}
|
743
|
+
|
744
|
+
void PickFirst::SubchannelList::SubchannelData::SubchannelState::
|
745
|
+
OnConnectivityStateChange(grpc_connectivity_state new_state,
|
746
|
+
absl::Status status) {
|
747
|
+
if (watcher_ == nullptr) return;
|
748
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
749
|
+
gpr_log(GPR_INFO,
|
750
|
+
"[PF %p] subchannel state %p (subchannel %p): connectivity "
|
751
|
+
"changed: new_state=%s, status=%s, watcher=%p, "
|
752
|
+
"subchannel_data_=%p, pick_first_->selected_=%p",
|
753
|
+
pick_first_.get(), this, subchannel_.get(),
|
754
|
+
ConnectivityStateName(new_state), status.ToString().c_str(),
|
755
|
+
watcher_, subchannel_data_, pick_first_->selected_.get());
|
756
|
+
}
|
757
|
+
// If we're still part of a subchannel list trying to connect, check
|
758
|
+
// if we're connected.
|
759
|
+
if (subchannel_data_ != nullptr) {
|
760
|
+
// If the subchannel is READY, use it.
|
761
|
+
// Otherwise, tell the subchannel list to keep trying.
|
762
|
+
if (new_state == GRPC_CHANNEL_READY) {
|
763
|
+
Select();
|
764
|
+
} else {
|
765
|
+
subchannel_data_->OnConnectivityStateChange(new_state, std::move(status));
|
766
|
+
}
|
767
|
+
return;
|
768
|
+
}
|
769
|
+
// We aren't trying to connect, so we must be the selected subchannel.
|
770
|
+
CHECK(pick_first_->selected_.get() == this);
|
771
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
772
|
+
gpr_log(GPR_INFO,
|
773
|
+
"Pick First %p selected subchannel connectivity changed to %s",
|
774
|
+
pick_first_.get(), ConnectivityStateName(new_state));
|
775
|
+
}
|
776
|
+
// Any state change is considered to be a failure of the existing
|
777
|
+
// connection. Report the failure.
|
778
|
+
auto& stats_plugins =
|
779
|
+
pick_first_->channel_control_helper()->GetStatsPluginGroup();
|
780
|
+
stats_plugins.AddCounter(kMetricDisconnections, 1,
|
781
|
+
{pick_first_->channel_control_helper()->GetTarget()},
|
782
|
+
{});
|
783
|
+
// Report IDLE.
|
784
|
+
pick_first_->GoIdle();
|
785
|
+
}
|
786
|
+
|
787
|
+
//
|
788
|
+
// PickFirst::SubchannelList::SubchannelData
|
789
|
+
//
|
790
|
+
|
791
|
+
PickFirst::SubchannelList::SubchannelData::SubchannelData(
|
792
|
+
SubchannelList* subchannel_list, size_t index,
|
793
|
+
RefCountedPtr<SubchannelInterface> subchannel)
|
794
|
+
: subchannel_list_(subchannel_list), index_(index) {
|
795
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
796
|
+
gpr_log(GPR_INFO,
|
797
|
+
"[PF %p] subchannel list %p index %" PRIuPTR
|
798
|
+
": creating subchannel data",
|
799
|
+
subchannel_list_->policy_.get(), subchannel_list_, index_);
|
800
|
+
}
|
801
|
+
subchannel_state_ =
|
802
|
+
MakeOrphanable<SubchannelState>(this, std::move(subchannel));
|
803
|
+
}
|
804
|
+
|
805
|
+
void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
806
|
+
grpc_connectivity_state new_state, absl::Status status) {
|
807
|
+
PickFirst* p = subchannel_list_->policy_.get();
|
808
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
809
|
+
gpr_log(
|
810
|
+
GPR_INFO,
|
811
|
+
"[PF %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
|
812
|
+
" (subchannel_state %p): connectivity changed: old_state=%s, "
|
813
|
+
"new_state=%s, status=%s, seen_transient_failure=%d, p->selected_=%p, "
|
814
|
+
"p->subchannel_list_=%p, p->subchannel_list_->shutting_down_=%d",
|
815
|
+
p, subchannel_list_, index_, subchannel_list_->size(),
|
816
|
+
subchannel_state_.get(),
|
817
|
+
(connectivity_state_.has_value()
|
818
|
+
? ConnectivityStateName(*connectivity_state_)
|
819
|
+
: "N/A"),
|
820
|
+
ConnectivityStateName(new_state), status.ToString().c_str(),
|
821
|
+
seen_transient_failure_, p->selected_.get(), p->subchannel_list_.get(),
|
822
|
+
p->subchannel_list_->shutting_down_);
|
823
|
+
}
|
824
|
+
if (subchannel_list_->shutting_down_) return;
|
825
|
+
// The notification must be for a subchannel in the current list.
|
826
|
+
CHECK(subchannel_list_ == p->subchannel_list_.get());
|
827
|
+
// SHUTDOWN should never happen.
|
828
|
+
CHECK(new_state != GRPC_CHANNEL_SHUTDOWN);
|
829
|
+
// READY should be caught by SubchannelState, in which case it will
|
830
|
+
// not call us in the first place.
|
831
|
+
CHECK(new_state != GRPC_CHANNEL_READY);
|
832
|
+
// Update state.
|
833
|
+
absl::optional<grpc_connectivity_state> old_state = connectivity_state_;
|
834
|
+
connectivity_state_ = new_state;
|
835
|
+
connectivity_status_ = std::move(status);
|
836
|
+
// Make sure we note when a subchannel has seen TRANSIENT_FAILURE.
|
837
|
+
bool prev_seen_transient_failure = seen_transient_failure_;
|
838
|
+
if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
839
|
+
seen_transient_failure_ = true;
|
840
|
+
subchannel_list_->last_failure_ = connectivity_status_;
|
841
|
+
}
|
842
|
+
// If this is the initial connectivity state update for this subchannel,
|
843
|
+
// increment the counter in the subchannel list.
|
844
|
+
if (!old_state.has_value()) {
|
845
|
+
++subchannel_list_->num_subchannels_seen_initial_notification_;
|
846
|
+
}
|
847
|
+
// If we haven't yet seen the initial connectivity state notification
|
848
|
+
// for all subchannels, do nothing.
|
849
|
+
if (!subchannel_list_->AllSubchannelsSeenInitialState()) return;
|
850
|
+
// If we're still here and this is the initial connectivity state
|
851
|
+
// notification for this subchannel, that means it was the last one to
|
852
|
+
// see its initial notification. So we now have enough state to
|
853
|
+
// figure out how to proceed.
|
854
|
+
if (!old_state.has_value()) {
|
855
|
+
// If we already have a selected subchannel and we got here, that
|
856
|
+
// means that none of the subchannels on the new list are in READY
|
857
|
+
// state, which means that the address we're currently connected to
|
858
|
+
// is not in the new list. In that case, we drop the current
|
859
|
+
// connection and report IDLE.
|
860
|
+
if (p->selected_ != nullptr) {
|
861
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
862
|
+
gpr_log(GPR_INFO,
|
863
|
+
"[PF %p] subchannel list %p: new update has no subchannels in "
|
864
|
+
"state READY; dropping existing connection and going IDLE",
|
865
|
+
p, subchannel_list_);
|
866
|
+
}
|
867
|
+
p->GoIdle();
|
868
|
+
} else {
|
869
|
+
// Start trying to connect, starting with the first subchannel.
|
870
|
+
subchannel_list_->StartConnectingNextSubchannel();
|
871
|
+
}
|
872
|
+
return;
|
873
|
+
}
|
874
|
+
// We've already started trying to connect. Any subchannel that
|
875
|
+
// reports TF is a connection attempt failure.
|
876
|
+
if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
877
|
+
auto& stats_plugins = subchannel_list_->policy_->channel_control_helper()
|
878
|
+
->GetStatsPluginGroup();
|
879
|
+
stats_plugins.AddCounter(
|
880
|
+
kMetricConnectionAttemptsFailed, 1,
|
881
|
+
{subchannel_list_->policy_->channel_control_helper()->GetTarget()}, {});
|
882
|
+
}
|
883
|
+
// Otherwise, process connectivity state change.
|
884
|
+
switch (*connectivity_state_) {
|
885
|
+
case GRPC_CHANNEL_TRANSIENT_FAILURE: {
|
886
|
+
// If this is the first failure we've seen on this subchannel,
|
887
|
+
// then we're still in the Happy Eyeballs pass.
|
888
|
+
if (!prev_seen_transient_failure && seen_transient_failure_) {
|
889
|
+
// If a connection attempt fails before the timer fires, then
|
890
|
+
// cancel the timer and start connecting on the next subchannel.
|
891
|
+
if (index_ == subchannel_list_->attempting_index_) {
|
892
|
+
if (subchannel_list_->timer_handle_.has_value()) {
|
893
|
+
p->channel_control_helper()->GetEventEngine()->Cancel(
|
894
|
+
*subchannel_list_->timer_handle_);
|
895
|
+
}
|
896
|
+
++subchannel_list_->attempting_index_;
|
897
|
+
subchannel_list_->StartConnectingNextSubchannel();
|
898
|
+
} else {
|
899
|
+
// If this was the last subchannel to fail, check if the Happy
|
900
|
+
// Eyeballs pass is complete.
|
901
|
+
subchannel_list_->MaybeFinishHappyEyeballsPass();
|
902
|
+
}
|
903
|
+
} else if (subchannel_list_->IsHappyEyeballsPassComplete()) {
|
904
|
+
// We're done with the initial Happy Eyeballs pass and in a mode
|
905
|
+
// where we're attempting to connect to every subchannel in
|
906
|
+
// parallel. We count the number of failed connection attempts,
|
907
|
+
// and when that is equal to the number of subchannels, request
|
908
|
+
// re-resolution and report TRANSIENT_FAILURE again, so that the
|
909
|
+
// caller has the most recent status message. Note that this
|
910
|
+
// isn't necessarily the same as saying that we've seen one
|
911
|
+
// failure for each subchannel in the list, because the backoff
|
912
|
+
// state may be different in each subchannel, so we may have seen
|
913
|
+
// one subchannel fail more than once and another subchannel not
|
914
|
+
// fail at all. But it's a good enough heuristic.
|
915
|
+
++subchannel_list_->num_failures_;
|
916
|
+
if (subchannel_list_->num_failures_ % subchannel_list_->size() == 0) {
|
917
|
+
p->channel_control_helper()->RequestReresolution();
|
918
|
+
status = absl::UnavailableError(absl::StrCat(
|
919
|
+
(p->omit_status_message_prefix_
|
920
|
+
? ""
|
921
|
+
: "failed to connect to all addresses; last error: "),
|
922
|
+
connectivity_status_.ToString()));
|
923
|
+
p->UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
924
|
+
MakeRefCounted<TransientFailurePicker>(status));
|
925
|
+
}
|
926
|
+
}
|
927
|
+
break;
|
928
|
+
}
|
929
|
+
case GRPC_CHANNEL_IDLE:
|
930
|
+
// If we've finished the first Happy Eyeballs pass, then we go
|
931
|
+
// into a mode where we immediately try to connect to every
|
932
|
+
// subchannel in parallel.
|
933
|
+
if (subchannel_list_->IsHappyEyeballsPassComplete()) {
|
934
|
+
subchannel_state_->RequestConnection();
|
935
|
+
}
|
936
|
+
break;
|
937
|
+
case GRPC_CHANNEL_CONNECTING:
|
938
|
+
// Only update connectivity state only if we're not already in
|
939
|
+
// TRANSIENT_FAILURE.
|
940
|
+
// TODO(roth): Squelch duplicate CONNECTING updates.
|
941
|
+
if (p->state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
942
|
+
p->UpdateState(GRPC_CHANNEL_CONNECTING, absl::Status(),
|
943
|
+
MakeRefCounted<QueuePicker>(nullptr));
|
944
|
+
}
|
945
|
+
break;
|
946
|
+
default:
|
947
|
+
// We handled READY above, and we should never see SHUTDOWN.
|
948
|
+
GPR_UNREACHABLE_CODE(break);
|
949
|
+
}
|
950
|
+
}
|
951
|
+
|
952
|
+
void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
|
953
|
+
CHECK(connectivity_state_.has_value());
|
954
|
+
if (connectivity_state_ == GRPC_CHANNEL_IDLE) {
|
955
|
+
subchannel_state_->RequestConnection();
|
956
|
+
} else {
|
957
|
+
CHECK(connectivity_state_ == GRPC_CHANNEL_CONNECTING);
|
958
|
+
}
|
959
|
+
// If this is not the last subchannel in the list, start the timer.
|
960
|
+
if (index_ != subchannel_list_->size() - 1) {
|
961
|
+
PickFirst* p = subchannel_list_->policy_.get();
|
962
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
963
|
+
gpr_log(GPR_INFO,
|
964
|
+
"Pick First %p subchannel list %p: starting Connection "
|
965
|
+
"Attempt Delay timer for %" PRId64 "ms for index %" PRIuPTR,
|
966
|
+
p, subchannel_list_, p->connection_attempt_delay_.millis(),
|
967
|
+
index_);
|
968
|
+
}
|
969
|
+
subchannel_list_->timer_handle_ =
|
970
|
+
p->channel_control_helper()->GetEventEngine()->RunAfter(
|
971
|
+
p->connection_attempt_delay_,
|
972
|
+
[subchannel_list =
|
973
|
+
subchannel_list_->Ref(DEBUG_LOCATION, "timer")]() mutable {
|
974
|
+
ApplicationCallbackExecCtx application_exec_ctx;
|
975
|
+
ExecCtx exec_ctx;
|
976
|
+
auto* sl = subchannel_list.get();
|
977
|
+
sl->policy_->work_serializer()->Run(
|
978
|
+
[subchannel_list = std::move(subchannel_list)]() {
|
979
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
980
|
+
gpr_log(GPR_INFO,
|
981
|
+
"Pick First %p subchannel list %p: Connection "
|
982
|
+
"Attempt Delay timer fired (shutting_down=%d, "
|
983
|
+
"selected=%p)",
|
984
|
+
subchannel_list->policy_.get(),
|
985
|
+
subchannel_list.get(),
|
986
|
+
subchannel_list->shutting_down_,
|
987
|
+
subchannel_list->policy_->selected_.get());
|
988
|
+
}
|
989
|
+
if (subchannel_list->shutting_down_) return;
|
990
|
+
if (subchannel_list->policy_->selected_ != nullptr) return;
|
991
|
+
++subchannel_list->attempting_index_;
|
992
|
+
subchannel_list->StartConnectingNextSubchannel();
|
993
|
+
},
|
994
|
+
DEBUG_LOCATION);
|
995
|
+
});
|
996
|
+
}
|
997
|
+
}
|
998
|
+
|
999
|
+
//
|
1000
|
+
// PickFirst::SubchannelList
|
77
1001
|
//
|
78
1002
|
|
79
|
-
|
1003
|
+
PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
|
1004
|
+
EndpointAddressesIterator* addresses,
|
1005
|
+
const ChannelArgs& args)
|
1006
|
+
: InternallyRefCounted<SubchannelList>(
|
1007
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) ? "SubchannelList"
|
1008
|
+
: nullptr),
|
1009
|
+
policy_(std::move(policy)),
|
1010
|
+
args_(args.Remove(GRPC_ARG_INTERNAL_PICK_FIRST_ENABLE_HEALTH_CHECKING)
|
1011
|
+
.Remove(
|
1012
|
+
GRPC_ARG_INTERNAL_PICK_FIRST_OMIT_STATUS_MESSAGE_PREFIX)) {
|
1013
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1014
|
+
gpr_log(GPR_INFO, "[PF %p] Creating subchannel list %p - channel args: %s",
|
1015
|
+
policy_.get(), this, args_.ToString().c_str());
|
1016
|
+
}
|
1017
|
+
if (addresses == nullptr) return;
|
1018
|
+
// Create a subchannel for each address.
|
1019
|
+
addresses->ForEach([&](const EndpointAddresses& address) {
|
1020
|
+
CHECK_EQ(address.addresses().size(), 1u);
|
1021
|
+
RefCountedPtr<SubchannelInterface> subchannel =
|
1022
|
+
policy_->channel_control_helper()->CreateSubchannel(
|
1023
|
+
address.address(), address.args(), args_);
|
1024
|
+
if (subchannel == nullptr) {
|
1025
|
+
// Subchannel could not be created.
|
1026
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1027
|
+
gpr_log(GPR_INFO,
|
1028
|
+
"[PF %p] could not create subchannel for address %s, ignoring",
|
1029
|
+
policy_.get(), address.ToString().c_str());
|
1030
|
+
}
|
1031
|
+
return;
|
1032
|
+
}
|
1033
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1034
|
+
gpr_log(GPR_INFO,
|
1035
|
+
"[PF %p] subchannel list %p index %" PRIuPTR
|
1036
|
+
": Created subchannel %p for address %s",
|
1037
|
+
policy_.get(), this, subchannels_.size(), subchannel.get(),
|
1038
|
+
address.ToString().c_str());
|
1039
|
+
}
|
1040
|
+
subchannels_.emplace_back(std::make_unique<SubchannelData>(
|
1041
|
+
this, subchannels_.size(), std::move(subchannel)));
|
1042
|
+
});
|
1043
|
+
}
|
80
1044
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
1045
|
+
PickFirst::SubchannelList::~SubchannelList() {
|
1046
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1047
|
+
gpr_log(GPR_INFO, "[PF %p] Destroying subchannel_list %p", policy_.get(),
|
1048
|
+
this);
|
1049
|
+
}
|
1050
|
+
}
|
85
1051
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
1052
|
+
void PickFirst::SubchannelList::Orphan() {
|
1053
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1054
|
+
gpr_log(GPR_INFO, "[PF %p] Shutting down subchannel_list %p", policy_.get(),
|
1055
|
+
this);
|
1056
|
+
}
|
1057
|
+
CHECK(!shutting_down_);
|
1058
|
+
shutting_down_ = true;
|
1059
|
+
// Cancel Happy Eyeballs timer, if any.
|
1060
|
+
if (timer_handle_.has_value()) {
|
1061
|
+
policy_->channel_control_helper()->GetEventEngine()->Cancel(*timer_handle_);
|
93
1062
|
}
|
1063
|
+
Unref();
|
1064
|
+
}
|
94
1065
|
|
95
|
-
|
96
|
-
|
97
|
-
|
1066
|
+
void PickFirst::SubchannelList::ResetBackoffLocked() {
|
1067
|
+
for (auto& sd : subchannels_) {
|
1068
|
+
sd->ResetBackoffLocked();
|
1069
|
+
}
|
1070
|
+
}
|
1071
|
+
|
1072
|
+
void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
|
1073
|
+
// Find the next subchannel not in state TRANSIENT_FAILURE.
|
1074
|
+
// We skip subchannels in state TRANSIENT_FAILURE to avoid a
|
1075
|
+
// large recursion that could overflow the stack.
|
1076
|
+
for (; attempting_index_ < size(); ++attempting_index_) {
|
1077
|
+
SubchannelData* sc = subchannels_[attempting_index_].get();
|
1078
|
+
CHECK(sc->connectivity_state().has_value());
|
1079
|
+
if (sc->connectivity_state() != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
1080
|
+
// Found a subchannel not in TRANSIENT_FAILURE, so trigger a
|
1081
|
+
// connection attempt.
|
1082
|
+
sc->RequestConnectionWithTimer();
|
1083
|
+
return;
|
1084
|
+
}
|
1085
|
+
}
|
1086
|
+
// If we didn't find a subchannel to request a connection on, check to
|
1087
|
+
// see if the Happy Eyeballs pass is complete.
|
1088
|
+
MaybeFinishHappyEyeballsPass();
|
1089
|
+
}
|
1090
|
+
|
1091
|
+
void PickFirst::SubchannelList::MaybeFinishHappyEyeballsPass() {
|
1092
|
+
// Make sure all subchannels have finished a connection attempt before
|
1093
|
+
// we consider the Happy Eyeballs pass complete.
|
1094
|
+
if (!IsHappyEyeballsPassComplete()) return;
|
1095
|
+
// We didn't find another subchannel not in state TRANSIENT_FAILURE,
|
1096
|
+
// so report TRANSIENT_FAILURE and switch to a mode in which we try to
|
1097
|
+
// connect to all addresses in parallel.
|
1098
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1099
|
+
gpr_log(GPR_INFO,
|
1100
|
+
"Pick First %p subchannel list %p failed to connect to "
|
1101
|
+
"all subchannels",
|
1102
|
+
policy_.get(), this);
|
1103
|
+
}
|
1104
|
+
// Re-resolve and report TRANSIENT_FAILURE.
|
1105
|
+
policy_->channel_control_helper()->RequestReresolution();
|
1106
|
+
absl::Status status = absl::UnavailableError(
|
1107
|
+
absl::StrCat((policy_->omit_status_message_prefix_
|
1108
|
+
? ""
|
1109
|
+
: "failed to connect to all addresses; last error: "),
|
1110
|
+
last_failure_.ToString()));
|
1111
|
+
policy_->UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
1112
|
+
MakeRefCounted<TransientFailurePicker>(status));
|
1113
|
+
// Drop the existing (working) connection, if any. This may be
|
1114
|
+
// sub-optimal, but we can't ignore what the control plane told us.
|
1115
|
+
policy_->UnsetSelectedSubchannel();
|
1116
|
+
// We now transition into a mode where we try to connect to all
|
1117
|
+
// subchannels in parallel. For any subchannel currently in IDLE,
|
1118
|
+
// trigger a connection attempt. For any subchannel not currently in
|
1119
|
+
// IDLE, we will trigger a connection attempt when it does report IDLE.
|
1120
|
+
for (auto& sd : subchannels_) {
|
1121
|
+
if (sd->connectivity_state() == GRPC_CHANNEL_IDLE) {
|
1122
|
+
sd->RequestConnection();
|
1123
|
+
}
|
1124
|
+
}
|
1125
|
+
}
|
98
1126
|
|
99
|
-
|
1127
|
+
// TODO(roth): Remove this when the pick_first_new experiment is removed.
|
1128
|
+
class OldPickFirst final : public LoadBalancingPolicy {
|
100
1129
|
public:
|
101
|
-
explicit
|
1130
|
+
explicit OldPickFirst(Args args);
|
102
1131
|
|
103
1132
|
absl::string_view name() const override { return kPickFirst; }
|
104
1133
|
|
@@ -107,11 +1136,11 @@ class PickFirst : public LoadBalancingPolicy {
|
|
107
1136
|
void ResetBackoffLocked() override;
|
108
1137
|
|
109
1138
|
private:
|
110
|
-
~
|
1139
|
+
~OldPickFirst() override;
|
111
1140
|
|
112
|
-
class SubchannelList : public InternallyRefCounted<SubchannelList> {
|
1141
|
+
class SubchannelList final : public InternallyRefCounted<SubchannelList> {
|
113
1142
|
public:
|
114
|
-
class SubchannelData {
|
1143
|
+
class SubchannelData final {
|
115
1144
|
public:
|
116
1145
|
SubchannelData(SubchannelList* subchannel_list, size_t index,
|
117
1146
|
RefCountedPtr<SubchannelInterface> subchannel);
|
@@ -143,7 +1172,7 @@ class PickFirst : public LoadBalancingPolicy {
|
|
143
1172
|
|
144
1173
|
private:
|
145
1174
|
// Watcher for subchannel connectivity state.
|
146
|
-
class Watcher
|
1175
|
+
class Watcher final
|
147
1176
|
: public SubchannelInterface::ConnectivityStateWatcherInterface {
|
148
1177
|
public:
|
149
1178
|
Watcher(RefCountedPtr<SubchannelList> subchannel_list, size_t index)
|
@@ -178,10 +1207,6 @@ class PickFirst : public LoadBalancingPolicy {
|
|
178
1207
|
// subchannel.
|
179
1208
|
void ProcessUnselectedReadyLocked();
|
180
1209
|
|
181
|
-
// Reacts to the current connectivity state while trying to connect.
|
182
|
-
// TODO(roth): Remove this when we remove the Happy Eyeballs experiment.
|
183
|
-
void ReactToConnectivityStateLocked();
|
184
|
-
|
185
1210
|
// Backpointer to owning subchannel list. Not owned.
|
186
1211
|
SubchannelList* subchannel_list_;
|
187
1212
|
const size_t index_;
|
@@ -196,7 +1221,7 @@ class PickFirst : public LoadBalancingPolicy {
|
|
196
1221
|
bool seen_transient_failure_ = false;
|
197
1222
|
};
|
198
1223
|
|
199
|
-
SubchannelList(RefCountedPtr<
|
1224
|
+
SubchannelList(RefCountedPtr<OldPickFirst> policy,
|
200
1225
|
EndpointAddressesIterator* addresses,
|
201
1226
|
const ChannelArgs& args);
|
202
1227
|
|
@@ -242,7 +1267,7 @@ class PickFirst : public LoadBalancingPolicy {
|
|
242
1267
|
void MaybeFinishHappyEyeballsPass();
|
243
1268
|
|
244
1269
|
// Backpointer to owning policy.
|
245
|
-
RefCountedPtr<
|
1270
|
+
RefCountedPtr<OldPickFirst> policy_;
|
246
1271
|
|
247
1272
|
ChannelArgs args_;
|
248
1273
|
|
@@ -254,9 +1279,6 @@ class PickFirst : public LoadBalancingPolicy {
|
|
254
1279
|
// finished processing.
|
255
1280
|
bool shutting_down_ = false;
|
256
1281
|
|
257
|
-
// TODO(roth): Remove this when we remove the Happy Eyeballs experiment.
|
258
|
-
bool in_transient_failure_ = false;
|
259
|
-
|
260
1282
|
size_t num_subchannels_seen_initial_notification_ = 0;
|
261
1283
|
|
262
1284
|
// The index into subchannels_ to which we are currently attempting
|
@@ -275,10 +1297,10 @@ class PickFirst : public LoadBalancingPolicy {
|
|
275
1297
|
absl::Status last_failure_;
|
276
1298
|
};
|
277
1299
|
|
278
|
-
class HealthWatcher
|
1300
|
+
class HealthWatcher final
|
279
1301
|
: public SubchannelInterface::ConnectivityStateWatcherInterface {
|
280
1302
|
public:
|
281
|
-
explicit HealthWatcher(RefCountedPtr<
|
1303
|
+
explicit HealthWatcher(RefCountedPtr<OldPickFirst> policy)
|
282
1304
|
: policy_(std::move(policy)) {}
|
283
1305
|
|
284
1306
|
~HealthWatcher() override {
|
@@ -293,10 +1315,10 @@ class PickFirst : public LoadBalancingPolicy {
|
|
293
1315
|
}
|
294
1316
|
|
295
1317
|
private:
|
296
|
-
RefCountedPtr<
|
1318
|
+
RefCountedPtr<OldPickFirst> policy_;
|
297
1319
|
};
|
298
1320
|
|
299
|
-
class Picker : public SubchannelPicker {
|
1321
|
+
class Picker final : public SubchannelPicker {
|
300
1322
|
public:
|
301
1323
|
explicit Picker(RefCountedPtr<SubchannelInterface> subchannel)
|
302
1324
|
: subchannel_(std::move(subchannel)) {}
|
@@ -353,7 +1375,7 @@ class PickFirst : public LoadBalancingPolicy {
|
|
353
1375
|
absl::BitGen bit_gen_;
|
354
1376
|
};
|
355
1377
|
|
356
|
-
|
1378
|
+
OldPickFirst::OldPickFirst(Args args)
|
357
1379
|
: LoadBalancingPolicy(std::move(args)),
|
358
1380
|
enable_health_watch_(
|
359
1381
|
channel_args()
|
@@ -373,15 +1395,15 @@ PickFirst::PickFirst(Args args)
|
|
373
1395
|
}
|
374
1396
|
}
|
375
1397
|
|
376
|
-
|
1398
|
+
OldPickFirst::~OldPickFirst() {
|
377
1399
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
378
1400
|
gpr_log(GPR_INFO, "Destroying Pick First %p", this);
|
379
1401
|
}
|
380
|
-
|
381
|
-
|
1402
|
+
CHECK(subchannel_list_ == nullptr);
|
1403
|
+
CHECK(latest_pending_subchannel_list_ == nullptr);
|
382
1404
|
}
|
383
1405
|
|
384
|
-
void
|
1406
|
+
void OldPickFirst::ShutdownLocked() {
|
385
1407
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
386
1408
|
gpr_log(GPR_INFO, "Pick First %p Shutting down", this);
|
387
1409
|
}
|
@@ -391,7 +1413,7 @@ void PickFirst::ShutdownLocked() {
|
|
391
1413
|
latest_pending_subchannel_list_.reset();
|
392
1414
|
}
|
393
1415
|
|
394
|
-
void
|
1416
|
+
void OldPickFirst::ExitIdleLocked() {
|
395
1417
|
if (shutdown_) return;
|
396
1418
|
if (IsIdle()) {
|
397
1419
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
@@ -401,14 +1423,14 @@ void PickFirst::ExitIdleLocked() {
|
|
401
1423
|
}
|
402
1424
|
}
|
403
1425
|
|
404
|
-
void
|
1426
|
+
void OldPickFirst::ResetBackoffLocked() {
|
405
1427
|
if (subchannel_list_ != nullptr) subchannel_list_->ResetBackoffLocked();
|
406
1428
|
if (latest_pending_subchannel_list_ != nullptr) {
|
407
1429
|
latest_pending_subchannel_list_->ResetBackoffLocked();
|
408
1430
|
}
|
409
1431
|
}
|
410
1432
|
|
411
|
-
void
|
1433
|
+
void OldPickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
|
412
1434
|
// Create a subchannel list from latest_update_args_.
|
413
1435
|
EndpointAddressesIterator* addresses = nullptr;
|
414
1436
|
if (latest_update_args_.addresses.ok()) {
|
@@ -422,7 +1444,7 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
|
|
422
1444
|
latest_pending_subchannel_list_.get());
|
423
1445
|
}
|
424
1446
|
latest_pending_subchannel_list_ = MakeOrphanable<SubchannelList>(
|
425
|
-
RefAsSubclass<
|
1447
|
+
RefAsSubclass<OldPickFirst>(), addresses, latest_update_args_.args);
|
426
1448
|
// Empty update or no valid subchannels. Put the channel in
|
427
1449
|
// TRANSIENT_FAILURE and request re-resolution.
|
428
1450
|
if (latest_pending_subchannel_list_->size() == 0) {
|
@@ -448,36 +1470,7 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
|
|
448
1470
|
}
|
449
1471
|
}
|
450
1472
|
|
451
|
-
absl::
|
452
|
-
const char* uri_scheme = grpc_sockaddr_get_uri_scheme(&address);
|
453
|
-
return absl::string_view(uri_scheme == nullptr ? "other" : uri_scheme);
|
454
|
-
};
|
455
|
-
|
456
|
-
// An endpoint list iterator that returns only entries for a specific
|
457
|
-
// address family, as indicated by the URI scheme.
|
458
|
-
class AddressFamilyIterator {
|
459
|
-
public:
|
460
|
-
AddressFamilyIterator(absl::string_view scheme, size_t index)
|
461
|
-
: scheme_(scheme), index_(index) {}
|
462
|
-
|
463
|
-
EndpointAddresses* Next(EndpointAddressesList& endpoints,
|
464
|
-
std::vector<bool>* endpoints_moved) {
|
465
|
-
for (; index_ < endpoints.size(); ++index_) {
|
466
|
-
if (!(*endpoints_moved)[index_] &&
|
467
|
-
GetAddressFamily(endpoints[index_].address()) == scheme_) {
|
468
|
-
(*endpoints_moved)[index_] = true;
|
469
|
-
return &endpoints[index_++];
|
470
|
-
}
|
471
|
-
}
|
472
|
-
return nullptr;
|
473
|
-
}
|
474
|
-
|
475
|
-
private:
|
476
|
-
absl::string_view scheme_;
|
477
|
-
size_t index_;
|
478
|
-
};
|
479
|
-
|
480
|
-
absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
|
1473
|
+
absl::Status OldPickFirst::UpdateLocked(UpdateArgs args) {
|
481
1474
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
482
1475
|
if (args.addresses.ok()) {
|
483
1476
|
gpr_log(GPR_INFO, "Pick First %p received update", this);
|
@@ -513,34 +1506,30 @@ absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
|
|
513
1506
|
for (const auto& endpoint : endpoints) {
|
514
1507
|
for (const auto& address : endpoint.addresses()) {
|
515
1508
|
flattened_endpoints.emplace_back(address, endpoint.args());
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
flattened_endpoints.size() - 1);
|
522
|
-
}
|
1509
|
+
absl::string_view scheme = GetAddressFamily(address);
|
1510
|
+
bool inserted = address_families.insert(scheme).second;
|
1511
|
+
if (inserted) {
|
1512
|
+
address_family_order.emplace_back(scheme,
|
1513
|
+
flattened_endpoints.size() - 1);
|
523
1514
|
}
|
524
1515
|
}
|
525
1516
|
}
|
526
1517
|
endpoints = std::move(flattened_endpoints);
|
527
1518
|
// Interleave addresses as per RFC-8305 section 4.
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
interleaved_endpoints.emplace_back(std::move(*endpoint));
|
541
|
-
}
|
542
|
-
endpoints = std::move(interleaved_endpoints);
|
1519
|
+
EndpointAddressesList interleaved_endpoints;
|
1520
|
+
interleaved_endpoints.reserve(endpoints.size());
|
1521
|
+
std::vector<bool> endpoints_moved(endpoints.size());
|
1522
|
+
size_t scheme_index = 0;
|
1523
|
+
for (size_t i = 0; i < endpoints.size(); ++i) {
|
1524
|
+
EndpointAddresses* endpoint;
|
1525
|
+
do {
|
1526
|
+
auto& iterator = address_family_order[scheme_index++ %
|
1527
|
+
address_family_order.size()];
|
1528
|
+
endpoint = iterator.Next(endpoints, &endpoints_moved);
|
1529
|
+
} while (endpoint == nullptr);
|
1530
|
+
interleaved_endpoints.emplace_back(std::move(*endpoint));
|
543
1531
|
}
|
1532
|
+
endpoints = std::move(interleaved_endpoints);
|
544
1533
|
args.addresses =
|
545
1534
|
std::make_shared<EndpointAddressesListIterator>(std::move(endpoints));
|
546
1535
|
}
|
@@ -560,14 +1549,14 @@ absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
|
|
560
1549
|
return status;
|
561
1550
|
}
|
562
1551
|
|
563
|
-
void
|
564
|
-
|
565
|
-
|
1552
|
+
void OldPickFirst::UpdateState(grpc_connectivity_state state,
|
1553
|
+
const absl::Status& status,
|
1554
|
+
RefCountedPtr<SubchannelPicker> picker) {
|
566
1555
|
state_ = state;
|
567
1556
|
channel_control_helper()->UpdateState(state, status, std::move(picker));
|
568
1557
|
}
|
569
1558
|
|
570
|
-
void
|
1559
|
+
void OldPickFirst::UnsetSelectedSubchannel() {
|
571
1560
|
if (selected_ != nullptr && health_data_watcher_ != nullptr) {
|
572
1561
|
selected_->subchannel()->CancelDataWatcher(health_data_watcher_);
|
573
1562
|
}
|
@@ -577,10 +1566,10 @@ void PickFirst::UnsetSelectedSubchannel() {
|
|
577
1566
|
}
|
578
1567
|
|
579
1568
|
//
|
580
|
-
//
|
1569
|
+
// OldPickFirst::HealthWatcher
|
581
1570
|
//
|
582
1571
|
|
583
|
-
void
|
1572
|
+
void OldPickFirst::HealthWatcher::OnConnectivityStateChange(
|
584
1573
|
grpc_connectivity_state new_state, absl::Status status) {
|
585
1574
|
if (policy_->health_watcher_ != this) return;
|
586
1575
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
@@ -616,10 +1605,10 @@ void PickFirst::HealthWatcher::OnConnectivityStateChange(
|
|
616
1605
|
}
|
617
1606
|
|
618
1607
|
//
|
619
|
-
//
|
1608
|
+
// OldPickFirst::SubchannelList::SubchannelData
|
620
1609
|
//
|
621
1610
|
|
622
|
-
|
1611
|
+
OldPickFirst::SubchannelList::SubchannelData::SubchannelData(
|
623
1612
|
SubchannelList* subchannel_list, size_t index,
|
624
1613
|
RefCountedPtr<SubchannelInterface> subchannel)
|
625
1614
|
: subchannel_list_(subchannel_list),
|
@@ -638,7 +1627,7 @@ PickFirst::SubchannelList::SubchannelData::SubchannelData(
|
|
638
1627
|
subchannel_->WatchConnectivityState(std::move(watcher));
|
639
1628
|
}
|
640
1629
|
|
641
|
-
void
|
1630
|
+
void OldPickFirst::SubchannelList::SubchannelData::ShutdownLocked() {
|
642
1631
|
if (subchannel_ != nullptr) {
|
643
1632
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
644
1633
|
gpr_log(GPR_INFO,
|
@@ -653,9 +1642,9 @@ void PickFirst::SubchannelList::SubchannelData::ShutdownLocked() {
|
|
653
1642
|
}
|
654
1643
|
}
|
655
1644
|
|
656
|
-
void
|
1645
|
+
void OldPickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
657
1646
|
grpc_connectivity_state new_state, absl::Status status) {
|
658
|
-
|
1647
|
+
OldPickFirst* p = subchannel_list_->policy_.get();
|
659
1648
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
660
1649
|
gpr_log(
|
661
1650
|
GPR_INFO,
|
@@ -675,17 +1664,19 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
|
675
1664
|
p->latest_pending_subchannel_list_.get());
|
676
1665
|
}
|
677
1666
|
if (subchannel_list_->shutting_down_ || pending_watcher_ == nullptr) return;
|
1667
|
+
auto& stats_plugins = subchannel_list_->policy_->channel_control_helper()
|
1668
|
+
->GetStatsPluginGroup();
|
678
1669
|
// The notification must be for a subchannel in either the current or
|
679
1670
|
// latest pending subchannel lists.
|
680
|
-
|
681
|
-
|
682
|
-
|
1671
|
+
CHECK(subchannel_list_ == p->subchannel_list_.get() ||
|
1672
|
+
subchannel_list_ == p->latest_pending_subchannel_list_.get());
|
1673
|
+
CHECK(new_state != GRPC_CHANNEL_SHUTDOWN);
|
683
1674
|
absl::optional<grpc_connectivity_state> old_state = connectivity_state_;
|
684
1675
|
connectivity_state_ = new_state;
|
685
1676
|
connectivity_status_ = std::move(status);
|
686
1677
|
// Handle updates for the currently selected subchannel.
|
687
1678
|
if (p->selected_ == this) {
|
688
|
-
|
1679
|
+
CHECK(subchannel_list_ == p->subchannel_list_.get());
|
689
1680
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
690
1681
|
gpr_log(GPR_INFO,
|
691
1682
|
"Pick First %p selected subchannel connectivity changed to %s", p,
|
@@ -693,6 +1684,9 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
|
693
1684
|
}
|
694
1685
|
// Any state change is considered to be a failure of the existing
|
695
1686
|
// connection.
|
1687
|
+
stats_plugins.AddCounter(
|
1688
|
+
kMetricDisconnections, 1,
|
1689
|
+
{subchannel_list_->policy_->channel_control_helper()->GetTarget()}, {});
|
696
1690
|
// TODO(roth): We could check the connectivity states of all the
|
697
1691
|
// subchannels here, just in case one of them happens to be READY,
|
698
1692
|
// and we could switch to that rather than going IDLE.
|
@@ -712,9 +1706,7 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
|
712
1706
|
p->UnsetSelectedSubchannel();
|
713
1707
|
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
714
1708
|
// Set our state to that of the pending subchannel list.
|
715
|
-
if (
|
716
|
-
? p->subchannel_list_->IsHappyEyeballsPassComplete()
|
717
|
-
: p->subchannel_list_->in_transient_failure_) {
|
1709
|
+
if (p->subchannel_list_->IsHappyEyeballsPassComplete()) {
|
718
1710
|
status = absl::UnavailableError(absl::StrCat(
|
719
1711
|
"selected subchannel failed; switching to pending update; "
|
720
1712
|
"last failure: ",
|
@@ -746,8 +1738,15 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
|
746
1738
|
// select in place of the current one.
|
747
1739
|
// If the subchannel is READY, use it.
|
748
1740
|
if (new_state == GRPC_CHANNEL_READY) {
|
749
|
-
if
|
750
|
-
|
1741
|
+
// We consider it a successful connection attempt only if the
|
1742
|
+
// previous state was CONNECTING. In particular, we don't want to
|
1743
|
+
// increment this counter if we got a new address list and found the
|
1744
|
+
// existing connection already in state READY.
|
1745
|
+
if (old_state == GRPC_CHANNEL_CONNECTING) {
|
1746
|
+
stats_plugins.AddCounter(
|
1747
|
+
kMetricConnectionAttemptsSucceeded, 1,
|
1748
|
+
{subchannel_list_->policy_->channel_control_helper()->GetTarget()},
|
1749
|
+
{});
|
751
1750
|
}
|
752
1751
|
ProcessUnselectedReadyLocked();
|
753
1752
|
return;
|
@@ -771,20 +1770,15 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
|
771
1770
|
// see its initial notification. Start trying to connect, starting
|
772
1771
|
// with the first subchannel.
|
773
1772
|
if (!old_state.has_value()) {
|
774
|
-
if (!IsPickFirstHappyEyeballsEnabled()) {
|
775
|
-
subchannel_list_->subchannels_.front().ReactToConnectivityStateLocked();
|
776
|
-
return;
|
777
|
-
}
|
778
1773
|
subchannel_list_->StartConnectingNextSubchannel();
|
779
1774
|
return;
|
780
1775
|
}
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
return;
|
1776
|
+
// We've already started trying to connect. Any subchannel that
|
1777
|
+
// reports TF is a connection attempt failure.
|
1778
|
+
if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
1779
|
+
stats_plugins.AddCounter(
|
1780
|
+
kMetricConnectionAttemptsFailed, 1,
|
1781
|
+
{subchannel_list_->policy_->channel_control_helper()->GetTarget()}, {});
|
788
1782
|
}
|
789
1783
|
// Otherwise, process connectivity state change.
|
790
1784
|
switch (*connectivity_state_) {
|
@@ -855,109 +1849,17 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
|
|
855
1849
|
}
|
856
1850
|
}
|
857
1851
|
|
858
|
-
void
|
859
|
-
|
860
|
-
|
861
|
-
// Otherwise, process connectivity state.
|
862
|
-
switch (connectivity_state_.value()) {
|
863
|
-
case GRPC_CHANNEL_READY:
|
864
|
-
// Already handled this case above, so this should not happen.
|
865
|
-
GPR_UNREACHABLE_CODE(break);
|
866
|
-
case GRPC_CHANNEL_TRANSIENT_FAILURE: {
|
867
|
-
// Find the next subchannel not in state TRANSIENT_FAILURE.
|
868
|
-
// We skip subchannels in state TRANSIENT_FAILURE to avoid a
|
869
|
-
// large recursion that could overflow the stack.
|
870
|
-
SubchannelData* found_subchannel = nullptr;
|
871
|
-
for (size_t next_index = index_ + 1;
|
872
|
-
next_index < subchannel_list_->size(); ++next_index) {
|
873
|
-
SubchannelData* sc = &subchannel_list_->subchannels_[next_index];
|
874
|
-
GPR_ASSERT(sc->connectivity_state_.has_value());
|
875
|
-
if (sc->connectivity_state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
876
|
-
subchannel_list_->attempting_index_ = next_index;
|
877
|
-
found_subchannel = sc;
|
878
|
-
break;
|
879
|
-
}
|
880
|
-
}
|
881
|
-
// If we found another subchannel in the list not in state
|
882
|
-
// TRANSIENT_FAILURE, trigger the right behavior for that subchannel.
|
883
|
-
if (found_subchannel != nullptr) {
|
884
|
-
found_subchannel->ReactToConnectivityStateLocked();
|
885
|
-
break;
|
886
|
-
}
|
887
|
-
// We didn't find another subchannel not in state TRANSIENT_FAILURE,
|
888
|
-
// so report TRANSIENT_FAILURE and wait for the first subchannel
|
889
|
-
// in the list to report IDLE before continuing.
|
890
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
891
|
-
gpr_log(GPR_INFO,
|
892
|
-
"Pick First %p subchannel list %p failed to connect to "
|
893
|
-
"all subchannels",
|
894
|
-
p, subchannel_list_);
|
895
|
-
}
|
896
|
-
subchannel_list_->attempting_index_ = 0;
|
897
|
-
subchannel_list_->in_transient_failure_ = true;
|
898
|
-
// In case 2, swap to the new subchannel list. This means reporting
|
899
|
-
// TRANSIENT_FAILURE and dropping the existing (working) connection,
|
900
|
-
// but we can't ignore what the control plane has told us.
|
901
|
-
if (subchannel_list_ == p->latest_pending_subchannel_list_.get()) {
|
902
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
903
|
-
gpr_log(GPR_INFO,
|
904
|
-
"Pick First %p promoting pending subchannel list %p to "
|
905
|
-
"replace %p",
|
906
|
-
p, p->latest_pending_subchannel_list_.get(),
|
907
|
-
p->subchannel_list_.get());
|
908
|
-
}
|
909
|
-
p->UnsetSelectedSubchannel();
|
910
|
-
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
911
|
-
}
|
912
|
-
// If this is the current subchannel list (either because we were
|
913
|
-
// in case 1 or because we were in case 2 and just promoted it to
|
914
|
-
// be the current list), re-resolve and report new state.
|
915
|
-
if (subchannel_list_ == p->subchannel_list_.get()) {
|
916
|
-
p->channel_control_helper()->RequestReresolution();
|
917
|
-
absl::Status status = absl::UnavailableError(absl::StrCat(
|
918
|
-
(p->omit_status_message_prefix_
|
919
|
-
? ""
|
920
|
-
: "failed to connect to all addresses; last error: "),
|
921
|
-
connectivity_status_.ToString()));
|
922
|
-
p->UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
923
|
-
MakeRefCounted<TransientFailurePicker>(status));
|
924
|
-
}
|
925
|
-
// If the first subchannel is already IDLE, trigger the next connection
|
926
|
-
// attempt immediately. Otherwise, we'll wait for it to report
|
927
|
-
// its own connectivity state change.
|
928
|
-
auto& subchannel0 = subchannel_list_->subchannels_.front();
|
929
|
-
if (subchannel0.connectivity_state_ == GRPC_CHANNEL_IDLE) {
|
930
|
-
subchannel0.subchannel_->RequestConnection();
|
931
|
-
}
|
932
|
-
break;
|
933
|
-
}
|
934
|
-
case GRPC_CHANNEL_IDLE:
|
935
|
-
subchannel_->RequestConnection();
|
936
|
-
break;
|
937
|
-
case GRPC_CHANNEL_CONNECTING:
|
938
|
-
// Only update connectivity state in case 1, and only if we're not
|
939
|
-
// already in TRANSIENT_FAILURE.
|
940
|
-
if (subchannel_list_ == p->subchannel_list_.get() &&
|
941
|
-
p->state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
942
|
-
p->UpdateState(GRPC_CHANNEL_CONNECTING, absl::Status(),
|
943
|
-
MakeRefCounted<QueuePicker>(nullptr));
|
944
|
-
}
|
945
|
-
break;
|
946
|
-
case GRPC_CHANNEL_SHUTDOWN:
|
947
|
-
GPR_UNREACHABLE_CODE(break);
|
948
|
-
}
|
949
|
-
}
|
950
|
-
|
951
|
-
void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
|
952
|
-
GPR_ASSERT(connectivity_state_.has_value());
|
1852
|
+
void OldPickFirst::SubchannelList::SubchannelData::
|
1853
|
+
RequestConnectionWithTimer() {
|
1854
|
+
CHECK(connectivity_state_.has_value());
|
953
1855
|
if (connectivity_state_ == GRPC_CHANNEL_IDLE) {
|
954
1856
|
subchannel_->RequestConnection();
|
955
1857
|
} else {
|
956
|
-
|
1858
|
+
CHECK(connectivity_state_ == GRPC_CHANNEL_CONNECTING);
|
957
1859
|
}
|
958
1860
|
// If this is not the last subchannel in the list, start the timer.
|
959
1861
|
if (index_ != subchannel_list_->size() - 1) {
|
960
|
-
|
1862
|
+
OldPickFirst* p = subchannel_list_->policy_.get();
|
961
1863
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
962
1864
|
gpr_log(GPR_INFO,
|
963
1865
|
"Pick First %p subchannel list %p: starting Connection "
|
@@ -995,8 +1897,9 @@ void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
|
|
995
1897
|
}
|
996
1898
|
}
|
997
1899
|
|
998
|
-
void
|
999
|
-
|
1900
|
+
void OldPickFirst::SubchannelList::SubchannelData::
|
1901
|
+
ProcessUnselectedReadyLocked() {
|
1902
|
+
OldPickFirst* p = subchannel_list_->policy_.get();
|
1000
1903
|
// Cancel Happy Eyeballs timer, if any.
|
1001
1904
|
if (subchannel_list_->timer_handle_.has_value()) {
|
1002
1905
|
p->channel_control_helper()->GetEventEngine()->Cancel(
|
@@ -1011,8 +1914,8 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
|
|
1011
1914
|
// for a subchannel in p->latest_pending_subchannel_list_. The
|
1012
1915
|
// goal here is to find a subchannel from the update that we can
|
1013
1916
|
// select in place of the current one.
|
1014
|
-
|
1015
|
-
|
1917
|
+
CHECK(subchannel_list_ == p->subchannel_list_.get() ||
|
1918
|
+
subchannel_list_ == p->latest_pending_subchannel_list_.get());
|
1016
1919
|
// Case 2. Promote p->latest_pending_subchannel_list_ to p->subchannel_list_.
|
1017
1920
|
if (subchannel_list_ == p->latest_pending_subchannel_list_.get()) {
|
1018
1921
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
@@ -1022,6 +1925,7 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
|
|
1022
1925
|
p, p->latest_pending_subchannel_list_.get(),
|
1023
1926
|
p->subchannel_list_.get());
|
1024
1927
|
}
|
1928
|
+
p->UnsetSelectedSubchannel();
|
1025
1929
|
p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
|
1026
1930
|
}
|
1027
1931
|
// Cases 1 and 2.
|
@@ -1039,7 +1943,7 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
|
|
1039
1943
|
gpr_log(GPR_INFO, "[PF %p] starting health watch", p);
|
1040
1944
|
}
|
1041
1945
|
auto watcher = std::make_unique<HealthWatcher>(
|
1042
|
-
p->RefAsSubclass<
|
1946
|
+
p->RefAsSubclass<OldPickFirst>(DEBUG_LOCATION, "HealthWatcher"));
|
1043
1947
|
p->health_watcher_ = watcher.get();
|
1044
1948
|
auto health_data_watcher = MakeHealthCheckWatcher(
|
1045
1949
|
p->work_serializer(), subchannel_list_->args_, std::move(watcher));
|
@@ -1058,12 +1962,12 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
|
|
1058
1962
|
}
|
1059
1963
|
|
1060
1964
|
//
|
1061
|
-
//
|
1965
|
+
// OldPickFirst::SubchannelList
|
1062
1966
|
//
|
1063
1967
|
|
1064
|
-
|
1065
|
-
|
1066
|
-
|
1968
|
+
OldPickFirst::SubchannelList::SubchannelList(
|
1969
|
+
RefCountedPtr<OldPickFirst> policy, EndpointAddressesIterator* addresses,
|
1970
|
+
const ChannelArgs& args)
|
1067
1971
|
: InternallyRefCounted<SubchannelList>(
|
1068
1972
|
GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) ? "SubchannelList"
|
1069
1973
|
: nullptr),
|
@@ -1078,7 +1982,7 @@ PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
|
|
1078
1982
|
if (addresses == nullptr) return;
|
1079
1983
|
// Create a subchannel for each address.
|
1080
1984
|
addresses->ForEach([&](const EndpointAddresses& address) {
|
1081
|
-
|
1985
|
+
CHECK_EQ(address.addresses().size(), 1u);
|
1082
1986
|
RefCountedPtr<SubchannelInterface> subchannel =
|
1083
1987
|
policy_->channel_control_helper()->CreateSubchannel(
|
1084
1988
|
address.address(), address.args(), args_);
|
@@ -1102,19 +2006,19 @@ PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
|
|
1102
2006
|
});
|
1103
2007
|
}
|
1104
2008
|
|
1105
|
-
|
2009
|
+
OldPickFirst::SubchannelList::~SubchannelList() {
|
1106
2010
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1107
2011
|
gpr_log(GPR_INFO, "[PF %p] Destroying subchannel_list %p", policy_.get(),
|
1108
2012
|
this);
|
1109
2013
|
}
|
1110
2014
|
}
|
1111
2015
|
|
1112
|
-
void
|
2016
|
+
void OldPickFirst::SubchannelList::Orphan() {
|
1113
2017
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
|
1114
2018
|
gpr_log(GPR_INFO, "[PF %p] Shutting down subchannel_list %p", policy_.get(),
|
1115
2019
|
this);
|
1116
2020
|
}
|
1117
|
-
|
2021
|
+
CHECK(!shutting_down_);
|
1118
2022
|
shutting_down_ = true;
|
1119
2023
|
for (auto& sd : subchannels_) {
|
1120
2024
|
sd.ShutdownLocked();
|
@@ -1125,19 +2029,19 @@ void PickFirst::SubchannelList::Orphan() {
|
|
1125
2029
|
Unref();
|
1126
2030
|
}
|
1127
2031
|
|
1128
|
-
void
|
2032
|
+
void OldPickFirst::SubchannelList::ResetBackoffLocked() {
|
1129
2033
|
for (auto& sd : subchannels_) {
|
1130
2034
|
sd.ResetBackoffLocked();
|
1131
2035
|
}
|
1132
2036
|
}
|
1133
2037
|
|
1134
|
-
void
|
2038
|
+
void OldPickFirst::SubchannelList::StartConnectingNextSubchannel() {
|
1135
2039
|
// Find the next subchannel not in state TRANSIENT_FAILURE.
|
1136
2040
|
// We skip subchannels in state TRANSIENT_FAILURE to avoid a
|
1137
2041
|
// large recursion that could overflow the stack.
|
1138
2042
|
for (; attempting_index_ < size(); ++attempting_index_) {
|
1139
2043
|
SubchannelData* sc = &subchannels_[attempting_index_];
|
1140
|
-
|
2044
|
+
CHECK(sc->connectivity_state().has_value());
|
1141
2045
|
if (sc->connectivity_state() != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
1142
2046
|
// Found a subchannel not in TRANSIENT_FAILURE, so trigger a
|
1143
2047
|
// connection attempt.
|
@@ -1150,7 +2054,7 @@ void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
|
|
1150
2054
|
MaybeFinishHappyEyeballsPass();
|
1151
2055
|
}
|
1152
2056
|
|
1153
|
-
void
|
2057
|
+
void OldPickFirst::SubchannelList::MaybeFinishHappyEyeballsPass() {
|
1154
2058
|
// Make sure all subchannels have finished a connection attempt before
|
1155
2059
|
// we consider the Happy Eyeballs pass complete.
|
1156
2060
|
if (!IsHappyEyeballsPassComplete()) return;
|
@@ -1206,10 +2110,13 @@ void PickFirst::SubchannelList::MaybeFinishHappyEyeballsPass() {
|
|
1206
2110
|
// factory
|
1207
2111
|
//
|
1208
2112
|
|
1209
|
-
class PickFirstFactory : public LoadBalancingPolicyFactory {
|
2113
|
+
class PickFirstFactory final : public LoadBalancingPolicyFactory {
|
1210
2114
|
public:
|
1211
2115
|
OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
|
1212
2116
|
LoadBalancingPolicy::Args args) const override {
|
2117
|
+
if (!IsPickFirstNewEnabled()) {
|
2118
|
+
return MakeOrphanable<OldPickFirst>(std::move(args));
|
2119
|
+
}
|
1213
2120
|
return MakeOrphanable<PickFirst>(std::move(args));
|
1214
2121
|
}
|
1215
2122
|
|