grpc 1.48.0 → 1.56.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +501 -260
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +99 -36
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -1
- data/include/grpc/event_engine/slice.h +24 -4
- data/include/grpc/event_engine/slice_buffer.h +44 -3
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +3 -13
- data/include/grpc/grpc_audit_logging.h +96 -0
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/grpc_security.h +4 -0
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
- data/include/grpc/impl/codegen/atm_windows.h +3 -108
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +3 -82
- data/include/grpc/impl/codegen/connectivity_state.h +3 -20
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +2 -34
- data/include/grpc/impl/codegen/grpc_types.h +3 -790
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -766
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +3 -106
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +838 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +7 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/json.h +218 -0
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +31 -6
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +164 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/census/grpc_context.cc +17 -18
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +34 -28
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +7 -6
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +4 -4
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -1
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.cc +30 -41
- data/src/core/ext/filters/client_channel/backup_poller.h +24 -27
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
- data/src/core/ext/filters/client_channel/client_channel.cc +1135 -1201
- data/src/core/ext/filters/client_channel/client_channel.h +170 -195
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +36 -37
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -46
- data/src/core/ext/filters/client_channel/client_channel_factory.h +5 -13
- data/src/core/ext/filters/client_channel/client_channel_internal.h +77 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -34
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -26
- data/src/core/ext/filters/client_channel/config_selector.h +34 -56
- data/src/core/ext/filters/client_channel/connector.h +13 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
- data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +125 -112
- data/src/core/ext/filters/client_channel/http_proxy.h +36 -32
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +29 -21
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +27 -18
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -132
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +40 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +325 -360
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -24
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +30 -104
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +436 -311
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +69 -8
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +61 -56
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +261 -401
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +288 -310
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +32 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +561 -626
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +60 -53
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +94 -57
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +198 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1002 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +176 -186
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +166 -176
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +159 -262
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +183 -215
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +391 -444
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +814 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +363 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +13 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +456 -286
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +92 -87
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +303 -232
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +69 -57
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +549 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -46
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -20
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +15 -4
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +127 -246
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +122 -67
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +25 -18
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +8 -19
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +431 -341
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +19 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +220 -295
- data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +195 -225
- data/src/core/ext/filters/client_channel/retry_service_config.h +22 -28
- data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
- data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -53
- data/src/core/ext/filters/client_channel/subchannel.cc +211 -450
- data/src/core/ext/filters/client_channel/subchannel.h +42 -96
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +4 -4
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +37 -46
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +38 -42
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +11 -8
- data/src/core/ext/filters/deadline/deadline_filter.cc +78 -69
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +26 -20
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +12 -8
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +48 -46
- data/src/core/ext/filters/http/client/http_client_filter.h +21 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +20 -21
- data/src/core/ext/filters/http/client_authority_filter.h +22 -22
- data/src/core/ext/filters/http/http_filters_plugin.cc +30 -57
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +323 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +55 -55
- data/src/core/ext/filters/http/server/http_server_filter.h +22 -22
- data/src/core/ext/filters/message_size/message_size_filter.cc +183 -290
- data/src/core/ext/filters/message_size/message_size_filter.h +72 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +16 -15
- data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +831 -536
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +7 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -11
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +15 -21
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +220 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +81 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/gcp/metadata_query.cc +137 -0
- data/src/core/ext/gcp/metadata_query.h +87 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +108 -130
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +221 -242
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +25 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +42 -38
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +808 -730
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +45 -24
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +180 -60
- data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -45
- data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -32
- data/src/core/ext/transport/chttp2/transport/frame_data.h +27 -27
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +28 -33
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +21 -24
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +39 -37
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +24 -21
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +212 -365
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +328 -160
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +13 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +500 -754
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -26
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +42 -47
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +41 -28
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
- data/src/core/ext/transport/chttp2/transport/internal.h +224 -193
- data/src/core/ext/transport/chttp2/transport/parsing.cc +307 -109
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
- data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
- data/src/core/ext/transport/chttp2/transport/writing.cc +94 -84
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
- data/src/core/ext/transport/inproc/inproc_transport.cc +184 -232
- data/src/core/ext/transport/inproc/inproc_transport.h +21 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +435 -182
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -59
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +502 -220
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +93 -377
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +468 -1881
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +535 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +2796 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +152 -47
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -19
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +176 -49
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +82 -38
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +52 -26
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +52 -26
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +574 -244
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +49 -30
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +49 -30
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +795 -406
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -256
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1954 -858
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +298 -148
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +537 -348
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2136 -1171
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +49 -30
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +351 -232
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +948 -480
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +154 -72
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +631 -213
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +54 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -219
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1263 -598
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +694 -292
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +41 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +49 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +152 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +841 -440
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +222 -128
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1152 -485
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +64 -37
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -207
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1156 -620
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +44 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +179 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +127 -57
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +48 -16
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +193 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +147 -65
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +55 -37
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +277 -127
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +147 -84
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +479 -227
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +579 -227
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -26
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +198 -94
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +1072 -358
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +893 -375
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +49 -23
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +186 -89
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +40 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +95 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +75 -45
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +521 -249
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +542 -246
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +263 -121
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1083 -374
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +83 -48
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +656 -232
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1317 -722
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5948 -2306
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +177 -85
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +223 -117
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +847 -369
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -10
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +57 -22
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +49 -30
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +78 -49
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +114 -43
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +263 -100
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +55 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +122 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +39 -26
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +116 -70
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +8 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -15
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +118 -75
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +104 -46
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +77 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +170 -108
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +369 -167
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +47 -21
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -58
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -18
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +257 -67
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +75 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +201 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +476 -283
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2259 -1015
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +53 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +69 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +246 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +138 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +499 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +36 -17
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +148 -55
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +39 -26
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -94
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +948 -349
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +162 -101
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -109
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +855 -408
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +118 -54
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +22 -14
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +325 -85
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1705 -299
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +197 -76
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +131 -84
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +531 -239
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +59 -34
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +141 -69
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +130 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +60 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +146 -51
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +141 -63
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +95 -40
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +54 -32
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +41 -26
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +113 -70
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +117 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +170 -76
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +123 -57
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +151 -91
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +228 -121
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +228 -131
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +86 -53
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +32 -18
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +63 -34
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +103 -53
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +78 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +237 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +16 -9
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +52 -26
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +65 -41
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +979 -451
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +995 -484
- data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
- data/src/core/ext/upb-generated/google/api/http.upb.h +297 -121
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -37
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +42 -22
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1037 -442
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3972 -1411
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +42 -22
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +22 -14
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +220 -103
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +42 -22
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +193 -107
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +99 -37
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +170 -92
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +122 -60
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +960 -416
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +84 -51
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +53 -30
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +442 -218
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +161 -61
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +884 -299
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +167 -104
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -34
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +59 -34
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +49 -30
- data/src/core/ext/upb-generated/validate/validate.upb.c +846 -456
- data/src/core/ext/upb-generated/validate/validate.upb.h +4439 -1908
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +167 -104
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +59 -34
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +153 -91
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +49 -30
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +32 -18
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +56 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +122 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +104 -63
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +56 -29
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +49 -30
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +66 -42
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +177 -79
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +69 -38
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +86 -30
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +227 -54
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -13
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +93 -34
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +53 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +75 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +270 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +39 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +78 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +78 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +289 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +539 -295
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +160 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +740 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +61 -37
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +170 -76
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +82 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +240 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +85 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +246 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -13
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +49 -30
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +55 -54
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +68 -275
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -90
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +126 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +15 -12
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +108 -108
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +251 -236
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +233 -223
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -10
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +96 -76
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +188 -184
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +82 -76
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +194 -187
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +32 -16
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +8 -4
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +17 -17
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +72 -67
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +161 -131
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +26 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +55 -42
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -32
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +162 -129
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +21 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +83 -75
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +8 -7
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +744 -668
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +26 -5
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +151 -140
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +17 -15
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +17 -13
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +21 -19
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +47 -26
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +54 -43
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +497 -468
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -133
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +151 -147
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +157 -85
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +41 -5
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +6 -6
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -114
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +30 -29
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +11 -10
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +328 -270
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +10 -10
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +61 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +41 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +46 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +5 -8
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
- data/src/core/ext/xds/certificate_provider_store.cc +58 -3
- data/src/core/ext/xds/certificate_provider_store.h +12 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +36 -50
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +18 -13
- data/src/core/ext/xds/upb_utils.h +4 -25
- data/src/core/ext/xds/xds_api.cc +117 -198
- data/src/core/ext/xds/xds_api.h +32 -36
- data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
- data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
- data/src/core/ext/xds/xds_bootstrap.cc +7 -552
- data/src/core/ext/xds/xds_bootstrap.h +41 -94
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +374 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +189 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_certificate_provider.h +13 -4
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +7 -7
- data/src/core/ext/xds/xds_channel_stack_modifier.h +12 -4
- data/src/core/ext/xds/xds_client.cc +830 -1348
- data/src/core/ext/xds/xds_client.h +46 -64
- data/src/core/ext/xds/xds_client_grpc.cc +235 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +50 -36
- data/src/core/ext/xds/xds_client_stats.h +46 -41
- data/src/core/ext/xds/xds_cluster.cc +396 -246
- data/src/core/ext/xds/xds_cluster.h +60 -43
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +62 -77
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +50 -25
- data/src/core/ext/xds/xds_common_types.cc +234 -130
- data/src/core/ext/xds/xds_common_types.h +24 -19
- data/src/core/ext/xds/xds_endpoint.cc +263 -164
- data/src/core/ext/xds/xds_endpoint.h +19 -15
- data/src/core/ext/xds/xds_health_status.cc +80 -0
- data/src/core/ext/xds/xds_health_status.h +109 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +72 -62
- data/src/core/ext/xds/xds_http_fault_filter.h +21 -28
- data/src/core/ext/xds/xds_http_filters.cc +65 -73
- data/src/core/ext/xds/xds_http_filters.h +78 -27
- data/src/core/ext/xds/xds_http_rbac_filter.cc +307 -295
- data/src/core/ext/xds/xds_http_rbac_filter.h +21 -23
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +222 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +59 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +215 -171
- data/src/core/ext/xds/xds_lb_policy_registry.h +15 -16
- data/src/core/ext/xds/xds_listener.cc +549 -478
- data/src/core/ext/xds/xds_listener.h +51 -54
- data/src/core/ext/xds/xds_resource_type.h +28 -22
- data/src/core/ext/xds/xds_resource_type_impl.h +13 -16
- data/src/core/ext/xds/xds_route_config.cc +610 -576
- data/src/core/ext/xds/xds_route_config.h +69 -44
- data/src/core/ext/xds/xds_routing.cc +7 -9
- data/src/core/ext/xds/xds_routing.h +12 -12
- data/src/core/ext/xds/xds_server_config_fetcher.cc +184 -184
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +358 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +49 -46
- data/src/core/lib/address_utils/parse_address.h +43 -40
- data/src/core/lib/address_utils/sockaddr_utils.cc +30 -28
- data/src/core/lib/address_utils/sockaddr_utils.h +36 -36
- data/src/core/lib/avl/avl.h +59 -32
- data/src/core/lib/backoff/backoff.cc +19 -21
- data/src/core/lib/backoff/backoff.h +20 -20
- data/src/core/lib/backoff/random_early_detection.cc +31 -0
- data/src/core/lib/backoff/random_early_detection.h +59 -0
- data/src/core/lib/channel/call_finalization.h +5 -7
- data/src/core/lib/channel/call_tracer.cc +51 -0
- data/src/core/lib/channel/call_tracer.h +106 -34
- data/src/core/lib/channel/channel_args.cc +188 -61
- data/src/core/lib/channel/channel_args.h +318 -112
- data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
- data/src/core/lib/channel/channel_fwd.h +3 -3
- data/src/core/lib/channel/channel_stack.cc +60 -58
- data/src/core/lib/channel/channel_stack.h +148 -135
- data/src/core/lib/channel/channel_stack_builder.cc +21 -24
- data/src/core/lib/channel/channel_stack_builder.h +17 -9
- data/src/core/lib/channel/channel_stack_builder_impl.cc +55 -26
- data/src/core/lib/channel/channel_stack_builder_impl.h +5 -3
- data/src/core/lib/channel/channel_trace.cc +40 -38
- data/src/core/lib/channel/channel_trace.h +22 -22
- data/src/core/lib/channel/channelz.cc +190 -173
- data/src/core/lib/channel/channelz.h +80 -64
- data/src/core/lib/channel/channelz_registry.cc +41 -37
- data/src/core/lib/channel/channelz_registry.h +21 -21
- data/src/core/lib/channel/connected_channel.cc +764 -67
- data/src/core/lib/channel/connected_channel.h +20 -24
- data/src/core/lib/channel/context.h +33 -22
- data/src/core/lib/channel/promise_based_filter.cc +1607 -295
- data/src/core/lib/channel/promise_based_filter.h +485 -104
- data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
- data/src/core/lib/channel/status_util.cc +62 -17
- data/src/core/lib/channel/status_util.h +39 -22
- data/src/core/lib/compression/compression.cc +19 -19
- data/src/core/lib/compression/compression_internal.cc +38 -48
- data/src/core/lib/compression/compression_internal.h +25 -25
- data/src/core/lib/compression/message_compress.cc +26 -26
- data/src/core/lib/compression/message_compress.h +27 -27
- data/src/core/lib/config/config_vars.cc +153 -0
- data/src/core/lib/config/config_vars.h +127 -0
- data/src/core/lib/config/config_vars_non_generated.cc +51 -0
- data/src/core/lib/config/core_configuration.cc +5 -1
- data/src/core/lib/config/core_configuration.h +84 -38
- data/src/core/lib/config/load_config.cc +79 -0
- data/src/core/lib/config/load_config.h +55 -0
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/debug/histogram_view.h +37 -0
- data/src/core/lib/debug/stats.cc +47 -151
- data/src/core/lib/debug/stats.h +49 -57
- data/src/core/lib/debug/stats_data.cc +302 -646
- data/src/core/lib/debug/stats_data.h +295 -543
- data/src/core/lib/debug/trace.cc +56 -81
- data/src/core/lib/debug/trace.h +37 -54
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
- data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +15 -18
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -10
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +111 -0
- data/src/core/lib/event_engine/default_event_engine.h +73 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +32 -5
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +4 -12
- data/src/core/lib/event_engine/event_engine.cc +29 -36
- data/src/core/lib/event_engine/forkable.cc +106 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +12 -20
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
- data/src/core/lib/event_engine/poller.h +62 -0
- data/src/core/lib/event_engine/posix.h +162 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +895 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +68 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +254 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1338 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +726 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +637 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +292 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +278 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +867 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +51 -52
- data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
- data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +29 -29
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/resolved_address.cc +21 -1
- data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
- data/src/core/lib/event_engine/shim.cc +64 -0
- data/src/core/lib/event_engine/shim.h +33 -0
- data/src/core/lib/event_engine/slice.cc +8 -7
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool/original_thread_pool.cc +256 -0
- data/src/core/lib/event_engine/thread_pool/original_thread_pool.h +137 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +40 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
- data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → thready_event_engine/thready_event_engine.h} +51 -65
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/lib/event_engine/trace.cc +7 -0
- data/src/core/lib/event_engine/trace.h +22 -3
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +44 -0
- data/src/core/lib/event_engine/windows/iocp.cc +141 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +218 -0
- data/src/core/lib/event_engine/windows/win_socket.h +129 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +379 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +120 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +411 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +164 -0
- data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
- data/src/core/lib/event_engine/windows/windows_listener.h +156 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
- data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
- data/src/core/lib/experiments/config.cc +185 -0
- data/src/core/lib/experiments/config.h +69 -0
- data/src/core/lib/experiments/experiments.cc +138 -0
- data/src/core/lib/experiments/experiments.h +134 -0
- data/src/core/lib/gpr/alloc.cc +19 -25
- data/src/core/lib/gpr/alloc.h +20 -20
- data/src/core/lib/gpr/{log_android.cc → android/log.cc} +22 -20
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/iphone/cpu.cc +44 -0
- data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +28 -23
- data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +24 -24
- data/src/core/lib/gpr/log.cc +42 -47
- data/src/core/lib/gpr/log_internal.h +55 -0
- data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +21 -20
- data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +23 -22
- data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +20 -19
- data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +24 -24
- data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +22 -34
- data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +40 -36
- data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +22 -20
- data/src/core/lib/gpr/spinlock.h +20 -20
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +61 -61
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +36 -40
- data/src/core/lib/gpr/time.cc +34 -30
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +21 -22
- data/src/core/lib/gpr/tmpfile.h +24 -24
- data/src/core/lib/gpr/useful.h +83 -30
- data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc → lib/gpr/windows/cpu.cc} +16 -11
- data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +25 -25
- data/src/core/lib/gpr/windows/string.cc +69 -0
- data/src/core/lib/gpr/windows/string_util.cc +55 -0
- data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +29 -27
- data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +25 -22
- data/src/core/lib/gpr/windows/tmpfile.cc +68 -0
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +20 -20
- data/src/core/lib/gprpp/bitset.h +30 -16
- data/src/core/lib/gprpp/chunked_vector.h +3 -3
- data/src/core/lib/gprpp/construct_destruct.h +3 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
- data/src/core/lib/gprpp/crash.cc +43 -0
- data/src/core/lib/gprpp/crash.h +37 -0
- data/src/core/lib/gprpp/debug_location.h +60 -31
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/env.h +53 -0
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +21 -21
- data/src/core/lib/gprpp/fork.cc +63 -61
- data/src/core/lib/gprpp/fork.h +29 -35
- data/src/core/lib/gprpp/host_port.cc +28 -26
- data/src/core/lib/gprpp/host_port.h +32 -31
- data/src/core/lib/gprpp/linux/env.cc +80 -0
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/manual_constructor.h +21 -21
- data/src/core/lib/gprpp/match.h +3 -3
- data/src/core/lib/gprpp/memory.h +21 -21
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +21 -21
- data/src/core/lib/gprpp/no_destruct.h +95 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/orphanable.h +25 -24
- data/src/core/lib/gprpp/overload.h +3 -3
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/per_cpu.cc +33 -0
- data/src/core/lib/gprpp/per_cpu.h +75 -0
- data/src/core/lib/gprpp/posix/env.cc +47 -0
- data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +5 -4
- data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +75 -64
- data/src/core/lib/gprpp/ref_counted.h +54 -55
- data/src/core/lib/gprpp/ref_counted_ptr.h +41 -54
- data/src/core/lib/gprpp/single_set_ptr.h +3 -3
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/stat.h +3 -3
- data/src/core/lib/gprpp/status_helper.cc +6 -4
- data/src/core/lib/gprpp/status_helper.h +9 -5
- data/src/core/lib/gprpp/strerror.cc +43 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +23 -23
- data/src/core/lib/gprpp/table.h +12 -4
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/thd.h +39 -23
- data/src/core/lib/gprpp/time.cc +37 -8
- data/src/core/lib/gprpp/time.h +69 -4
- data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +23 -25
- data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
- data/src/core/lib/gprpp/time_util.h +4 -4
- data/src/core/lib/gprpp/unique_type_name.h +21 -21
- data/src/core/lib/gprpp/validation_errors.cc +66 -0
- data/src/core/lib/gprpp/validation_errors.h +134 -0
- data/src/core/lib/gprpp/windows/env.cc +56 -0
- data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +4 -2
- data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +28 -28
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
- data/src/core/lib/handshaker/proxy_mapper.h +53 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/format_request.cc +19 -18
- data/src/core/lib/http/format_request.h +20 -20
- data/src/core/lib/http/httpcli.cc +69 -84
- data/src/core/lib/http/httpcli.h +29 -29
- data/src/core/lib/http/httpcli_security_connector.cc +33 -36
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
- data/src/core/lib/http/parser.cc +76 -87
- data/src/core/lib/http/parser.h +35 -35
- data/src/core/lib/iomgr/block_annotate.h +23 -23
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +122 -101
- data/src/core/lib/iomgr/call_combiner.cc +32 -64
- data/src/core/lib/iomgr/call_combiner.h +26 -27
- data/src/core/lib/iomgr/cfstream_handle.cc +34 -37
- data/src/core/lib/iomgr/cfstream_handle.h +25 -25
- data/src/core/lib/iomgr/closure.cc +27 -0
- data/src/core/lib/iomgr/closure.h +95 -58
- data/src/core/lib/iomgr/combiner.cc +20 -39
- data/src/core/lib/iomgr/combiner.h +20 -20
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
- data/src/core/lib/iomgr/endpoint.cc +17 -17
- data/src/core/lib/iomgr/endpoint.h +49 -49
- data/src/core/lib/iomgr/endpoint_cfstream.cc +58 -53
- data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
- data/src/core/lib/iomgr/endpoint_pair.h +22 -22
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -30
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
- data/src/core/lib/iomgr/error.cc +49 -834
- data/src/core/lib/iomgr/error.h +45 -321
- data/src/core/lib/iomgr/error_cfstream.cc +18 -23
- data/src/core/lib/iomgr/error_cfstream.h +21 -21
- data/src/core/lib/iomgr/ev_apple.cc +33 -33
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +219 -236
- data/src/core/lib/iomgr/ev_epoll1_linux.h +20 -20
- data/src/core/lib/iomgr/ev_poll_posix.cc +231 -231
- data/src/core/lib/iomgr/ev_poll_posix.h +20 -20
- data/src/core/lib/iomgr/ev_posix.cc +47 -79
- data/src/core/lib/iomgr/ev_posix.h +88 -87
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
- data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +471 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.cc +34 -56
- data/src/core/lib/iomgr/exec_ctx.h +151 -175
- data/src/core/lib/iomgr/executor.cc +21 -31
- data/src/core/lib/iomgr/executor.h +27 -30
- data/src/core/lib/iomgr/fork_posix.cc +29 -26
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +20 -20
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/internal_errqueue.h +83 -83
- data/src/core/lib/iomgr/iocp_windows.cc +47 -26
- data/src/core/lib/iomgr/iocp_windows.h +32 -21
- data/src/core/lib/iomgr/iomgr.cc +29 -34
- data/src/core/lib/iomgr/iomgr.h +35 -35
- data/src/core/lib/iomgr/iomgr_fwd.h +4 -3
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +28 -28
- data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -20
- data/src/core/lib/iomgr/iomgr_windows.cc +32 -24
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +22 -22
- data/src/core/lib/iomgr/lockfree_event.cc +114 -131
- data/src/core/lib/iomgr/lockfree_event.h +23 -23
- data/src/core/lib/iomgr/nameser.h +86 -86
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +29 -29
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +55 -55
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +25 -26
- data/src/core/lib/iomgr/pollset_set_windows.cc +27 -27
- data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
- data/src/core/lib/iomgr/pollset_windows.cc +33 -32
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +34 -31
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +26 -20
- data/src/core/lib/iomgr/resolve_address.h +54 -31
- data/src/core/lib/iomgr/resolve_address_impl.h +5 -4
- data/src/core/lib/iomgr/resolve_address_posix.cc +74 -49
- data/src/core/lib/iomgr/resolve_address_posix.h +23 -10
- data/src/core/lib/iomgr/resolve_address_windows.cc +59 -26
- data/src/core/lib/iomgr/resolve_address_windows.h +23 -10
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +23 -23
- data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
- data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +39 -39
- data/src/core/lib/iomgr/socket_utils.h +27 -27
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +99 -104
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +106 -19
- data/src/core/lib/iomgr/socket_utils_posix.h +179 -84
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +97 -42
- data/src/core/lib/iomgr/socket_windows.h +68 -63
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +23 -24
- data/src/core/lib/iomgr/tcp_client.h +39 -39
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +43 -35
- data/src/core/lib/iomgr/tcp_client_posix.cc +117 -100
- data/src/core/lib/iomgr/tcp_client_posix.h +54 -51
- data/src/core/lib/iomgr/tcp_client_windows.cc +57 -48
- data/src/core/lib/iomgr/tcp_posix.cc +448 -350
- data/src/core/lib/iomgr/tcp_posix.h +32 -30
- data/src/core/lib/iomgr/tcp_server.cc +33 -24
- data/src/core/lib/iomgr/tcp_server.h +78 -69
- data/src/core/lib/iomgr/tcp_server_posix.cc +390 -126
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +93 -58
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +280 -123
- data/src/core/lib/iomgr/tcp_windows.cc +121 -102
- data/src/core/lib/iomgr/tcp_windows.h +34 -35
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +68 -68
- data/src/core/lib/iomgr/timer_generic.cc +142 -150
- data/src/core/lib/iomgr/timer_generic.h +21 -21
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +22 -22
- data/src/core/lib/iomgr/timer_manager.cc +31 -31
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
- data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -52
- data/src/core/lib/json/json.h +21 -240
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -11
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +216 -0
- data/src/core/lib/json/json_object_loader.h +646 -0
- data/src/core/lib/json/json_reader.cc +181 -129
- data/src/core/lib/json/json_reader.h +34 -0
- data/src/core/lib/json/json_util.cc +23 -55
- data/src/core/lib/json/json_util.h +12 -11
- data/src/core/lib/json/json_writer.cc +80 -81
- data/src/core/{ext/xds/xds_resource_type.cc → lib/json/json_writer.h} +11 -11
- data/src/core/lib/load_balancing/lb_policy.cc +98 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +49 -36
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +143 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +9 -14
- data/src/core/lib/matchers/matchers.cc +10 -9
- data/src/core/lib/matchers/matchers.h +5 -4
- data/src/core/lib/promise/activity.cc +43 -6
- data/src/core/lib/promise/activity.h +159 -48
- data/src/core/lib/promise/arena_promise.h +105 -72
- data/src/core/lib/promise/cancel_callback.h +77 -0
- data/src/core/lib/promise/context.h +17 -10
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +28 -33
- data/src/core/lib/promise/detail/promise_factory.h +66 -14
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +31 -3
- data/src/core/lib/promise/detail/switch.h +21 -21
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
- data/src/core/lib/promise/for_each.h +176 -0
- data/src/core/lib/promise/if.h +204 -0
- data/src/core/lib/promise/interceptor_list.h +329 -0
- data/src/core/lib/promise/latch.h +197 -23
- data/src/core/lib/promise/loop.h +22 -16
- data/src/core/lib/promise/map.h +11 -6
- data/src/core/lib/promise/party.cc +304 -0
- data/src/core/lib/promise/party.h +508 -0
- data/src/core/lib/promise/pipe.h +762 -0
- data/src/core/lib/promise/poll.h +177 -11
- data/src/core/lib/promise/prioritized_race.h +95 -0
- data/src/core/lib/promise/promise.h +6 -7
- data/src/core/lib/promise/race.h +6 -9
- data/src/core/lib/promise/seq.h +32 -12
- data/src/core/lib/promise/sleep.cc +53 -43
- data/src/core/lib/promise/sleep.h +34 -26
- data/src/core/lib/promise/trace.cc +20 -0
- data/src/core/lib/promise/trace.h +24 -0
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +39 -21
- data/src/core/lib/resolver/resolver.cc +17 -64
- data/src/core/lib/resolver/resolver.h +18 -18
- data/src/core/lib/resolver/resolver_factory.h +6 -7
- data/src/core/lib/resolver/resolver_registry.cc +16 -1
- data/src/core/lib/resolver/resolver_registry.h +5 -6
- data/src/core/lib/resolver/server_address.cc +29 -39
- data/src/core/lib/resolver/server_address.h +25 -37
- data/src/core/lib/resource_quota/api.cc +10 -2
- data/src/core/lib/resource_quota/api.h +10 -4
- data/src/core/lib/resource_quota/arena.cc +101 -21
- data/src/core/lib/resource_quota/arena.h +310 -23
- data/src/core/lib/resource_quota/memory_quota.cc +280 -59
- data/src/core/lib/resource_quota/memory_quota.h +165 -36
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/resource_quota/resource_quota.h +4 -4
- data/src/core/lib/resource_quota/thread_quota.h +3 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/audit_logging.cc +98 -0
- data/src/core/lib/security/authorization/audit_logging.h +73 -0
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +4 -4
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
- data/src/core/lib/security/authorization/evaluate_args.h +3 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -4
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +21 -4
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -4
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -4
- data/src/core/lib/security/authorization/matchers.cc +38 -32
- data/src/core/lib/security/authorization/matchers.h +3 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +39 -8
- data/src/core/lib/security/authorization/rbac_policy.h +22 -5
- data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
- data/src/core/lib/security/authorization/stdout_logger.h +61 -0
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +11 -7
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +50 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +76 -0
- data/src/core/lib/security/context/security_context.cc +22 -23
- data/src/core/lib/security/context/security_context.h +43 -33
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +19 -20
- data/src/core/lib/security/credentials/alts/alts_credentials.h +56 -57
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
- data/src/core/lib/security/credentials/call_creds_util.h +3 -3
- data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +25 -29
- data/src/core/lib/security/credentials/composite/composite_credentials.h +25 -28
- data/src/core/lib/security/credentials/credentials.cc +19 -18
- data/src/core/lib/security/credentials/credentials.h +53 -48
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +131 -120
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +121 -121
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +40 -43
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +51 -54
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +23 -31
- data/src/core/lib/security/credentials/fake/fake_credentials.h +37 -42
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +22 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +105 -156
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +22 -25
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -18
- data/src/core/lib/security/credentials/iam/iam_credentials.h +20 -20
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +6 -7
- data/src/core/lib/security/credentials/jwt/json_token.cc +54 -43
- data/src/core/lib/security/credentials/jwt/json_token.h +35 -35
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +27 -26
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +22 -22
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +125 -124
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +47 -47
- data/src/core/lib/security/credentials/local/local_credentials.cc +20 -21
- data/src/core/lib/security/credentials/local/local_credentials.h +26 -27
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +89 -91
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -23
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -24
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -25
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -40
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +23 -24
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +7 -14
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +48 -47
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +30 -43
- data/src/core/lib/security/credentials/tls/tls_credentials.h +24 -25
- data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
- data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -31
- data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -6
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +43 -61
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +43 -44
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -78
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +24 -25
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +7 -7
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -15
- data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +24 -31
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +22 -23
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +43 -45
- data/src/core/lib/security/security_connector/local/local_security_connector.h +44 -45
- data/src/core/lib/security/security_connector/security_connector.cc +17 -17
- data/src/core/lib/security/security_connector/security_connector.h +40 -39
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +40 -43
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +40 -41
- data/src/core/lib/security/security_connector/ssl_utils.cc +48 -64
- data/src/core/lib/security/security_connector/ssl_utils.h +35 -35
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +59 -53
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +26 -26
- data/src/core/lib/security/transport/auth_filters.h +46 -24
- data/src/core/lib/security/transport/client_auth_filter.cc +36 -26
- data/src/core/lib/security/transport/secure_endpoint.cc +58 -62
- data/src/core/lib/security/transport/secure_endpoint.h +25 -25
- data/src/core/lib/security/transport/security_handshaker.cc +111 -114
- data/src/core/lib/security/transport/security_handshaker.h +24 -23
- data/src/core/lib/security/transport/server_auth_filter.cc +160 -274
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +20 -20
- data/src/core/lib/security/util/json_util.cc +27 -27
- data/src/core/lib/security/util/json_util.h +20 -20
- data/src/core/lib/service_config/service_config.h +15 -4
- data/src/core/lib/service_config/service_config_call_data.h +54 -19
- data/src/core/lib/service_config/service_config_impl.cc +113 -152
- data/src/core/lib/service_config/service_config_impl.h +19 -24
- data/src/core/lib/service_config/service_config_parser.cc +10 -28
- data/src/core/lib/service_config/service_config_parser.h +13 -21
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +32 -32
- data/src/core/lib/slice/percent_encoding.cc +21 -30
- data/src/core/lib/slice/percent_encoding.h +28 -28
- data/src/core/lib/slice/slice.cc +58 -46
- data/src/core/lib/slice/slice.h +59 -18
- data/src/core/lib/slice/slice_buffer.cc +63 -59
- data/src/core/lib/slice/slice_buffer.h +35 -4
- data/src/core/lib/slice/slice_internal.h +34 -42
- data/src/core/lib/slice/slice_refcount.cc +3 -18
- data/src/core/lib/slice/slice_refcount.h +53 -18
- data/src/core/lib/slice/slice_string_helpers.cc +17 -17
- data/src/core/lib/slice/slice_string_helpers.h +21 -21
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +25 -25
- data/src/core/lib/surface/builtins.cc +2 -0
- data/src/core/lib/surface/builtins.h +3 -3
- data/src/core/lib/surface/byte_buffer.cc +22 -23
- data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
- data/src/core/lib/surface/call.cc +2305 -547
- data/src/core/lib/surface/call.h +123 -42
- data/src/core/lib/surface/call_details.cc +20 -21
- data/src/core/lib/surface/call_log_batch.cc +19 -18
- data/src/core/lib/surface/call_test_only.h +33 -33
- data/src/core/lib/surface/call_trace.cc +123 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +65 -69
- data/src/core/lib/surface/channel.h +43 -35
- data/src/core/lib/surface/channel_init.cc +17 -17
- data/src/core/lib/surface/channel_init.h +20 -20
- data/src/core/lib/surface/channel_ping.cc +19 -19
- data/src/core/lib/surface/channel_stack_type.cc +21 -17
- data/src/core/lib/surface/channel_stack_type.h +22 -20
- data/src/core/lib/surface/completion_queue.cc +195 -221
- data/src/core/lib/surface/completion_queue.h +37 -40
- data/src/core/lib/surface/completion_queue_factory.cc +33 -28
- data/src/core/lib/surface/completion_queue_factory.h +22 -22
- data/src/core/lib/surface/event_string.cc +18 -17
- data/src/core/lib/surface/event_string.h +22 -22
- data/src/core/lib/surface/init.cc +44 -72
- data/src/core/lib/surface/init.h +20 -20
- data/src/core/lib/surface/init_internally.cc +25 -0
- data/src/core/lib/surface/init_internally.h +37 -0
- data/src/core/lib/surface/lame_client.cc +33 -29
- data/src/core/lib/surface/lame_client.h +22 -22
- data/src/core/lib/surface/metadata_array.cc +17 -18
- data/src/core/lib/surface/server.cc +371 -130
- data/src/core/lib/surface/server.h +20 -21
- data/src/core/lib/surface/validate_metadata.cc +64 -74
- data/src/core/lib/surface/validate_metadata.h +30 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/batch_builder.cc +182 -0
- data/src/core/lib/transport/batch_builder.h +480 -0
- data/src/core/lib/transport/bdp_estimator.cc +25 -27
- data/src/core/lib/transport/bdp_estimator.h +31 -28
- data/src/core/lib/transport/connectivity_state.cc +19 -20
- data/src/core/lib/transport/connectivity_state.h +23 -23
- data/src/core/lib/transport/custom_metadata.h +30 -0
- data/src/core/lib/transport/error_utils.cc +51 -81
- data/src/core/lib/transport/error_utils.h +24 -24
- data/src/core/lib/transport/handshaker.cc +66 -54
- data/src/core/lib/transport/handshaker.h +51 -47
- data/src/core/lib/transport/handshaker_factory.h +49 -24
- data/src/core/lib/transport/handshaker_registry.cc +27 -20
- data/src/core/lib/transport/handshaker_registry.h +25 -28
- data/src/core/lib/transport/http2_errors.h +22 -22
- data/src/core/lib/transport/http_connect_handshaker.cc +56 -57
- data/src/core/lib/transport/http_connect_handshaker.h +21 -21
- data/src/core/lib/transport/metadata_batch.cc +31 -10
- data/src/core/lib/transport/metadata_batch.h +252 -65
- data/src/core/lib/transport/metadata_compression_traits.h +67 -0
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/parsed_metadata.h +23 -11
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +27 -27
- data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
- data/src/core/lib/transport/status_conversion.cc +23 -25
- data/src/core/lib/transport/status_conversion.h +22 -22
- data/src/core/lib/transport/tcp_connect_handshaker.cc +34 -42
- data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
- data/src/core/lib/transport/timeout_encoding.cc +28 -23
- data/src/core/lib/transport/timeout_encoding.h +20 -20
- data/src/core/lib/transport/transport.cc +113 -43
- data/src/core/lib/transport/transport.h +275 -218
- data/src/core/lib/transport/transport_fwd.h +3 -3
- data/src/core/lib/transport/transport_impl.h +53 -47
- data/src/core/lib/transport/transport_op_string.cc +75 -63
- data/src/core/lib/uri/uri_parser.cc +1 -1
- data/src/core/lib/uri/uri_parser.h +3 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +55 -79
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +22 -39
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +336 -336
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +73 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +137 -100
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +109 -104
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +52 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
- data/src/core/tsi/fake_transport_security.cc +133 -109
- data/src/core/tsi/fake_transport_security.h +33 -33
- data/src/core/tsi/local_transport_security.cc +43 -38
- data/src/core/tsi/local_transport_security.h +33 -33
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
- data/src/core/tsi/ssl_transport_security.cc +302 -371
- data/src/core/tsi/ssl_transport_security.h +206 -203
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +27 -27
- data/src/core/tsi/transport_security.cc +44 -32
- data/src/core/tsi/transport_security.h +49 -48
- data/src/core/tsi/transport_security_grpc.cc +20 -20
- data/src/core/tsi/transport_security_grpc.h +41 -41
- data/src/core/tsi/transport_security_interface.h +344 -332
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +0 -1
- data/src/ruby/ext/grpc/ext-export.gcc +1 -2
- data/src/ruby/ext/grpc/extconf.rb +57 -11
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +0 -6
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/spec/channel_spec.rb +5 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
- data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
- data/third_party/abseil-cpp/absl/base/config.h +45 -4
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- data/third_party/abseil-cpp/absl/base/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
- data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
- data/third_party/abseil-cpp/absl/flags/config.h +68 -0
- data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
- data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
- data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
- data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
- data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
- data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
- data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
- data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
- data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
- data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
- data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
- data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
- data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
- data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
- data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
- data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
- data/third_party/abseil-cpp/absl/random/random.h +6 -6
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
- data/third_party/abseil-cpp/absl/status/status.cc +19 -12
- data/third_party/abseil-cpp/absl/status/status.h +2 -2
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
- data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +330 -70
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +253 -158
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/span.h +29 -7
- data/third_party/boringssl-with-bazel/err_data.c +728 -712
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +177 -196
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +135 -90
- data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +797 -793
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +529 -526
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +17 -11
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +37 -51
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +13 -9
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +22 -19
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +40 -27
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
- data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +34 -37
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +22 -11
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-ppc64le.c → cpu_arm_openbsd.c} +10 -17
- data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +22 -31
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +43 -16
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +229 -102
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +31 -7
- data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
- data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
- data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +36 -27
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
- 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 +99 -113
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
- data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +24 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +49 -49
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +92 -18
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +108 -86
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +55 -25
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +55 -71
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +72 -65
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +62 -51
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +12 -17
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +25 -26
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +9 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +44 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
- data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +3 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +170 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +69 -61
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +22 -68
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +43 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +42 -314
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +244 -139
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +144 -205
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +593 -421
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +52 -6
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +192 -18
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +391 -18
- data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +91 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +204 -0
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +833 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +633 -613
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
- data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
- data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +6 -17
- data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
- data/third_party/boringssl-with-bazel/src/crypto/{asn1/a_print.c → rsa_extra/internal.h} +15 -21
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
- data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +128 -34
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +418 -133
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +116 -284
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +701 -87
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +63 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +285 -331
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
- data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +68 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +132 -151
- data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +790 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +220 -254
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +136 -270
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +528 -616
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +164 -181
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +186 -203
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1864 -2050
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +380 -480
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +266 -265
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +329 -416
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +79 -171
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +294 -344
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +342 -365
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +120 -125
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +228 -265
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +130 -135
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +652 -691
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +90 -75
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1063 -1145
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +217 -191
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +50 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +29 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -33
- data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +69 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +7 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -18
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +98 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -21
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +285 -92
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +381 -287
- data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +9 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +22 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +57 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2075 -1407
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +242 -214
- data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
- data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +45 -26
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -35
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +53 -34
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +200 -121
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -12
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
- data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +47 -69
- data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +217 -226
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +78 -101
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +106 -142
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +244 -35
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +167 -64
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +41 -32
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +7 -44
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -23
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +25 -34
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
- data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
- data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
- data/third_party/cares/cares/include/ares.h +23 -1
- data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
- data/third_party/cares/cares/include/ares_rules.h +2 -2
- data/third_party/cares/cares/include/ares_version.h +3 -3
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
- data/third_party/cares/cares/src/lib/ares_data.c +16 -0
- data/third_party/cares/cares/src/lib/ares_data.h +7 -0
- data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
- data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
- data/third_party/cares/cares/src/lib/ares_init.c +97 -485
- data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
- data/third_party/cares/cares/src/lib/ares_private.h +30 -16
- data/third_party/cares/cares/src/lib/ares_process.c +55 -16
- data/third_party/cares/cares/src/lib/ares_query.c +1 -35
- data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
- data/third_party/cares/cares/src/lib/ares_send.c +5 -7
- data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
- data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
- data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
- data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
- data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/upb/upb/alloc.h +36 -0
- data/third_party/upb/upb/arena.h +36 -0
- data/third_party/upb/upb/array.h +36 -0
- data/third_party/upb/upb/base/descriptor_constants.h +104 -0
- data/third_party/upb/upb/base/log2.h +57 -0
- data/third_party/upb/upb/base/status.c +81 -0
- data/third_party/upb/upb/base/status.h +66 -0
- data/third_party/upb/upb/base/string_view.h +75 -0
- data/third_party/upb/upb/collections/array.c +145 -0
- data/third_party/upb/upb/collections/array.h +85 -0
- data/third_party/upb/upb/collections/array_internal.h +135 -0
- data/third_party/upb/upb/collections/map.c +135 -0
- data/third_party/upb/upb/collections/map.h +135 -0
- data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
- data/third_party/upb/upb/collections/map_internal.h +170 -0
- data/third_party/upb/upb/collections/map_sorter.c +166 -0
- data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
- data/third_party/upb/upb/collections/message_value.h +65 -0
- data/third_party/upb/upb/decode.h +3 -61
- data/third_party/upb/upb/def.h +4 -377
- data/third_party/upb/upb/def.hpp +3 -408
- data/third_party/upb/upb/encode.h +3 -38
- data/third_party/upb/upb/extension_registry.h +35 -0
- data/third_party/upb/upb/{table.c → hash/common.c} +51 -109
- data/third_party/upb/upb/hash/common.h +199 -0
- data/third_party/upb/upb/hash/int_table.h +102 -0
- data/third_party/upb/upb/hash/str_table.h +161 -0
- data/third_party/upb/upb/json/decode.c +1477 -0
- data/third_party/upb/upb/json/decode.h +52 -0
- data/third_party/upb/upb/{json_encode.c → json/encode.c} +74 -46
- data/third_party/upb/upb/json/encode.h +70 -0
- data/third_party/upb/upb/json_decode.h +36 -0
- data/third_party/upb/upb/json_encode.h +4 -30
- data/third_party/upb/upb/lex/atoi.c +68 -0
- data/third_party/upb/upb/lex/atoi.h +53 -0
- data/third_party/upb/upb/lex/round_trip.c +67 -0
- data/third_party/upb/upb/{upb_internal.h → lex/round_trip.h} +17 -30
- data/third_party/upb/upb/lex/strtod.c +97 -0
- data/third_party/upb/upb/lex/strtod.h +46 -0
- data/third_party/upb/upb/lex/unicode.c +57 -0
- data/third_party/upb/upb/lex/unicode.h +77 -0
- data/third_party/upb/upb/map.h +36 -0
- data/third_party/upb/upb/mem/alloc.c +47 -0
- data/third_party/upb/upb/mem/alloc.h +98 -0
- data/third_party/upb/upb/mem/arena.c +367 -0
- data/third_party/upb/upb/mem/arena.h +160 -0
- data/third_party/upb/upb/mem/arena_internal.h +114 -0
- data/third_party/upb/upb/message/accessors.c +68 -0
- data/third_party/upb/upb/message/accessors.h +379 -0
- data/third_party/upb/upb/message/accessors_internal.h +325 -0
- data/third_party/upb/upb/message/extension_internal.h +83 -0
- data/third_party/upb/upb/message/internal.h +135 -0
- data/third_party/upb/upb/message/message.c +180 -0
- data/third_party/upb/upb/message/message.h +69 -0
- data/third_party/upb/upb/mini_table/common.c +128 -0
- data/third_party/upb/upb/mini_table/common.h +170 -0
- data/third_party/upb/upb/mini_table/common_internal.h +111 -0
- data/third_party/upb/upb/mini_table/decode.c +1127 -0
- data/third_party/upb/upb/mini_table/decode.h +179 -0
- data/third_party/upb/upb/mini_table/encode.c +300 -0
- data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
- data/third_party/upb/upb/mini_table/encode_internal.hpp +136 -0
- data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
- data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
- data/third_party/upb/upb/mini_table/extension_registry.c +96 -0
- data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
- data/third_party/upb/upb/mini_table/field_internal.h +192 -0
- data/third_party/upb/upb/mini_table/file_internal.h +47 -0
- data/third_party/upb/upb/mini_table/message_internal.h +136 -0
- data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
- data/third_party/upb/upb/mini_table/types.h +40 -0
- data/third_party/upb/upb/mini_table.h +36 -0
- data/third_party/upb/upb/msg.h +3 -81
- data/third_party/upb/upb/port/atomic.h +101 -0
- data/third_party/upb/upb/{port_def.inc → port/def.inc} +96 -28
- data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +14 -3
- data/third_party/upb/upb/port/vsnprintf_compat.h +50 -0
- data/third_party/upb/upb/reflection/common.h +67 -0
- data/third_party/upb/upb/reflection/def.h +42 -0
- data/third_party/upb/upb/reflection/def.hpp +610 -0
- data/third_party/upb/upb/reflection/def_builder.c +357 -0
- data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
- data/third_party/upb/upb/reflection/def_pool.c +462 -0
- data/third_party/upb/upb/reflection/def_pool.h +108 -0
- data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
- data/third_party/upb/upb/reflection/def_type.c +50 -0
- data/third_party/upb/upb/reflection/def_type.h +81 -0
- data/third_party/upb/upb/reflection/desc_state.c +53 -0
- data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
- data/third_party/upb/upb/reflection/enum_def.c +310 -0
- data/third_party/upb/upb/reflection/enum_def.h +80 -0
- data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
- data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
- data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
- data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
- data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
- data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
- data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
- data/third_party/upb/upb/reflection/extension_range.c +93 -0
- data/third_party/upb/upb/reflection/extension_range.h +55 -0
- data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
- data/third_party/upb/upb/reflection/field_def.c +930 -0
- data/third_party/upb/upb/reflection/field_def.h +91 -0
- data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
- data/third_party/upb/upb/reflection/file_def.c +370 -0
- data/third_party/upb/upb/reflection/file_def.h +77 -0
- data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
- data/third_party/upb/upb/reflection/message.c +233 -0
- data/third_party/upb/upb/reflection/message.h +102 -0
- data/third_party/upb/upb/reflection/message.hpp +37 -0
- data/third_party/upb/upb/reflection/message_def.c +718 -0
- data/third_party/upb/upb/reflection/message_def.h +174 -0
- data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
- data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
- data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
- data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
- data/third_party/upb/upb/reflection/method_def.c +124 -0
- data/third_party/upb/upb/reflection/method_def.h +59 -0
- data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
- data/third_party/upb/upb/reflection/oneof_def.c +226 -0
- data/third_party/upb/upb/reflection/oneof_def.h +66 -0
- data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
- data/third_party/upb/upb/reflection/service_def.c +128 -0
- data/third_party/upb/upb/reflection/service_def.h +60 -0
- data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
- data/third_party/upb/upb/reflection.h +4 -188
- data/third_party/upb/upb/reflection.hpp +3 -7
- data/third_party/upb/upb/status.h +36 -0
- data/third_party/upb/upb/string_view.h +36 -0
- data/third_party/upb/upb/{text_encode.c → text/encode.c} +75 -70
- data/third_party/upb/upb/text/encode.h +69 -0
- data/third_party/upb/upb/text_encode.h +4 -32
- data/third_party/upb/upb/upb.h +6 -340
- data/third_party/upb/upb/upb.hpp +10 -18
- data/third_party/upb/upb/wire/common.h +44 -0
- data/third_party/upb/upb/wire/common_internal.h +50 -0
- data/third_party/upb/upb/wire/decode.c +1343 -0
- data/third_party/upb/upb/wire/decode.h +108 -0
- data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
- data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
- data/third_party/upb/upb/{decode_internal.h → wire/decode_internal.h} +44 -92
- data/third_party/upb/upb/{encode.c → wire/encode.c} +130 -102
- data/third_party/upb/upb/wire/encode.h +92 -0
- data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
- data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
- data/third_party/upb/upb/wire/reader.c +67 -0
- data/third_party/upb/upb/wire/reader.h +227 -0
- data/third_party/upb/upb/wire/swap_internal.h +63 -0
- data/third_party/upb/upb/wire/types.h +41 -0
- data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
- data/third_party/utf8_range/utf8_range.h +21 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +597 -174
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -176
- data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
- data/src/core/ext/filters/client_channel/lb_policy.cc +0 -134
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
- data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -30
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -180
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -182
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -334
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -324
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
- data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
- data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -59
- data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +0 -159
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +0 -81
- data/src/core/lib/event_engine/iomgr_engine/timer.h +0 -193
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +0 -56
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +0 -254
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +0 -111
- data/src/core/lib/event_engine/promise.h +0 -69
- data/src/core/lib/gpr/cpu_iphone.cc +0 -44
- data/src/core/lib/gpr/cpu_windows.cc +0 -33
- data/src/core/lib/gpr/env.h +0 -40
- data/src/core/lib/gpr/env_linux.cc +0 -75
- data/src/core/lib/gpr/env_posix.cc +0 -46
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/string_util_windows.cc +0 -82
- data/src/core/lib/gpr/string_windows.cc +0 -69
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/gpr/tmpfile_windows.cc +0 -69
- data/src/core/lib/gprpp/global_config.h +0 -93
- data/src/core/lib/gprpp/global_config_custom.h +0 -29
- data/src/core/lib/gprpp/global_config_env.cc +0 -138
- data/src/core/lib/gprpp/global_config_env.h +0 -133
- data/src/core/lib/gprpp/global_config_generic.h +0 -40
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
- data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
- data/src/core/lib/profiling/basic_timers.cc +0 -295
- data/src/core/lib/profiling/stap_timers.cc +0 -50
- data/src/core/lib/profiling/timers.h +0 -94
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/promise/intra_activity_waiter.h +0 -49
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
- data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -30
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
- data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
- data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
- data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
- data/third_party/upb/third_party/utf8_range/utf8_range.h +0 -9
- data/third_party/upb/upb/decode.c +0 -1125
- data/third_party/upb/upb/def.c +0 -3261
- data/third_party/upb/upb/msg.c +0 -428
- data/third_party/upb/upb/msg_internal.h +0 -831
- data/third_party/upb/upb/reflection.c +0 -480
- data/third_party/upb/upb/table_internal.h +0 -385
- data/third_party/upb/upb/upb.c +0 -362
- /data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
- /data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
- /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
- /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -20,16 +20,15 @@
|
|
20
20
|
|
21
21
|
#include <inttypes.h>
|
22
22
|
#include <limits.h>
|
23
|
-
#include <string.h>
|
24
23
|
|
25
24
|
#include <algorithm>
|
26
25
|
#include <functional>
|
27
26
|
#include <new>
|
28
|
-
#include <
|
27
|
+
#include <type_traits>
|
28
|
+
#include <utility>
|
29
29
|
#include <vector>
|
30
30
|
|
31
|
-
#include "absl/
|
32
|
-
#include "absl/memory/memory.h"
|
31
|
+
#include "absl/cleanup/cleanup.h"
|
33
32
|
#include "absl/status/status.h"
|
34
33
|
#include "absl/status/statusor.h"
|
35
34
|
#include "absl/strings/cord.h"
|
@@ -40,49 +39,53 @@
|
|
40
39
|
#include "absl/types/optional.h"
|
41
40
|
#include "absl/types/variant.h"
|
42
41
|
|
43
|
-
#include <grpc/
|
42
|
+
#include <grpc/event_engine/event_engine.h>
|
44
43
|
#include <grpc/slice.h>
|
45
44
|
#include <grpc/status.h>
|
46
|
-
#include <grpc/support/
|
45
|
+
#include <grpc/support/json.h>
|
47
46
|
#include <grpc/support/log.h>
|
48
47
|
#include <grpc/support/string_util.h>
|
48
|
+
#include <grpc/support/time.h>
|
49
49
|
|
50
50
|
#include "src/core/ext/filters/client_channel/backend_metric.h"
|
51
51
|
#include "src/core/ext/filters/client_channel/backup_poller.h"
|
52
52
|
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
53
|
+
#include "src/core/ext/filters/client_channel/client_channel_internal.h"
|
54
|
+
#include "src/core/ext/filters/client_channel/client_channel_service_config.h"
|
53
55
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
54
56
|
#include "src/core/ext/filters/client_channel/dynamic_filters.h"
|
55
57
|
#include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
|
56
58
|
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
57
|
-
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
58
59
|
#include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
|
59
|
-
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
60
|
-
#include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
|
61
60
|
#include "src/core/ext/filters/client_channel/retry_filter.h"
|
62
61
|
#include "src/core/ext/filters/client_channel/subchannel.h"
|
63
|
-
#include "src/core/ext/filters/client_channel/subchannel_interface.h"
|
64
62
|
#include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
|
65
63
|
#include "src/core/ext/filters/deadline/deadline_filter.h"
|
66
64
|
#include "src/core/lib/channel/channel_args.h"
|
67
65
|
#include "src/core/lib/channel/channel_stack.h"
|
68
66
|
#include "src/core/lib/channel/channel_trace.h"
|
67
|
+
#include "src/core/lib/channel/status_util.h"
|
69
68
|
#include "src/core/lib/config/core_configuration.h"
|
70
69
|
#include "src/core/lib/debug/trace.h"
|
71
70
|
#include "src/core/lib/gpr/useful.h"
|
72
71
|
#include "src/core/lib/gprpp/debug_location.h"
|
72
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
73
73
|
#include "src/core/lib/gprpp/sync.h"
|
74
|
+
#include "src/core/lib/gprpp/unique_type_name.h"
|
75
|
+
#include "src/core/lib/gprpp/work_serializer.h"
|
76
|
+
#include "src/core/lib/handshaker/proxy_mapper_registry.h"
|
74
77
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
75
78
|
#include "src/core/lib/iomgr/polling_entity.h"
|
76
79
|
#include "src/core/lib/iomgr/pollset_set.h"
|
77
|
-
#include "src/core/lib/iomgr/work_serializer.h"
|
78
80
|
#include "src/core/lib/json/json.h"
|
79
|
-
#include "src/core/lib/
|
81
|
+
#include "src/core/lib/load_balancing/lb_policy_registry.h"
|
82
|
+
#include "src/core/lib/load_balancing/subchannel_interface.h"
|
80
83
|
#include "src/core/lib/resolver/resolver_registry.h"
|
81
84
|
#include "src/core/lib/resolver/server_address.h"
|
82
85
|
#include "src/core/lib/service_config/service_config_call_data.h"
|
83
86
|
#include "src/core/lib/service_config/service_config_impl.h"
|
87
|
+
#include "src/core/lib/slice/slice.h"
|
84
88
|
#include "src/core/lib/slice/slice_internal.h"
|
85
|
-
#include "src/core/lib/slice/slice_refcount.h"
|
86
89
|
#include "src/core/lib/surface/channel.h"
|
87
90
|
#include "src/core/lib/transport/connectivity_state.h"
|
88
91
|
#include "src/core/lib/transport/error_utils.h"
|
@@ -92,9 +95,6 @@
|
|
92
95
|
// Client channel filter
|
93
96
|
//
|
94
97
|
|
95
|
-
#define GRPC_ARG_HEALTH_CHECK_SERVICE_NAME \
|
96
|
-
"grpc.internal.health_check_service_name"
|
97
|
-
|
98
98
|
namespace grpc_core {
|
99
99
|
|
100
100
|
using internal::ClientChannelMethodParsedConfig;
|
@@ -108,6 +108,75 @@ TraceFlag grpc_client_channel_lb_call_trace(false, "client_channel_lb_call");
|
|
108
108
|
//
|
109
109
|
|
110
110
|
class ClientChannel::CallData {
|
111
|
+
public:
|
112
|
+
// Removes the call from the channel's list of calls queued
|
113
|
+
// for name resolution.
|
114
|
+
void RemoveCallFromResolverQueuedCallsLocked()
|
115
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
116
|
+
|
117
|
+
// Called by the channel for each queued call when a new resolution
|
118
|
+
// result becomes available.
|
119
|
+
virtual void RetryCheckResolutionLocked()
|
120
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_) = 0;
|
121
|
+
|
122
|
+
RefCountedPtr<DynamicFilters> dynamic_filters() const {
|
123
|
+
return dynamic_filters_;
|
124
|
+
}
|
125
|
+
|
126
|
+
protected:
|
127
|
+
CallData() = default;
|
128
|
+
virtual ~CallData() = default;
|
129
|
+
|
130
|
+
// Checks whether a resolver result is available. The following
|
131
|
+
// outcomes are possible:
|
132
|
+
// - No resolver result is available yet. The call will be queued and
|
133
|
+
// absl::nullopt will be returned. Later, when a resolver result
|
134
|
+
// becomes available, RetryCheckResolutionLocked() will be called.
|
135
|
+
// - The resolver has returned a transient failure. If the call is
|
136
|
+
// not wait_for_ready, a non-OK status will be returned. (If the
|
137
|
+
// call *is* wait_for_ready, it will be queued instead.)
|
138
|
+
// - There is a valid resolver result. The service config will be
|
139
|
+
// stored in the call context and an OK status will be returned.
|
140
|
+
absl::optional<absl::Status> CheckResolution(bool was_queued);
|
141
|
+
|
142
|
+
private:
|
143
|
+
// Accessors for data stored in the subclass.
|
144
|
+
virtual ClientChannel* chand() const = 0;
|
145
|
+
virtual Arena* arena() const = 0;
|
146
|
+
virtual grpc_polling_entity* pollent() const = 0;
|
147
|
+
virtual grpc_metadata_batch* send_initial_metadata() = 0;
|
148
|
+
virtual grpc_call_context_element* call_context() const = 0;
|
149
|
+
|
150
|
+
// Helper function for CheckResolution(). Returns true if the call
|
151
|
+
// can continue (i.e., there is a valid resolution result, or there is
|
152
|
+
// an invalid resolution result but the call is not wait_for_ready).
|
153
|
+
bool CheckResolutionLocked(
|
154
|
+
absl::StatusOr<RefCountedPtr<ConfigSelector>>* config_selector)
|
155
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
156
|
+
|
157
|
+
// Adds the call to the channel's list of calls queued for name resolution.
|
158
|
+
void AddCallToResolverQueuedCallsLocked()
|
159
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
160
|
+
|
161
|
+
// Called when adding the call to the resolver queue.
|
162
|
+
virtual void OnAddToQueueLocked()
|
163
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_) {}
|
164
|
+
|
165
|
+
// Applies service config to the call. Must be invoked once we know
|
166
|
+
// that the resolver has returned results to the channel.
|
167
|
+
// If an error is returned, the error indicates the status with which
|
168
|
+
// the call should be failed.
|
169
|
+
grpc_error_handle ApplyServiceConfigToCallLocked(
|
170
|
+
const absl::StatusOr<RefCountedPtr<ConfigSelector>>& config_selector);
|
171
|
+
|
172
|
+
// Called to reset the deadline based on the service config obtained
|
173
|
+
// from the resolver.
|
174
|
+
virtual void ResetDeadline(Duration timeout) = 0;
|
175
|
+
|
176
|
+
RefCountedPtr<DynamicFilters> dynamic_filters_;
|
177
|
+
};
|
178
|
+
|
179
|
+
class ClientChannel::FilterBasedCallData : public ClientChannel::CallData {
|
111
180
|
public:
|
112
181
|
static grpc_error_handle Init(grpc_call_element* elem,
|
113
182
|
const grpc_call_element_args* args);
|
@@ -118,31 +187,33 @@ class ClientChannel::CallData {
|
|
118
187
|
grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
|
119
188
|
static void SetPollent(grpc_call_element* elem, grpc_polling_entity* pollent);
|
120
189
|
|
121
|
-
// Invoked by channel for queued calls when name resolution is completed.
|
122
|
-
static void CheckResolution(void* arg, grpc_error_handle error);
|
123
|
-
// Helper function for applying the service config to a call while
|
124
|
-
// holding ClientChannel::resolution_mu_.
|
125
|
-
// Returns true if the service config has been applied to the call, in which
|
126
|
-
// case the caller must invoke ResolutionDone() or AsyncResolutionDone()
|
127
|
-
// with the returned error.
|
128
|
-
bool CheckResolutionLocked(grpc_call_element* elem, grpc_error_handle* error)
|
129
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
130
|
-
// Schedules a callback to continue processing the call once
|
131
|
-
// resolution is complete. The callback will not run until after this
|
132
|
-
// method returns.
|
133
|
-
void AsyncResolutionDone(grpc_call_element* elem, grpc_error_handle error);
|
134
|
-
|
135
190
|
private:
|
136
191
|
class ResolverQueuedCallCanceller;
|
137
192
|
|
138
|
-
|
139
|
-
|
140
|
-
~
|
193
|
+
FilterBasedCallData(grpc_call_element* elem,
|
194
|
+
const grpc_call_element_args& args);
|
195
|
+
~FilterBasedCallData() override;
|
196
|
+
|
197
|
+
grpc_call_element* elem() const { return deadline_state_.elem; }
|
198
|
+
grpc_call_stack* owning_call() const { return deadline_state_.call_stack; }
|
199
|
+
CallCombiner* call_combiner() const { return deadline_state_.call_combiner; }
|
200
|
+
|
201
|
+
ClientChannel* chand() const override {
|
202
|
+
return static_cast<ClientChannel*>(elem()->channel_data);
|
203
|
+
}
|
204
|
+
Arena* arena() const override { return deadline_state_.arena; }
|
205
|
+
grpc_polling_entity* pollent() const override { return pollent_; }
|
206
|
+
grpc_metadata_batch* send_initial_metadata() override {
|
207
|
+
return pending_batches_[0]
|
208
|
+
->payload->send_initial_metadata.send_initial_metadata;
|
209
|
+
}
|
210
|
+
grpc_call_context_element* call_context() const override {
|
211
|
+
return call_context_;
|
212
|
+
}
|
141
213
|
|
142
214
|
// Returns the index into pending_batches_ to be used for batch.
|
143
215
|
static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
|
144
|
-
void PendingBatchesAdd(
|
145
|
-
grpc_transport_stream_op_batch* batch);
|
216
|
+
void PendingBatchesAdd(grpc_transport_stream_op_batch* batch);
|
146
217
|
static void FailPendingBatchInCallCombiner(void* arg,
|
147
218
|
grpc_error_handle error);
|
148
219
|
// A predicate type and some useful implementations for PendingBatchesFail().
|
@@ -162,71 +233,55 @@ class ClientChannel::CallData {
|
|
162
233
|
// If yield_call_combiner_predicate returns true, assumes responsibility for
|
163
234
|
// yielding the call combiner.
|
164
235
|
void PendingBatchesFail(
|
165
|
-
|
236
|
+
grpc_error_handle error,
|
166
237
|
YieldCallCombinerPredicate yield_call_combiner_predicate);
|
167
238
|
static void ResumePendingBatchInCallCombiner(void* arg,
|
168
239
|
grpc_error_handle ignored);
|
169
|
-
// Resumes all pending batches on
|
170
|
-
void PendingBatchesResume(
|
240
|
+
// Resumes all pending batches on dynamic_call_.
|
241
|
+
void PendingBatchesResume();
|
171
242
|
|
172
|
-
//
|
173
|
-
//
|
174
|
-
//
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
179
|
-
// Invoked when the resolver result is applied to the caller, on both
|
180
|
-
// success or failure.
|
181
|
-
static void ResolutionDone(void* arg, grpc_error_handle error);
|
182
|
-
// Removes the call (if present) from the channel's list of calls queued
|
183
|
-
// for name resolution.
|
184
|
-
void MaybeRemoveCallFromResolverQueuedCallsLocked(grpc_call_element* elem)
|
243
|
+
// Called to check for a resolution result, both when the call is
|
244
|
+
// initially started and when it is queued and the channel gets a new
|
245
|
+
// resolution result.
|
246
|
+
void TryCheckResolution(bool was_queued);
|
247
|
+
|
248
|
+
void OnAddToQueueLocked() override
|
185
249
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
186
|
-
|
187
|
-
|
188
|
-
void MaybeAddCallToResolverQueuedCallsLocked(grpc_call_element* elem)
|
250
|
+
|
251
|
+
void RetryCheckResolutionLocked() override
|
189
252
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
|
190
253
|
|
191
|
-
|
192
|
-
|
254
|
+
void ResetDeadline(Duration timeout) override {
|
255
|
+
const Timestamp per_method_deadline =
|
256
|
+
Timestamp::FromCycleCounterRoundUp(call_start_time_) + timeout;
|
257
|
+
if (per_method_deadline < deadline_) {
|
258
|
+
deadline_ = per_method_deadline;
|
259
|
+
grpc_deadline_state_reset(&deadline_state_, deadline_);
|
260
|
+
}
|
261
|
+
}
|
193
262
|
|
194
|
-
void CreateDynamicCall(
|
263
|
+
void CreateDynamicCall();
|
195
264
|
|
196
|
-
|
197
|
-
|
198
|
-
// TODO(roth): This is slightly sub-optimal in that grpc_deadline_state
|
199
|
-
// and this struct both independently store pointers to the call stack
|
200
|
-
// and call combiner. If/when we have time, find a way to avoid this
|
201
|
-
// without breaking the grpc_deadline_state abstraction.
|
202
|
-
grpc_deadline_state deadline_state_;
|
265
|
+
static void RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
266
|
+
void* arg, grpc_error_handle error);
|
203
267
|
|
204
268
|
grpc_slice path_; // Request path.
|
269
|
+
grpc_call_context_element* call_context_;
|
205
270
|
gpr_cycle_counter call_start_time_;
|
206
271
|
Timestamp deadline_;
|
207
|
-
Arena* arena_;
|
208
|
-
grpc_call_stack* owning_call_;
|
209
|
-
CallCombiner* call_combiner_;
|
210
|
-
grpc_call_context_element* call_context_;
|
211
272
|
|
212
|
-
|
273
|
+
// State for handling deadlines.
|
274
|
+
grpc_deadline_state deadline_state_;
|
213
275
|
|
214
|
-
|
276
|
+
grpc_polling_entity* pollent_ = nullptr;
|
215
277
|
|
216
278
|
// Accessed while holding ClientChannel::resolution_mu_.
|
217
|
-
bool service_config_applied_ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) =
|
218
|
-
false;
|
219
|
-
bool queued_pending_resolver_result_
|
220
|
-
ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = false;
|
221
|
-
ClientChannel::ResolverQueuedCall resolver_queued_call_
|
222
|
-
ABSL_GUARDED_BY(&ClientChannel::resolution_mu_);
|
223
279
|
ResolverQueuedCallCanceller* resolver_call_canceller_
|
224
280
|
ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = nullptr;
|
225
281
|
|
226
282
|
grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
|
227
283
|
grpc_closure recv_trailing_metadata_ready_;
|
228
284
|
|
229
|
-
RefCountedPtr<DynamicFilters> dynamic_filters_;
|
230
285
|
RefCountedPtr<DynamicFilters::Call> dynamic_call_;
|
231
286
|
|
232
287
|
// Batches are added to this list when received from above.
|
@@ -237,7 +292,7 @@ class ClientChannel::CallData {
|
|
237
292
|
grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
|
238
293
|
|
239
294
|
// Set when we get a cancel_stream op.
|
240
|
-
grpc_error_handle cancel_error_
|
295
|
+
grpc_error_handle cancel_error_;
|
241
296
|
};
|
242
297
|
|
243
298
|
//
|
@@ -245,13 +300,13 @@ class ClientChannel::CallData {
|
|
245
300
|
//
|
246
301
|
|
247
302
|
const grpc_channel_filter ClientChannel::kFilterVtable = {
|
248
|
-
ClientChannel::
|
303
|
+
ClientChannel::FilterBasedCallData::StartTransportStreamOpBatch,
|
249
304
|
nullptr,
|
250
305
|
ClientChannel::StartTransportOp,
|
251
|
-
sizeof(ClientChannel::
|
252
|
-
ClientChannel::
|
253
|
-
ClientChannel::
|
254
|
-
ClientChannel::
|
306
|
+
sizeof(ClientChannel::FilterBasedCallData),
|
307
|
+
ClientChannel::FilterBasedCallData::Init,
|
308
|
+
ClientChannel::FilterBasedCallData::SetPollent,
|
309
|
+
ClientChannel::FilterBasedCallData::Destroy,
|
255
310
|
sizeof(ClientChannel),
|
256
311
|
ClientChannel::Init,
|
257
312
|
grpc_channel_stack_no_post_init,
|
@@ -266,28 +321,6 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
|
|
266
321
|
|
267
322
|
namespace {
|
268
323
|
|
269
|
-
// Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
|
270
|
-
void* ClientChannelArgCopy(void* p) { return p; }
|
271
|
-
void ClientChannelArgDestroy(void* /*p*/) {}
|
272
|
-
int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
|
273
|
-
const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
|
274
|
-
ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
|
275
|
-
|
276
|
-
// Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
|
277
|
-
void* ServiceConfigObjArgCopy(void* p) {
|
278
|
-
auto* service_config = static_cast<ServiceConfig*>(p);
|
279
|
-
service_config->Ref().release();
|
280
|
-
return p;
|
281
|
-
}
|
282
|
-
void ServiceConfigObjArgDestroy(void* p) {
|
283
|
-
auto* service_config = static_cast<ServiceConfig*>(p);
|
284
|
-
service_config->Unref();
|
285
|
-
}
|
286
|
-
int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
|
287
|
-
const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
|
288
|
-
ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
|
289
|
-
ServiceConfigObjArgCmp};
|
290
|
-
|
291
324
|
class DynamicTerminationFilter {
|
292
325
|
public:
|
293
326
|
class CallData;
|
@@ -299,7 +332,7 @@ class DynamicTerminationFilter {
|
|
299
332
|
GPR_ASSERT(args->is_last);
|
300
333
|
GPR_ASSERT(elem->filter == &kFilterVtable);
|
301
334
|
new (elem->channel_data) DynamicTerminationFilter(args->channel_args);
|
302
|
-
return
|
335
|
+
return absl::OkStatus();
|
303
336
|
}
|
304
337
|
|
305
338
|
static void Destroy(grpc_channel_element* elem) {
|
@@ -314,9 +347,8 @@ class DynamicTerminationFilter {
|
|
314
347
|
const grpc_channel_info* /*info*/) {}
|
315
348
|
|
316
349
|
private:
|
317
|
-
explicit DynamicTerminationFilter(const
|
318
|
-
: chand_(
|
319
|
-
args, GRPC_ARG_CLIENT_CHANNEL)) {}
|
350
|
+
explicit DynamicTerminationFilter(const ChannelArgs& args)
|
351
|
+
: chand_(args.GetObject<ClientChannel>()) {}
|
320
352
|
|
321
353
|
ClientChannel* chand_;
|
322
354
|
};
|
@@ -326,7 +358,7 @@ class DynamicTerminationFilter::CallData {
|
|
326
358
|
static grpc_error_handle Init(grpc_call_element* elem,
|
327
359
|
const grpc_call_element_args* args) {
|
328
360
|
new (elem->call_data) CallData(*args);
|
329
|
-
return
|
361
|
+
return absl::OkStatus();
|
330
362
|
}
|
331
363
|
|
332
364
|
static void Destroy(grpc_call_element* elem,
|
@@ -342,7 +374,7 @@ class DynamicTerminationFilter::CallData {
|
|
342
374
|
subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
|
343
375
|
} else {
|
344
376
|
// TODO(yashkt) : This can potentially be a Closure::Run
|
345
|
-
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure,
|
377
|
+
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
|
346
378
|
}
|
347
379
|
}
|
348
380
|
|
@@ -366,7 +398,7 @@ class DynamicTerminationFilter::CallData {
|
|
366
398
|
calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
367
399
|
calld->lb_call_ = client_channel->CreateLoadBalancedCall(
|
368
400
|
args, pollent, nullptr,
|
369
|
-
service_config_call_data->
|
401
|
+
[service_config_call_data]() { service_config_call_data->Commit(); },
|
370
402
|
/*is_transparent_retry=*/false);
|
371
403
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
372
404
|
gpr_log(GPR_INFO,
|
@@ -377,14 +409,14 @@ class DynamicTerminationFilter::CallData {
|
|
377
409
|
|
378
410
|
private:
|
379
411
|
explicit CallData(const grpc_call_element_args& args)
|
380
|
-
: path_(
|
412
|
+
: path_(CSliceRef(args.path)),
|
381
413
|
deadline_(args.deadline),
|
382
414
|
arena_(args.arena),
|
383
415
|
owning_call_(args.call_stack),
|
384
416
|
call_combiner_(args.call_combiner),
|
385
417
|
call_context_(args.context) {}
|
386
418
|
|
387
|
-
~CallData() {
|
419
|
+
~CallData() { CSliceUnref(path_); }
|
388
420
|
|
389
421
|
grpc_slice path_; // Request path.
|
390
422
|
Timestamp deadline_;
|
@@ -393,7 +425,7 @@ class DynamicTerminationFilter::CallData {
|
|
393
425
|
CallCombiner* call_combiner_;
|
394
426
|
grpc_call_context_element* call_context_;
|
395
427
|
|
396
|
-
OrphanablePtr<ClientChannel::
|
428
|
+
OrphanablePtr<ClientChannel::FilterBasedLoadBalancedCall> lb_call_;
|
397
429
|
};
|
398
430
|
|
399
431
|
const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
|
@@ -445,8 +477,8 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
|
|
445
477
|
//
|
446
478
|
|
447
479
|
// This class is a wrapper for Subchannel that hides details of the
|
448
|
-
// channel's implementation (such as the
|
449
|
-
//
|
480
|
+
// channel's implementation (such as the connected subchannel) from the
|
481
|
+
// LB policy API.
|
450
482
|
//
|
451
483
|
// Note that no synchronization is needed here, because even if the
|
452
484
|
// underlying subchannel is shared between channels, this wrapper will only
|
@@ -454,14 +486,12 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
|
|
454
486
|
// control plane work_serializer.
|
455
487
|
class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
456
488
|
public:
|
457
|
-
SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel
|
458
|
-
absl::optional<std::string> health_check_service_name)
|
489
|
+
SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel)
|
459
490
|
: SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)
|
460
491
|
? "SubchannelWrapper"
|
461
492
|
: nullptr),
|
462
493
|
chand_(chand),
|
463
|
-
subchannel_(std::move(subchannel))
|
464
|
-
health_check_service_name_(std::move(health_check_service_name)) {
|
494
|
+
subchannel_(std::move(subchannel)) {
|
465
495
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
466
496
|
gpr_log(GPR_INFO,
|
467
497
|
"chand=%p: creating subchannel wrapper %p for subchannel %p",
|
@@ -514,7 +544,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
514
544
|
watcher_wrapper = new WatcherWrapper(std::move(watcher),
|
515
545
|
Ref(DEBUG_LOCATION, "WatcherWrapper"));
|
516
546
|
subchannel_->WatchConnectivityState(
|
517
|
-
health_check_service_name_,
|
518
547
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
|
519
548
|
watcher_wrapper));
|
520
549
|
}
|
@@ -523,8 +552,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
523
552
|
override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
524
553
|
auto it = watcher_map_.find(watcher);
|
525
554
|
GPR_ASSERT(it != watcher_map_.end());
|
526
|
-
subchannel_->CancelConnectivityStateWatch(
|
527
|
-
it->second);
|
555
|
+
subchannel_->CancelConnectivityStateWatch(it->second);
|
528
556
|
watcher_map_.erase(it);
|
529
557
|
}
|
530
558
|
|
@@ -545,29 +573,23 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
545
573
|
data_watchers_.push_back(std::move(internal_watcher));
|
546
574
|
}
|
547
575
|
|
548
|
-
const grpc_channel_args* channel_args() override {
|
549
|
-
return subchannel_->channel_args();
|
550
|
-
}
|
551
|
-
|
552
576
|
void ThrottleKeepaliveTime(int new_keepalive_time) {
|
553
577
|
subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
|
554
578
|
}
|
555
579
|
|
556
580
|
private:
|
557
|
-
//
|
558
|
-
//
|
559
|
-
//
|
560
|
-
// the state, whereas the one in SubchannelInterface does not expose
|
561
|
-
// the ConnectedSubchannel.
|
562
|
-
//
|
563
|
-
// This wrapper provides a bridge between the two. It implements
|
564
|
-
// Subchannel::ConnectivityStateWatcherInterface and wraps
|
581
|
+
// This wrapper provides a bridge between the internal Subchannel API
|
582
|
+
// and the SubchannelInterface API that we expose to LB policies.
|
583
|
+
// It implements Subchannel::ConnectivityStateWatcherInterface and wraps
|
565
584
|
// the instance of SubchannelInterface::ConnectivityStateWatcherInterface
|
566
585
|
// that was passed in by the LB policy. We pass an instance of this
|
567
586
|
// class to the underlying Subchannel, and when we get updates from
|
568
587
|
// the subchannel, we pass those on to the wrapped watcher to return
|
569
|
-
// the update to the LB policy.
|
570
|
-
//
|
588
|
+
// the update to the LB policy.
|
589
|
+
//
|
590
|
+
// This class handles things like hopping into the WorkSerializer
|
591
|
+
// before passing notifications to the LB policy and propagating
|
592
|
+
// keepalive information betwen subchannels.
|
571
593
|
class WatcherWrapper : public Subchannel::ConnectivityStateWatcherInterface {
|
572
594
|
public:
|
573
595
|
WatcherWrapper(
|
@@ -586,7 +608,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
586
608
|
DEBUG_LOCATION);
|
587
609
|
}
|
588
610
|
|
589
|
-
void OnConnectivityStateChange(
|
611
|
+
void OnConnectivityStateChange(grpc_connectivity_state state,
|
612
|
+
const absl::Status& status) override {
|
590
613
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
591
614
|
gpr_log(GPR_INFO,
|
592
615
|
"chand=%p: connectivity change for subchannel wrapper %p "
|
@@ -595,41 +618,33 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
595
618
|
}
|
596
619
|
Ref().release(); // ref owned by lambda
|
597
620
|
parent_->chand_->work_serializer_->Run(
|
598
|
-
[this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
621
|
+
[this, state, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
599
622
|
*parent_->chand_->work_serializer_) {
|
600
|
-
ApplyUpdateInControlPlaneWorkSerializer();
|
623
|
+
ApplyUpdateInControlPlaneWorkSerializer(state, status);
|
601
624
|
Unref();
|
602
625
|
},
|
603
626
|
DEBUG_LOCATION);
|
604
627
|
}
|
605
628
|
|
606
629
|
grpc_pollset_set* interested_parties() override {
|
607
|
-
|
608
|
-
watcher_.get();
|
609
|
-
if (watcher_ == nullptr) watcher = replacement_->watcher_.get();
|
610
|
-
return watcher->interested_parties();
|
611
|
-
}
|
612
|
-
|
613
|
-
WatcherWrapper* MakeReplacement() {
|
614
|
-
auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
|
615
|
-
replacement_ = replacement;
|
616
|
-
return replacement;
|
630
|
+
return watcher_->interested_parties();
|
617
631
|
}
|
618
632
|
|
619
633
|
private:
|
620
|
-
void ApplyUpdateInControlPlaneWorkSerializer(
|
634
|
+
void ApplyUpdateInControlPlaneWorkSerializer(grpc_connectivity_state state,
|
635
|
+
const absl::Status& status)
|
621
636
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
|
622
637
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
623
638
|
gpr_log(GPR_INFO,
|
624
639
|
"chand=%p: processing connectivity change in work serializer "
|
625
|
-
"for subchannel wrapper %p subchannel %p "
|
626
|
-
"
|
640
|
+
"for subchannel wrapper %p subchannel %p watcher=%p "
|
641
|
+
"state=%s status=%s",
|
627
642
|
parent_->chand_, parent_.get(), parent_->subchannel_.get(),
|
628
|
-
watcher_.get())
|
643
|
+
watcher_.get(), ConnectivityStateName(state),
|
644
|
+
status.ToString().c_str());
|
629
645
|
}
|
630
|
-
ConnectivityStateChange state_change = PopConnectivityStateChange();
|
631
646
|
absl::optional<absl::Cord> keepalive_throttling =
|
632
|
-
|
647
|
+
status.GetPayload(kKeepaliveThrottlingKey);
|
633
648
|
if (keepalive_throttling.has_value()) {
|
634
649
|
int new_keepalive_time = -1;
|
635
650
|
if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
|
@@ -654,30 +669,22 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
654
669
|
std::string(keepalive_throttling.value()).c_str());
|
655
670
|
}
|
656
671
|
}
|
657
|
-
//
|
658
|
-
//
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
if (state_change.state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
665
|
-
state_change.status = absl::OkStatus();
|
666
|
-
}
|
667
|
-
watcher_->OnConnectivityStateChange(state_change.state,
|
668
|
-
state_change.status);
|
669
|
-
}
|
672
|
+
// Propagate status only in state TF.
|
673
|
+
// We specifically want to avoid propagating the status for
|
674
|
+
// state IDLE that the real subchannel gave us only for the
|
675
|
+
// purpose of keepalive propagation.
|
676
|
+
watcher_->OnConnectivityStateChange(
|
677
|
+
state,
|
678
|
+
state == GRPC_CHANNEL_TRANSIENT_FAILURE ? status : absl::OkStatus());
|
670
679
|
}
|
671
680
|
|
672
681
|
std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
|
673
682
|
watcher_;
|
674
683
|
RefCountedPtr<SubchannelWrapper> parent_;
|
675
|
-
WatcherWrapper* replacement_ = nullptr;
|
676
684
|
};
|
677
685
|
|
678
686
|
ClientChannel* chand_;
|
679
687
|
RefCountedPtr<Subchannel> subchannel_;
|
680
|
-
absl::optional<std::string> health_check_service_name_;
|
681
688
|
// Maps from the address of the watcher passed to us by the LB policy
|
682
689
|
// to the address of the WrapperWatcher that we passed to the underlying
|
683
690
|
// subchannel. This is needed so that when the LB policy calls
|
@@ -760,14 +767,18 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
|
|
760
767
|
chand_, on_complete_, /*cancel=*/false);
|
761
768
|
// Report new state to the user.
|
762
769
|
*state_ = state;
|
763
|
-
ExecCtx::Run(DEBUG_LOCATION, on_complete_,
|
770
|
+
ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::OkStatus());
|
764
771
|
// Hop back into the work_serializer to clean up.
|
765
772
|
// Not needed in state SHUTDOWN, because the tracker will
|
766
773
|
// automatically remove all watchers in that case.
|
774
|
+
// Note: The callback takes a ref in case the ref inside the state tracker
|
775
|
+
// gets removed before the callback runs via a SHUTDOWN notification.
|
767
776
|
if (state != GRPC_CHANNEL_SHUTDOWN) {
|
777
|
+
Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
|
768
778
|
chand_->work_serializer_->Run(
|
769
779
|
[this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
770
780
|
RemoveWatcherLocked();
|
781
|
+
Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
|
771
782
|
},
|
772
783
|
DEBUG_LOCATION);
|
773
784
|
}
|
@@ -779,17 +790,21 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
|
|
779
790
|
std::memory_order_relaxed)) {
|
780
791
|
return; // Already done.
|
781
792
|
}
|
782
|
-
ExecCtx::Run(DEBUG_LOCATION, on_complete_,
|
793
|
+
ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::CancelledError());
|
783
794
|
// Hop back into the work_serializer to clean up.
|
795
|
+
// Note: The callback takes a ref in case the ref inside the state tracker
|
796
|
+
// gets removed before the callback runs via a SHUTDOWN notification.
|
797
|
+
Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
|
784
798
|
chand_->work_serializer_->Run(
|
785
799
|
[this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
786
800
|
RemoveWatcherLocked();
|
801
|
+
Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
|
787
802
|
},
|
788
803
|
DEBUG_LOCATION);
|
789
804
|
}
|
790
805
|
|
791
806
|
void ClientChannel::ExternalConnectivityWatcher::AddWatcherLocked() {
|
792
|
-
Closure::Run(DEBUG_LOCATION, watcher_timer_init_,
|
807
|
+
Closure::Run(DEBUG_LOCATION, watcher_timer_init_, absl::OkStatus());
|
793
808
|
// Add new watcher. Pass the ref of the object from creation to OrphanablePtr.
|
794
809
|
chand_->state_tracker_.AddWatcher(
|
795
810
|
initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
|
@@ -879,82 +894,29 @@ class ClientChannel::ClientChannelControlHelper
|
|
879
894
|
}
|
880
895
|
|
881
896
|
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
882
|
-
ServerAddress address, const
|
897
|
+
ServerAddress address, const ChannelArgs& args) override
|
883
898
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
884
899
|
if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
&args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
|
889
|
-
if (health_check_service_name_arg != nullptr) {
|
890
|
-
bool inhibit_health_checking = grpc_channel_args_find_bool(
|
891
|
-
&args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
|
892
|
-
if (!inhibit_health_checking) {
|
893
|
-
health_check_service_name = health_check_service_name_arg;
|
894
|
-
}
|
895
|
-
}
|
896
|
-
// Construct channel args for subchannel.
|
897
|
-
// Remove channel args that should not affect subchannel uniqueness.
|
898
|
-
absl::InlinedVector<const char*, 4> args_to_remove = {
|
899
|
-
GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
|
900
|
-
GRPC_ARG_INHIBIT_HEALTH_CHECKING,
|
901
|
-
GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
902
|
-
};
|
903
|
-
// Add channel args needed for the subchannel.
|
904
|
-
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
905
|
-
SubchannelPoolInterface::CreateChannelArg(
|
906
|
-
chand_->subchannel_pool_.get()),
|
907
|
-
};
|
908
|
-
// Check if default authority arg is already set.
|
909
|
-
const char* default_authority =
|
910
|
-
grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
|
911
|
-
// Add args from subchannel address.
|
912
|
-
if (address.args() != nullptr) {
|
913
|
-
for (size_t j = 0; j < address.args()->num_args; ++j) {
|
914
|
-
grpc_arg& arg = address.args()->args[j];
|
915
|
-
if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
|
916
|
-
// Don't add default authority arg from subchannel address if
|
917
|
-
// it's already set at the channel level -- the value from the
|
918
|
-
// application should take precedence over what is set by the
|
919
|
-
// resolver.
|
920
|
-
if (default_authority != nullptr) continue;
|
921
|
-
default_authority = arg.value.string;
|
922
|
-
}
|
923
|
-
args_to_add.emplace_back(arg);
|
924
|
-
}
|
925
|
-
}
|
926
|
-
// If we haven't already set the default authority arg, add it from
|
927
|
-
// the channel.
|
928
|
-
if (default_authority == nullptr) {
|
929
|
-
// Remove it, just in case it's actually present but is the wrong type.
|
930
|
-
args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
|
931
|
-
args_to_add.push_back(grpc_channel_arg_string_create(
|
932
|
-
const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
|
933
|
-
const_cast<char*>(chand_->default_authority_.c_str())));
|
934
|
-
}
|
935
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
936
|
-
&args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
|
937
|
-
args_to_add.size());
|
900
|
+
ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
|
901
|
+
args, address.args(), chand_->subchannel_pool_,
|
902
|
+
chand_->default_authority_);
|
938
903
|
// Create subchannel.
|
939
904
|
RefCountedPtr<Subchannel> subchannel =
|
940
905
|
chand_->client_channel_factory_->CreateSubchannel(address.address(),
|
941
|
-
|
942
|
-
grpc_channel_args_destroy(new_args);
|
906
|
+
subchannel_args);
|
943
907
|
if (subchannel == nullptr) return nullptr;
|
944
908
|
// Make sure the subchannel has updated keepalive time.
|
945
909
|
subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
|
946
910
|
// Create and return wrapper for the subchannel.
|
947
|
-
return MakeRefCounted<SubchannelWrapper>(
|
948
|
-
chand_, std::move(subchannel), std::move(health_check_service_name));
|
911
|
+
return MakeRefCounted<SubchannelWrapper>(chand_, std::move(subchannel));
|
949
912
|
}
|
950
913
|
|
951
|
-
void UpdateState(
|
952
|
-
|
953
|
-
|
954
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
914
|
+
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
915
|
+
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker)
|
916
|
+
override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
955
917
|
if (chand_->resolver_ == nullptr) return; // Shutting down.
|
956
918
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
957
|
-
const char* extra =
|
919
|
+
const char* extra = chand_->disconnect_error_.ok()
|
958
920
|
? ""
|
959
921
|
: " (ignoring -- channel shutting down)";
|
960
922
|
gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
|
@@ -962,7 +924,7 @@ class ClientChannel::ClientChannelControlHelper
|
|
962
924
|
picker.get(), extra);
|
963
925
|
}
|
964
926
|
// Do update only if not shutting down.
|
965
|
-
if (
|
927
|
+
if (chand_->disconnect_error_.ok()) {
|
966
928
|
chand_->UpdateStateAndPickerLocked(state, status, "helper",
|
967
929
|
std::move(picker));
|
968
930
|
}
|
@@ -981,6 +943,10 @@ class ClientChannel::ClientChannelControlHelper
|
|
981
943
|
return chand_->default_authority_;
|
982
944
|
}
|
983
945
|
|
946
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override {
|
947
|
+
return chand_->owning_stack_->EventEngine();
|
948
|
+
}
|
949
|
+
|
984
950
|
void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
|
985
951
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
986
952
|
if (chand_->resolver_ == nullptr) return; // Shutting down.
|
@@ -1017,7 +983,7 @@ grpc_error_handle ClientChannel::Init(grpc_channel_element* elem,
|
|
1017
983
|
grpc_channel_element_args* args) {
|
1018
984
|
GPR_ASSERT(args->is_last);
|
1019
985
|
GPR_ASSERT(elem->filter == &kFilterVtable);
|
1020
|
-
grpc_error_handle error
|
986
|
+
grpc_error_handle error;
|
1021
987
|
new (elem->channel_data) ClientChannel(args, &error);
|
1022
988
|
return error;
|
1023
989
|
}
|
@@ -1030,36 +996,28 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
|
|
1030
996
|
namespace {
|
1031
997
|
|
1032
998
|
RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
|
1033
|
-
const
|
1034
|
-
|
1035
|
-
args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
|
1036
|
-
if (use_local_subchannel_pool) {
|
999
|
+
const ChannelArgs& args) {
|
1000
|
+
if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
|
1037
1001
|
return MakeRefCounted<LocalSubchannelPool>();
|
1038
1002
|
}
|
1039
1003
|
return GlobalSubchannelPool::instance();
|
1040
1004
|
}
|
1041
1005
|
|
1042
|
-
channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
|
1043
|
-
return grpc_channel_args_find_pointer<channelz::ChannelNode>(
|
1044
|
-
args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
1045
|
-
}
|
1046
|
-
|
1047
1006
|
} // namespace
|
1048
1007
|
|
1049
1008
|
ClientChannel::ClientChannel(grpc_channel_element_args* args,
|
1050
1009
|
grpc_error_handle* error)
|
1051
|
-
:
|
1052
|
-
|
1010
|
+
: channel_args_(args->channel_args),
|
1011
|
+
deadline_checking_enabled_(grpc_deadline_checking_enabled(channel_args_)),
|
1053
1012
|
owning_stack_(args->channel_stack),
|
1054
|
-
client_channel_factory_(
|
1055
|
-
|
1056
|
-
channelz_node_(GetChannelzNode(args->channel_args)),
|
1013
|
+
client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
|
1014
|
+
channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
|
1057
1015
|
interested_parties_(grpc_pollset_set_create()),
|
1058
1016
|
service_config_parser_index_(
|
1059
1017
|
internal::ClientChannelServiceConfigParser::ParserIndex()),
|
1060
1018
|
work_serializer_(std::make_shared<WorkSerializer>()),
|
1061
1019
|
state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
|
1062
|
-
subchannel_pool_(GetSubchannelPool(
|
1020
|
+
subchannel_pool_(GetSubchannelPool(channel_args_)) {
|
1063
1021
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1064
1022
|
gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
|
1065
1023
|
this, owning_stack_);
|
@@ -1068,70 +1026,66 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
|
|
1068
1026
|
grpc_client_channel_start_backup_polling(interested_parties_);
|
1069
1027
|
// Check client channel factory.
|
1070
1028
|
if (client_channel_factory_ == nullptr) {
|
1071
|
-
*error =
|
1029
|
+
*error = GRPC_ERROR_CREATE(
|
1072
1030
|
"Missing client channel factory in args for client channel filter");
|
1073
1031
|
return;
|
1074
1032
|
}
|
1075
1033
|
// Get default service config. If none is specified via the client API,
|
1076
1034
|
// we use an empty config.
|
1077
|
-
|
1078
|
-
|
1079
|
-
if (service_config_json
|
1080
|
-
*error =
|
1081
|
-
|
1082
|
-
ServiceConfigImpl::Create(
|
1083
|
-
if (!
|
1084
|
-
|
1035
|
+
absl::optional<absl::string_view> service_config_json =
|
1036
|
+
channel_args_.GetString(GRPC_ARG_SERVICE_CONFIG);
|
1037
|
+
if (!service_config_json.has_value()) service_config_json = "{}";
|
1038
|
+
*error = absl::OkStatus();
|
1039
|
+
auto service_config =
|
1040
|
+
ServiceConfigImpl::Create(channel_args_, *service_config_json);
|
1041
|
+
if (!service_config.ok()) {
|
1042
|
+
*error = absl_status_to_grpc_error(service_config.status());
|
1085
1043
|
return;
|
1086
1044
|
}
|
1045
|
+
default_service_config_ = std::move(*service_config);
|
1087
1046
|
// Get URI to resolve, using proxy mapper if needed.
|
1088
|
-
|
1089
|
-
|
1090
|
-
if (server_uri
|
1091
|
-
*error =
|
1047
|
+
absl::optional<std::string> server_uri =
|
1048
|
+
channel_args_.GetOwnedString(GRPC_ARG_SERVER_URI);
|
1049
|
+
if (!server_uri.has_value()) {
|
1050
|
+
*error = GRPC_ERROR_CREATE(
|
1092
1051
|
"target URI channel arg missing or wrong type in client channel "
|
1093
1052
|
"filter");
|
1094
1053
|
return;
|
1095
1054
|
}
|
1096
|
-
uri_to_resolve_ =
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
&new_args);
|
1101
|
-
if (proxy_name != nullptr) {
|
1102
|
-
uri_to_resolve_ = proxy_name;
|
1103
|
-
gpr_free(proxy_name);
|
1104
|
-
}
|
1055
|
+
uri_to_resolve_ = CoreConfiguration::Get()
|
1056
|
+
.proxy_mapper_registry()
|
1057
|
+
.MapName(*server_uri, &channel_args_)
|
1058
|
+
.value_or(*server_uri);
|
1105
1059
|
// Make sure the URI to resolve is valid, so that we know that
|
1106
1060
|
// resolver creation will succeed later.
|
1107
1061
|
if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
|
1108
1062
|
uri_to_resolve_)) {
|
1109
|
-
*error =
|
1063
|
+
*error = GRPC_ERROR_CREATE(
|
1110
1064
|
absl::StrCat("the target uri is not valid: ", uri_to_resolve_));
|
1111
1065
|
return;
|
1112
1066
|
}
|
1113
1067
|
// Strip out service config channel arg, so that it doesn't affect
|
1114
1068
|
// subchannel uniqueness when the args flow down to that layer.
|
1115
|
-
|
1116
|
-
channel_args_ = grpc_channel_args_copy_and_remove(
|
1117
|
-
new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
|
1118
|
-
grpc_channel_args_destroy(new_args);
|
1069
|
+
channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
|
1119
1070
|
// Set initial keepalive time.
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1071
|
+
auto keepalive_arg = channel_args_.GetInt(GRPC_ARG_KEEPALIVE_TIME_MS);
|
1072
|
+
if (keepalive_arg.has_value()) {
|
1073
|
+
keepalive_time_ = Clamp(*keepalive_arg, 1, INT_MAX);
|
1074
|
+
} else {
|
1075
|
+
keepalive_time_ = -1; // unset
|
1076
|
+
}
|
1123
1077
|
// Set default authority.
|
1124
|
-
|
1125
|
-
|
1126
|
-
if (default_authority
|
1078
|
+
absl::optional<std::string> default_authority =
|
1079
|
+
channel_args_.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY);
|
1080
|
+
if (!default_authority.has_value()) {
|
1127
1081
|
default_authority_ =
|
1128
1082
|
CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
|
1129
|
-
server_uri);
|
1083
|
+
*server_uri);
|
1130
1084
|
} else {
|
1131
|
-
default_authority_ = default_authority;
|
1085
|
+
default_authority_ = std::move(*default_authority);
|
1132
1086
|
}
|
1133
1087
|
// Success.
|
1134
|
-
*error =
|
1088
|
+
*error = absl::OkStatus();
|
1135
1089
|
}
|
1136
1090
|
|
1137
1091
|
ClientChannel::~ClientChannel() {
|
@@ -1139,22 +1093,51 @@ ClientChannel::~ClientChannel() {
|
|
1139
1093
|
gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
|
1140
1094
|
}
|
1141
1095
|
DestroyResolverAndLbPolicyLocked();
|
1142
|
-
grpc_channel_args_destroy(channel_args_);
|
1143
1096
|
// Stop backup polling.
|
1144
1097
|
grpc_client_channel_stop_backup_polling(interested_parties_);
|
1145
1098
|
grpc_pollset_set_destroy(interested_parties_);
|
1146
|
-
GRPC_ERROR_UNREF(disconnect_error_);
|
1147
1099
|
}
|
1148
1100
|
|
1149
|
-
OrphanablePtr<ClientChannel::
|
1101
|
+
OrphanablePtr<ClientChannel::FilterBasedLoadBalancedCall>
|
1150
1102
|
ClientChannel::CreateLoadBalancedCall(
|
1151
1103
|
const grpc_call_element_args& args, grpc_polling_entity* pollent,
|
1152
1104
|
grpc_closure* on_call_destruction_complete,
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1105
|
+
absl::AnyInvocable<void()> on_commit, bool is_transparent_retry) {
|
1106
|
+
return OrphanablePtr<FilterBasedLoadBalancedCall>(
|
1107
|
+
args.arena->New<FilterBasedLoadBalancedCall>(
|
1108
|
+
this, args, pollent, on_call_destruction_complete,
|
1109
|
+
std::move(on_commit), is_transparent_retry));
|
1110
|
+
}
|
1111
|
+
|
1112
|
+
ChannelArgs ClientChannel::MakeSubchannelArgs(
|
1113
|
+
const ChannelArgs& channel_args, const ChannelArgs& address_args,
|
1114
|
+
const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
|
1115
|
+
const std::string& channel_default_authority) {
|
1116
|
+
// Note that we start with the channel-level args and then apply the
|
1117
|
+
// per-address args, so that if a value is present in both, the one
|
1118
|
+
// in the channel-level args is used. This is particularly important
|
1119
|
+
// for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
|
1120
|
+
// resolvers to set on a per-address basis only if the application
|
1121
|
+
// did not explicitly set it at the channel level.
|
1122
|
+
return channel_args.UnionWith(address_args)
|
1123
|
+
.SetObject(subchannel_pool)
|
1124
|
+
// If we haven't already set the default authority arg (i.e., it
|
1125
|
+
// was not explicitly set by the application nor overridden by
|
1126
|
+
// the resolver), add it from the channel's default.
|
1127
|
+
.SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
|
1128
|
+
// Remove channel args that should not affect subchannel
|
1129
|
+
// uniqueness.
|
1130
|
+
.Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
|
1131
|
+
.Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
|
1132
|
+
.Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
1133
|
+
}
|
1134
|
+
|
1135
|
+
void ClientChannel::ReprocessQueuedResolverCalls() {
|
1136
|
+
for (CallData* calld : resolver_queued_calls_) {
|
1137
|
+
calld->RemoveCallFromResolverQueuedCallsLocked();
|
1138
|
+
calld->RetryCheckResolutionLocked();
|
1139
|
+
}
|
1140
|
+
resolver_queued_calls_.clear();
|
1158
1141
|
}
|
1159
1142
|
|
1160
1143
|
namespace {
|
@@ -1168,41 +1151,41 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
|
1168
1151
|
}
|
1169
1152
|
// Try the deprecated LB policy name from the service config.
|
1170
1153
|
// If not, try the setting from channel args.
|
1171
|
-
|
1154
|
+
absl::optional<absl::string_view> policy_name;
|
1172
1155
|
if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
|
1173
|
-
policy_name = parsed_service_config->parsed_deprecated_lb_policy()
|
1156
|
+
policy_name = parsed_service_config->parsed_deprecated_lb_policy();
|
1174
1157
|
} else {
|
1175
|
-
policy_name =
|
1176
|
-
GRPC_ARG_LB_POLICY_NAME);
|
1158
|
+
policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
|
1177
1159
|
bool requires_config = false;
|
1178
|
-
if (policy_name
|
1179
|
-
(!
|
1180
|
-
|
1160
|
+
if (policy_name.has_value() &&
|
1161
|
+
(!CoreConfiguration::Get()
|
1162
|
+
.lb_policy_registry()
|
1163
|
+
.LoadBalancingPolicyExists(*policy_name, &requires_config) ||
|
1181
1164
|
requires_config)) {
|
1182
1165
|
if (requires_config) {
|
1183
1166
|
gpr_log(GPR_ERROR,
|
1184
1167
|
"LB policy: %s passed through channel_args must not "
|
1185
1168
|
"require a config. Using pick_first instead.",
|
1186
|
-
policy_name);
|
1169
|
+
std::string(*policy_name).c_str());
|
1187
1170
|
} else {
|
1188
1171
|
gpr_log(GPR_ERROR,
|
1189
1172
|
"LB policy: %s passed through channel_args does not exist. "
|
1190
1173
|
"Using pick_first instead.",
|
1191
|
-
policy_name);
|
1174
|
+
std::string(*policy_name).c_str());
|
1192
1175
|
}
|
1193
1176
|
policy_name = "pick_first";
|
1194
1177
|
}
|
1195
1178
|
}
|
1196
1179
|
// Use pick_first if nothing was specified and we didn't select grpclb
|
1197
1180
|
// above.
|
1198
|
-
if (policy_name
|
1181
|
+
if (!policy_name.has_value()) policy_name = "pick_first";
|
1199
1182
|
// Now that we have the policy name, construct an empty config for it.
|
1200
|
-
Json config_json = Json::
|
1201
|
-
{policy_name, Json::
|
1202
|
-
}};
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1183
|
+
Json config_json = Json::FromArray({Json::FromObject({
|
1184
|
+
{std::string(*policy_name), Json::FromObject({})},
|
1185
|
+
})});
|
1186
|
+
auto lb_policy_config =
|
1187
|
+
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
1188
|
+
config_json);
|
1206
1189
|
// The policy name came from one of three places:
|
1207
1190
|
// - The deprecated loadBalancingPolicy field in the service config,
|
1208
1191
|
// in which case the code in ClientChannelServiceConfigParser
|
@@ -1212,9 +1195,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
|
1212
1195
|
// - A channel arg, in which case we check that the specified policy exists
|
1213
1196
|
// and accepts an empty config. If not, we revert to using pick_first
|
1214
1197
|
// lb_policy
|
1215
|
-
GPR_ASSERT(lb_policy_config
|
1216
|
-
|
1217
|
-
return lb_policy_config;
|
1198
|
+
GPR_ASSERT(lb_policy_config.ok());
|
1199
|
+
return std::move(*lb_policy_config);
|
1218
1200
|
}
|
1219
1201
|
|
1220
1202
|
} // namespace
|
@@ -1225,6 +1207,9 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1225
1207
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1226
1208
|
gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
|
1227
1209
|
}
|
1210
|
+
// Grab resolver result health callback.
|
1211
|
+
auto resolver_callback = std::move(result.result_health_callback);
|
1212
|
+
absl::Status resolver_result_status;
|
1228
1213
|
// We only want to trace the address resolution in the follow cases:
|
1229
1214
|
// (a) Address resolution resulted in service config change.
|
1230
1215
|
// (b) Address resolution that causes number of backends to go from
|
@@ -1276,6 +1261,8 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1276
1261
|
// TRANSIENT_FAILURE.
|
1277
1262
|
OnResolverErrorLocked(result.service_config.status());
|
1278
1263
|
trace_strings.push_back("no valid service config");
|
1264
|
+
resolver_result_status =
|
1265
|
+
absl::UnavailableError("no valid service config");
|
1279
1266
|
}
|
1280
1267
|
} else if (*result.service_config == nullptr) {
|
1281
1268
|
// Resolver did not return any service config.
|
@@ -1289,7 +1276,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1289
1276
|
} else {
|
1290
1277
|
// Use ServiceConfig and ConfigSelector returned by resolver.
|
1291
1278
|
service_config = std::move(*result.service_config);
|
1292
|
-
config_selector =
|
1279
|
+
config_selector = result.args.GetObjectRef<ConfigSelector>();
|
1293
1280
|
}
|
1294
1281
|
// Note: The only case in which service_config is null here is if the resolver
|
1295
1282
|
// returned a service config error and we don't have a previous service
|
@@ -1313,14 +1300,14 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1313
1300
|
// If either has changed, apply the global parameters now.
|
1314
1301
|
if (service_config_changed || config_selector_changed) {
|
1315
1302
|
// Update service config in control plane.
|
1316
|
-
UpdateServiceConfigInControlPlaneLocked(
|
1317
|
-
|
1318
|
-
|
1303
|
+
UpdateServiceConfigInControlPlaneLocked(
|
1304
|
+
std::move(service_config), std::move(config_selector),
|
1305
|
+
std::string(lb_policy_config->name()));
|
1319
1306
|
} else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1320
1307
|
gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
|
1321
1308
|
}
|
1322
1309
|
// Create or update LB policy, as needed.
|
1323
|
-
CreateOrUpdateLbPolicyLocked(
|
1310
|
+
resolver_result_status = CreateOrUpdateLbPolicyLocked(
|
1324
1311
|
std::move(lb_policy_config),
|
1325
1312
|
parsed_service_config->health_check_service_name(), std::move(result));
|
1326
1313
|
if (service_config_changed || config_selector_changed) {
|
@@ -1334,6 +1321,10 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1334
1321
|
trace_strings.push_back("Service config changed");
|
1335
1322
|
}
|
1336
1323
|
}
|
1324
|
+
// Invoke resolver callback if needed.
|
1325
|
+
if (resolver_callback != nullptr) {
|
1326
|
+
resolver_callback(std::move(resolver_result_status));
|
1327
|
+
}
|
1337
1328
|
// Add channel trace event.
|
1338
1329
|
if (!trace_strings.empty()) {
|
1339
1330
|
std::string message =
|
@@ -1355,31 +1346,20 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
|
|
1355
1346
|
// result, then we continue to let it set the connectivity state.
|
1356
1347
|
// Otherwise, we go into TRANSIENT_FAILURE.
|
1357
1348
|
if (lb_policy_ == nullptr) {
|
1358
|
-
|
1349
|
+
// Update connectivity state.
|
1350
|
+
UpdateStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
|
1351
|
+
"resolver failure");
|
1359
1352
|
{
|
1360
1353
|
MutexLock lock(&resolution_mu_);
|
1361
1354
|
// Update resolver transient failure.
|
1362
|
-
resolver_transient_failure_error_ =
|
1363
|
-
|
1364
|
-
|
1365
|
-
call = call->next) {
|
1366
|
-
grpc_call_element* elem = call->elem;
|
1367
|
-
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1368
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
1369
|
-
if (calld->CheckResolutionLocked(elem, &error)) {
|
1370
|
-
calld->AsyncResolutionDone(elem, error);
|
1371
|
-
}
|
1372
|
-
}
|
1355
|
+
resolver_transient_failure_error_ =
|
1356
|
+
MaybeRewriteIllegalStatusCode(status, "resolver");
|
1357
|
+
ReprocessQueuedResolverCalls();
|
1373
1358
|
}
|
1374
|
-
GRPC_ERROR_UNREF(error);
|
1375
|
-
// Update connectivity state.
|
1376
|
-
UpdateStateAndPickerLocked(
|
1377
|
-
GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
|
1378
|
-
absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(status));
|
1379
1359
|
}
|
1380
1360
|
}
|
1381
1361
|
|
1382
|
-
|
1362
|
+
absl::Status ClientChannel::CreateOrUpdateLbPolicyLocked(
|
1383
1363
|
RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
|
1384
1364
|
const absl::optional<std::string>& health_check_service_name,
|
1385
1365
|
Resolver::Result result) {
|
@@ -1388,39 +1368,43 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
|
|
1388
1368
|
update_args.addresses = std::move(result.addresses);
|
1389
1369
|
update_args.config = std::move(lb_policy_config);
|
1390
1370
|
update_args.resolution_note = std::move(result.resolution_note);
|
1391
|
-
// Add health check service name to channel args.
|
1392
|
-
absl::InlinedVector<grpc_arg, 1> args_to_add;
|
1393
|
-
if (health_check_service_name.has_value()) {
|
1394
|
-
args_to_add.push_back(grpc_channel_arg_string_create(
|
1395
|
-
const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
|
1396
|
-
const_cast<char*>(health_check_service_name->c_str())));
|
1397
|
-
}
|
1398
1371
|
// Remove the config selector from channel args so that we're not holding
|
1399
1372
|
// unnecessary refs that cause it to be destroyed somewhere other than in the
|
1400
1373
|
// WorkSerializer.
|
1401
|
-
|
1402
|
-
|
1403
|
-
|
1374
|
+
update_args.args = result.args.Remove(GRPC_ARG_CONFIG_SELECTOR);
|
1375
|
+
// Add health check service name to channel args.
|
1376
|
+
if (health_check_service_name.has_value()) {
|
1377
|
+
update_args.args = update_args.args.Set(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
|
1378
|
+
*health_check_service_name);
|
1379
|
+
}
|
1404
1380
|
// Create policy if needed.
|
1405
1381
|
if (lb_policy_ == nullptr) {
|
1406
|
-
lb_policy_ = CreateLbPolicyLocked(
|
1382
|
+
lb_policy_ = CreateLbPolicyLocked(update_args.args);
|
1407
1383
|
}
|
1408
1384
|
// Update the policy.
|
1409
1385
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1410
1386
|
gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
|
1411
1387
|
lb_policy_.get());
|
1412
1388
|
}
|
1413
|
-
lb_policy_->UpdateLocked(std::move(update_args));
|
1389
|
+
return lb_policy_->UpdateLocked(std::move(update_args));
|
1414
1390
|
}
|
1415
1391
|
|
1416
1392
|
// Creates a new LB policy.
|
1417
1393
|
OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
|
1418
|
-
const
|
1394
|
+
const ChannelArgs& args) {
|
1395
|
+
// The LB policy will start in state CONNECTING but will not
|
1396
|
+
// necessarily send us an update synchronously, so set state to
|
1397
|
+
// CONNECTING (in case the resolver had previously failed and put the
|
1398
|
+
// channel into TRANSIENT_FAILURE) and make sure we have a queueing picker.
|
1399
|
+
UpdateStateAndPickerLocked(
|
1400
|
+
GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
|
1401
|
+
MakeRefCounted<LoadBalancingPolicy::QueuePicker>(nullptr));
|
1402
|
+
// Now create the LB policy.
|
1419
1403
|
LoadBalancingPolicy::Args lb_policy_args;
|
1420
1404
|
lb_policy_args.work_serializer = work_serializer_;
|
1421
1405
|
lb_policy_args.channel_control_helper =
|
1422
|
-
|
1423
|
-
lb_policy_args.args =
|
1406
|
+
std::make_unique<ClientChannelControlHelper>(this);
|
1407
|
+
lb_policy_args.args = args;
|
1424
1408
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
1425
1409
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
1426
1410
|
&grpc_client_channel_trace);
|
@@ -1433,37 +1417,12 @@ OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
|
|
1433
1417
|
return lb_policy;
|
1434
1418
|
}
|
1435
1419
|
|
1436
|
-
void ClientChannel::AddResolverQueuedCall(ResolverQueuedCall* call,
|
1437
|
-
grpc_polling_entity* pollent) {
|
1438
|
-
// Add call to queued calls list.
|
1439
|
-
call->next = resolver_queued_calls_;
|
1440
|
-
resolver_queued_calls_ = call;
|
1441
|
-
// Add call's pollent to channel's interested_parties, so that I/O
|
1442
|
-
// can be done under the call's CQ.
|
1443
|
-
grpc_polling_entity_add_to_pollset_set(pollent, interested_parties_);
|
1444
|
-
}
|
1445
|
-
|
1446
|
-
void ClientChannel::RemoveResolverQueuedCall(ResolverQueuedCall* to_remove,
|
1447
|
-
grpc_polling_entity* pollent) {
|
1448
|
-
// Remove call's pollent from channel's interested_parties.
|
1449
|
-
grpc_polling_entity_del_from_pollset_set(pollent, interested_parties_);
|
1450
|
-
// Remove from queued calls list.
|
1451
|
-
for (ResolverQueuedCall** call = &resolver_queued_calls_; *call != nullptr;
|
1452
|
-
call = &(*call)->next) {
|
1453
|
-
if (*call == to_remove) {
|
1454
|
-
*call = to_remove->next;
|
1455
|
-
return;
|
1456
|
-
}
|
1457
|
-
}
|
1458
|
-
}
|
1459
|
-
|
1460
1420
|
void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
|
1461
1421
|
RefCountedPtr<ServiceConfig> service_config,
|
1462
1422
|
RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
|
1463
1423
|
std::string service_config_json(service_config->json_string());
|
1464
1424
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1465
|
-
gpr_log(GPR_INFO,
|
1466
|
-
"chand=%p: resolver returned updated service config: \"%s\"", this,
|
1425
|
+
gpr_log(GPR_INFO, "chand=%p: using service config: \"%s\"", this,
|
1467
1426
|
service_config_json.c_str());
|
1468
1427
|
}
|
1469
1428
|
// Save service config.
|
@@ -1495,20 +1454,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1495
1454
|
config_selector =
|
1496
1455
|
MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
|
1497
1456
|
}
|
1498
|
-
|
1499
|
-
|
1500
|
-
const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
|
1501
|
-
&kClientChannelArgPointerVtable),
|
1502
|
-
grpc_channel_arg_pointer_create(
|
1503
|
-
const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
|
1504
|
-
&kServiceConfigObjArgPointerVtable),
|
1505
|
-
};
|
1506
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
1507
|
-
channel_args_, args_to_add.data(), args_to_add.size());
|
1508
|
-
new_args = config_selector->ModifyChannelArgs(new_args);
|
1457
|
+
ChannelArgs new_args =
|
1458
|
+
channel_args_.SetObject(this).SetObject(service_config);
|
1509
1459
|
bool enable_retries =
|
1510
|
-
!
|
1511
|
-
|
1460
|
+
!new_args.WantMinimalStack() &&
|
1461
|
+
new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
|
1512
1462
|
// Construct dynamic filter stack.
|
1513
1463
|
std::vector<const grpc_channel_filter*> filters =
|
1514
1464
|
config_selector->GetFilters();
|
@@ -1520,7 +1470,6 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1520
1470
|
RefCountedPtr<DynamicFilters> dynamic_filters =
|
1521
1471
|
DynamicFilters::Create(new_args, std::move(filters));
|
1522
1472
|
GPR_ASSERT(dynamic_filters != nullptr);
|
1523
|
-
grpc_channel_args_destroy(new_args);
|
1524
1473
|
// Grab data plane lock to update service config.
|
1525
1474
|
//
|
1526
1475
|
// We defer unreffing the old values (and deallocating memory) until
|
@@ -1534,25 +1483,8 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1534
1483
|
service_config_.swap(service_config);
|
1535
1484
|
config_selector_.swap(config_selector);
|
1536
1485
|
dynamic_filters_.swap(dynamic_filters);
|
1537
|
-
//
|
1538
|
-
|
1539
|
-
call = call->next) {
|
1540
|
-
// If there are a lot of queued calls here, resuming them all may cause us
|
1541
|
-
// to stay inside C-core for a long period of time. All of that work would
|
1542
|
-
// be done using the same ExecCtx instance and therefore the same cached
|
1543
|
-
// value of "now". The longer it takes to finish all of this work and exit
|
1544
|
-
// from C-core, the more stale the cached value of "now" may become. This
|
1545
|
-
// can cause problems whereby (e.g.) we calculate a timer deadline based
|
1546
|
-
// on the stale value, which results in the timer firing too early. To
|
1547
|
-
// avoid this, we invalidate the cached value for each call we process.
|
1548
|
-
ExecCtx::Get()->InvalidateNow();
|
1549
|
-
grpc_call_element* elem = call->elem;
|
1550
|
-
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1551
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
1552
|
-
if (calld->CheckResolutionLocked(elem, &error)) {
|
1553
|
-
calld->AsyncResolutionDone(elem, error);
|
1554
|
-
}
|
1555
|
-
}
|
1486
|
+
// Re-process queued calls asynchronously.
|
1487
|
+
ReprocessQueuedResolverCalls();
|
1556
1488
|
}
|
1557
1489
|
// Old values will be unreffed after lock is released when they go out
|
1558
1490
|
// of scope.
|
@@ -1560,17 +1492,17 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1560
1492
|
|
1561
1493
|
void ClientChannel::CreateResolverLocked() {
|
1562
1494
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1563
|
-
gpr_log(GPR_INFO, "chand=%p: starting name resolution", this
|
1495
|
+
gpr_log(GPR_INFO, "chand=%p: starting name resolution for %s", this,
|
1496
|
+
uri_to_resolve_.c_str());
|
1564
1497
|
}
|
1565
1498
|
resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
|
1566
|
-
uri_to_resolve_
|
1567
|
-
|
1499
|
+
uri_to_resolve_, channel_args_, interested_parties_, work_serializer_,
|
1500
|
+
std::make_unique<ResolverResultHandler>(this));
|
1568
1501
|
// Since the validity of the args was checked when the channel was created,
|
1569
1502
|
// CreateResolver() must return a non-null result.
|
1570
1503
|
GPR_ASSERT(resolver_ != nullptr);
|
1571
|
-
|
1572
|
-
|
1573
|
-
absl::make_unique<LoadBalancingPolicy::QueuePicker>(nullptr));
|
1504
|
+
UpdateStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status(),
|
1505
|
+
"started resolving");
|
1574
1506
|
resolver_->StartLocked();
|
1575
1507
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1576
1508
|
gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
|
@@ -1584,24 +1516,7 @@ void ClientChannel::DestroyResolverAndLbPolicyLocked() {
|
|
1584
1516
|
resolver_.get());
|
1585
1517
|
}
|
1586
1518
|
resolver_.reset();
|
1587
|
-
|
1588
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1589
|
-
gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
|
1590
|
-
lb_policy_.get());
|
1591
|
-
}
|
1592
|
-
grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
|
1593
|
-
interested_parties_);
|
1594
|
-
lb_policy_.reset();
|
1595
|
-
}
|
1596
|
-
}
|
1597
|
-
}
|
1598
|
-
|
1599
|
-
void ClientChannel::UpdateStateAndPickerLocked(
|
1600
|
-
grpc_connectivity_state state, const absl::Status& status,
|
1601
|
-
const char* reason,
|
1602
|
-
std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) {
|
1603
|
-
// Special case for IDLE and SHUTDOWN states.
|
1604
|
-
if (picker == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
|
1519
|
+
// Clear resolution state.
|
1605
1520
|
saved_service_config_.reset();
|
1606
1521
|
saved_config_selector_.reset();
|
1607
1522
|
// Acquire resolution lock to update config selector and associated state.
|
@@ -1617,8 +1532,22 @@ void ClientChannel::UpdateStateAndPickerLocked(
|
|
1617
1532
|
config_selector_to_unref = std::move(config_selector_);
|
1618
1533
|
dynamic_filters_to_unref = std::move(dynamic_filters_);
|
1619
1534
|
}
|
1535
|
+
// Clear LB policy if set.
|
1536
|
+
if (lb_policy_ != nullptr) {
|
1537
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1538
|
+
gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
|
1539
|
+
lb_policy_.get());
|
1540
|
+
}
|
1541
|
+
grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
|
1542
|
+
interested_parties_);
|
1543
|
+
lb_policy_.reset();
|
1544
|
+
}
|
1620
1545
|
}
|
1621
|
-
|
1546
|
+
}
|
1547
|
+
|
1548
|
+
void ClientChannel::UpdateStateLocked(grpc_connectivity_state state,
|
1549
|
+
const absl::Status& status,
|
1550
|
+
const char* reason) {
|
1622
1551
|
state_tracker_.SetState(state, status, reason);
|
1623
1552
|
if (channelz_node_ != nullptr) {
|
1624
1553
|
channelz_node_->SetConnectivityState(state);
|
@@ -1628,30 +1557,24 @@ void ClientChannel::UpdateStateAndPickerLocked(
|
|
1628
1557
|
channelz::ChannelNode::GetChannelConnectivityStateChangeString(
|
1629
1558
|
state)));
|
1630
1559
|
}
|
1631
|
-
|
1632
|
-
|
1633
|
-
|
1634
|
-
|
1635
|
-
|
1636
|
-
|
1637
|
-
|
1638
|
-
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1642
|
-
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
// avoid this, we invalidate the cached value for each call we process.
|
1648
|
-
ExecCtx::Get()->InvalidateNow();
|
1649
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
1650
|
-
if (call->lb_call->PickSubchannelLocked(&error)) {
|
1651
|
-
call->lb_call->AsyncPickDone(error);
|
1652
|
-
}
|
1653
|
-
}
|
1560
|
+
}
|
1561
|
+
|
1562
|
+
void ClientChannel::UpdateStateAndPickerLocked(
|
1563
|
+
grpc_connectivity_state state, const absl::Status& status,
|
1564
|
+
const char* reason,
|
1565
|
+
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) {
|
1566
|
+
UpdateStateLocked(state, status, reason);
|
1567
|
+
// Grab the LB lock to update the picker and trigger reprocessing of the
|
1568
|
+
// queued picks.
|
1569
|
+
// Old picker will be unreffed after releasing the lock.
|
1570
|
+
MutexLock lock(&lb_mu_);
|
1571
|
+
picker_.swap(picker);
|
1572
|
+
// Reprocess queued picks.
|
1573
|
+
for (LoadBalancedCall* call : lb_queued_calls_) {
|
1574
|
+
call->RemoveCallFromLbQueuedCallsLocked();
|
1575
|
+
call->RetryPickLocked();
|
1654
1576
|
}
|
1577
|
+
lb_queued_calls_.clear();
|
1655
1578
|
}
|
1656
1579
|
|
1657
1580
|
namespace {
|
@@ -1690,11 +1613,11 @@ T HandlePickResult(
|
|
1690
1613
|
|
1691
1614
|
grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
|
1692
1615
|
if (state_tracker_.state() != GRPC_CHANNEL_READY) {
|
1693
|
-
return
|
1616
|
+
return GRPC_ERROR_CREATE("channel not connected");
|
1694
1617
|
}
|
1695
1618
|
LoadBalancingPolicy::PickResult result;
|
1696
1619
|
{
|
1697
|
-
MutexLock lock(&
|
1620
|
+
MutexLock lock(&lb_mu_);
|
1698
1621
|
result = picker_->Pick(LoadBalancingPolicy::PickArgs());
|
1699
1622
|
}
|
1700
1623
|
return HandlePickResult<grpc_error_handle>(
|
@@ -1706,13 +1629,16 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
|
|
1706
1629
|
complete_pick->subchannel.get());
|
1707
1630
|
RefCountedPtr<ConnectedSubchannel> connected_subchannel =
|
1708
1631
|
subchannel->connected_subchannel();
|
1632
|
+
if (connected_subchannel == nullptr) {
|
1633
|
+
return GRPC_ERROR_CREATE("LB pick for ping not connected");
|
1634
|
+
}
|
1709
1635
|
connected_subchannel->Ping(op->send_ping.on_initiate,
|
1710
1636
|
op->send_ping.on_ack);
|
1711
|
-
return
|
1637
|
+
return absl::OkStatus();
|
1712
1638
|
},
|
1713
1639
|
// Queue pick.
|
1714
1640
|
[](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
|
1715
|
-
return
|
1641
|
+
return GRPC_ERROR_CREATE("LB picker queued call");
|
1716
1642
|
},
|
1717
1643
|
// Fail pick.
|
1718
1644
|
[](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
|
@@ -1736,9 +1662,8 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
|
|
1736
1662
|
// Ping.
|
1737
1663
|
if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
|
1738
1664
|
grpc_error_handle error = DoPingLocked(op);
|
1739
|
-
if (!
|
1740
|
-
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
|
1741
|
-
GRPC_ERROR_REF(error));
|
1665
|
+
if (!error.ok()) {
|
1666
|
+
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate, error);
|
1742
1667
|
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
|
1743
1668
|
}
|
1744
1669
|
op->bind_pollset = nullptr;
|
@@ -1752,34 +1677,40 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
|
|
1752
1677
|
}
|
1753
1678
|
}
|
1754
1679
|
// Disconnect or enter IDLE.
|
1755
|
-
if (!
|
1680
|
+
if (!op->disconnect_with_error.ok()) {
|
1756
1681
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1757
1682
|
gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
|
1758
|
-
|
1683
|
+
StatusToString(op->disconnect_with_error).c_str());
|
1759
1684
|
}
|
1760
1685
|
DestroyResolverAndLbPolicyLocked();
|
1761
1686
|
intptr_t value;
|
1762
1687
|
if (grpc_error_get_int(op->disconnect_with_error,
|
1763
|
-
|
1688
|
+
StatusIntProperty::ChannelConnectivityState,
|
1689
|
+
&value) &&
|
1764
1690
|
static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
|
1765
|
-
if (
|
1691
|
+
if (disconnect_error_.ok()) { // Ignore if we're shutting down.
|
1766
1692
|
// Enter IDLE state.
|
1767
1693
|
UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
|
1768
1694
|
"channel entering IDLE", nullptr);
|
1695
|
+
// TODO(roth): Do we need to check for any queued picks here, in
|
1696
|
+
// case there's a race condition in the client_idle filter?
|
1697
|
+
// And maybe also check for calls in the resolver queue?
|
1769
1698
|
}
|
1770
|
-
GRPC_ERROR_UNREF(op->disconnect_with_error);
|
1771
1699
|
} else {
|
1772
1700
|
// Disconnect.
|
1773
|
-
GPR_ASSERT(
|
1701
|
+
GPR_ASSERT(disconnect_error_.ok());
|
1774
1702
|
disconnect_error_ = op->disconnect_with_error;
|
1775
1703
|
UpdateStateAndPickerLocked(
|
1776
1704
|
GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
|
1777
|
-
|
1705
|
+
MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(
|
1778
1706
|
grpc_error_to_absl_status(op->disconnect_with_error)));
|
1707
|
+
// TODO(roth): If this happens when we're still waiting for a
|
1708
|
+
// resolver result, we need to trigger failures for all calls in
|
1709
|
+
// the resolver queue here.
|
1779
1710
|
}
|
1780
1711
|
}
|
1781
1712
|
GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
|
1782
|
-
ExecCtx::Run(DEBUG_LOCATION, op->on_consumed,
|
1713
|
+
ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
|
1783
1714
|
}
|
1784
1715
|
|
1785
1716
|
void ClientChannel::StartTransportOp(grpc_channel_element* elem,
|
@@ -1812,30 +1743,6 @@ void ClientChannel::GetChannelInfo(grpc_channel_element* elem,
|
|
1812
1743
|
}
|
1813
1744
|
}
|
1814
1745
|
|
1815
|
-
void ClientChannel::AddLbQueuedCall(LbQueuedCall* call,
|
1816
|
-
grpc_polling_entity* pollent) {
|
1817
|
-
// Add call to queued picks list.
|
1818
|
-
call->next = lb_queued_calls_;
|
1819
|
-
lb_queued_calls_ = call;
|
1820
|
-
// Add call's pollent to channel's interested_parties, so that I/O
|
1821
|
-
// can be done under the call's CQ.
|
1822
|
-
grpc_polling_entity_add_to_pollset_set(pollent, interested_parties_);
|
1823
|
-
}
|
1824
|
-
|
1825
|
-
void ClientChannel::RemoveLbQueuedCall(LbQueuedCall* to_remove,
|
1826
|
-
grpc_polling_entity* pollent) {
|
1827
|
-
// Remove call's pollent from channel's interested_parties.
|
1828
|
-
grpc_polling_entity_del_from_pollset_set(pollent, interested_parties_);
|
1829
|
-
// Remove from queued picks list.
|
1830
|
-
for (LbQueuedCall** call = &lb_queued_calls_; *call != nullptr;
|
1831
|
-
call = &(*call)->next) {
|
1832
|
-
if (*call == to_remove) {
|
1833
|
-
*call = to_remove->next;
|
1834
|
-
return;
|
1835
|
-
}
|
1836
|
-
}
|
1837
|
-
}
|
1838
|
-
|
1839
1746
|
void ClientChannel::TryToConnectLocked() {
|
1840
1747
|
if (lb_policy_ != nullptr) {
|
1841
1748
|
lb_policy_->ExitIdleLocked();
|
@@ -1876,78 +1783,226 @@ void ClientChannel::RemoveConnectivityWatcher(
|
|
1876
1783
|
// CallData implementation
|
1877
1784
|
//
|
1878
1785
|
|
1879
|
-
ClientChannel::CallData::
|
1880
|
-
|
1881
|
-
|
1882
|
-
|
1883
|
-
|
1884
|
-
|
1885
|
-
|
1886
|
-
|
1786
|
+
void ClientChannel::CallData::RemoveCallFromResolverQueuedCallsLocked() {
|
1787
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1788
|
+
gpr_log(GPR_INFO,
|
1789
|
+
"chand=%p calld=%p: removing from resolver queued picks list",
|
1790
|
+
chand(), this);
|
1791
|
+
}
|
1792
|
+
// Remove call's pollent from channel's interested_parties.
|
1793
|
+
grpc_polling_entity_del_from_pollset_set(pollent(),
|
1794
|
+
chand()->interested_parties_);
|
1795
|
+
// Note: There's no need to actually remove the call from the queue
|
1796
|
+
// here, because that will be done in
|
1797
|
+
// ResolverQueuedCallCanceller::CancelLocked() or
|
1798
|
+
// ClientChannel::ReprocessQueuedResolverCalls().
|
1799
|
+
}
|
1800
|
+
|
1801
|
+
void ClientChannel::CallData::AddCallToResolverQueuedCallsLocked() {
|
1802
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1803
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: adding to resolver queued picks list",
|
1804
|
+
chand(), this);
|
1805
|
+
}
|
1806
|
+
// Add call's pollent to channel's interested_parties, so that I/O
|
1807
|
+
// can be done under the call's CQ.
|
1808
|
+
grpc_polling_entity_add_to_pollset_set(pollent(),
|
1809
|
+
chand()->interested_parties_);
|
1810
|
+
// Add to queue.
|
1811
|
+
chand()->resolver_queued_calls_.insert(this);
|
1812
|
+
OnAddToQueueLocked();
|
1813
|
+
}
|
1814
|
+
|
1815
|
+
grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
|
1816
|
+
const absl::StatusOr<RefCountedPtr<ConfigSelector>>& config_selector) {
|
1817
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1818
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
|
1819
|
+
chand(), this);
|
1820
|
+
}
|
1821
|
+
if (!config_selector.ok()) return config_selector.status();
|
1822
|
+
// Create a ClientChannelServiceConfigCallData for the call. This stores
|
1823
|
+
// a ref to the ServiceConfig and caches the right set of parsed configs
|
1824
|
+
// to use for the call. The ClientChannelServiceConfigCallData will store
|
1825
|
+
// itself in the call context, so that it can be accessed by filters
|
1826
|
+
// below us in the stack, and it will be cleaned up when the call ends.
|
1827
|
+
auto* service_config_call_data =
|
1828
|
+
arena()->New<ClientChannelServiceConfigCallData>(arena(), call_context());
|
1829
|
+
// Use the ConfigSelector to determine the config for the call.
|
1830
|
+
absl::Status call_config_status =
|
1831
|
+
(*config_selector)
|
1832
|
+
->GetCallConfig(
|
1833
|
+
{send_initial_metadata(), arena(), service_config_call_data});
|
1834
|
+
if (!call_config_status.ok()) {
|
1835
|
+
return absl_status_to_grpc_error(
|
1836
|
+
MaybeRewriteIllegalStatusCode(call_config_status, "ConfigSelector"));
|
1837
|
+
}
|
1838
|
+
// Apply our own method params to the call.
|
1839
|
+
auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
|
1840
|
+
service_config_call_data->GetMethodParsedConfig(
|
1841
|
+
chand()->service_config_parser_index_));
|
1842
|
+
if (method_params != nullptr) {
|
1843
|
+
// If the deadline from the service config is shorter than the one
|
1844
|
+
// from the client API, reset the deadline timer.
|
1845
|
+
if (chand()->deadline_checking_enabled_ &&
|
1846
|
+
method_params->timeout() != Duration::Zero()) {
|
1847
|
+
ResetDeadline(method_params->timeout());
|
1848
|
+
}
|
1849
|
+
// If the service config set wait_for_ready and the application
|
1850
|
+
// did not explicitly set it, use the value from the service config.
|
1851
|
+
auto* wait_for_ready =
|
1852
|
+
send_initial_metadata()->GetOrCreatePointer(WaitForReady());
|
1853
|
+
if (method_params->wait_for_ready().has_value() &&
|
1854
|
+
!wait_for_ready->explicitly_set) {
|
1855
|
+
wait_for_ready->value = method_params->wait_for_ready().value();
|
1856
|
+
}
|
1857
|
+
}
|
1858
|
+
return absl::OkStatus();
|
1859
|
+
}
|
1860
|
+
|
1861
|
+
absl::optional<absl::Status> ClientChannel::CallData::CheckResolution(
|
1862
|
+
bool was_queued) {
|
1863
|
+
// Check if we have a resolver result to use.
|
1864
|
+
absl::StatusOr<RefCountedPtr<ConfigSelector>> config_selector;
|
1865
|
+
{
|
1866
|
+
MutexLock lock(&chand()->resolution_mu_);
|
1867
|
+
bool result_ready = CheckResolutionLocked(&config_selector);
|
1868
|
+
// If no result is available, queue the call.
|
1869
|
+
if (!result_ready) {
|
1870
|
+
AddCallToResolverQueuedCallsLocked();
|
1871
|
+
return absl::nullopt;
|
1872
|
+
}
|
1873
|
+
}
|
1874
|
+
// We have a result. Apply service config to call.
|
1875
|
+
grpc_error_handle error = ApplyServiceConfigToCallLocked(config_selector);
|
1876
|
+
// ConfigSelector must be unreffed inside the WorkSerializer.
|
1877
|
+
if (config_selector.ok()) {
|
1878
|
+
chand()->work_serializer_->Run(
|
1879
|
+
[config_selector = std::move(*config_selector)]() mutable {
|
1880
|
+
config_selector.reset();
|
1881
|
+
},
|
1882
|
+
DEBUG_LOCATION);
|
1883
|
+
}
|
1884
|
+
// Handle errors.
|
1885
|
+
if (!error.ok()) {
|
1886
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1887
|
+
gpr_log(GPR_INFO,
|
1888
|
+
"chand=%p calld=%p: error applying config to call: error=%s",
|
1889
|
+
chand(), this, StatusToString(error).c_str());
|
1890
|
+
}
|
1891
|
+
return error;
|
1892
|
+
}
|
1893
|
+
// If the call was queued, add trace annotation.
|
1894
|
+
if (was_queued) {
|
1895
|
+
auto* call_tracer = static_cast<CallTracerAnnotationInterface*>(
|
1896
|
+
call_context()[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
|
1897
|
+
if (call_tracer != nullptr) {
|
1898
|
+
call_tracer->RecordAnnotation("Delayed name resolution complete.");
|
1899
|
+
}
|
1900
|
+
}
|
1901
|
+
return absl::OkStatus();
|
1902
|
+
}
|
1903
|
+
|
1904
|
+
bool ClientChannel::CallData::CheckResolutionLocked(
|
1905
|
+
absl::StatusOr<RefCountedPtr<ConfigSelector>>* config_selector) {
|
1906
|
+
// If we don't yet have a resolver result, we need to queue the call
|
1907
|
+
// until we get one.
|
1908
|
+
if (GPR_UNLIKELY(!chand()->received_service_config_data_)) {
|
1909
|
+
// If the resolver returned transient failure before returning the
|
1910
|
+
// first service config, fail any non-wait_for_ready calls.
|
1911
|
+
absl::Status resolver_error = chand()->resolver_transient_failure_error_;
|
1912
|
+
if (!resolver_error.ok() &&
|
1913
|
+
!send_initial_metadata()->GetOrCreatePointer(WaitForReady())->value) {
|
1914
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1915
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
|
1916
|
+
chand(), this);
|
1917
|
+
}
|
1918
|
+
*config_selector = absl_status_to_grpc_error(resolver_error);
|
1919
|
+
return true;
|
1920
|
+
}
|
1921
|
+
// Either the resolver has not yet returned a result, or it has
|
1922
|
+
// returned transient failure but the call is wait_for_ready. In
|
1923
|
+
// either case, queue the call.
|
1924
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1925
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: no resolver result yet", chand(),
|
1926
|
+
this);
|
1927
|
+
}
|
1928
|
+
return false;
|
1929
|
+
}
|
1930
|
+
// Result found.
|
1931
|
+
*config_selector = chand()->config_selector_;
|
1932
|
+
dynamic_filters_ = chand()->dynamic_filters_;
|
1933
|
+
return true;
|
1934
|
+
}
|
1935
|
+
|
1936
|
+
//
|
1937
|
+
// FilterBasedCallData implementation
|
1938
|
+
//
|
1939
|
+
|
1940
|
+
ClientChannel::FilterBasedCallData::FilterBasedCallData(
|
1941
|
+
grpc_call_element* elem, const grpc_call_element_args& args)
|
1942
|
+
: path_(CSliceRef(args.path)),
|
1943
|
+
call_context_(args.context),
|
1887
1944
|
call_start_time_(args.start_time),
|
1888
1945
|
deadline_(args.deadline),
|
1889
|
-
|
1890
|
-
|
1891
|
-
|
1892
|
-
|
1946
|
+
deadline_state_(elem, args,
|
1947
|
+
GPR_LIKELY(static_cast<ClientChannel*>(elem->channel_data)
|
1948
|
+
->deadline_checking_enabled_)
|
1949
|
+
? args.deadline
|
1950
|
+
: Timestamp::InfFuture()) {
|
1893
1951
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1894
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: created call",
|
1952
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: created call", chand(), this);
|
1895
1953
|
}
|
1896
1954
|
}
|
1897
1955
|
|
1898
|
-
ClientChannel::
|
1899
|
-
|
1900
|
-
GRPC_ERROR_UNREF(cancel_error_);
|
1956
|
+
ClientChannel::FilterBasedCallData::~FilterBasedCallData() {
|
1957
|
+
CSliceUnref(path_);
|
1901
1958
|
// Make sure there are no remaining pending batches.
|
1902
1959
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
1903
1960
|
GPR_ASSERT(pending_batches_[i] == nullptr);
|
1904
1961
|
}
|
1905
1962
|
}
|
1906
1963
|
|
1907
|
-
grpc_error_handle ClientChannel::
|
1964
|
+
grpc_error_handle ClientChannel::FilterBasedCallData::Init(
|
1908
1965
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
1909
|
-
|
1910
|
-
|
1911
|
-
return GRPC_ERROR_NONE;
|
1966
|
+
new (elem->call_data) FilterBasedCallData(elem, *args);
|
1967
|
+
return absl::OkStatus();
|
1912
1968
|
}
|
1913
1969
|
|
1914
|
-
void ClientChannel::
|
1970
|
+
void ClientChannel::FilterBasedCallData::Destroy(
|
1915
1971
|
grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
|
1916
1972
|
grpc_closure* then_schedule_closure) {
|
1917
|
-
|
1973
|
+
auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
|
1918
1974
|
RefCountedPtr<DynamicFilters::Call> dynamic_call =
|
1919
1975
|
std::move(calld->dynamic_call_);
|
1920
|
-
calld->~
|
1976
|
+
calld->~FilterBasedCallData();
|
1921
1977
|
if (GPR_LIKELY(dynamic_call != nullptr)) {
|
1922
1978
|
dynamic_call->SetAfterCallStackDestroy(then_schedule_closure);
|
1923
1979
|
} else {
|
1924
1980
|
// TODO(yashkt) : This can potentially be a Closure::Run
|
1925
|
-
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure,
|
1981
|
+
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
|
1926
1982
|
}
|
1927
1983
|
}
|
1928
1984
|
|
1929
|
-
void ClientChannel::
|
1985
|
+
void ClientChannel::FilterBasedCallData::StartTransportStreamOpBatch(
|
1930
1986
|
grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
|
1931
|
-
|
1932
|
-
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1987
|
+
auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
|
1933
1988
|
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
1934
1989
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
|
1935
1990
|
!GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
|
1936
1991
|
gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from above: %s", chand,
|
1937
|
-
calld, grpc_transport_stream_op_batch_string(batch).c_str());
|
1992
|
+
calld, grpc_transport_stream_op_batch_string(batch, false).c_str());
|
1938
1993
|
}
|
1939
1994
|
if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
|
1940
|
-
grpc_deadline_state_client_start_transport_stream_op_batch(
|
1995
|
+
grpc_deadline_state_client_start_transport_stream_op_batch(
|
1996
|
+
&calld->deadline_state_, batch);
|
1941
1997
|
}
|
1942
|
-
// Intercept recv_trailing_metadata to call
|
1943
|
-
//
|
1944
|
-
// or LB call layer.
|
1998
|
+
// Intercept recv_trailing_metadata to commit the call, in case we wind up
|
1999
|
+
// failing the call before we get down to the retry or LB call layer.
|
1945
2000
|
if (batch->recv_trailing_metadata) {
|
1946
2001
|
calld->original_recv_trailing_metadata_ready_ =
|
1947
2002
|
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
1948
2003
|
GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready_,
|
1949
2004
|
RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
|
1950
|
-
|
2005
|
+
calld, nullptr);
|
1951
2006
|
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
1952
2007
|
&calld->recv_trailing_metadata_ready_;
|
1953
2008
|
}
|
@@ -1965,15 +2020,14 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1965
2020
|
// We do not yet have a dynamic call.
|
1966
2021
|
//
|
1967
2022
|
// If we've previously been cancelled, immediately fail any new batches.
|
1968
|
-
if (GPR_UNLIKELY(!
|
2023
|
+
if (GPR_UNLIKELY(!calld->cancel_error_.ok())) {
|
1969
2024
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1970
2025
|
gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
|
1971
|
-
chand, calld,
|
1972
|
-
grpc_error_std_string(calld->cancel_error_).c_str());
|
2026
|
+
chand, calld, StatusToString(calld->cancel_error_).c_str());
|
1973
2027
|
}
|
1974
2028
|
// Note: This will release the call combiner.
|
1975
2029
|
grpc_transport_stream_op_batch_finish_with_failure(
|
1976
|
-
batch,
|
2030
|
+
batch, calld->cancel_error_, calld->call_combiner());
|
1977
2031
|
return;
|
1978
2032
|
}
|
1979
2033
|
// Handle cancellation.
|
@@ -1983,23 +2037,20 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1983
2037
|
// cancelled before any batches are passed down (e.g., if the deadline
|
1984
2038
|
// is in the past when the call starts), we can return the right
|
1985
2039
|
// error to the caller when the first batch does get passed down.
|
1986
|
-
|
1987
|
-
calld->cancel_error_ =
|
1988
|
-
GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
|
2040
|
+
calld->cancel_error_ = batch->payload->cancel_stream.cancel_error;
|
1989
2041
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1990
2042
|
gpr_log(GPR_INFO, "chand=%p calld=%p: recording cancel_error=%s", chand,
|
1991
|
-
calld,
|
2043
|
+
calld, StatusToString(calld->cancel_error_).c_str());
|
1992
2044
|
}
|
1993
2045
|
// Fail all pending batches.
|
1994
|
-
calld->PendingBatchesFail(
|
1995
|
-
NoYieldCallCombiner);
|
2046
|
+
calld->PendingBatchesFail(calld->cancel_error_, NoYieldCallCombiner);
|
1996
2047
|
// Note: This will release the call combiner.
|
1997
2048
|
grpc_transport_stream_op_batch_finish_with_failure(
|
1998
|
-
batch,
|
2049
|
+
batch, calld->cancel_error_, calld->call_combiner());
|
1999
2050
|
return;
|
2000
2051
|
}
|
2001
2052
|
// Add the batch to the pending list.
|
2002
|
-
calld->PendingBatchesAdd(
|
2053
|
+
calld->PendingBatchesAdd(batch);
|
2003
2054
|
// For batches containing a send_initial_metadata op, acquire the
|
2004
2055
|
// channel's resolution mutex to apply the service config to the call,
|
2005
2056
|
// after which we will create a dynamic call.
|
@@ -2010,7 +2061,23 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
2010
2061
|
"config",
|
2011
2062
|
chand, calld);
|
2012
2063
|
}
|
2013
|
-
|
2064
|
+
// If we're still in IDLE, we need to start resolving.
|
2065
|
+
if (GPR_UNLIKELY(chand->CheckConnectivityState(false) ==
|
2066
|
+
GRPC_CHANNEL_IDLE)) {
|
2067
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2068
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand,
|
2069
|
+
calld);
|
2070
|
+
}
|
2071
|
+
// Bounce into the control plane work serializer to start resolving.
|
2072
|
+
GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "ExitIdle");
|
2073
|
+
chand->work_serializer_->Run(
|
2074
|
+
[chand]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
|
2075
|
+
chand->CheckConnectivityState(/*try_to_connect=*/true);
|
2076
|
+
GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_, "ExitIdle");
|
2077
|
+
},
|
2078
|
+
DEBUG_LOCATION);
|
2079
|
+
}
|
2080
|
+
calld->TryCheckResolution(/*was_queued=*/false);
|
2014
2081
|
} else {
|
2015
2082
|
// For all other batches, release the call combiner.
|
2016
2083
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
@@ -2018,26 +2085,21 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
2018
2085
|
"chand=%p calld=%p: saved batch, yielding call combiner", chand,
|
2019
2086
|
calld);
|
2020
2087
|
}
|
2021
|
-
GRPC_CALL_COMBINER_STOP(calld->
|
2088
|
+
GRPC_CALL_COMBINER_STOP(calld->call_combiner(),
|
2022
2089
|
"batch does not include send_initial_metadata");
|
2023
2090
|
}
|
2024
2091
|
}
|
2025
2092
|
|
2026
|
-
void ClientChannel::
|
2027
|
-
|
2028
|
-
|
2093
|
+
void ClientChannel::FilterBasedCallData::SetPollent(
|
2094
|
+
grpc_call_element* elem, grpc_polling_entity* pollent) {
|
2095
|
+
auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
|
2029
2096
|
calld->pollent_ = pollent;
|
2030
2097
|
}
|
2031
2098
|
|
2032
|
-
|
2033
|
-
// pending_batches management
|
2034
|
-
//
|
2035
|
-
|
2036
|
-
size_t ClientChannel::CallData::GetBatchIndex(
|
2099
|
+
size_t ClientChannel::FilterBasedCallData::GetBatchIndex(
|
2037
2100
|
grpc_transport_stream_op_batch* batch) {
|
2038
2101
|
// Note: It is important the send_initial_metadata be the first entry
|
2039
|
-
// here, since the code in
|
2040
|
-
// CheckResolutionLocked() assumes it will be.
|
2102
|
+
// here, since the code in CheckResolution() assumes it will be.
|
2041
2103
|
if (batch->send_initial_metadata) return 0;
|
2042
2104
|
if (batch->send_message) return 1;
|
2043
2105
|
if (batch->send_trailing_metadata) return 2;
|
@@ -2048,14 +2110,13 @@ size_t ClientChannel::CallData::GetBatchIndex(
|
|
2048
2110
|
}
|
2049
2111
|
|
2050
2112
|
// This is called via the call combiner, so access to calld is synchronized.
|
2051
|
-
void ClientChannel::
|
2052
|
-
|
2053
|
-
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2113
|
+
void ClientChannel::FilterBasedCallData::PendingBatchesAdd(
|
2114
|
+
grpc_transport_stream_op_batch* batch) {
|
2054
2115
|
const size_t idx = GetBatchIndex(batch);
|
2055
2116
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2056
2117
|
gpr_log(GPR_INFO,
|
2057
|
-
"chand=%p calld=%p: adding pending batch at index %" PRIuPTR,
|
2058
|
-
this, idx);
|
2118
|
+
"chand=%p calld=%p: adding pending batch at index %" PRIuPTR,
|
2119
|
+
chand(), this, idx);
|
2059
2120
|
}
|
2060
2121
|
grpc_transport_stream_op_batch*& pending = pending_batches_[idx];
|
2061
2122
|
GPR_ASSERT(pending == nullptr);
|
@@ -2063,21 +2124,22 @@ void ClientChannel::CallData::PendingBatchesAdd(
|
|
2063
2124
|
}
|
2064
2125
|
|
2065
2126
|
// This is called via the call combiner, so access to calld is synchronized.
|
2066
|
-
void ClientChannel::
|
2127
|
+
void ClientChannel::FilterBasedCallData::FailPendingBatchInCallCombiner(
|
2067
2128
|
void* arg, grpc_error_handle error) {
|
2068
2129
|
grpc_transport_stream_op_batch* batch =
|
2069
2130
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2070
|
-
|
2131
|
+
auto* calld =
|
2132
|
+
static_cast<FilterBasedCallData*>(batch->handler_private.extra_arg);
|
2071
2133
|
// Note: This will release the call combiner.
|
2072
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2073
|
-
|
2134
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
2135
|
+
calld->call_combiner());
|
2074
2136
|
}
|
2075
2137
|
|
2076
2138
|
// This is called via the call combiner, so access to calld is synchronized.
|
2077
|
-
void ClientChannel::
|
2078
|
-
|
2139
|
+
void ClientChannel::FilterBasedCallData::PendingBatchesFail(
|
2140
|
+
grpc_error_handle error,
|
2079
2141
|
YieldCallCombinerPredicate yield_call_combiner_predicate) {
|
2080
|
-
GPR_ASSERT(!
|
2142
|
+
GPR_ASSERT(!error.ok());
|
2081
2143
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2082
2144
|
size_t num_batches = 0;
|
2083
2145
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2085,8 +2147,7 @@ void ClientChannel::CallData::PendingBatchesFail(
|
|
2085
2147
|
}
|
2086
2148
|
gpr_log(GPR_INFO,
|
2087
2149
|
"chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
|
2088
|
-
|
2089
|
-
grpc_error_std_string(error).c_str());
|
2150
|
+
chand(), this, num_batches, StatusToString(error).c_str());
|
2090
2151
|
}
|
2091
2152
|
CallCombinerClosureList closures;
|
2092
2153
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2096,34 +2157,31 @@ void ClientChannel::CallData::PendingBatchesFail(
|
|
2096
2157
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2097
2158
|
FailPendingBatchInCallCombiner, batch,
|
2098
2159
|
grpc_schedule_on_exec_ctx);
|
2099
|
-
closures.Add(&batch->handler_private.closure,
|
2160
|
+
closures.Add(&batch->handler_private.closure, error,
|
2100
2161
|
"PendingBatchesFail");
|
2101
2162
|
batch = nullptr;
|
2102
2163
|
}
|
2103
2164
|
}
|
2104
2165
|
if (yield_call_combiner_predicate(closures)) {
|
2105
|
-
closures.RunClosures(
|
2166
|
+
closures.RunClosures(call_combiner());
|
2106
2167
|
} else {
|
2107
|
-
closures.RunClosuresWithoutYielding(
|
2168
|
+
closures.RunClosuresWithoutYielding(call_combiner());
|
2108
2169
|
}
|
2109
|
-
GRPC_ERROR_UNREF(error);
|
2110
2170
|
}
|
2111
2171
|
|
2112
2172
|
// This is called via the call combiner, so access to calld is synchronized.
|
2113
|
-
void ClientChannel::
|
2173
|
+
void ClientChannel::FilterBasedCallData::ResumePendingBatchInCallCombiner(
|
2114
2174
|
void* arg, grpc_error_handle /*ignored*/) {
|
2115
2175
|
grpc_transport_stream_op_batch* batch =
|
2116
2176
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2117
|
-
auto*
|
2118
|
-
static_cast<
|
2119
|
-
auto* calld = static_cast<CallData*>(elem->call_data);
|
2177
|
+
auto* calld =
|
2178
|
+
static_cast<FilterBasedCallData*>(batch->handler_private.extra_arg);
|
2120
2179
|
// Note: This will release the call combiner.
|
2121
2180
|
calld->dynamic_call_->StartTransportStreamOpBatch(batch);
|
2122
2181
|
}
|
2123
2182
|
|
2124
2183
|
// This is called via the call combiner, so access to calld is synchronized.
|
2125
|
-
void ClientChannel::
|
2126
|
-
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2184
|
+
void ClientChannel::FilterBasedCallData::PendingBatchesResume() {
|
2127
2185
|
// Retries not enabled; send down batches as-is.
|
2128
2186
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2129
2187
|
size_t num_batches = 0;
|
@@ -2133,328 +2191,162 @@ void ClientChannel::CallData::PendingBatchesResume(grpc_call_element* elem) {
|
|
2133
2191
|
gpr_log(GPR_INFO,
|
2134
2192
|
"chand=%p calld=%p: starting %" PRIuPTR
|
2135
2193
|
" pending batches on dynamic_call=%p",
|
2136
|
-
chand, this, num_batches, dynamic_call_.get());
|
2194
|
+
chand(), this, num_batches, dynamic_call_.get());
|
2137
2195
|
}
|
2138
2196
|
CallCombinerClosureList closures;
|
2139
2197
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
2140
2198
|
grpc_transport_stream_op_batch*& batch = pending_batches_[i];
|
2141
2199
|
if (batch != nullptr) {
|
2142
|
-
batch->handler_private.extra_arg =
|
2200
|
+
batch->handler_private.extra_arg = this;
|
2143
2201
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2144
2202
|
ResumePendingBatchInCallCombiner, batch, nullptr);
|
2145
|
-
closures.Add(&batch->handler_private.closure,
|
2203
|
+
closures.Add(&batch->handler_private.closure, absl::OkStatus(),
|
2146
2204
|
"resuming pending batch from client channel call");
|
2147
2205
|
batch = nullptr;
|
2148
2206
|
}
|
2149
2207
|
}
|
2150
2208
|
// Note: This will release the call combiner.
|
2151
|
-
closures.RunClosures(
|
2209
|
+
closures.RunClosures(call_combiner());
|
2152
2210
|
}
|
2153
2211
|
|
2154
|
-
//
|
2155
|
-
// name resolution
|
2156
|
-
//
|
2157
|
-
|
2158
2212
|
// A class to handle the call combiner cancellation callback for a
|
2159
2213
|
// queued pick.
|
2160
|
-
class ClientChannel::
|
2214
|
+
class ClientChannel::FilterBasedCallData::ResolverQueuedCallCanceller {
|
2161
2215
|
public:
|
2162
|
-
explicit ResolverQueuedCallCanceller(
|
2163
|
-
|
2164
|
-
GRPC_CALL_STACK_REF(calld->
|
2216
|
+
explicit ResolverQueuedCallCanceller(FilterBasedCallData* calld)
|
2217
|
+
: calld_(calld) {
|
2218
|
+
GRPC_CALL_STACK_REF(calld->owning_call(), "ResolverQueuedCallCanceller");
|
2165
2219
|
GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this,
|
2166
2220
|
grpc_schedule_on_exec_ctx);
|
2167
|
-
calld->
|
2221
|
+
calld->call_combiner()->SetNotifyOnCancel(&closure_);
|
2168
2222
|
}
|
2169
2223
|
|
2170
2224
|
private:
|
2171
2225
|
static void CancelLocked(void* arg, grpc_error_handle error) {
|
2172
2226
|
auto* self = static_cast<ResolverQueuedCallCanceller*>(arg);
|
2173
|
-
auto*
|
2174
|
-
auto*
|
2227
|
+
auto* calld = self->calld_;
|
2228
|
+
auto* chand = calld->chand();
|
2175
2229
|
{
|
2176
2230
|
MutexLock lock(&chand->resolution_mu_);
|
2177
2231
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2178
2232
|
gpr_log(GPR_INFO,
|
2179
2233
|
"chand=%p calld=%p: cancelling resolver queued pick: "
|
2180
2234
|
"error=%s self=%p calld->resolver_pick_canceller=%p",
|
2181
|
-
chand, calld,
|
2235
|
+
chand, calld, StatusToString(error).c_str(), self,
|
2182
2236
|
calld->resolver_call_canceller_);
|
2183
2237
|
}
|
2184
|
-
if (calld->resolver_call_canceller_ == self &&
|
2185
|
-
!GRPC_ERROR_IS_NONE(error)) {
|
2238
|
+
if (calld->resolver_call_canceller_ == self && !error.ok()) {
|
2186
2239
|
// Remove pick from list of queued picks.
|
2187
|
-
calld->
|
2240
|
+
calld->RemoveCallFromResolverQueuedCallsLocked();
|
2241
|
+
chand->resolver_queued_calls_.erase(calld);
|
2188
2242
|
// Fail pending batches on the call.
|
2189
|
-
calld->PendingBatchesFail(
|
2243
|
+
calld->PendingBatchesFail(error,
|
2190
2244
|
YieldCallCombinerIfPendingBatchesFound);
|
2191
2245
|
}
|
2192
2246
|
}
|
2193
|
-
GRPC_CALL_STACK_UNREF(calld->
|
2247
|
+
GRPC_CALL_STACK_UNREF(calld->owning_call(), "ResolvingQueuedCallCanceller");
|
2194
2248
|
delete self;
|
2195
2249
|
}
|
2196
2250
|
|
2197
|
-
|
2251
|
+
FilterBasedCallData* calld_;
|
2198
2252
|
grpc_closure closure_;
|
2199
2253
|
};
|
2200
2254
|
|
2201
|
-
void ClientChannel::
|
2202
|
-
|
2203
|
-
if (
|
2204
|
-
|
2205
|
-
|
2206
|
-
|
2207
|
-
|
2208
|
-
|
2255
|
+
void ClientChannel::FilterBasedCallData::TryCheckResolution(bool was_queued) {
|
2256
|
+
auto result = CheckResolution(was_queued);
|
2257
|
+
if (result.has_value()) {
|
2258
|
+
if (!result->ok()) {
|
2259
|
+
PendingBatchesFail(*result, YieldCallCombiner);
|
2260
|
+
return;
|
2261
|
+
}
|
2262
|
+
CreateDynamicCall();
|
2209
2263
|
}
|
2210
|
-
chand->RemoveResolverQueuedCall(&resolver_queued_call_, pollent_);
|
2211
|
-
queued_pending_resolver_result_ = false;
|
2212
|
-
// Lame the call combiner canceller.
|
2213
|
-
resolver_call_canceller_ = nullptr;
|
2214
2264
|
}
|
2215
2265
|
|
2216
|
-
void ClientChannel::
|
2217
|
-
grpc_call_element* elem) {
|
2218
|
-
if (queued_pending_resolver_result_) return;
|
2219
|
-
auto* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2220
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2221
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: adding to resolver queued picks list",
|
2222
|
-
chand, this);
|
2223
|
-
}
|
2224
|
-
queued_pending_resolver_result_ = true;
|
2225
|
-
resolver_queued_call_.elem = elem;
|
2226
|
-
chand->AddResolverQueuedCall(&resolver_queued_call_, pollent_);
|
2266
|
+
void ClientChannel::FilterBasedCallData::OnAddToQueueLocked() {
|
2227
2267
|
// Register call combiner cancellation callback.
|
2228
|
-
resolver_call_canceller_ = new ResolverQueuedCallCanceller(
|
2268
|
+
resolver_call_canceller_ = new ResolverQueuedCallCanceller(this);
|
2229
2269
|
}
|
2230
2270
|
|
2231
|
-
|
2232
|
-
|
2233
|
-
|
2234
|
-
|
2235
|
-
|
2236
|
-
|
2237
|
-
|
2238
|
-
|
2239
|
-
|
2240
|
-
|
2241
|
-
|
2242
|
-
|
2243
|
-
|
2244
|
-
|
2245
|
-
|
2246
|
-
|
2247
|
-
|
2248
|
-
|
2249
|
-
|
2250
|
-
|
2251
|
-
|
2252
|
-
|
2253
|
-
|
2254
|
-
|
2255
|
-
|
2256
|
-
|
2257
|
-
|
2258
|
-
|
2259
|
-
|
2260
|
-
|
2261
|
-
if (chand->deadline_checking_enabled_ &&
|
2262
|
-
method_params->timeout() != Duration::Zero()) {
|
2263
|
-
const Timestamp per_method_deadline =
|
2264
|
-
Timestamp::FromCycleCounterRoundUp(call_start_time_) +
|
2265
|
-
method_params->timeout();
|
2266
|
-
if (per_method_deadline < deadline_) {
|
2267
|
-
deadline_ = per_method_deadline;
|
2268
|
-
grpc_deadline_state_reset(elem, deadline_);
|
2269
|
-
}
|
2270
|
-
}
|
2271
|
-
// If the service config set wait_for_ready and the application
|
2272
|
-
// did not explicitly set it, use the value from the service config.
|
2273
|
-
uint32_t* send_initial_metadata_flags =
|
2274
|
-
&pending_batches_[0]
|
2275
|
-
->payload->send_initial_metadata.send_initial_metadata_flags;
|
2276
|
-
if (method_params->wait_for_ready().has_value() &&
|
2277
|
-
!(*send_initial_metadata_flags &
|
2278
|
-
GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
|
2279
|
-
if (method_params->wait_for_ready().value()) {
|
2280
|
-
*send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
2281
|
-
} else {
|
2282
|
-
*send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
2283
|
-
}
|
2284
|
-
}
|
2271
|
+
void ClientChannel::FilterBasedCallData::RetryCheckResolutionLocked() {
|
2272
|
+
// Lame the call combiner canceller.
|
2273
|
+
resolver_call_canceller_ = nullptr;
|
2274
|
+
// Do an async callback to resume call processing, so that we're not
|
2275
|
+
// doing it while holding the channel's resolution mutex.
|
2276
|
+
chand()->owning_stack_->EventEngine()->Run([this]() {
|
2277
|
+
ApplicationCallbackExecCtx application_exec_ctx;
|
2278
|
+
ExecCtx exec_ctx;
|
2279
|
+
TryCheckResolution(/*was_queued=*/true);
|
2280
|
+
});
|
2281
|
+
}
|
2282
|
+
|
2283
|
+
void ClientChannel::FilterBasedCallData::CreateDynamicCall() {
|
2284
|
+
DynamicFilters::Call::Args args = {dynamic_filters(), pollent_, path_,
|
2285
|
+
call_start_time_, deadline_, arena(),
|
2286
|
+
call_context_, call_combiner()};
|
2287
|
+
grpc_error_handle error;
|
2288
|
+
DynamicFilters* channel_stack = args.channel_stack.get();
|
2289
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2290
|
+
gpr_log(
|
2291
|
+
GPR_INFO,
|
2292
|
+
"chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
|
2293
|
+
chand(), this, channel_stack);
|
2294
|
+
}
|
2295
|
+
dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
|
2296
|
+
if (!error.ok()) {
|
2297
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2298
|
+
gpr_log(GPR_INFO,
|
2299
|
+
"chand=%p calld=%p: failed to create dynamic call: error=%s",
|
2300
|
+
chand(), this, StatusToString(error).c_str());
|
2285
2301
|
}
|
2286
|
-
|
2287
|
-
|
2302
|
+
PendingBatchesFail(error, YieldCallCombiner);
|
2303
|
+
return;
|
2288
2304
|
}
|
2289
|
-
|
2305
|
+
PendingBatchesResume();
|
2290
2306
|
}
|
2291
2307
|
|
2292
|
-
void ClientChannel::
|
2308
|
+
void ClientChannel::FilterBasedCallData::
|
2293
2309
|
RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
2294
2310
|
void* arg, grpc_error_handle error) {
|
2295
|
-
auto*
|
2296
|
-
auto* chand =
|
2297
|
-
auto* calld = static_cast<CallData*>(elem->call_data);
|
2311
|
+
auto* calld = static_cast<FilterBasedCallData*>(arg);
|
2312
|
+
auto* chand = calld->chand();
|
2298
2313
|
auto* service_config_call_data =
|
2299
2314
|
static_cast<ClientChannelServiceConfigCallData*>(
|
2300
|
-
calld->
|
2315
|
+
calld->call_context()[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2301
2316
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2302
2317
|
gpr_log(GPR_INFO,
|
2303
2318
|
"chand=%p calld=%p: got recv_trailing_metadata_ready: error=%s "
|
2304
2319
|
"service_config_call_data=%p",
|
2305
|
-
chand, calld,
|
2320
|
+
chand, calld, StatusToString(error).c_str(),
|
2306
2321
|
service_config_call_data);
|
2307
2322
|
}
|
2308
2323
|
if (service_config_call_data != nullptr) {
|
2309
|
-
service_config_call_data->
|
2324
|
+
service_config_call_data->Commit();
|
2310
2325
|
}
|
2311
2326
|
// Chain to original callback.
|
2312
2327
|
Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
|
2313
|
-
|
2328
|
+
error);
|
2314
2329
|
}
|
2315
2330
|
|
2316
|
-
|
2317
|
-
|
2318
|
-
|
2319
|
-
GRPC_CLOSURE_INIT(&resolution_done_closure_, ResolutionDone, elem, nullptr);
|
2320
|
-
ExecCtx::Run(DEBUG_LOCATION, &resolution_done_closure_, error);
|
2321
|
-
}
|
2331
|
+
//
|
2332
|
+
// ClientChannel::LoadBalancedCall::LbCallState
|
2333
|
+
//
|
2322
2334
|
|
2323
|
-
|
2324
|
-
|
2325
|
-
|
2326
|
-
|
2327
|
-
CallData* calld = static_cast<CallData*>(elem->call_data);
|
2328
|
-
if (!GRPC_ERROR_IS_NONE(error)) {
|
2329
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2330
|
-
gpr_log(GPR_INFO,
|
2331
|
-
"chand=%p calld=%p: error applying config to call: error=%s",
|
2332
|
-
chand, calld, grpc_error_std_string(error).c_str());
|
2333
|
-
}
|
2334
|
-
calld->PendingBatchesFail(elem, GRPC_ERROR_REF(error), YieldCallCombiner);
|
2335
|
-
return;
|
2336
|
-
}
|
2337
|
-
calld->CreateDynamicCall(elem);
|
2338
|
-
}
|
2335
|
+
class ClientChannel::LoadBalancedCall::LbCallState
|
2336
|
+
: public ClientChannelLbCallState {
|
2337
|
+
public:
|
2338
|
+
explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
|
2339
2339
|
|
2340
|
-
void
|
2341
|
-
grpc_error_handle error) {
|
2342
|
-
grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
|
2343
|
-
CallData* calld = static_cast<CallData*>(elem->call_data);
|
2344
|
-
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2345
|
-
bool resolution_complete;
|
2346
|
-
{
|
2347
|
-
MutexLock lock(&chand->resolution_mu_);
|
2348
|
-
resolution_complete = calld->CheckResolutionLocked(elem, &error);
|
2349
|
-
}
|
2350
|
-
if (resolution_complete) {
|
2351
|
-
ResolutionDone(elem, error);
|
2352
|
-
GRPC_ERROR_UNREF(error);
|
2353
|
-
}
|
2354
|
-
}
|
2340
|
+
void* Alloc(size_t size) override { return lb_call_->arena()->Alloc(size); }
|
2355
2341
|
|
2356
|
-
|
2357
|
-
|
2358
|
-
|
2359
|
-
|
2360
|
-
if (GPR_UNLIKELY(chand->CheckConnectivityState(false) == GRPC_CHANNEL_IDLE)) {
|
2361
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2362
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand, this);
|
2363
|
-
}
|
2364
|
-
// Bounce into the control plane work serializer to start resolving,
|
2365
|
-
// in case we are still in IDLE state. Since we are holding on to the
|
2366
|
-
// resolution mutex here, we offload it on the ExecCtx so that we don't
|
2367
|
-
// deadlock with ourselves.
|
2368
|
-
GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "CheckResolutionLocked");
|
2369
|
-
ExecCtx::Run(
|
2370
|
-
DEBUG_LOCATION,
|
2371
|
-
GRPC_CLOSURE_CREATE(
|
2372
|
-
[](void* arg, grpc_error_handle /*error*/) {
|
2373
|
-
auto* chand = static_cast<ClientChannel*>(arg);
|
2374
|
-
chand->work_serializer_->Run(
|
2375
|
-
[chand]()
|
2376
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
|
2377
|
-
chand->CheckConnectivityState(/*try_to_connect=*/true);
|
2378
|
-
GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_,
|
2379
|
-
"CheckResolutionLocked");
|
2380
|
-
},
|
2381
|
-
DEBUG_LOCATION);
|
2382
|
-
},
|
2383
|
-
chand, nullptr),
|
2384
|
-
GRPC_ERROR_NONE);
|
2385
|
-
}
|
2386
|
-
// Get send_initial_metadata batch and flags.
|
2387
|
-
auto& send_initial_metadata =
|
2388
|
-
pending_batches_[0]->payload->send_initial_metadata;
|
2389
|
-
grpc_metadata_batch* initial_metadata_batch =
|
2390
|
-
send_initial_metadata.send_initial_metadata;
|
2391
|
-
const uint32_t send_initial_metadata_flags =
|
2392
|
-
send_initial_metadata.send_initial_metadata_flags;
|
2393
|
-
// If we don't yet have a resolver result, we need to queue the call
|
2394
|
-
// until we get one.
|
2395
|
-
if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
|
2396
|
-
// If the resolver returned transient failure before returning the
|
2397
|
-
// first service config, fail any non-wait_for_ready calls.
|
2398
|
-
absl::Status resolver_error = chand->resolver_transient_failure_error_;
|
2399
|
-
if (!resolver_error.ok() && (send_initial_metadata_flags &
|
2400
|
-
GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
|
2401
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2402
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
|
2403
|
-
chand, this);
|
2404
|
-
}
|
2405
|
-
MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
|
2406
|
-
*error = absl_status_to_grpc_error(resolver_error);
|
2407
|
-
return true;
|
2408
|
-
}
|
2409
|
-
// Either the resolver has not yet returned a result, or it has
|
2410
|
-
// returned transient failure but the call is wait_for_ready. In
|
2411
|
-
// either case, queue the call.
|
2412
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2413
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: queuing to wait for resolution",
|
2414
|
-
chand, this);
|
2415
|
-
}
|
2416
|
-
MaybeAddCallToResolverQueuedCallsLocked(elem);
|
2417
|
-
return false;
|
2418
|
-
}
|
2419
|
-
// Apply service config to call if not yet applied.
|
2420
|
-
if (GPR_LIKELY(!service_config_applied_)) {
|
2421
|
-
service_config_applied_ = true;
|
2422
|
-
*error = ApplyServiceConfigToCallLocked(elem, initial_metadata_batch);
|
2423
|
-
}
|
2424
|
-
MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
|
2425
|
-
return true;
|
2426
|
-
}
|
2342
|
+
// Internal API to allow first-party LB policies to access per-call
|
2343
|
+
// attributes set by the ConfigSelector.
|
2344
|
+
ServiceConfigCallData::CallAttributeInterface* GetCallAttribute(
|
2345
|
+
UniqueTypeName type) const override;
|
2427
2346
|
|
2428
|
-
|
2429
|
-
|
2430
|
-
|
2431
|
-
pollent_,
|
2432
|
-
path_,
|
2433
|
-
call_start_time_,
|
2434
|
-
deadline_,
|
2435
|
-
arena_,
|
2436
|
-
call_context_,
|
2437
|
-
call_combiner_};
|
2438
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
2439
|
-
DynamicFilters* channel_stack = args.channel_stack.get();
|
2440
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2441
|
-
gpr_log(
|
2442
|
-
GPR_INFO,
|
2443
|
-
"chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
|
2444
|
-
chand, this, channel_stack);
|
2445
|
-
}
|
2446
|
-
dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
|
2447
|
-
if (!GRPC_ERROR_IS_NONE(error)) {
|
2448
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2449
|
-
gpr_log(GPR_INFO,
|
2450
|
-
"chand=%p calld=%p: failed to create dynamic call: error=%s",
|
2451
|
-
chand, this, grpc_error_std_string(error).c_str());
|
2452
|
-
}
|
2453
|
-
PendingBatchesFail(elem, error, YieldCallCombiner);
|
2454
|
-
return;
|
2455
|
-
}
|
2456
|
-
PendingBatchesResume(elem);
|
2457
|
-
}
|
2347
|
+
private:
|
2348
|
+
LoadBalancedCall* lb_call_;
|
2349
|
+
};
|
2458
2350
|
|
2459
2351
|
//
|
2460
2352
|
// ClientChannel::LoadBalancedCall::Metadata
|
@@ -2535,15 +2427,12 @@ class ClientChannel::LoadBalancedCall::Metadata
|
|
2535
2427
|
// ClientChannel::LoadBalancedCall::LbCallState
|
2536
2428
|
//
|
2537
2429
|
|
2538
|
-
|
2430
|
+
ServiceConfigCallData::CallAttributeInterface*
|
2539
2431
|
ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
|
2540
|
-
UniqueTypeName type) {
|
2432
|
+
UniqueTypeName type) const {
|
2541
2433
|
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
2542
|
-
lb_call_->
|
2543
|
-
|
2544
|
-
auto it = call_attributes.find(type);
|
2545
|
-
if (it == call_attributes.end()) return absl::string_view();
|
2546
|
-
return it->second;
|
2434
|
+
lb_call_->call_context()[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2435
|
+
return service_config_call_data->GetCallAttribute(type);
|
2547
2436
|
}
|
2548
2437
|
|
2549
2438
|
//
|
@@ -2553,15 +2442,16 @@ ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
|
|
2553
2442
|
class ClientChannel::LoadBalancedCall::BackendMetricAccessor
|
2554
2443
|
: public LoadBalancingPolicy::BackendMetricAccessor {
|
2555
2444
|
public:
|
2556
|
-
|
2557
|
-
|
2445
|
+
BackendMetricAccessor(LoadBalancedCall* lb_call,
|
2446
|
+
grpc_metadata_batch* recv_trailing_metadata)
|
2447
|
+
: lb_call_(lb_call), recv_trailing_metadata_(recv_trailing_metadata) {}
|
2558
2448
|
|
2559
2449
|
const BackendMetricData* GetBackendMetricData() override {
|
2560
2450
|
if (lb_call_->backend_metric_data_ == nullptr &&
|
2561
|
-
|
2562
|
-
if (const auto* md =
|
2451
|
+
recv_trailing_metadata_ != nullptr) {
|
2452
|
+
if (const auto* md = recv_trailing_metadata_->get_pointer(
|
2563
2453
|
EndpointLoadMetricsBinMetadata())) {
|
2564
|
-
BackendMetricAllocator allocator(lb_call_->
|
2454
|
+
BackendMetricAllocator allocator(lb_call_->arena());
|
2565
2455
|
lb_call_->backend_metric_data_ =
|
2566
2456
|
ParseBackendMetricData(md->as_string_view(), &allocator);
|
2567
2457
|
}
|
@@ -2587,6 +2477,7 @@ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
|
|
2587
2477
|
};
|
2588
2478
|
|
2589
2479
|
LoadBalancedCall* lb_call_;
|
2480
|
+
grpc_metadata_batch* recv_trailing_metadata_;
|
2590
2481
|
};
|
2591
2482
|
|
2592
2483
|
//
|
@@ -2595,78 +2486,301 @@ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
|
|
2595
2486
|
|
2596
2487
|
namespace {
|
2597
2488
|
|
2598
|
-
|
2489
|
+
ClientCallTracer::CallAttemptTracer* CreateCallAttemptTracer(
|
2599
2490
|
grpc_call_context_element* context, bool is_transparent_retry) {
|
2600
|
-
auto* call_tracer =
|
2601
|
-
|
2491
|
+
auto* call_tracer = static_cast<ClientCallTracer*>(
|
2492
|
+
context[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
|
2602
2493
|
if (call_tracer == nullptr) return nullptr;
|
2603
|
-
|
2494
|
+
auto* tracer = call_tracer->StartNewAttempt(is_transparent_retry);
|
2495
|
+
context[GRPC_CONTEXT_CALL_TRACER].value = tracer;
|
2496
|
+
return tracer;
|
2604
2497
|
}
|
2605
2498
|
|
2606
2499
|
} // namespace
|
2607
2500
|
|
2608
2501
|
ClientChannel::LoadBalancedCall::LoadBalancedCall(
|
2609
|
-
ClientChannel* chand,
|
2610
|
-
|
2611
|
-
ConfigSelector::CallDispatchController* call_dispatch_controller,
|
2612
|
-
bool is_transparent_retry)
|
2502
|
+
ClientChannel* chand, grpc_call_context_element* call_context,
|
2503
|
+
absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
|
2613
2504
|
: InternallyRefCounted(
|
2614
2505
|
GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)
|
2615
2506
|
? "LoadBalancedCall"
|
2616
2507
|
: nullptr),
|
2617
2508
|
chand_(chand),
|
2618
|
-
|
2619
|
-
|
2620
|
-
arena_(args.arena),
|
2621
|
-
owning_call_(args.call_stack),
|
2622
|
-
call_combiner_(args.call_combiner),
|
2623
|
-
call_context_(args.context),
|
2624
|
-
pollent_(pollent),
|
2625
|
-
on_call_destruction_complete_(on_call_destruction_complete),
|
2626
|
-
call_dispatch_controller_(call_dispatch_controller),
|
2627
|
-
call_attempt_tracer_(
|
2628
|
-
GetCallAttemptTracer(args.context, is_transparent_retry)) {
|
2509
|
+
on_commit_(std::move(on_commit)) {
|
2510
|
+
CreateCallAttemptTracer(call_context, is_transparent_retry);
|
2629
2511
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2630
2512
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: created", chand_, this);
|
2631
2513
|
}
|
2632
2514
|
}
|
2633
2515
|
|
2634
2516
|
ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
|
2635
|
-
GRPC_ERROR_UNREF(cancel_error_);
|
2636
|
-
GRPC_ERROR_UNREF(failure_error_);
|
2637
2517
|
if (backend_metric_data_ != nullptr) {
|
2638
2518
|
backend_metric_data_->BackendMetricData::~BackendMetricData();
|
2639
2519
|
}
|
2520
|
+
}
|
2521
|
+
|
2522
|
+
void ClientChannel::LoadBalancedCall::Orphan() {
|
2523
|
+
// Compute latency and report it to the tracer.
|
2524
|
+
if (call_attempt_tracer() != nullptr) {
|
2525
|
+
gpr_timespec latency =
|
2526
|
+
gpr_cycle_counter_sub(gpr_get_cycle_counter(), lb_call_start_time_);
|
2527
|
+
call_attempt_tracer()->RecordEnd(latency);
|
2528
|
+
}
|
2529
|
+
Unref();
|
2530
|
+
}
|
2531
|
+
|
2532
|
+
void ClientChannel::LoadBalancedCall::RecordCallCompletion(
|
2533
|
+
absl::Status status, grpc_metadata_batch* recv_trailing_metadata,
|
2534
|
+
grpc_transport_stream_stats* transport_stream_stats,
|
2535
|
+
absl::string_view peer_address) {
|
2536
|
+
// If we have a tracer, notify it.
|
2537
|
+
if (call_attempt_tracer() != nullptr) {
|
2538
|
+
call_attempt_tracer()->RecordReceivedTrailingMetadata(
|
2539
|
+
status, recv_trailing_metadata, transport_stream_stats);
|
2540
|
+
}
|
2541
|
+
// If the LB policy requested a callback for trailing metadata, invoke
|
2542
|
+
// the callback.
|
2543
|
+
if (lb_subchannel_call_tracker_ != nullptr) {
|
2544
|
+
Metadata trailing_metadata(recv_trailing_metadata);
|
2545
|
+
BackendMetricAccessor backend_metric_accessor(this, recv_trailing_metadata);
|
2546
|
+
LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
|
2547
|
+
peer_address, status, &trailing_metadata, &backend_metric_accessor};
|
2548
|
+
lb_subchannel_call_tracker_->Finish(args);
|
2549
|
+
lb_subchannel_call_tracker_.reset();
|
2550
|
+
}
|
2551
|
+
}
|
2552
|
+
|
2553
|
+
void ClientChannel::LoadBalancedCall::RemoveCallFromLbQueuedCallsLocked() {
|
2554
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2555
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: removing from queued picks list",
|
2556
|
+
chand_, this);
|
2557
|
+
}
|
2558
|
+
// Remove pollset_set linkage.
|
2559
|
+
grpc_polling_entity_del_from_pollset_set(pollent(),
|
2560
|
+
chand_->interested_parties_);
|
2561
|
+
// Note: There's no need to actually remove the call from the queue
|
2562
|
+
// here, beacuse that will be done in either
|
2563
|
+
// LbQueuedCallCanceller::CancelLocked() or
|
2564
|
+
// in ClientChannel::UpdateStateAndPickerLocked().
|
2565
|
+
}
|
2566
|
+
|
2567
|
+
void ClientChannel::LoadBalancedCall::AddCallToLbQueuedCallsLocked() {
|
2568
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2569
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
|
2570
|
+
chand_, this);
|
2571
|
+
}
|
2572
|
+
// Add call's pollent to channel's interested_parties, so that I/O
|
2573
|
+
// can be done under the call's CQ.
|
2574
|
+
grpc_polling_entity_add_to_pollset_set(pollent(),
|
2575
|
+
chand_->interested_parties_);
|
2576
|
+
// Add to queue.
|
2577
|
+
chand_->lb_queued_calls_.insert(this);
|
2578
|
+
OnAddToQueueLocked();
|
2579
|
+
}
|
2580
|
+
|
2581
|
+
absl::optional<absl::Status> ClientChannel::LoadBalancedCall::PickSubchannel(
|
2582
|
+
bool was_queued) {
|
2583
|
+
// We may accumulate multiple pickers here, because if a picker says
|
2584
|
+
// to queue the call, we check again to see if the picker has been
|
2585
|
+
// updated before we queue it.
|
2586
|
+
// We need to unref pickers in the WorkSerializer.
|
2587
|
+
std::vector<RefCountedPtr<LoadBalancingPolicy::SubchannelPicker>> pickers;
|
2588
|
+
auto cleanup = absl::MakeCleanup([&]() {
|
2589
|
+
chand_->work_serializer_->Run(
|
2590
|
+
[pickers = std::move(pickers)]() mutable {
|
2591
|
+
for (auto& picker : pickers) {
|
2592
|
+
picker.reset(DEBUG_LOCATION, "PickSubchannel");
|
2593
|
+
}
|
2594
|
+
},
|
2595
|
+
DEBUG_LOCATION);
|
2596
|
+
});
|
2597
|
+
// Grab mutex and take a ref to the picker.
|
2598
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2599
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: grabbing LB mutex to get picker",
|
2600
|
+
chand_, this);
|
2601
|
+
}
|
2602
|
+
{
|
2603
|
+
MutexLock lock(&chand_->lb_mu_);
|
2604
|
+
pickers.emplace_back(chand_->picker_);
|
2605
|
+
}
|
2606
|
+
while (true) {
|
2607
|
+
// Do pick.
|
2608
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2609
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: performing pick with picker=%p",
|
2610
|
+
chand_, this, pickers.back().get());
|
2611
|
+
}
|
2612
|
+
grpc_error_handle error;
|
2613
|
+
bool pick_complete = PickSubchannelImpl(pickers.back().get(), &error);
|
2614
|
+
if (!pick_complete) {
|
2615
|
+
MutexLock lock(&chand_->lb_mu_);
|
2616
|
+
// If picker has been swapped out since we grabbed it, try again.
|
2617
|
+
if (chand_->picker_ != pickers.back()) {
|
2618
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2619
|
+
gpr_log(GPR_INFO,
|
2620
|
+
"chand=%p lb_call=%p: pick not complete, but picker changed",
|
2621
|
+
chand_, this);
|
2622
|
+
}
|
2623
|
+
pickers.emplace_back(chand_->picker_);
|
2624
|
+
continue;
|
2625
|
+
}
|
2626
|
+
// Otherwise queue the pick to try again later when we get a new picker.
|
2627
|
+
AddCallToLbQueuedCallsLocked();
|
2628
|
+
return absl::nullopt;
|
2629
|
+
}
|
2630
|
+
// Pick is complete.
|
2631
|
+
// If it was queued, add a trace annotation.
|
2632
|
+
if (was_queued && call_attempt_tracer() != nullptr) {
|
2633
|
+
call_attempt_tracer()->RecordAnnotation("Delayed LB pick complete.");
|
2634
|
+
}
|
2635
|
+
// If the pick failed, fail the call.
|
2636
|
+
if (!error.ok()) {
|
2637
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2638
|
+
gpr_log(GPR_INFO,
|
2639
|
+
"chand=%p lb_call=%p: failed to pick subchannel: error=%s",
|
2640
|
+
chand_, this, StatusToString(error).c_str());
|
2641
|
+
}
|
2642
|
+
return error;
|
2643
|
+
}
|
2644
|
+
// Pick succeeded.
|
2645
|
+
Commit();
|
2646
|
+
return absl::OkStatus();
|
2647
|
+
}
|
2648
|
+
}
|
2649
|
+
|
2650
|
+
bool ClientChannel::LoadBalancedCall::PickSubchannelImpl(
|
2651
|
+
LoadBalancingPolicy::SubchannelPicker* picker, grpc_error_handle* error) {
|
2652
|
+
GPR_ASSERT(connected_subchannel_ == nullptr);
|
2653
|
+
// Perform LB pick.
|
2654
|
+
LoadBalancingPolicy::PickArgs pick_args;
|
2655
|
+
Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
|
2656
|
+
GPR_ASSERT(path != nullptr);
|
2657
|
+
pick_args.path = path->as_string_view();
|
2658
|
+
LbCallState lb_call_state(this);
|
2659
|
+
pick_args.call_state = &lb_call_state;
|
2660
|
+
Metadata initial_metadata(send_initial_metadata());
|
2661
|
+
pick_args.initial_metadata = &initial_metadata;
|
2662
|
+
auto result = picker->Pick(pick_args);
|
2663
|
+
return HandlePickResult<bool>(
|
2664
|
+
&result,
|
2665
|
+
// CompletePick
|
2666
|
+
[this](LoadBalancingPolicy::PickResult::Complete* complete_pick) {
|
2667
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2668
|
+
gpr_log(GPR_INFO,
|
2669
|
+
"chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
|
2670
|
+
chand_, this, complete_pick->subchannel.get());
|
2671
|
+
}
|
2672
|
+
GPR_ASSERT(complete_pick->subchannel != nullptr);
|
2673
|
+
// Grab a ref to the connected subchannel while we're still
|
2674
|
+
// holding the data plane mutex.
|
2675
|
+
SubchannelWrapper* subchannel =
|
2676
|
+
static_cast<SubchannelWrapper*>(complete_pick->subchannel.get());
|
2677
|
+
connected_subchannel_ = subchannel->connected_subchannel();
|
2678
|
+
// If the subchannel has no connected subchannel (e.g., if the
|
2679
|
+
// subchannel has moved out of state READY but the LB policy hasn't
|
2680
|
+
// yet seen that change and given us a new picker), then just
|
2681
|
+
// queue the pick. We'll try again as soon as we get a new picker.
|
2682
|
+
if (connected_subchannel_ == nullptr) {
|
2683
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2684
|
+
gpr_log(GPR_INFO,
|
2685
|
+
"chand=%p lb_call=%p: subchannel returned by LB picker "
|
2686
|
+
"has no connected subchannel; queueing pick",
|
2687
|
+
chand_, this);
|
2688
|
+
}
|
2689
|
+
return false;
|
2690
|
+
}
|
2691
|
+
lb_subchannel_call_tracker_ =
|
2692
|
+
std::move(complete_pick->subchannel_call_tracker);
|
2693
|
+
if (lb_subchannel_call_tracker_ != nullptr) {
|
2694
|
+
lb_subchannel_call_tracker_->Start();
|
2695
|
+
}
|
2696
|
+
return true;
|
2697
|
+
},
|
2698
|
+
// QueuePick
|
2699
|
+
[this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
|
2700
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2701
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
|
2702
|
+
this);
|
2703
|
+
}
|
2704
|
+
return false;
|
2705
|
+
},
|
2706
|
+
// FailPick
|
2707
|
+
[this, &error](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
|
2708
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2709
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s", chand_,
|
2710
|
+
this, fail_pick->status.ToString().c_str());
|
2711
|
+
}
|
2712
|
+
// If wait_for_ready is false, then the error indicates the RPC
|
2713
|
+
// attempt's final status.
|
2714
|
+
if (!send_initial_metadata()
|
2715
|
+
->GetOrCreatePointer(WaitForReady())
|
2716
|
+
->value) {
|
2717
|
+
*error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
|
2718
|
+
std::move(fail_pick->status), "LB pick"));
|
2719
|
+
return true;
|
2720
|
+
}
|
2721
|
+
// If wait_for_ready is true, then queue to retry when we get a new
|
2722
|
+
// picker.
|
2723
|
+
return false;
|
2724
|
+
},
|
2725
|
+
// DropPick
|
2726
|
+
[this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick) {
|
2727
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2728
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s", chand_,
|
2729
|
+
this, drop_pick->status.ToString().c_str());
|
2730
|
+
}
|
2731
|
+
*error = grpc_error_set_int(
|
2732
|
+
absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
|
2733
|
+
std::move(drop_pick->status), "LB drop")),
|
2734
|
+
StatusIntProperty::kLbPolicyDrop, 1);
|
2735
|
+
return true;
|
2736
|
+
});
|
2737
|
+
}
|
2738
|
+
|
2739
|
+
//
|
2740
|
+
// ClientChannel::FilterBasedLoadBalancedCall
|
2741
|
+
//
|
2742
|
+
|
2743
|
+
ClientChannel::FilterBasedLoadBalancedCall::FilterBasedLoadBalancedCall(
|
2744
|
+
ClientChannel* chand, const grpc_call_element_args& args,
|
2745
|
+
grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete,
|
2746
|
+
absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
|
2747
|
+
: LoadBalancedCall(chand, args.context, std::move(on_commit),
|
2748
|
+
is_transparent_retry),
|
2749
|
+
deadline_(args.deadline),
|
2750
|
+
arena_(args.arena),
|
2751
|
+
call_context_(args.context),
|
2752
|
+
owning_call_(args.call_stack),
|
2753
|
+
call_combiner_(args.call_combiner),
|
2754
|
+
pollent_(pollent),
|
2755
|
+
on_call_destruction_complete_(on_call_destruction_complete) {}
|
2756
|
+
|
2757
|
+
ClientChannel::FilterBasedLoadBalancedCall::~FilterBasedLoadBalancedCall() {
|
2640
2758
|
// Make sure there are no remaining pending batches.
|
2641
2759
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
2642
2760
|
GPR_ASSERT(pending_batches_[i] == nullptr);
|
2643
2761
|
}
|
2644
2762
|
if (on_call_destruction_complete_ != nullptr) {
|
2645
2763
|
ExecCtx::Run(DEBUG_LOCATION, on_call_destruction_complete_,
|
2646
|
-
|
2764
|
+
absl::OkStatus());
|
2647
2765
|
}
|
2648
2766
|
}
|
2649
2767
|
|
2650
|
-
void ClientChannel::
|
2768
|
+
void ClientChannel::FilterBasedLoadBalancedCall::Orphan() {
|
2651
2769
|
// If the recv_trailing_metadata op was never started, then notify
|
2652
2770
|
// about call completion here, as best we can. We assume status
|
2653
2771
|
// CANCELLED in this case.
|
2654
2772
|
if (recv_trailing_metadata_ == nullptr) {
|
2655
|
-
RecordCallCompletion(absl::CancelledError("call cancelled")
|
2656
|
-
|
2657
|
-
// Compute latency and report it to the tracer.
|
2658
|
-
if (call_attempt_tracer_ != nullptr) {
|
2659
|
-
gpr_timespec latency =
|
2660
|
-
gpr_cycle_counter_sub(gpr_get_cycle_counter(), lb_call_start_time_);
|
2661
|
-
call_attempt_tracer_->RecordEnd(latency);
|
2773
|
+
RecordCallCompletion(absl::CancelledError("call cancelled"), nullptr,
|
2774
|
+
nullptr, "");
|
2662
2775
|
}
|
2663
|
-
|
2776
|
+
// Delegate to parent.
|
2777
|
+
LoadBalancedCall::Orphan();
|
2664
2778
|
}
|
2665
2779
|
|
2666
|
-
size_t ClientChannel::
|
2780
|
+
size_t ClientChannel::FilterBasedLoadBalancedCall::GetBatchIndex(
|
2667
2781
|
grpc_transport_stream_op_batch* batch) {
|
2668
2782
|
// Note: It is important the send_initial_metadata be the first entry
|
2669
|
-
// here, since the code in
|
2783
|
+
// here, since the code in PickSubchannelImpl() assumes it will be.
|
2670
2784
|
if (batch->send_initial_metadata) return 0;
|
2671
2785
|
if (batch->send_message) return 1;
|
2672
2786
|
if (batch->send_trailing_metadata) return 2;
|
@@ -2677,35 +2791,35 @@ size_t ClientChannel::LoadBalancedCall::GetBatchIndex(
|
|
2677
2791
|
}
|
2678
2792
|
|
2679
2793
|
// This is called via the call combiner, so access to calld is synchronized.
|
2680
|
-
void ClientChannel::
|
2794
|
+
void ClientChannel::FilterBasedLoadBalancedCall::PendingBatchesAdd(
|
2681
2795
|
grpc_transport_stream_op_batch* batch) {
|
2682
2796
|
const size_t idx = GetBatchIndex(batch);
|
2683
2797
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2684
2798
|
gpr_log(GPR_INFO,
|
2685
2799
|
"chand=%p lb_call=%p: adding pending batch at index %" PRIuPTR,
|
2686
|
-
|
2800
|
+
chand(), this, idx);
|
2687
2801
|
}
|
2688
2802
|
GPR_ASSERT(pending_batches_[idx] == nullptr);
|
2689
2803
|
pending_batches_[idx] = batch;
|
2690
2804
|
}
|
2691
2805
|
|
2692
2806
|
// This is called via the call combiner, so access to calld is synchronized.
|
2693
|
-
void ClientChannel::
|
2807
|
+
void ClientChannel::FilterBasedLoadBalancedCall::FailPendingBatchInCallCombiner(
|
2694
2808
|
void* arg, grpc_error_handle error) {
|
2695
2809
|
grpc_transport_stream_op_batch* batch =
|
2696
2810
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2697
|
-
auto* self = static_cast<
|
2811
|
+
auto* self = static_cast<FilterBasedLoadBalancedCall*>(
|
2812
|
+
batch->handler_private.extra_arg);
|
2698
2813
|
// Note: This will release the call combiner.
|
2699
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2700
|
-
|
2814
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
2815
|
+
self->call_combiner_);
|
2701
2816
|
}
|
2702
2817
|
|
2703
2818
|
// This is called via the call combiner, so access to calld is synchronized.
|
2704
|
-
void ClientChannel::
|
2819
|
+
void ClientChannel::FilterBasedLoadBalancedCall::PendingBatchesFail(
|
2705
2820
|
grpc_error_handle error,
|
2706
2821
|
YieldCallCombinerPredicate yield_call_combiner_predicate) {
|
2707
|
-
GPR_ASSERT(!
|
2708
|
-
GRPC_ERROR_UNREF(failure_error_);
|
2822
|
+
GPR_ASSERT(!error.ok());
|
2709
2823
|
failure_error_ = error;
|
2710
2824
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2711
2825
|
size_t num_batches = 0;
|
@@ -2714,7 +2828,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
|
|
2714
2828
|
}
|
2715
2829
|
gpr_log(GPR_INFO,
|
2716
2830
|
"chand=%p lb_call=%p: failing %" PRIuPTR " pending batches: %s",
|
2717
|
-
|
2831
|
+
chand(), this, num_batches, StatusToString(error).c_str());
|
2718
2832
|
}
|
2719
2833
|
CallCombinerClosureList closures;
|
2720
2834
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2724,7 +2838,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
|
|
2724
2838
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2725
2839
|
FailPendingBatchInCallCombiner, batch,
|
2726
2840
|
grpc_schedule_on_exec_ctx);
|
2727
|
-
closures.Add(&batch->handler_private.closure,
|
2841
|
+
closures.Add(&batch->handler_private.closure, error,
|
2728
2842
|
"PendingBatchesFail");
|
2729
2843
|
batch = nullptr;
|
2730
2844
|
}
|
@@ -2737,8 +2851,8 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
|
|
2737
2851
|
}
|
2738
2852
|
|
2739
2853
|
// This is called via the call combiner, so access to calld is synchronized.
|
2740
|
-
void ClientChannel::
|
2741
|
-
void* arg, grpc_error_handle /*ignored*/) {
|
2854
|
+
void ClientChannel::FilterBasedLoadBalancedCall::
|
2855
|
+
ResumePendingBatchInCallCombiner(void* arg, grpc_error_handle /*ignored*/) {
|
2742
2856
|
grpc_transport_stream_op_batch* batch =
|
2743
2857
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2744
2858
|
SubchannelCall* subchannel_call =
|
@@ -2748,7 +2862,7 @@ void ClientChannel::LoadBalancedCall::ResumePendingBatchInCallCombiner(
|
|
2748
2862
|
}
|
2749
2863
|
|
2750
2864
|
// This is called via the call combiner, so access to calld is synchronized.
|
2751
|
-
void ClientChannel::
|
2865
|
+
void ClientChannel::FilterBasedLoadBalancedCall::PendingBatchesResume() {
|
2752
2866
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2753
2867
|
size_t num_batches = 0;
|
2754
2868
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2757,7 +2871,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
|
|
2757
2871
|
gpr_log(GPR_INFO,
|
2758
2872
|
"chand=%p lb_call=%p: starting %" PRIuPTR
|
2759
2873
|
" pending batches on subchannel_call=%p",
|
2760
|
-
|
2874
|
+
chand(), this, num_batches, subchannel_call_.get());
|
2761
2875
|
}
|
2762
2876
|
CallCombinerClosureList closures;
|
2763
2877
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2767,7 +2881,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
|
|
2767
2881
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2768
2882
|
ResumePendingBatchInCallCombiner, batch,
|
2769
2883
|
grpc_schedule_on_exec_ctx);
|
2770
|
-
closures.Add(&batch->handler_private.closure,
|
2884
|
+
closures.Add(&batch->handler_private.closure, absl::OkStatus(),
|
2771
2885
|
"resuming pending batch from LB call");
|
2772
2886
|
batch = nullptr;
|
2773
2887
|
}
|
@@ -2776,39 +2890,30 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
|
|
2776
2890
|
closures.RunClosures(call_combiner_);
|
2777
2891
|
}
|
2778
2892
|
|
2779
|
-
void ClientChannel::
|
2893
|
+
void ClientChannel::FilterBasedLoadBalancedCall::StartTransportStreamOpBatch(
|
2780
2894
|
grpc_transport_stream_op_batch* batch) {
|
2781
2895
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace) ||
|
2782
2896
|
GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
|
2783
2897
|
gpr_log(GPR_INFO,
|
2784
2898
|
"chand=%p lb_call=%p: batch started from above: %s, "
|
2785
|
-
"
|
2786
|
-
|
2787
|
-
|
2899
|
+
"call_attempt_tracer()=%p",
|
2900
|
+
chand(), this,
|
2901
|
+
grpc_transport_stream_op_batch_string(batch, false).c_str(),
|
2902
|
+
call_attempt_tracer());
|
2788
2903
|
}
|
2789
2904
|
// Handle call tracing.
|
2790
|
-
if (
|
2905
|
+
if (call_attempt_tracer() != nullptr) {
|
2791
2906
|
// Record send ops in tracer.
|
2792
2907
|
if (batch->cancel_stream) {
|
2793
|
-
|
2794
|
-
|
2908
|
+
call_attempt_tracer()->RecordCancel(
|
2909
|
+
batch->payload->cancel_stream.cancel_error);
|
2795
2910
|
}
|
2796
2911
|
if (batch->send_initial_metadata) {
|
2797
|
-
|
2798
|
-
batch->payload->send_initial_metadata.send_initial_metadata
|
2799
|
-
batch->payload->send_initial_metadata.send_initial_metadata_flags);
|
2800
|
-
peer_string_ = batch->payload->send_initial_metadata.peer_string;
|
2801
|
-
original_send_initial_metadata_on_complete_ = batch->on_complete;
|
2802
|
-
GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
|
2803
|
-
SendInitialMetadataOnComplete, this, nullptr);
|
2804
|
-
batch->on_complete = &send_initial_metadata_on_complete_;
|
2805
|
-
}
|
2806
|
-
if (batch->send_message) {
|
2807
|
-
call_attempt_tracer_->RecordSendMessage(
|
2808
|
-
*batch->payload->send_message.send_message);
|
2912
|
+
call_attempt_tracer()->RecordSendInitialMetadata(
|
2913
|
+
batch->payload->send_initial_metadata.send_initial_metadata);
|
2809
2914
|
}
|
2810
2915
|
if (batch->send_trailing_metadata) {
|
2811
|
-
|
2916
|
+
call_attempt_tracer()->RecordSendTrailingMetadata(
|
2812
2917
|
batch->payload->send_trailing_metadata.send_trailing_metadata);
|
2813
2918
|
}
|
2814
2919
|
// Intercept recv ops.
|
@@ -2822,13 +2927,6 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2822
2927
|
batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
|
2823
2928
|
&recv_initial_metadata_ready_;
|
2824
2929
|
}
|
2825
|
-
if (batch->recv_message) {
|
2826
|
-
recv_message_ = batch->payload->recv_message.recv_message;
|
2827
|
-
original_recv_message_ready_ =
|
2828
|
-
batch->payload->recv_message.recv_message_ready;
|
2829
|
-
GRPC_CLOSURE_INIT(&recv_message_ready_, RecvMessageReady, this, nullptr);
|
2830
|
-
batch->payload->recv_message.recv_message_ready = &recv_message_ready_;
|
2831
|
-
}
|
2832
2930
|
}
|
2833
2931
|
// Intercept recv_trailing_metadata even if there is no call tracer,
|
2834
2932
|
// since we may need to notify the LB policy about trailing metadata.
|
@@ -2852,7 +2950,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2852
2950
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2853
2951
|
gpr_log(GPR_INFO,
|
2854
2952
|
"chand=%p lb_call=%p: starting batch on subchannel_call=%p",
|
2855
|
-
|
2953
|
+
chand(), this, subchannel_call_.get());
|
2856
2954
|
}
|
2857
2955
|
subchannel_call_->StartTransportStreamOpBatch(batch);
|
2858
2956
|
return;
|
@@ -2860,14 +2958,14 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2860
2958
|
// We do not yet have a subchannel call.
|
2861
2959
|
//
|
2862
2960
|
// If we've previously been cancelled, immediately fail any new batches.
|
2863
|
-
if (GPR_UNLIKELY(!
|
2961
|
+
if (GPR_UNLIKELY(!cancel_error_.ok())) {
|
2864
2962
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2865
2963
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
|
2866
|
-
|
2964
|
+
chand(), this, StatusToString(cancel_error_).c_str());
|
2867
2965
|
}
|
2868
2966
|
// Note: This will release the call combiner.
|
2869
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2870
|
-
|
2967
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
|
2968
|
+
call_combiner_);
|
2871
2969
|
return;
|
2872
2970
|
}
|
2873
2971
|
// Handle cancellation.
|
@@ -2877,107 +2975,73 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2877
2975
|
// cancelled before any batches are passed down (e.g., if the deadline
|
2878
2976
|
// is in the past when the call starts), we can return the right
|
2879
2977
|
// error to the caller when the first batch does get passed down.
|
2880
|
-
|
2881
|
-
cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
|
2978
|
+
cancel_error_ = batch->payload->cancel_stream.cancel_error;
|
2882
2979
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2883
2980
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
|
2884
|
-
|
2981
|
+
chand(), this, StatusToString(cancel_error_).c_str());
|
2885
2982
|
}
|
2886
2983
|
// Fail all pending batches.
|
2887
|
-
PendingBatchesFail(
|
2984
|
+
PendingBatchesFail(cancel_error_, NoYieldCallCombiner);
|
2888
2985
|
// Note: This will release the call combiner.
|
2889
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2890
|
-
|
2986
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
|
2987
|
+
call_combiner_);
|
2891
2988
|
return;
|
2892
2989
|
}
|
2893
2990
|
// Add the batch to the pending list.
|
2894
2991
|
PendingBatchesAdd(batch);
|
2895
2992
|
// For batches containing a send_initial_metadata op, acquire the
|
2896
|
-
// channel's
|
2993
|
+
// channel's LB mutex to pick a subchannel.
|
2897
2994
|
if (GPR_LIKELY(batch->send_initial_metadata)) {
|
2898
|
-
|
2899
|
-
gpr_log(GPR_INFO,
|
2900
|
-
"chand=%p lb_call=%p: grabbing data plane mutex to perform pick",
|
2901
|
-
chand_, this);
|
2902
|
-
}
|
2903
|
-
PickSubchannel(this, GRPC_ERROR_NONE);
|
2995
|
+
TryPick(/*was_queued=*/false);
|
2904
2996
|
} else {
|
2905
2997
|
// For all other batches, release the call combiner.
|
2906
2998
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2907
2999
|
gpr_log(GPR_INFO,
|
2908
3000
|
"chand=%p lb_call=%p: saved batch, yielding call combiner",
|
2909
|
-
|
3001
|
+
chand(), this);
|
2910
3002
|
}
|
2911
3003
|
GRPC_CALL_COMBINER_STOP(call_combiner_,
|
2912
3004
|
"batch does not include send_initial_metadata");
|
2913
3005
|
}
|
2914
3006
|
}
|
2915
3007
|
|
2916
|
-
void ClientChannel::
|
2917
|
-
void* arg, grpc_error_handle error) {
|
2918
|
-
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2919
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2920
|
-
gpr_log(GPR_INFO,
|
2921
|
-
"chand=%p lb_call=%p: got on_complete for send_initial_metadata: "
|
2922
|
-
"error=%s",
|
2923
|
-
self->chand_, self, grpc_error_std_string(error).c_str());
|
2924
|
-
}
|
2925
|
-
self->call_attempt_tracer_->RecordOnDoneSendInitialMetadata(
|
2926
|
-
self->peer_string_);
|
2927
|
-
Closure::Run(DEBUG_LOCATION,
|
2928
|
-
self->original_send_initial_metadata_on_complete_,
|
2929
|
-
GRPC_ERROR_REF(error));
|
2930
|
-
}
|
2931
|
-
|
2932
|
-
void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
|
3008
|
+
void ClientChannel::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
|
2933
3009
|
void* arg, grpc_error_handle error) {
|
2934
|
-
auto* self = static_cast<
|
3010
|
+
auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
|
2935
3011
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2936
3012
|
gpr_log(GPR_INFO,
|
2937
3013
|
"chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
|
2938
|
-
self->
|
3014
|
+
self->chand(), self, StatusToString(error).c_str());
|
2939
3015
|
}
|
2940
|
-
if (
|
3016
|
+
if (error.ok()) {
|
2941
3017
|
// recv_initial_metadata_flags is not populated for clients
|
2942
|
-
self->
|
2943
|
-
self->recv_initial_metadata_
|
3018
|
+
self->call_attempt_tracer()->RecordReceivedInitialMetadata(
|
3019
|
+
self->recv_initial_metadata_);
|
3020
|
+
auto* peer_string = self->recv_initial_metadata_->get_pointer(PeerString());
|
3021
|
+
if (peer_string != nullptr) self->peer_string_ = peer_string->Ref();
|
2944
3022
|
}
|
2945
3023
|
Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
|
2946
|
-
|
2947
|
-
}
|
2948
|
-
|
2949
|
-
void ClientChannel::LoadBalancedCall::RecvMessageReady(
|
2950
|
-
void* arg, grpc_error_handle error) {
|
2951
|
-
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2952
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2953
|
-
gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
|
2954
|
-
self->chand_, self, grpc_error_std_string(error).c_str());
|
2955
|
-
}
|
2956
|
-
if (self->recv_message_->has_value()) {
|
2957
|
-
self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
|
2958
|
-
}
|
2959
|
-
Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
|
2960
|
-
GRPC_ERROR_REF(error));
|
3024
|
+
error);
|
2961
3025
|
}
|
2962
3026
|
|
2963
|
-
void ClientChannel::
|
3027
|
+
void ClientChannel::FilterBasedLoadBalancedCall::RecvTrailingMetadataReady(
|
2964
3028
|
void* arg, grpc_error_handle error) {
|
2965
|
-
auto* self = static_cast<
|
3029
|
+
auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
|
2966
3030
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2967
3031
|
gpr_log(GPR_INFO,
|
2968
3032
|
"chand=%p lb_call=%p: got recv_trailing_metadata_ready: error=%s "
|
2969
|
-
"
|
3033
|
+
"call_attempt_tracer()=%p lb_subchannel_call_tracker_=%p "
|
2970
3034
|
"failure_error_=%s",
|
2971
|
-
self->
|
2972
|
-
self->
|
2973
|
-
|
3035
|
+
self->chand(), self, StatusToString(error).c_str(),
|
3036
|
+
self->call_attempt_tracer(), self->lb_subchannel_call_tracker(),
|
3037
|
+
StatusToString(self->failure_error_).c_str());
|
2974
3038
|
}
|
2975
3039
|
// Check if we have a tracer or an LB callback to invoke.
|
2976
|
-
if (self->
|
2977
|
-
self->
|
3040
|
+
if (self->call_attempt_tracer() != nullptr ||
|
3041
|
+
self->lb_subchannel_call_tracker() != nullptr) {
|
2978
3042
|
// Get the call's status.
|
2979
3043
|
absl::Status status;
|
2980
|
-
if (!
|
3044
|
+
if (!error.ok()) {
|
2981
3045
|
// Get status from error.
|
2982
3046
|
grpc_status_code code;
|
2983
3047
|
std::string message;
|
@@ -2997,63 +3061,22 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
|
|
2997
3061
|
status = absl::Status(static_cast<absl::StatusCode>(code), message);
|
2998
3062
|
}
|
2999
3063
|
}
|
3000
|
-
|
3064
|
+
absl::string_view peer_string;
|
3065
|
+
if (self->peer_string_.has_value()) {
|
3066
|
+
peer_string = self->peer_string_->as_string_view();
|
3067
|
+
}
|
3068
|
+
self->RecordCallCompletion(status, self->recv_trailing_metadata_,
|
3069
|
+
self->transport_stream_stats_, peer_string);
|
3001
3070
|
}
|
3002
3071
|
// Chain to original callback.
|
3003
|
-
if (!
|
3072
|
+
if (!self->failure_error_.ok()) {
|
3004
3073
|
error = self->failure_error_;
|
3005
|
-
self->failure_error_ =
|
3006
|
-
} else {
|
3007
|
-
error = GRPC_ERROR_REF(error);
|
3074
|
+
self->failure_error_ = absl::OkStatus();
|
3008
3075
|
}
|
3009
3076
|
Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
|
3010
3077
|
error);
|
3011
3078
|
}
|
3012
3079
|
|
3013
|
-
void ClientChannel::LoadBalancedCall::RecordCallCompletion(
|
3014
|
-
absl::Status status) {
|
3015
|
-
// If we have a tracer, notify it.
|
3016
|
-
if (call_attempt_tracer_ != nullptr) {
|
3017
|
-
call_attempt_tracer_->RecordReceivedTrailingMetadata(
|
3018
|
-
status, recv_trailing_metadata_, transport_stream_stats_);
|
3019
|
-
}
|
3020
|
-
// If the LB policy requested a callback for trailing metadata, invoke
|
3021
|
-
// the callback.
|
3022
|
-
if (lb_subchannel_call_tracker_ != nullptr) {
|
3023
|
-
Metadata trailing_metadata(recv_trailing_metadata_);
|
3024
|
-
BackendMetricAccessor backend_metric_accessor(this);
|
3025
|
-
LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
|
3026
|
-
status, &trailing_metadata, &backend_metric_accessor};
|
3027
|
-
lb_subchannel_call_tracker_->Finish(args);
|
3028
|
-
lb_subchannel_call_tracker_.reset();
|
3029
|
-
}
|
3030
|
-
}
|
3031
|
-
|
3032
|
-
void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
|
3033
|
-
SubchannelCall::Args call_args = {
|
3034
|
-
std::move(connected_subchannel_), pollent_, path_.Ref(), /*start_time=*/0,
|
3035
|
-
deadline_, arena_,
|
3036
|
-
// TODO(roth): When we implement hedging support, we will probably
|
3037
|
-
// need to use a separate call context for each subchannel call.
|
3038
|
-
call_context_, call_combiner_};
|
3039
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
3040
|
-
subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
|
3041
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3042
|
-
gpr_log(GPR_INFO,
|
3043
|
-
"chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand_,
|
3044
|
-
this, subchannel_call_.get(), grpc_error_std_string(error).c_str());
|
3045
|
-
}
|
3046
|
-
if (on_call_destruction_complete_ != nullptr) {
|
3047
|
-
subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
|
3048
|
-
on_call_destruction_complete_ = nullptr;
|
3049
|
-
}
|
3050
|
-
if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(error))) {
|
3051
|
-
PendingBatchesFail(error, YieldCallCombiner);
|
3052
|
-
} else {
|
3053
|
-
PendingBatchesResume();
|
3054
|
-
}
|
3055
|
-
}
|
3056
|
-
|
3057
3080
|
// A class to handle the call combiner cancellation callback for a
|
3058
3081
|
// queued pick.
|
3059
3082
|
// TODO(roth): When we implement hedging support, we won't be able to
|
@@ -3061,9 +3084,10 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
|
|
3061
3084
|
// because there may be multiple LB picks happening in parallel.
|
3062
3085
|
// Instead, we will probably need to maintain a list in the CallData
|
3063
3086
|
// object of pending LB picks to be cancelled when the closure runs.
|
3064
|
-
class ClientChannel::
|
3087
|
+
class ClientChannel::FilterBasedLoadBalancedCall::LbQueuedCallCanceller {
|
3065
3088
|
public:
|
3066
|
-
explicit LbQueuedCallCanceller(
|
3089
|
+
explicit LbQueuedCallCanceller(
|
3090
|
+
RefCountedPtr<FilterBasedLoadBalancedCall> lb_call)
|
3067
3091
|
: lb_call_(std::move(lb_call)) {
|
3068
3092
|
GRPC_CALL_STACK_REF(lb_call_->owning_call_, "LbQueuedCallCanceller");
|
3069
3093
|
GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this, nullptr);
|
@@ -3074,199 +3098,109 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
|
|
3074
3098
|
static void CancelLocked(void* arg, grpc_error_handle error) {
|
3075
3099
|
auto* self = static_cast<LbQueuedCallCanceller*>(arg);
|
3076
3100
|
auto* lb_call = self->lb_call_.get();
|
3077
|
-
auto* chand = lb_call->
|
3101
|
+
auto* chand = lb_call->chand();
|
3078
3102
|
{
|
3079
|
-
MutexLock lock(&chand->
|
3103
|
+
MutexLock lock(&chand->lb_mu_);
|
3080
3104
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3081
3105
|
gpr_log(GPR_INFO,
|
3082
3106
|
"chand=%p lb_call=%p: cancelling queued pick: "
|
3083
3107
|
"error=%s self=%p calld->pick_canceller=%p",
|
3084
|
-
chand, lb_call,
|
3108
|
+
chand, lb_call, StatusToString(error).c_str(), self,
|
3085
3109
|
lb_call->lb_call_canceller_);
|
3086
3110
|
}
|
3087
|
-
if (lb_call->lb_call_canceller_ == self && !
|
3088
|
-
lb_call->
|
3111
|
+
if (lb_call->lb_call_canceller_ == self && !error.ok()) {
|
3112
|
+
lb_call->Commit();
|
3089
3113
|
// Remove pick from list of queued picks.
|
3090
|
-
lb_call->
|
3114
|
+
lb_call->RemoveCallFromLbQueuedCallsLocked();
|
3115
|
+
// Remove from queued picks list.
|
3116
|
+
chand->lb_queued_calls_.erase(lb_call);
|
3091
3117
|
// Fail pending batches on the call.
|
3092
|
-
lb_call->PendingBatchesFail(
|
3118
|
+
lb_call->PendingBatchesFail(error,
|
3093
3119
|
YieldCallCombinerIfPendingBatchesFound);
|
3094
3120
|
}
|
3095
3121
|
}
|
3096
|
-
|
3122
|
+
// Unref lb_call before unreffing the call stack, since unreffing
|
3123
|
+
// the call stack may destroy the arena in which lb_call is allocated.
|
3124
|
+
auto* owning_call = lb_call->owning_call_;
|
3125
|
+
self->lb_call_.reset();
|
3126
|
+
GRPC_CALL_STACK_UNREF(owning_call, "LbQueuedCallCanceller");
|
3097
3127
|
delete self;
|
3098
3128
|
}
|
3099
3129
|
|
3100
|
-
RefCountedPtr<
|
3130
|
+
RefCountedPtr<FilterBasedLoadBalancedCall> lb_call_;
|
3101
3131
|
grpc_closure closure_;
|
3102
3132
|
};
|
3103
3133
|
|
3104
|
-
void ClientChannel::
|
3105
|
-
|
3106
|
-
if (
|
3107
|
-
|
3108
|
-
|
3134
|
+
void ClientChannel::FilterBasedLoadBalancedCall::TryPick(bool was_queued) {
|
3135
|
+
auto result = PickSubchannel(was_queued);
|
3136
|
+
if (result.has_value()) {
|
3137
|
+
if (!result->ok()) {
|
3138
|
+
PendingBatchesFail(*result, YieldCallCombiner);
|
3139
|
+
return;
|
3140
|
+
}
|
3141
|
+
CreateSubchannelCall();
|
3109
3142
|
}
|
3110
|
-
chand_->RemoveLbQueuedCall(&queued_call_, pollent_);
|
3111
|
-
queued_pending_lb_pick_ = false;
|
3112
|
-
// Lame the call combiner canceller.
|
3113
|
-
lb_call_canceller_ = nullptr;
|
3114
3143
|
}
|
3115
3144
|
|
3116
|
-
void ClientChannel::
|
3117
|
-
if (queued_pending_lb_pick_) return;
|
3118
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3119
|
-
gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
|
3120
|
-
chand_, this);
|
3121
|
-
}
|
3122
|
-
queued_pending_lb_pick_ = true;
|
3123
|
-
queued_call_.lb_call = this;
|
3124
|
-
chand_->AddLbQueuedCall(&queued_call_, pollent_);
|
3145
|
+
void ClientChannel::FilterBasedLoadBalancedCall::OnAddToQueueLocked() {
|
3125
3146
|
// Register call combiner cancellation callback.
|
3126
3147
|
lb_call_canceller_ = new LbQueuedCallCanceller(Ref());
|
3127
3148
|
}
|
3128
3149
|
|
3129
|
-
void ClientChannel::
|
3130
|
-
//
|
3131
|
-
|
3132
|
-
|
3133
|
-
|
3134
|
-
|
3135
|
-
|
3136
|
-
|
3137
|
-
|
3138
|
-
|
3139
|
-
|
3140
|
-
|
3141
|
-
|
3142
|
-
|
3143
|
-
|
3144
|
-
|
3145
|
-
|
3150
|
+
void ClientChannel::FilterBasedLoadBalancedCall::RetryPickLocked() {
|
3151
|
+
// Lame the call combiner canceller.
|
3152
|
+
lb_call_canceller_ = nullptr;
|
3153
|
+
// Do an async callback to resume call processing, so that we're not
|
3154
|
+
// doing it while holding the channel's LB mutex.
|
3155
|
+
// TODO(roth): We should really be using EventEngine::Run() here
|
3156
|
+
// instead of ExecCtx::Run(). Unfortunately, doing that seems to cause
|
3157
|
+
// a flaky TSAN failure for reasons that I do not fully understand.
|
3158
|
+
// However, given that we are working toward eliminating this code as
|
3159
|
+
// part of the promise conversion, it doesn't seem worth further
|
3160
|
+
// investigation right now.
|
3161
|
+
ExecCtx::Run(DEBUG_LOCATION, NewClosure([this](grpc_error_handle) {
|
3162
|
+
// If there are a lot of queued calls here, resuming them
|
3163
|
+
// all may cause us to stay inside C-core for a long period
|
3164
|
+
// of time. All of that work would be done using the same
|
3165
|
+
// ExecCtx instance and therefore the same cached value of
|
3166
|
+
// "now". The longer it takes to finish all of this work
|
3167
|
+
// and exit from C-core, the more stale the cached value of
|
3168
|
+
// "now" may become. This can cause problems whereby (e.g.)
|
3169
|
+
// we calculate a timer deadline based on the stale value,
|
3170
|
+
// which results in the timer firing too early. To avoid
|
3171
|
+
// this, we invalidate the cached value for each call we
|
3172
|
+
// process.
|
3173
|
+
ExecCtx::Get()->InvalidateNow();
|
3174
|
+
TryPick(/*was_queued=*/true);
|
3175
|
+
}),
|
3176
|
+
absl::OkStatus());
|
3177
|
+
}
|
3178
|
+
|
3179
|
+
void ClientChannel::FilterBasedLoadBalancedCall::CreateSubchannelCall() {
|
3180
|
+
Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
|
3181
|
+
GPR_ASSERT(path != nullptr);
|
3182
|
+
SubchannelCall::Args call_args = {
|
3183
|
+
connected_subchannel()->Ref(), pollent_, path->Ref(), /*start_time=*/0,
|
3184
|
+
deadline_, arena_,
|
3185
|
+
// TODO(roth): When we implement hedging support, we will probably
|
3186
|
+
// need to use a separate call context for each subchannel call.
|
3187
|
+
call_context_, call_combiner_};
|
3188
|
+
grpc_error_handle error;
|
3189
|
+
subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
|
3190
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3191
|
+
gpr_log(GPR_INFO,
|
3192
|
+
"chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand(),
|
3193
|
+
this, subchannel_call_.get(), StatusToString(error).c_str());
|
3146
3194
|
}
|
3147
|
-
|
3148
|
-
|
3149
|
-
|
3150
|
-
|
3151
|
-
void ClientChannel::LoadBalancedCall::PickSubchannel(void* arg,
|
3152
|
-
grpc_error_handle error) {
|
3153
|
-
auto* self = static_cast<LoadBalancedCall*>(arg);
|
3154
|
-
bool pick_complete;
|
3155
|
-
{
|
3156
|
-
MutexLock lock(&self->chand_->data_plane_mu_);
|
3157
|
-
pick_complete = self->PickSubchannelLocked(&error);
|
3195
|
+
if (on_call_destruction_complete_ != nullptr) {
|
3196
|
+
subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
|
3197
|
+
on_call_destruction_complete_ = nullptr;
|
3158
3198
|
}
|
3159
|
-
if (
|
3160
|
-
|
3161
|
-
|
3199
|
+
if (GPR_UNLIKELY(!error.ok())) {
|
3200
|
+
PendingBatchesFail(error, YieldCallCombiner);
|
3201
|
+
} else {
|
3202
|
+
PendingBatchesResume();
|
3162
3203
|
}
|
3163
3204
|
}
|
3164
3205
|
|
3165
|
-
bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
3166
|
-
grpc_error_handle* error) {
|
3167
|
-
GPR_ASSERT(connected_subchannel_ == nullptr);
|
3168
|
-
GPR_ASSERT(subchannel_call_ == nullptr);
|
3169
|
-
// Grab initial metadata.
|
3170
|
-
auto& send_initial_metadata =
|
3171
|
-
pending_batches_[0]->payload->send_initial_metadata;
|
3172
|
-
grpc_metadata_batch* initial_metadata_batch =
|
3173
|
-
send_initial_metadata.send_initial_metadata;
|
3174
|
-
const uint32_t send_initial_metadata_flags =
|
3175
|
-
send_initial_metadata.send_initial_metadata_flags;
|
3176
|
-
// Perform LB pick.
|
3177
|
-
LoadBalancingPolicy::PickArgs pick_args;
|
3178
|
-
pick_args.path = path_.as_string_view();
|
3179
|
-
LbCallState lb_call_state(this);
|
3180
|
-
pick_args.call_state = &lb_call_state;
|
3181
|
-
Metadata initial_metadata(initial_metadata_batch);
|
3182
|
-
pick_args.initial_metadata = &initial_metadata;
|
3183
|
-
auto result = chand_->picker_->Pick(pick_args);
|
3184
|
-
return HandlePickResult<bool>(
|
3185
|
-
&result,
|
3186
|
-
// CompletePick
|
3187
|
-
[this](LoadBalancingPolicy::PickResult::Complete* complete_pick)
|
3188
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3189
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3190
|
-
gpr_log(GPR_INFO,
|
3191
|
-
"chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
|
3192
|
-
chand_, this, complete_pick->subchannel.get());
|
3193
|
-
}
|
3194
|
-
GPR_ASSERT(complete_pick->subchannel != nullptr);
|
3195
|
-
// Grab a ref to the connected subchannel while we're still
|
3196
|
-
// holding the data plane mutex.
|
3197
|
-
SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
|
3198
|
-
complete_pick->subchannel.get());
|
3199
|
-
connected_subchannel_ = subchannel->connected_subchannel();
|
3200
|
-
// If the subchannel has no connected subchannel (e.g., if the
|
3201
|
-
// subchannel has moved out of state READY but the LB policy hasn't
|
3202
|
-
// yet seen that change and given us a new picker), then just
|
3203
|
-
// queue the pick. We'll try again as soon as we get a new picker.
|
3204
|
-
if (connected_subchannel_ == nullptr) {
|
3205
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3206
|
-
gpr_log(GPR_INFO,
|
3207
|
-
"chand=%p lb_call=%p: subchannel returned by LB picker "
|
3208
|
-
"has no connected subchannel; queueing pick",
|
3209
|
-
chand_, this);
|
3210
|
-
}
|
3211
|
-
MaybeAddCallToLbQueuedCallsLocked();
|
3212
|
-
return false;
|
3213
|
-
}
|
3214
|
-
lb_subchannel_call_tracker_ =
|
3215
|
-
std::move(complete_pick->subchannel_call_tracker);
|
3216
|
-
if (lb_subchannel_call_tracker_ != nullptr) {
|
3217
|
-
lb_subchannel_call_tracker_->Start();
|
3218
|
-
}
|
3219
|
-
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3220
|
-
return true;
|
3221
|
-
},
|
3222
|
-
// QueuePick
|
3223
|
-
[this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/)
|
3224
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3225
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3226
|
-
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
|
3227
|
-
this);
|
3228
|
-
}
|
3229
|
-
MaybeAddCallToLbQueuedCallsLocked();
|
3230
|
-
return false;
|
3231
|
-
},
|
3232
|
-
// FailPick
|
3233
|
-
[this, send_initial_metadata_flags,
|
3234
|
-
&error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
|
3235
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3236
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3237
|
-
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s",
|
3238
|
-
chand_, this, fail_pick->status.ToString().c_str());
|
3239
|
-
}
|
3240
|
-
// If wait_for_ready is false, then the error indicates the RPC
|
3241
|
-
// attempt's final status.
|
3242
|
-
if ((send_initial_metadata_flags &
|
3243
|
-
GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
|
3244
|
-
grpc_error_handle lb_error =
|
3245
|
-
absl_status_to_grpc_error(fail_pick->status);
|
3246
|
-
*error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
3247
|
-
"Failed to pick subchannel", &lb_error, 1);
|
3248
|
-
GRPC_ERROR_UNREF(lb_error);
|
3249
|
-
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3250
|
-
return true;
|
3251
|
-
}
|
3252
|
-
// If wait_for_ready is true, then queue to retry when we get a new
|
3253
|
-
// picker.
|
3254
|
-
MaybeAddCallToLbQueuedCallsLocked();
|
3255
|
-
return false;
|
3256
|
-
},
|
3257
|
-
// DropPick
|
3258
|
-
[this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick)
|
3259
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3260
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3261
|
-
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
|
3262
|
-
chand_, this, drop_pick->status.ToString().c_str());
|
3263
|
-
}
|
3264
|
-
*error =
|
3265
|
-
grpc_error_set_int(absl_status_to_grpc_error(drop_pick->status),
|
3266
|
-
GRPC_ERROR_INT_LB_POLICY_DROP, 1);
|
3267
|
-
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3268
|
-
return true;
|
3269
|
-
});
|
3270
|
-
}
|
3271
|
-
|
3272
3206
|
} // namespace grpc_core
|