grpc 1.45.0 → 1.53.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 +437 -254
- data/include/grpc/byte_buffer.h +76 -1
- data/include/grpc/byte_buffer_reader.h +19 -1
- data/include/grpc/compression.h +2 -2
- data/include/grpc/event_engine/endpoint_config.h +11 -5
- data/include/grpc/event_engine/event_engine.h +129 -39
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
- data/include/grpc/event_engine/internal/slice_cast.h +67 -0
- data/include/grpc/event_engine/memory_allocator.h +1 -16
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +306 -0
- data/include/grpc/event_engine/slice_buffer.h +159 -0
- data/include/grpc/fork.h +25 -1
- data/include/grpc/grpc.h +4 -14
- data/include/grpc/grpc_posix.h +1 -1
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/atm.h +3 -71
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
- data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
- data/include/grpc/impl/codegen/atm_windows.h +3 -108
- data/include/grpc/impl/codegen/byte_buffer.h +4 -78
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
- data/include/grpc/impl/codegen/compression_types.h +5 -83
- data/include/grpc/impl/codegen/connectivity_state.h +5 -21
- data/include/grpc/impl/codegen/fork.h +4 -25
- data/include/grpc/impl/codegen/gpr_types.h +4 -35
- data/include/grpc/impl/codegen/grpc_types.h +5 -797
- data/include/grpc/impl/codegen/log.h +3 -86
- data/include/grpc/impl/codegen/port_platform.h +3 -699
- data/include/grpc/impl/codegen/propagation_bits.h +3 -28
- data/include/grpc/impl/codegen/slice.h +4 -107
- data/include/grpc/impl/codegen/status.h +4 -131
- data/include/grpc/impl/codegen/sync.h +3 -42
- data/include/grpc/impl/codegen/sync_abseil.h +3 -12
- data/include/grpc/impl/codegen/sync_custom.h +3 -14
- data/include/grpc/impl/codegen/sync_generic.h +3 -25
- data/include/grpc/impl/codegen/sync_posix.h +3 -28
- data/include/grpc/impl/codegen/sync_windows.h +3 -16
- data/include/grpc/impl/compression_types.h +109 -0
- data/include/grpc/impl/connectivity_state.h +47 -0
- data/include/grpc/impl/grpc_types.h +827 -0
- data/include/grpc/impl/propagation_bits.h +54 -0
- data/include/grpc/impl/slice_type.h +112 -0
- data/include/grpc/load_reporting.h +1 -1
- data/include/grpc/module.modulemap +5 -1
- data/include/grpc/slice.h +1 -1
- data/include/grpc/status.h +131 -1
- data/include/grpc/support/atm.h +70 -1
- data/include/grpc/support/atm_gcc_atomic.h +59 -1
- data/include/grpc/support/atm_gcc_sync.h +58 -1
- data/include/grpc/support/atm_windows.h +105 -1
- data/include/grpc/support/log.h +87 -1
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/port_platform.h +767 -1
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +35 -2
- data/include/grpc/support/sync_abseil.h +11 -1
- data/include/grpc/support/sync_custom.h +13 -1
- data/include/grpc/support/sync_generic.h +24 -1
- data/include/grpc/support/sync_posix.h +27 -1
- data/include/grpc/support/sync_windows.h +15 -1
- data/include/grpc/support/time.h +31 -6
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/census/grpc_context.cc +19 -17
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
- data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +6 -4
- data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
- data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
- data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
- data/src/core/ext/filters/client_channel/client_channel.cc +557 -540
- data/src/core/ext/filters/client_channel/client_channel.h +70 -26
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
- data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +29 -23
- data/src/core/ext/filters/client_channel/connector.h +19 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
- data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +137 -582
- data/src/core/ext/filters/client_channel/health/health_check_client.h +29 -163
- data/src/core/ext/filters/client_channel/http_proxy.cc +130 -164
- data/src/core/ext/filters/client_channel/http_proxy.h +46 -22
- data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +478 -479
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -409
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +618 -642
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +280 -248
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +251 -187
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +212 -216
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +543 -584
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +579 -376
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +86 -224
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +269 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +121 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +413 -303
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
- data/src/core/ext/filters/client_channel/retry_filter.cc +184 -166
- data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
- data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
- data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
- data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
- data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
- data/src/core/ext/filters/client_channel/subchannel.cc +336 -388
- data/src/core/ext/filters/client_channel/subchannel.h +112 -82
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
- data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +154 -372
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +41 -9
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +119 -477
- data/src/core/ext/filters/http/client/http_client_filter.h +55 -25
- data/src/core/ext/filters/http/client_authority_filter.cc +48 -58
- data/src/core/ext/filters/http/client_authority_filter.h +32 -28
- data/src/core/ext/filters/http/http_filters_plugin.cc +46 -52
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +111 -385
- data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
- data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
- data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
- data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +90 -202
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
- data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +186 -241
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +209 -215
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +31 -30
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +893 -1079
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
- data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
- data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
- data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
- data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
- data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +46 -77
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +169 -220
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +59 -61
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +14 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +114 -542
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +31 -24
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +75 -67
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +70 -48
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
- data/src/core/ext/transport/chttp2/transport/internal.h +250 -298
- data/src/core/ext/transport/chttp2/transport/parsing.cc +365 -132
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
- data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
- data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
- data/src/core/ext/transport/chttp2/transport/writing.cc +144 -106
- data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
- data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
- data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
- data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +173 -73
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +39 -36
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +210 -85
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +29 -344
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +189 -1489
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +38 -17
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +9 -7
- data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +56 -13
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +24 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +19 -6
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
- data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +229 -82
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +16 -4
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +26 -4
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +379 -140
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +140 -126
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +824 -301
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +114 -29
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +195 -191
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1042 -412
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +16 -4
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +171 -42
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
- data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +517 -202
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +61 -36
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +333 -66
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +20 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +93 -91
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +615 -213
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +417 -79
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +20 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +16 -93
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +38 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +447 -157
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +98 -66
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +545 -191
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +33 -13
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +108 -87
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +502 -149
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +9 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +42 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +24 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +110 -18
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +64 -26
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +20 -6
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +118 -49
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +39 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +242 -87
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +226 -105
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +86 -53
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +475 -141
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +379 -160
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +16 -12
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +77 -16
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +9 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +50 -8
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +26 -6
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +253 -102
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +229 -92
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +74 -55
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +494 -160
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +38 -30
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +232 -124
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +458 -351
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2879 -947
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +67 -22
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +79 -54
- data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +454 -133
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +5 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +21 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +16 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +38 -14
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +33 -14
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +89 -38
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +13 -4
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +58 -21
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +50 -16
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +9 -8
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +43 -10
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +16 -8
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +101 -38
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +167 -71
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +16 -8
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +88 -16
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +71 -17
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +184 -144
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1091 -361
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +56 -48
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +327 -130
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +88 -31
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +83 -56
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +472 -136
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +35 -13
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +171 -54
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +917 -134
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +59 -25
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -33
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +205 -76
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +23 -8
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +62 -25
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +36 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +55 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +26 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +30 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +20 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +58 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +82 -29
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +49 -22
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +99 -36
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +118 -44
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +120 -40
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +46 -16
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +9 -2
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +25 -8
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +36 -6
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +23 -6
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +477 -185
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +512 -182
- data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
- data/src/core/ext/upb-generated/google/api/http.upb.h +134 -49
- data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
- data/src/core/ext/upb-generated/google/api/httpbody.upb.h +25 -9
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +183 -181
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1332 -488
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +16 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +126 -46
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +16 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +81 -18
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +25 -9
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
- data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +89 -30
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +55 -14
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +424 -169
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +32 -8
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +18 -4
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +204 -76
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +63 -22
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +115 -16
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +29 -4
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +33 -8
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +26 -4
- data/src/core/ext/upb-generated/validate/validate.upb.c +264 -253
- data/src/core/ext/upb-generated/validate/validate.upb.h +1974 -709
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
- data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +115 -16
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +29 -4
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +94 -18
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +26 -4
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +9 -2
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +50 -16
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +33 -12
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +16 -4
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +27 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +83 -34
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +22 -4
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +14 -13
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +84 -28
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
- data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +309 -121
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
- data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +31 -12
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
- data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +82 -29
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
- data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
- data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -4
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +16 -4
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +149 -129
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +168 -154
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -68
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +828 -747
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
- data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +483 -445
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +211 -193
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
- data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
- data/src/core/ext/xds/certificate_provider_store.cc +75 -3
- data/src/core/ext/xds/certificate_provider_store.h +30 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
- data/src/core/ext/xds/upb_utils.h +3 -25
- data/src/core/ext/xds/xds_api.cc +106 -192
- data/src/core/ext/xds/xds_api.h +41 -39
- data/src/core/ext/xds/xds_bootstrap.cc +5 -537
- data/src/core/ext/xds/xds_bootstrap.h +42 -95
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
- data/src/core/ext/xds/xds_certificate_provider.h +36 -4
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
- data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
- data/src/core/ext/xds/xds_client.cc +885 -1360
- data/src/core/ext/xds/xds_client.h +69 -65
- data/src/core/ext/xds/xds_client_grpc.cc +235 -0
- data/src/core/ext/xds/xds_client_grpc.h +79 -0
- data/src/core/ext/xds/xds_client_stats.cc +24 -25
- data/src/core/ext/xds/xds_client_stats.h +26 -24
- data/src/core/ext/xds/xds_cluster.cc +505 -247
- data/src/core/ext/xds/xds_cluster.h +69 -40
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +132 -0
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +97 -0
- data/src/core/ext/xds/xds_common_types.cc +238 -123
- data/src/core/ext/xds/xds_common_types.h +29 -16
- data/src/core/ext/xds/xds_endpoint.cc +266 -156
- 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 +68 -59
- data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
- data/src/core/ext/xds/xds_http_filters.cc +70 -71
- data/src/core/ext/xds/xds_http_filters.h +73 -25
- data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
- data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
- data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
- data/src/core/ext/xds/xds_listener.cc +573 -481
- data/src/core/ext/xds/xds_listener.h +57 -51
- data/src/core/ext/xds/xds_resource_type.h +28 -22
- data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
- data/src/core/ext/xds/xds_route_config.cc +638 -479
- data/src/core/ext/xds/xds_route_config.h +79 -42
- data/src/core/ext/xds/xds_routing.cc +21 -7
- data/src/core/ext/xds/xds_routing.h +17 -12
- data/src/core/ext/xds/xds_server_config_fetcher.cc +244 -200
- data/src/core/ext/xds/xds_transport.h +86 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
- data/src/core/ext/xds/xds_transport_grpc.h +135 -0
- data/src/core/lib/address_utils/parse_address.cc +52 -52
- data/src/core/lib/address_utils/parse_address.h +46 -42
- data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
- data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
- data/src/core/lib/avl/avl.h +100 -13
- data/src/core/lib/backoff/backoff.cc +19 -21
- data/src/core/lib/backoff/backoff.h +21 -21
- data/src/core/lib/channel/call_finalization.h +6 -4
- data/src/core/lib/channel/call_tracer.h +27 -9
- data/src/core/lib/channel/channel_args.cc +268 -101
- data/src/core/lib/channel/channel_args.h +461 -56
- data/src/core/lib/channel/channel_args_preconditioning.cc +6 -11
- data/src/core/lib/channel/channel_args_preconditioning.h +7 -7
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +92 -52
- data/src/core/lib/channel/channel_stack.h +186 -140
- data/src/core/lib/channel/channel_stack_builder.cc +26 -104
- data/src/core/lib/channel/channel_stack_builder.h +45 -31
- data/src/core/lib/channel/channel_stack_builder_impl.cc +126 -0
- data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
- data/src/core/lib/channel/channel_trace.cc +29 -36
- data/src/core/lib/channel/channel_trace.h +27 -24
- data/src/core/lib/channel/channelz.cc +50 -65
- data/src/core/lib/channel/channelz.h +50 -33
- data/src/core/lib/channel/channelz_registry.cc +28 -36
- data/src/core/lib/channel/channelz_registry.h +31 -30
- data/src/core/lib/channel/connected_channel.cc +1267 -78
- data/src/core/lib/channel/connected_channel.h +22 -23
- data/src/core/lib/channel/context.h +25 -21
- data/src/core/lib/channel/promise_based_filter.cc +2155 -303
- data/src/core/lib/channel/promise_based_filter.h +636 -122
- data/src/core/lib/channel/status_util.cc +64 -17
- data/src/core/lib/channel/status_util.h +38 -24
- data/src/core/lib/compression/compression.cc +24 -19
- data/src/core/lib/compression/compression_internal.cc +89 -70
- data/src/core/lib/compression/compression_internal.h +28 -27
- data/src/core/lib/compression/message_compress.cc +28 -26
- data/src/core/lib/compression/message_compress.h +28 -29
- data/src/core/lib/config/core_configuration.cc +8 -1
- data/src/core/lib/config/core_configuration.h +86 -39
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/debug/histogram_view.h +37 -0
- data/src/core/lib/debug/stats.cc +48 -152
- data/src/core/lib/debug/stats.h +50 -57
- data/src/core/lib/debug/stats_data.cc +302 -649
- data/src/core/lib/debug/stats_data.h +293 -548
- data/src/core/lib/debug/trace.cc +18 -20
- data/src/core/lib/debug/trace.h +27 -48
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +99 -0
- data/src/core/lib/event_engine/default_event_engine.h +73 -0
- data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
- data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
- data/src/core/lib/event_engine/event_engine.cc +3 -30
- data/src/core/lib/event_engine/executor/executor.h +38 -0
- data/src/core/lib/event_engine/forkable.cc +106 -0
- data/src/core/lib/event_engine/forkable.h +61 -0
- data/src/core/lib/event_engine/handle_containers.h +74 -0
- data/src/core/lib/event_engine/memory_allocator.cc +11 -3
- data/src/core/lib/event_engine/poller.h +62 -0
- data/src/core/lib/event_engine/posix.h +158 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
- data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
- data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/resolved_address.cc +23 -2
- data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
- data/src/core/lib/event_engine/shim.cc +56 -0
- data/src/core/lib/event_engine/shim.h +33 -0
- data/src/core/lib/event_engine/slice.cc +103 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
- data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool.cc +253 -0
- data/src/core/lib/event_engine/thread_pool.h +141 -0
- data/src/core/lib/event_engine/time_util.cc +30 -0
- data/src/core/lib/event_engine/time_util.h +32 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/event_engine/trace.cc} +9 -13
- data/src/core/lib/event_engine/trace.h +43 -0
- data/src/core/lib/event_engine/utils.cc +44 -0
- data/src/core/lib/event_engine/utils.h +44 -0
- data/src/core/lib/event_engine/windows/iocp.cc +140 -0
- data/src/core/lib/event_engine/windows/iocp.h +69 -0
- data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
- data/src/core/lib/event_engine/windows/win_socket.h +129 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
- data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
- data/src/core/lib/experiments/config.cc +161 -0
- data/src/core/lib/experiments/config.h +53 -0
- data/src/core/lib/experiments/experiments.cc +81 -0
- data/src/core/lib/experiments/experiments.h +117 -0
- data/src/core/lib/gpr/alloc.cc +19 -25
- data/src/core/lib/gpr/alloc.h +20 -20
- data/src/core/lib/gpr/atm.cc +17 -17
- data/src/core/lib/gpr/cpu_iphone.cc +24 -24
- data/src/core/lib/gpr/cpu_linux.cc +28 -23
- data/src/core/lib/gpr/cpu_posix.cc +23 -22
- data/src/core/lib/gpr/cpu_windows.cc +20 -18
- data/src/core/lib/gpr/log.cc +30 -17
- data/src/core/lib/gpr/log_android.cc +22 -20
- data/src/core/lib/gpr/log_linux.cc +24 -24
- data/src/core/lib/gpr/log_posix.cc +20 -19
- data/src/core/lib/gpr/log_windows.cc +25 -25
- data/src/core/lib/gpr/spinlock.h +20 -20
- data/src/core/lib/gpr/string.cc +25 -24
- data/src/core/lib/gpr/string.h +61 -61
- data/src/core/lib/gpr/string_posix.cc +24 -24
- data/src/core/lib/gpr/string_util_windows.cc +25 -52
- data/src/core/lib/gpr/string_windows.cc +24 -24
- data/src/core/lib/gpr/sync.cc +25 -25
- data/src/core/lib/gpr/sync_abseil.cc +36 -40
- data/src/core/lib/gpr/sync_posix.cc +22 -34
- data/src/core/lib/gpr/sync_windows.cc +29 -27
- data/src/core/lib/gpr/time.cc +34 -30
- data/src/core/lib/gpr/time_posix.cc +41 -45
- data/src/core/lib/gpr/time_precise.cc +22 -22
- data/src/core/lib/gpr/time_precise.h +21 -22
- data/src/core/lib/gpr/time_windows.cc +35 -29
- data/src/core/lib/gpr/tmpfile.h +24 -24
- data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
- data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
- data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
- data/src/core/lib/gpr/useful.h +83 -30
- data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
- data/src/core/lib/gprpp/atomic_utils.h +20 -20
- data/src/core/lib/gprpp/bitset.h +47 -17
- data/src/core/lib/gprpp/chunked_vector.h +7 -3
- data/src/core/lib/gprpp/construct_destruct.h +4 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +7 -3
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
- data/src/core/lib/gprpp/crash.h +34 -0
- data/src/core/lib/gprpp/debug_location.h +60 -31
- data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
- data/src/core/lib/gprpp/env.h +53 -0
- data/src/core/lib/gprpp/env_linux.cc +80 -0
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
- data/src/core/lib/gprpp/env_windows.cc +56 -0
- data/src/core/lib/gprpp/examine_stack.cc +17 -17
- data/src/core/lib/gprpp/examine_stack.h +21 -22
- data/src/core/lib/gprpp/fork.cc +58 -53
- data/src/core/lib/gprpp/fork.h +29 -35
- data/src/core/lib/gprpp/global_config.h +22 -24
- data/src/core/lib/gprpp/global_config_custom.h +20 -20
- data/src/core/lib/gprpp/global_config_env.cc +28 -25
- data/src/core/lib/gprpp/global_config_env.h +29 -27
- data/src/core/lib/gprpp/global_config_generic.h +21 -25
- data/src/core/lib/gprpp/host_port.cc +30 -26
- data/src/core/lib/gprpp/host_port.h +32 -31
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/manual_constructor.h +21 -89
- data/src/core/lib/gprpp/match.h +75 -0
- data/src/core/lib/gprpp/memory.h +22 -26
- data/src/core/lib/gprpp/mpscq.cc +17 -17
- data/src/core/lib/gprpp/mpscq.h +21 -21
- data/src/core/lib/gprpp/no_destruct.h +95 -0
- data/src/core/lib/gprpp/notification.h +67 -0
- data/src/core/lib/gprpp/orphanable.h +22 -25
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/packed_table.h +40 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/ref_counted.h +24 -24
- data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
- data/src/core/lib/gprpp/single_set_ptr.h +87 -0
- data/src/core/lib/gprpp/sorted_pack.h +98 -0
- data/src/core/lib/gprpp/stat.h +3 -5
- data/src/core/lib/gprpp/stat_posix.cc +10 -4
- data/src/core/lib/gprpp/stat_windows.cc +4 -2
- data/src/core/lib/gprpp/status_helper.cc +56 -20
- data/src/core/lib/gprpp/status_helper.h +13 -5
- data/src/core/lib/gprpp/strerror.cc +43 -0
- data/src/core/lib/gprpp/strerror.h +29 -0
- data/src/core/lib/gprpp/sync.h +26 -24
- data/src/core/lib/gprpp/table.h +22 -4
- data/src/core/lib/gprpp/tchar.cc +49 -0
- data/src/core/lib/gprpp/tchar.h +33 -0
- data/src/core/lib/gprpp/thd.h +25 -28
- data/src/core/lib/gprpp/thd_posix.cc +33 -32
- data/src/core/lib/gprpp/thd_windows.cc +28 -26
- data/src/core/lib/gprpp/time.cc +64 -9
- data/src/core/lib/gprpp/time.h +79 -5
- data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
- data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +3 -3
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/gprpp/validation_errors.cc +61 -0
- data/src/core/lib/gprpp/validation_errors.h +127 -0
- data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
- data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
- data/src/core/lib/handshaker/proxy_mapper.h +53 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
- data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
- data/src/core/lib/http/format_request.cc +54 -24
- data/src/core/lib/http/format_request.h +23 -21
- data/src/core/lib/http/httpcli.cc +139 -141
- data/src/core/lib/http/httpcli.h +86 -38
- data/src/core/lib/http/httpcli_security_connector.cc +53 -45
- data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
- data/src/core/lib/http/parser.cc +144 -85
- data/src/core/lib/http/parser.h +51 -35
- data/src/core/lib/iomgr/block_annotate.h +23 -23
- data/src/core/lib/iomgr/buffer_list.cc +156 -136
- data/src/core/lib/iomgr/buffer_list.h +123 -101
- data/src/core/lib/iomgr/call_combiner.cc +32 -64
- data/src/core/lib/iomgr/call_combiner.h +24 -25
- data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
- data/src/core/lib/iomgr/cfstream_handle.h +25 -25
- data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
- data/src/core/lib/iomgr/closure.h +95 -58
- data/src/core/lib/iomgr/combiner.cc +20 -39
- data/src/core/lib/iomgr/combiner.h +20 -20
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
- data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
- data/src/core/lib/iomgr/endpoint.cc +21 -21
- data/src/core/lib/iomgr/endpoint.h +53 -51
- data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
- data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
- data/src/core/lib/iomgr/endpoint_pair.h +20 -20
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -27
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
- data/src/core/lib/iomgr/error.cc +51 -834
- data/src/core/lib/iomgr/error.h +45 -317
- data/src/core/lib/iomgr/error_cfstream.cc +18 -23
- data/src/core/lib/iomgr/error_cfstream.h +21 -21
- data/src/core/lib/iomgr/ev_apple.cc +21 -21
- data/src/core/lib/iomgr/ev_apple.h +21 -21
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
- data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
- data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
- data/src/core/lib/iomgr/ev_posix.cc +88 -122
- data/src/core/lib/iomgr/ev_posix.h +93 -87
- data/src/core/lib/iomgr/ev_windows.cc +18 -18
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
- data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.cc +34 -56
- data/src/core/lib/iomgr/exec_ctx.h +152 -177
- data/src/core/lib/iomgr/executor.cc +21 -31
- data/src/core/lib/iomgr/executor.h +27 -30
- data/src/core/lib/iomgr/fork_posix.cc +31 -28
- data/src/core/lib/iomgr/fork_windows.cc +21 -21
- data/src/core/lib/iomgr/gethostname.h +20 -20
- data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
- data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
- data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
- data/src/core/lib/iomgr/internal_errqueue.h +84 -89
- data/src/core/lib/iomgr/iocp_windows.cc +23 -23
- data/src/core/lib/iomgr/iocp_windows.h +21 -21
- data/src/core/lib/iomgr/iomgr.cc +25 -20
- data/src/core/lib/iomgr/iomgr.h +35 -35
- data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
- data/src/core/lib/iomgr/iomgr_internal.h +28 -28
- data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
- data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
- data/src/core/lib/iomgr/load_file.cc +24 -27
- data/src/core/lib/iomgr/load_file.h +22 -22
- data/src/core/lib/iomgr/lockfree_event.cc +114 -131
- data/src/core/lib/iomgr/lockfree_event.h +23 -23
- data/src/core/lib/iomgr/nameser.h +86 -86
- data/src/core/lib/iomgr/polling_entity.cc +25 -21
- data/src/core/lib/iomgr/polling_entity.h +29 -29
- data/src/core/lib/iomgr/pollset.cc +17 -17
- data/src/core/lib/iomgr/pollset.h +55 -55
- data/src/core/lib/iomgr/pollset_set.cc +17 -17
- data/src/core/lib/iomgr/pollset_set.h +26 -28
- data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
- data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
- data/src/core/lib/iomgr/pollset_windows.cc +32 -31
- data/src/core/lib/iomgr/pollset_windows.h +24 -24
- data/src/core/lib/iomgr/port.h +59 -39
- data/src/core/lib/iomgr/python_util.h +24 -24
- data/src/core/lib/iomgr/resolve_address.cc +34 -20
- data/src/core/lib/iomgr/resolve_address.h +73 -43
- data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
- data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
- data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
- data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
- data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +25 -26
- data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
- data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
- data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
- data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
- data/src/core/lib/iomgr/socket_mutator.cc +19 -18
- data/src/core/lib/iomgr/socket_mutator.h +39 -39
- data/src/core/lib/iomgr/socket_utils.h +27 -27
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
- data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
- data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
- data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
- data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
- data/src/core/lib/iomgr/socket_windows.cc +37 -36
- data/src/core/lib/iomgr/socket_windows.h +59 -61
- data/src/core/lib/iomgr/systemd_utils.cc +116 -0
- data/src/core/lib/iomgr/systemd_utils.h +33 -0
- data/src/core/lib/iomgr/tcp_client.cc +28 -24
- data/src/core/lib/iomgr/tcp_client.h +49 -38
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
- data/src/core/lib/iomgr/tcp_client_posix.cc +244 -106
- data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
- data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
- data/src/core/lib/iomgr/tcp_posix.cc +562 -361
- 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 +402 -145
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
- data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
- data/src/core/lib/iomgr/tcp_windows.cc +116 -98
- data/src/core/lib/iomgr/tcp_windows.h +34 -35
- data/src/core/lib/iomgr/timer.cc +17 -17
- data/src/core/lib/iomgr/timer.h +68 -68
- data/src/core/lib/iomgr/timer_generic.cc +125 -134
- data/src/core/lib/iomgr/timer_generic.h +21 -21
- data/src/core/lib/iomgr/timer_heap.cc +25 -25
- data/src/core/lib/iomgr/timer_heap.h +22 -22
- data/src/core/lib/iomgr/timer_manager.cc +31 -31
- data/src/core/lib/iomgr/timer_manager.h +27 -27
- data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
- data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
- data/src/core/lib/json/json.h +23 -27
- data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +217 -0
- data/src/core/lib/json/json_object_loader.h +634 -0
- data/src/core/lib/json/json_reader.cc +123 -90
- data/src/core/lib/json/json_util.cc +14 -34
- data/src/core/lib/json/json_util.h +19 -10
- data/src/core/lib/json/json_writer.cc +62 -57
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
- data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
- data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
- data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
- data/src/core/lib/matchers/matchers.cc +12 -7
- data/src/core/lib/matchers/matchers.h +5 -3
- data/src/core/lib/promise/activity.cc +23 -8
- data/src/core/lib/promise/activity.h +116 -58
- data/src/core/lib/promise/arena_promise.h +115 -72
- data/src/core/lib/promise/context.h +18 -11
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +28 -33
- data/src/core/lib/promise/detail/promise_factory.h +61 -14
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +33 -4
- data/src/core/lib/promise/detail/switch.h +21 -21
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
- data/src/core/lib/promise/if.h +195 -0
- data/src/core/lib/promise/interceptor_list.h +308 -0
- data/src/core/lib/promise/intra_activity_waiter.h +55 -0
- data/src/core/lib/promise/latch.h +191 -0
- data/src/core/lib/promise/loop.h +13 -9
- data/src/core/lib/promise/map.h +4 -6
- data/src/core/lib/promise/pipe.h +608 -0
- data/src/core/lib/promise/poll.h +129 -11
- data/src/core/lib/promise/promise.h +5 -5
- data/src/core/lib/promise/race.h +6 -10
- data/src/core/lib/promise/seq.h +32 -14
- data/src/core/lib/promise/sleep.cc +58 -42
- data/src/core/lib/promise/sleep.h +44 -26
- data/src/core/lib/promise/trace.cc +20 -0
- data/src/core/{ext/filters/max_age/max_age_filter.h → lib/promise/trace.h} +6 -8
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +41 -23
- data/src/core/lib/resolver/resolver.cc +17 -59
- data/src/core/lib/resolver/resolver.h +21 -18
- data/src/core/lib/resolver/resolver_factory.h +11 -10
- data/src/core/lib/resolver/resolver_registry.cc +17 -9
- data/src/core/lib/resolver/resolver_registry.h +15 -5
- data/src/core/lib/resolver/server_address.cc +46 -34
- data/src/core/lib/resolver/server_address.h +36 -35
- data/src/core/lib/resource_quota/api.cc +25 -29
- data/src/core/lib/resource_quota/api.h +14 -5
- data/src/core/lib/resource_quota/arena.cc +85 -27
- data/src/core/lib/resource_quota/arena.h +197 -25
- data/src/core/lib/resource_quota/memory_quota.cc +322 -101
- data/src/core/lib/resource_quota/memory_quota.h +191 -56
- data/src/core/lib/resource_quota/periodic_update.cc +78 -0
- data/src/core/lib/resource_quota/periodic_update.h +71 -0
- data/src/core/lib/resource_quota/resource_quota.h +20 -4
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +7 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +17 -3
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
- data/src/core/lib/security/authorization/evaluate_args.h +9 -6
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +26 -13
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +20 -10
- data/src/core/lib/security/authorization/matchers.cc +44 -30
- data/src/core/lib/security/authorization/matchers.h +10 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
- data/src/core/lib/security/authorization/rbac_policy.h +10 -3
- data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
- data/src/core/lib/security/context/security_context.cc +27 -25
- data/src/core/lib/security/context/security_context.h +64 -35
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +35 -27
- data/src/core/lib/security/credentials/alts/alts_credentials.h +65 -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 +20 -22
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
- data/src/core/lib/security/credentials/call_creds_util.cc +13 -3
- data/src/core/lib/security/credentials/call_creds_util.h +6 -5
- data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +46 -41
- data/src/core/lib/security/credentials/composite/composite_credentials.h +51 -38
- data/src/core/lib/security/credentials/credentials.cc +23 -26
- data/src/core/lib/security/credentials/credentials.h +91 -94
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
- data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -48
- data/src/core/lib/security/credentials/fake/fake_credentials.h +57 -47
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +148 -112
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +35 -29
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +35 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.h +37 -23
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +32 -29
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
- data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +37 -30
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -23
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
- data/src/core/lib/security/credentials/local/local_credentials.cc +36 -30
- data/src/core/lib/security/credentials/local/local_credentials.h +36 -26
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +107 -91
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +56 -27
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +42 -36
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +55 -29
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +48 -44
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +43 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +44 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +75 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +69 -98
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +55 -50
- data/src/core/lib/security/credentials/tls/tls_credentials.h +33 -30
- data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +77 -81
- data/src/core/lib/security/credentials/xds/xds_credentials.h +50 -10
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
- data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +66 -49
- data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
- data/src/core/lib/security/security_connector/security_connector.cc +37 -35
- data/src/core/lib/security/security_connector/security_connector.h +67 -45
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +59 -48
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
- data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
- data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
- data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
- data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -58
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
- data/src/core/lib/security/transport/auth_filters.h +59 -30
- data/src/core/lib/security/transport/client_auth_filter.cc +73 -48
- data/src/core/lib/security/transport/secure_endpoint.cc +305 -181
- data/src/core/lib/security/transport/secure_endpoint.h +29 -28
- data/src/core/lib/security/transport/security_handshaker.cc +142 -110
- data/src/core/lib/security/transport/security_handshaker.h +28 -23
- data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
- data/src/core/lib/security/transport/tsi_error.cc +23 -20
- data/src/core/lib/security/transport/tsi_error.h +20 -20
- data/src/core/lib/security/util/json_util.cc +24 -24
- data/src/core/lib/security/util/json_util.h +21 -23
- data/src/core/lib/service_config/service_config.h +19 -12
- data/src/core/lib/service_config/service_config_call_data.h +15 -5
- data/src/core/lib/service_config/service_config_impl.cc +111 -150
- data/src/core/lib/service_config/service_config_impl.h +27 -27
- data/src/core/lib/service_config/service_config_parser.cc +16 -28
- data/src/core/lib/service_config/service_config_parser.h +18 -19
- data/src/core/lib/slice/b64.cc +26 -26
- data/src/core/lib/slice/b64.h +34 -32
- data/src/core/lib/slice/percent_encoding.cc +24 -30
- data/src/core/lib/slice/percent_encoding.h +28 -34
- data/src/core/lib/slice/slice.cc +59 -46
- data/src/core/lib/slice/slice.h +64 -20
- data/src/core/lib/slice/slice_buffer.cc +136 -76
- data/src/core/lib/slice/slice_buffer.h +168 -0
- data/src/core/lib/slice/slice_internal.h +38 -45
- data/src/core/lib/slice/slice_refcount.cc +3 -18
- data/src/core/lib/slice/slice_refcount.h +53 -19
- data/src/core/lib/slice/slice_string_helpers.cc +17 -33
- data/src/core/lib/slice/slice_string_helpers.h +23 -30
- data/src/core/lib/surface/api_trace.cc +17 -17
- data/src/core/lib/surface/api_trace.h +25 -25
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/builtins.h +3 -3
- data/src/core/lib/surface/byte_buffer.cc +26 -21
- data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
- data/src/core/lib/surface/call.cc +3000 -1131
- data/src/core/lib/surface/call.h +135 -56
- data/src/core/lib/surface/call_details.cc +22 -23
- data/src/core/lib/surface/call_log_batch.cc +25 -18
- data/src/core/lib/surface/call_test_only.h +34 -31
- data/src/core/lib/surface/call_trace.cc +123 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +218 -284
- data/src/core/lib/surface/channel.h +137 -90
- data/src/core/lib/surface/channel_init.cc +19 -20
- data/src/core/lib/surface/channel_init.h +24 -26
- data/src/core/lib/surface/channel_ping.cc +26 -20
- data/src/core/lib/surface/channel_stack_type.cc +21 -19
- data/src/core/lib/surface/channel_stack_type.h +22 -22
- data/src/core/lib/surface/completion_queue.cc +200 -222
- data/src/core/lib/surface/completion_queue.h +42 -40
- data/src/core/lib/surface/completion_queue_factory.cc +34 -28
- data/src/core/lib/surface/completion_queue_factory.h +21 -23
- data/src/core/lib/surface/event_string.cc +19 -24
- data/src/core/lib/surface/event_string.h +21 -21
- data/src/core/lib/surface/init.cc +57 -114
- data/src/core/lib/surface/init.h +20 -28
- data/src/core/lib/surface/init_internally.cc +25 -0
- data/src/core/lib/surface/init_internally.h +37 -0
- data/src/core/lib/surface/lame_client.cc +87 -130
- data/src/core/lib/surface/lame_client.h +62 -24
- data/src/core/lib/surface/metadata_array.cc +18 -17
- data/src/core/lib/surface/server.cc +409 -188
- data/src/core/lib/surface/server.h +57 -26
- data/src/core/lib/surface/validate_metadata.cc +34 -48
- data/src/core/lib/surface/validate_metadata.h +24 -21
- data/src/core/lib/surface/version.cc +21 -21
- data/src/core/lib/transport/bdp_estimator.cc +19 -19
- data/src/core/lib/transport/bdp_estimator.h +22 -24
- data/src/core/lib/transport/connectivity_state.cc +24 -23
- data/src/core/lib/transport/connectivity_state.h +24 -25
- data/src/core/lib/transport/error_utils.cc +57 -79
- data/src/core/lib/transport/error_utils.h +29 -25
- data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
- data/src/core/lib/{channel → transport}/handshaker.h +59 -48
- data/src/core/lib/transport/handshaker_factory.h +74 -0
- data/src/core/lib/transport/handshaker_registry.cc +61 -0
- data/src/core/lib/transport/handshaker_registry.h +69 -0
- data/src/core/lib/transport/http2_errors.h +22 -22
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
- data/src/core/lib/transport/http_connect_handshaker.h +42 -0
- data/src/core/lib/transport/metadata_batch.cc +305 -0
- data/src/core/lib/transport/metadata_batch.h +269 -302
- data/src/core/lib/transport/parsed_metadata.cc +2 -4
- data/src/core/lib/transport/parsed_metadata.h +17 -8
- data/src/core/lib/transport/pid_controller.cc +20 -20
- data/src/core/lib/transport/pid_controller.h +27 -27
- data/src/core/lib/transport/status_conversion.cc +23 -23
- data/src/core/lib/transport/status_conversion.h +24 -24
- data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +24 -28
- data/src/core/lib/transport/timeout_encoding.h +25 -21
- data/src/core/lib/transport/transport.cc +97 -57
- data/src/core/lib/transport/transport.h +252 -207
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +59 -48
- data/src/core/lib/transport/transport_op_string.cc +40 -39
- data/src/core/lib/uri/uri_parser.cc +12 -4
- data/src/core/lib/uri/uri_parser.h +3 -5
- data/src/core/plugin_registry/grpc_plugin_registry.cc +62 -73
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
- data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
- data/src/core/tsi/alts/crypt/gsec.cc +26 -26
- data/src/core/tsi/alts/crypt/gsec.h +336 -336
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
- data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
- data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +53 -45
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
- data/src/core/tsi/fake_transport_security.cc +146 -110
- data/src/core/tsi/fake_transport_security.h +36 -30
- data/src/core/tsi/local_transport_security.cc +43 -38
- data/src/core/tsi/local_transport_security.h +33 -33
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
- data/src/core/tsi/ssl_transport_security.cc +356 -390
- data/src/core/tsi/ssl_transport_security.h +210 -201
- data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
- data/src/core/tsi/ssl_transport_security_utils.h +147 -0
- data/src/core/tsi/ssl_types.h +27 -27
- data/src/core/tsi/transport_security.cc +44 -32
- data/src/core/tsi/transport_security.h +49 -48
- data/src/core/tsi/transport_security_grpc.cc +23 -22
- data/src/core/tsi/transport_security_grpc.h +44 -41
- data/src/core/tsi/transport_security_interface.h +346 -332
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -1
- data/src/ruby/ext/grpc/extconf.rb +98 -20
- data/src/ruby/ext/grpc/rb_call.c +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
- data/src/ruby/ext/grpc/rb_loader.c +6 -2
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
- data/src/ruby/lib/grpc/grpc.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +1 -6
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
- data/src/ruby/pb/test/client.rb +769 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/pb/test/xds_client.rb +415 -0
- data/src/ruby/spec/channel_spec.rb +5 -43
- data/src/ruby/spec/client_server_spec.rb +20 -8
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
- data/src/ruby/spec/user_agent_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
- data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +221 -39
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
- data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/random.h +6 -6
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/status.cc +193 -14
- data/third_party/abseil-cpp/absl/status/status.h +24 -14
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
- data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
- data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +268 -169
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +31 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
- data/third_party/re2/re2/bitstate.cc +3 -3
- data/third_party/re2/re2/dfa.cc +13 -13
- data/third_party/re2/re2/nfa.cc +4 -4
- data/third_party/re2/re2/onepass.cc +2 -2
- data/third_party/re2/re2/prefilter_tree.cc +27 -59
- data/third_party/re2/re2/prefilter_tree.h +3 -2
- data/third_party/re2/re2/prog.cc +11 -2
- data/third_party/re2/re2/prog.h +17 -5
- data/third_party/re2/re2/re2.cc +6 -11
- data/third_party/re2/re2/re2.h +1 -1
- data/third_party/re2/re2/regexp.cc +1 -2
- data/third_party/re2/re2/stringpiece.h +10 -7
- data/third_party/re2/re2/unicode_casefold.cc +25 -11
- data/third_party/re2/re2/unicode_groups.cc +319 -151
- data/third_party/re2/re2/walker-inl.h +3 -2
- data/third_party/re2/util/mutex.h +4 -4
- data/third_party/upb/upb/arena.c +277 -0
- data/third_party/upb/upb/arena.h +225 -0
- data/third_party/upb/upb/array.c +114 -0
- data/third_party/upb/upb/array.h +83 -0
- data/third_party/upb/upb/collections.h +36 -0
- data/third_party/upb/upb/decode.c +188 -76
- data/third_party/upb/upb/decode.h +1 -0
- data/third_party/upb/upb/decode_fast.c +1 -1
- data/third_party/upb/upb/def.c +128 -57
- data/third_party/upb/upb/def.h +20 -4
- data/third_party/upb/upb/def.hpp +7 -4
- data/third_party/upb/upb/encode.c +43 -28
- data/third_party/upb/upb/encode.h +16 -6
- data/third_party/upb/upb/extension_registry.c +93 -0
- data/third_party/upb/upb/extension_registry.h +84 -0
- data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
- data/third_party/upb/upb/internal/table.h +385 -0
- data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
- data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
- data/third_party/upb/upb/json_decode.c +1512 -0
- data/third_party/upb/upb/json_decode.h +47 -0
- data/third_party/upb/upb/json_encode.c +780 -0
- data/third_party/upb/upb/json_encode.h +65 -0
- data/third_party/upb/upb/map.c +108 -0
- data/third_party/upb/upb/map.h +117 -0
- data/third_party/upb/upb/message_value.h +66 -0
- data/third_party/upb/upb/mini_table.c +1147 -0
- data/third_party/upb/upb/mini_table.h +189 -0
- data/third_party/upb/upb/mini_table.hpp +112 -0
- data/third_party/upb/upb/msg.c +6 -68
- data/third_party/upb/upb/msg.h +2 -46
- data/third_party/upb/upb/msg_internal.h +77 -58
- data/third_party/upb/upb/port_def.inc +10 -1
- data/third_party/upb/upb/port_undef.inc +2 -0
- data/third_party/upb/upb/reflection.c +2 -159
- data/third_party/upb/upb/reflection.h +2 -112
- data/third_party/upb/upb/status.c +86 -0
- data/third_party/upb/upb/status.h +66 -0
- data/third_party/upb/upb/table.c +12 -8
- data/third_party/upb/upb/table_internal.h +3 -350
- data/third_party/upb/upb/text_encode.c +3 -2
- data/third_party/upb/upb/upb.c +4 -290
- data/third_party/upb/upb/upb.h +8 -167
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +975 -292
- data/third_party/zlib/crc32.h +9441 -436
- data/third_party/zlib/deflate.c +183 -129
- data/third_party/zlib/deflate.h +12 -15
- data/third_party/zlib/gzguts.h +3 -2
- data/third_party/zlib/gzlib.c +6 -4
- data/third_party/zlib/gzread.c +8 -12
- data/third_party/zlib/gzwrite.c +26 -14
- data/third_party/zlib/infback.c +12 -8
- data/third_party/zlib/inffast.c +14 -14
- data/third_party/zlib/inflate.c +44 -10
- data/third_party/zlib/inflate.h +3 -2
- data/third_party/zlib/inftrees.c +3 -3
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +85 -107
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +129 -106
- data/third_party/zlib/zutil.c +11 -9
- data/third_party/zlib/zutil.h +13 -9
- metadata +424 -135
- data/include/grpc/impl/codegen/gpr_slice.h +0 -71
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
- data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
- data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -67
- data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
- data/src/core/ext/xds/certificate_provider_registry.h +0 -57
- data/src/core/lib/channel/handshaker_factory.h +0 -50
- data/src/core/lib/channel/handshaker_registry.cc +0 -50
- data/src/core/lib/channel/handshaker_registry.h +0 -71
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gpr/env.h +0 -40
- data/src/core/lib/gpr/env_linux.cc +0 -75
- data/src/core/lib/gpr/env_posix.cc +0 -46
- data/src/core/lib/gpr/env_windows.cc +0 -74
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/string_windows.h +0 -32
- data/src/core/lib/gpr/tls.h +0 -157
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
- data/src/core/lib/iomgr/error_internal.h +0 -66
- data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
- data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
- data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
- data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
- data/src/core/lib/iomgr/executor/threadpool.h +0 -150
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
- data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
- 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/security/security_connector/load_system_roots_linux.h +0 -46
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_refcount_base.h +0 -61
- data/src/core/lib/slice/slice_split.cc +0 -100
- data/src/core/lib/slice/slice_split.h +0 -40
- data/src/core/lib/transport/byte_stream.cc +0 -162
- data/src/core/lib/transport/byte_stream.h +0 -166
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -20,53 +20,66 @@
|
|
20
20
|
|
21
21
|
#include <inttypes.h>
|
22
22
|
#include <limits.h>
|
23
|
-
#include <stdbool.h>
|
24
|
-
#include <stdio.h>
|
25
|
-
#include <string.h>
|
26
23
|
|
24
|
+
#include <algorithm>
|
25
|
+
#include <functional>
|
26
|
+
#include <new>
|
27
27
|
#include <set>
|
28
|
+
#include <vector>
|
28
29
|
|
29
|
-
#include "absl/
|
30
|
+
#include "absl/status/status.h"
|
31
|
+
#include "absl/status/statusor.h"
|
32
|
+
#include "absl/strings/cord.h"
|
30
33
|
#include "absl/strings/numbers.h"
|
31
34
|
#include "absl/strings/str_cat.h"
|
32
35
|
#include "absl/strings/str_join.h"
|
33
36
|
#include "absl/strings/string_view.h"
|
34
37
|
#include "absl/types/optional.h"
|
38
|
+
#include "absl/types/variant.h"
|
35
39
|
|
36
|
-
#include <grpc/
|
40
|
+
#include <grpc/event_engine/event_engine.h>
|
41
|
+
#include <grpc/slice.h>
|
42
|
+
#include <grpc/status.h>
|
37
43
|
#include <grpc/support/log.h>
|
38
44
|
#include <grpc/support/string_util.h>
|
39
|
-
#include <grpc/support/
|
45
|
+
#include <grpc/support/time.h>
|
40
46
|
|
41
47
|
#include "src/core/ext/filters/client_channel/backend_metric.h"
|
42
48
|
#include "src/core/ext/filters/client_channel/backup_poller.h"
|
49
|
+
#include "src/core/ext/filters/client_channel/client_channel_channelz.h"
|
50
|
+
#include "src/core/ext/filters/client_channel/client_channel_service_config.h"
|
43
51
|
#include "src/core/ext/filters/client_channel/config_selector.h"
|
44
52
|
#include "src/core/ext/filters/client_channel/dynamic_filters.h"
|
45
53
|
#include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
|
46
|
-
#include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
|
47
54
|
#include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
|
48
|
-
#include "src/core/ext/filters/client_channel/lb_policy_registry.h"
|
49
55
|
#include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
|
50
|
-
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
51
|
-
#include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
|
52
56
|
#include "src/core/ext/filters/client_channel/retry_filter.h"
|
53
57
|
#include "src/core/ext/filters/client_channel/subchannel.h"
|
58
|
+
#include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
|
54
59
|
#include "src/core/ext/filters/deadline/deadline_filter.h"
|
55
|
-
#include "src/core/lib/backoff/backoff.h"
|
56
60
|
#include "src/core/lib/channel/channel_args.h"
|
57
|
-
#include "src/core/lib/channel/
|
61
|
+
#include "src/core/lib/channel/channel_stack.h"
|
62
|
+
#include "src/core/lib/channel/channel_trace.h"
|
58
63
|
#include "src/core/lib/channel/status_util.h"
|
59
|
-
#include "src/core/lib/
|
64
|
+
#include "src/core/lib/config/core_configuration.h"
|
65
|
+
#include "src/core/lib/debug/trace.h"
|
66
|
+
#include "src/core/lib/gpr/useful.h"
|
67
|
+
#include "src/core/lib/gprpp/debug_location.h"
|
68
|
+
#include "src/core/lib/gprpp/status_helper.h"
|
60
69
|
#include "src/core/lib/gprpp/sync.h"
|
61
|
-
#include "src/core/lib/
|
70
|
+
#include "src/core/lib/gprpp/work_serializer.h"
|
71
|
+
#include "src/core/lib/handshaker/proxy_mapper_registry.h"
|
72
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
62
73
|
#include "src/core/lib/iomgr/polling_entity.h"
|
63
|
-
#include "src/core/lib/iomgr/
|
64
|
-
#include "src/core/lib/
|
74
|
+
#include "src/core/lib/iomgr/pollset_set.h"
|
75
|
+
#include "src/core/lib/json/json.h"
|
76
|
+
#include "src/core/lib/load_balancing/lb_policy_registry.h"
|
77
|
+
#include "src/core/lib/load_balancing/subchannel_interface.h"
|
65
78
|
#include "src/core/lib/resolver/resolver_registry.h"
|
79
|
+
#include "src/core/lib/resolver/server_address.h"
|
66
80
|
#include "src/core/lib/service_config/service_config_call_data.h"
|
67
81
|
#include "src/core/lib/service_config/service_config_impl.h"
|
68
82
|
#include "src/core/lib/slice/slice_internal.h"
|
69
|
-
#include "src/core/lib/slice/slice_string_helpers.h"
|
70
83
|
#include "src/core/lib/surface/channel.h"
|
71
84
|
#include "src/core/lib/transport/connectivity_state.h"
|
72
85
|
#include "src/core/lib/transport/error_utils.h"
|
@@ -81,12 +94,11 @@
|
|
81
94
|
|
82
95
|
namespace grpc_core {
|
83
96
|
|
84
|
-
using internal::ClientChannelGlobalParsedConfig;
|
85
97
|
using internal::ClientChannelMethodParsedConfig;
|
86
|
-
using internal::ClientChannelServiceConfigParser;
|
87
98
|
|
99
|
+
TraceFlag grpc_client_channel_trace(false, "client_channel");
|
88
100
|
TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
|
89
|
-
TraceFlag
|
101
|
+
TraceFlag grpc_client_channel_lb_call_trace(false, "client_channel_lb_call");
|
90
102
|
|
91
103
|
//
|
92
104
|
// ClientChannel::CallData definition
|
@@ -175,25 +187,19 @@ class ClientChannel::CallData {
|
|
175
187
|
|
176
188
|
static void RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
177
189
|
void* arg, grpc_error_handle error);
|
178
|
-
void InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
179
|
-
grpc_transport_stream_op_batch* batch);
|
180
190
|
|
181
191
|
void CreateDynamicCall(grpc_call_element* elem);
|
182
192
|
|
193
|
+
Arena* arena() const { return deadline_state_.arena; }
|
194
|
+
grpc_call_stack* owning_call() const { return deadline_state_.call_stack; }
|
195
|
+
CallCombiner* call_combiner() const { return deadline_state_.call_combiner; }
|
196
|
+
|
183
197
|
// State for handling deadlines.
|
184
|
-
// The code in deadline_filter.c requires this to be the first field.
|
185
|
-
// TODO(roth): This is slightly sub-optimal in that grpc_deadline_state
|
186
|
-
// and this struct both independently store pointers to the call stack
|
187
|
-
// and call combiner. If/when we have time, find a way to avoid this
|
188
|
-
// without breaking the grpc_deadline_state abstraction.
|
189
198
|
grpc_deadline_state deadline_state_;
|
190
199
|
|
191
200
|
grpc_slice path_; // Request path.
|
192
201
|
gpr_cycle_counter call_start_time_;
|
193
202
|
Timestamp deadline_;
|
194
|
-
Arena* arena_;
|
195
|
-
grpc_call_stack* owning_call_;
|
196
|
-
CallCombiner* call_combiner_;
|
197
203
|
grpc_call_context_element* call_context_;
|
198
204
|
|
199
205
|
grpc_polling_entity* pollent_ = nullptr;
|
@@ -224,7 +230,7 @@ class ClientChannel::CallData {
|
|
224
230
|
grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
|
225
231
|
|
226
232
|
// Set when we get a cancel_stream op.
|
227
|
-
grpc_error_handle cancel_error_
|
233
|
+
grpc_error_handle cancel_error_;
|
228
234
|
};
|
229
235
|
|
230
236
|
//
|
@@ -241,6 +247,7 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
|
|
241
247
|
ClientChannel::CallData::Destroy,
|
242
248
|
sizeof(ClientChannel),
|
243
249
|
ClientChannel::Init,
|
250
|
+
grpc_channel_stack_no_post_init,
|
244
251
|
ClientChannel::Destroy,
|
245
252
|
ClientChannel::GetChannelInfo,
|
246
253
|
"client-channel",
|
@@ -252,28 +259,6 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
|
|
252
259
|
|
253
260
|
namespace {
|
254
261
|
|
255
|
-
// Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
|
256
|
-
void* ClientChannelArgCopy(void* p) { return p; }
|
257
|
-
void ClientChannelArgDestroy(void* /*p*/) {}
|
258
|
-
int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
|
259
|
-
const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
|
260
|
-
ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
|
261
|
-
|
262
|
-
// Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
|
263
|
-
void* ServiceConfigObjArgCopy(void* p) {
|
264
|
-
auto* service_config = static_cast<ServiceConfig*>(p);
|
265
|
-
service_config->Ref().release();
|
266
|
-
return p;
|
267
|
-
}
|
268
|
-
void ServiceConfigObjArgDestroy(void* p) {
|
269
|
-
auto* service_config = static_cast<ServiceConfig*>(p);
|
270
|
-
service_config->Unref();
|
271
|
-
}
|
272
|
-
int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
|
273
|
-
const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
|
274
|
-
ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
|
275
|
-
ServiceConfigObjArgCmp};
|
276
|
-
|
277
262
|
class DynamicTerminationFilter {
|
278
263
|
public:
|
279
264
|
class CallData;
|
@@ -285,7 +270,7 @@ class DynamicTerminationFilter {
|
|
285
270
|
GPR_ASSERT(args->is_last);
|
286
271
|
GPR_ASSERT(elem->filter == &kFilterVtable);
|
287
272
|
new (elem->channel_data) DynamicTerminationFilter(args->channel_args);
|
288
|
-
return
|
273
|
+
return absl::OkStatus();
|
289
274
|
}
|
290
275
|
|
291
276
|
static void Destroy(grpc_channel_element* elem) {
|
@@ -300,9 +285,8 @@ class DynamicTerminationFilter {
|
|
300
285
|
const grpc_channel_info* /*info*/) {}
|
301
286
|
|
302
287
|
private:
|
303
|
-
explicit DynamicTerminationFilter(const
|
304
|
-
: chand_(
|
305
|
-
args, GRPC_ARG_CLIENT_CHANNEL)) {}
|
288
|
+
explicit DynamicTerminationFilter(const ChannelArgs& args)
|
289
|
+
: chand_(args.GetObject<ClientChannel>()) {}
|
306
290
|
|
307
291
|
ClientChannel* chand_;
|
308
292
|
};
|
@@ -312,7 +296,7 @@ class DynamicTerminationFilter::CallData {
|
|
312
296
|
static grpc_error_handle Init(grpc_call_element* elem,
|
313
297
|
const grpc_call_element_args* args) {
|
314
298
|
new (elem->call_data) CallData(*args);
|
315
|
-
return
|
299
|
+
return absl::OkStatus();
|
316
300
|
}
|
317
301
|
|
318
302
|
static void Destroy(grpc_call_element* elem,
|
@@ -328,7 +312,7 @@ class DynamicTerminationFilter::CallData {
|
|
328
312
|
subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
|
329
313
|
} else {
|
330
314
|
// TODO(yashkt) : This can potentially be a Closure::Run
|
331
|
-
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure,
|
315
|
+
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
|
332
316
|
}
|
333
317
|
}
|
334
318
|
|
@@ -354,7 +338,7 @@ class DynamicTerminationFilter::CallData {
|
|
354
338
|
args, pollent, nullptr,
|
355
339
|
service_config_call_data->call_dispatch_controller(),
|
356
340
|
/*is_transparent_retry=*/false);
|
357
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
341
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
358
342
|
gpr_log(GPR_INFO,
|
359
343
|
"chand=%p dynamic_termination_calld=%p: create lb_call=%p", chand,
|
360
344
|
client_channel, calld->lb_call_.get());
|
@@ -363,14 +347,14 @@ class DynamicTerminationFilter::CallData {
|
|
363
347
|
|
364
348
|
private:
|
365
349
|
explicit CallData(const grpc_call_element_args& args)
|
366
|
-
: path_(
|
350
|
+
: path_(CSliceRef(args.path)),
|
367
351
|
deadline_(args.deadline),
|
368
352
|
arena_(args.arena),
|
369
353
|
owning_call_(args.call_stack),
|
370
354
|
call_combiner_(args.call_combiner),
|
371
355
|
call_context_(args.context) {}
|
372
356
|
|
373
|
-
~CallData() {
|
357
|
+
~CallData() { CSliceUnref(path_); }
|
374
358
|
|
375
359
|
grpc_slice path_; // Request path.
|
376
360
|
Timestamp deadline_;
|
@@ -392,6 +376,7 @@ const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
|
|
392
376
|
DynamicTerminationFilter::CallData::Destroy,
|
393
377
|
sizeof(DynamicTerminationFilter),
|
394
378
|
DynamicTerminationFilter::Init,
|
379
|
+
grpc_channel_stack_no_post_init,
|
395
380
|
DynamicTerminationFilter::Destroy,
|
396
381
|
DynamicTerminationFilter::GetChannelInfo,
|
397
382
|
"dynamic_filter_termination",
|
@@ -410,7 +395,7 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
|
|
410
395
|
}
|
411
396
|
|
412
397
|
~ResolverResultHandler() override {
|
413
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
398
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
414
399
|
gpr_log(GPR_INFO, "chand=%p: resolver shutdown complete", chand_);
|
415
400
|
}
|
416
401
|
GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ResolverResultHandler");
|
@@ -441,14 +426,13 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
441
426
|
public:
|
442
427
|
SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel,
|
443
428
|
absl::optional<std::string> health_check_service_name)
|
444
|
-
: SubchannelInterface(
|
445
|
-
|
446
|
-
|
447
|
-
: nullptr),
|
429
|
+
: SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)
|
430
|
+
? "SubchannelWrapper"
|
431
|
+
: nullptr),
|
448
432
|
chand_(chand),
|
449
433
|
subchannel_(std::move(subchannel)),
|
450
434
|
health_check_service_name_(std::move(health_check_service_name)) {
|
451
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
435
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
452
436
|
gpr_log(GPR_INFO,
|
453
437
|
"chand=%p: creating subchannel wrapper %p for subchannel %p",
|
454
438
|
chand, this, subchannel_.get());
|
@@ -470,7 +454,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
470
454
|
}
|
471
455
|
|
472
456
|
~SubchannelWrapper() override {
|
473
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
457
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
474
458
|
gpr_log(GPR_INFO,
|
475
459
|
"chand=%p: destroying subchannel wrapper %p for subchannel %p",
|
476
460
|
chand_, this, subchannel_.get());
|
@@ -492,21 +476,15 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
492
476
|
GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
|
493
477
|
}
|
494
478
|
|
495
|
-
grpc_connectivity_state CheckConnectivityState() override {
|
496
|
-
return subchannel_->CheckConnectivityState(health_check_service_name_);
|
497
|
-
}
|
498
|
-
|
499
479
|
void WatchConnectivityState(
|
500
|
-
grpc_connectivity_state initial_state,
|
501
480
|
std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
|
502
481
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
503
482
|
auto& watcher_wrapper = watcher_map_[watcher.get()];
|
504
483
|
GPR_ASSERT(watcher_wrapper == nullptr);
|
505
484
|
watcher_wrapper = new WatcherWrapper(std::move(watcher),
|
506
|
-
Ref(DEBUG_LOCATION, "WatcherWrapper")
|
507
|
-
initial_state);
|
485
|
+
Ref(DEBUG_LOCATION, "WatcherWrapper"));
|
508
486
|
subchannel_->WatchConnectivityState(
|
509
|
-
|
487
|
+
health_check_service_name_,
|
510
488
|
RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
|
511
489
|
watcher_wrapper));
|
512
490
|
}
|
@@ -524,12 +502,17 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
524
502
|
return subchannel_->connected_subchannel();
|
525
503
|
}
|
526
504
|
|
527
|
-
void
|
505
|
+
void RequestConnection() override { subchannel_->RequestConnection(); }
|
528
506
|
|
529
507
|
void ResetBackoff() override { subchannel_->ResetBackoff(); }
|
530
508
|
|
531
|
-
|
532
|
-
|
509
|
+
void AddDataWatcher(std::unique_ptr<DataWatcherInterface> watcher) override
|
510
|
+
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
511
|
+
std::unique_ptr<InternalSubchannelDataWatcherInterface> internal_watcher(
|
512
|
+
static_cast<InternalSubchannelDataWatcherInterface*>(
|
513
|
+
watcher.release()));
|
514
|
+
internal_watcher->SetSubchannel(subchannel_.get());
|
515
|
+
data_watchers_.push_back(std::move(internal_watcher));
|
533
516
|
}
|
534
517
|
|
535
518
|
void ThrottleKeepaliveTime(int new_keepalive_time) {
|
@@ -556,11 +539,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
556
539
|
WatcherWrapper(
|
557
540
|
std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
|
558
541
|
watcher,
|
559
|
-
RefCountedPtr<SubchannelWrapper> parent
|
560
|
-
|
561
|
-
: watcher_(std::move(watcher)),
|
562
|
-
parent_(std::move(parent)),
|
563
|
-
last_seen_state_(initial_state) {}
|
542
|
+
RefCountedPtr<SubchannelWrapper> parent)
|
543
|
+
: watcher_(std::move(watcher)), parent_(std::move(parent)) {}
|
564
544
|
|
565
545
|
~WatcherWrapper() override {
|
566
546
|
auto* parent = parent_.release(); // ref owned by lambda
|
@@ -572,8 +552,9 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
572
552
|
DEBUG_LOCATION);
|
573
553
|
}
|
574
554
|
|
575
|
-
void OnConnectivityStateChange(
|
576
|
-
|
555
|
+
void OnConnectivityStateChange(grpc_connectivity_state state,
|
556
|
+
const absl::Status& status) override {
|
557
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
577
558
|
gpr_log(GPR_INFO,
|
578
559
|
"chand=%p: connectivity change for subchannel wrapper %p "
|
579
560
|
"subchannel %p; hopping into work_serializer",
|
@@ -581,9 +562,9 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
581
562
|
}
|
582
563
|
Ref().release(); // ref owned by lambda
|
583
564
|
parent_->chand_->work_serializer_->Run(
|
584
|
-
[this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
565
|
+
[this, state, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
585
566
|
*parent_->chand_->work_serializer_) {
|
586
|
-
ApplyUpdateInControlPlaneWorkSerializer();
|
567
|
+
ApplyUpdateInControlPlaneWorkSerializer(state, status);
|
587
568
|
Unref();
|
588
569
|
},
|
589
570
|
DEBUG_LOCATION);
|
@@ -597,35 +578,33 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
597
578
|
}
|
598
579
|
|
599
580
|
WatcherWrapper* MakeReplacement() {
|
600
|
-
auto* replacement =
|
601
|
-
new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
|
581
|
+
auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
|
602
582
|
replacement_ = replacement;
|
603
583
|
return replacement;
|
604
584
|
}
|
605
585
|
|
606
|
-
grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
|
607
|
-
|
608
586
|
private:
|
609
|
-
void ApplyUpdateInControlPlaneWorkSerializer(
|
587
|
+
void ApplyUpdateInControlPlaneWorkSerializer(grpc_connectivity_state state,
|
588
|
+
const absl::Status& status)
|
610
589
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
|
611
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
590
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
612
591
|
gpr_log(GPR_INFO,
|
613
592
|
"chand=%p: processing connectivity change in work serializer "
|
614
|
-
"for subchannel wrapper %p subchannel %p "
|
615
|
-
"
|
593
|
+
"for subchannel wrapper %p subchannel %p watcher=%p "
|
594
|
+
"state=%s status=%s",
|
616
595
|
parent_->chand_, parent_.get(), parent_->subchannel_.get(),
|
617
|
-
watcher_.get())
|
596
|
+
watcher_.get(), ConnectivityStateName(state),
|
597
|
+
status.ToString().c_str());
|
618
598
|
}
|
619
|
-
ConnectivityStateChange state_change = PopConnectivityStateChange();
|
620
599
|
absl::optional<absl::Cord> keepalive_throttling =
|
621
|
-
|
600
|
+
status.GetPayload(kKeepaliveThrottlingKey);
|
622
601
|
if (keepalive_throttling.has_value()) {
|
623
602
|
int new_keepalive_time = -1;
|
624
603
|
if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
|
625
604
|
&new_keepalive_time)) {
|
626
605
|
if (new_keepalive_time > parent_->chand_->keepalive_time_) {
|
627
606
|
parent_->chand_->keepalive_time_ = new_keepalive_time;
|
628
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
607
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
629
608
|
gpr_log(GPR_INFO, "chand=%p: throttling keepalive time to %d",
|
630
609
|
parent_->chand_, parent_->chand_->keepalive_time_);
|
631
610
|
}
|
@@ -646,15 +625,19 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
646
625
|
// Ignore update if the parent WatcherWrapper has been replaced
|
647
626
|
// since this callback was scheduled.
|
648
627
|
if (watcher_ != nullptr) {
|
649
|
-
|
650
|
-
|
628
|
+
// Propagate status only in state TF.
|
629
|
+
// We specifically want to avoid propagating the status for
|
630
|
+
// state IDLE that the real subchannel gave us only for the
|
631
|
+
// purpose of keepalive propagation.
|
632
|
+
watcher_->OnConnectivityStateChange(
|
633
|
+
state, state == GRPC_CHANNEL_TRANSIENT_FAILURE ? status
|
634
|
+
: absl::OkStatus());
|
651
635
|
}
|
652
636
|
}
|
653
637
|
|
654
638
|
std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
|
655
639
|
watcher_;
|
656
640
|
RefCountedPtr<SubchannelWrapper> parent_;
|
657
|
-
grpc_connectivity_state last_seen_state_;
|
658
641
|
WatcherWrapper* replacement_ = nullptr;
|
659
642
|
};
|
660
643
|
|
@@ -668,6 +651,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
|
|
668
651
|
// corresponding WrapperWatcher to cancel on the underlying subchannel.
|
669
652
|
std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_
|
670
653
|
ABSL_GUARDED_BY(*chand_->work_serializer_);
|
654
|
+
std::vector<std::unique_ptr<InternalSubchannelDataWatcherInterface>>
|
655
|
+
data_watchers_ ABSL_GUARDED_BY(*chand_->work_serializer_);
|
671
656
|
};
|
672
657
|
|
673
658
|
//
|
@@ -741,14 +726,18 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
|
|
741
726
|
chand_, on_complete_, /*cancel=*/false);
|
742
727
|
// Report new state to the user.
|
743
728
|
*state_ = state;
|
744
|
-
ExecCtx::Run(DEBUG_LOCATION, on_complete_,
|
729
|
+
ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::OkStatus());
|
745
730
|
// Hop back into the work_serializer to clean up.
|
746
731
|
// Not needed in state SHUTDOWN, because the tracker will
|
747
732
|
// automatically remove all watchers in that case.
|
733
|
+
// Note: The callback takes a ref in case the ref inside the state tracker
|
734
|
+
// gets removed before the callback runs via a SHUTDOWN notification.
|
748
735
|
if (state != GRPC_CHANNEL_SHUTDOWN) {
|
736
|
+
Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
|
749
737
|
chand_->work_serializer_->Run(
|
750
738
|
[this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
751
739
|
RemoveWatcherLocked();
|
740
|
+
Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
|
752
741
|
},
|
753
742
|
DEBUG_LOCATION);
|
754
743
|
}
|
@@ -760,17 +749,21 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
|
|
760
749
|
std::memory_order_relaxed)) {
|
761
750
|
return; // Already done.
|
762
751
|
}
|
763
|
-
ExecCtx::Run(DEBUG_LOCATION, on_complete_,
|
752
|
+
ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::CancelledError());
|
764
753
|
// Hop back into the work_serializer to clean up.
|
754
|
+
// Note: The callback takes a ref in case the ref inside the state tracker
|
755
|
+
// gets removed before the callback runs via a SHUTDOWN notification.
|
756
|
+
Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
|
765
757
|
chand_->work_serializer_->Run(
|
766
758
|
[this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
767
759
|
RemoveWatcherLocked();
|
760
|
+
Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
|
768
761
|
},
|
769
762
|
DEBUG_LOCATION);
|
770
763
|
}
|
771
764
|
|
772
765
|
void ClientChannel::ExternalConnectivityWatcher::AddWatcherLocked() {
|
773
|
-
Closure::Run(DEBUG_LOCATION, watcher_timer_init_,
|
766
|
+
Closure::Run(DEBUG_LOCATION, watcher_timer_init_, absl::OkStatus());
|
774
767
|
// Add new watcher. Pass the ref of the object from creation to OrphanablePtr.
|
775
768
|
chand_->state_tracker_.AddWatcher(
|
776
769
|
initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
|
@@ -860,67 +853,23 @@ class ClientChannel::ClientChannelControlHelper
|
|
860
853
|
}
|
861
854
|
|
862
855
|
RefCountedPtr<SubchannelInterface> CreateSubchannel(
|
863
|
-
ServerAddress address, const
|
856
|
+
ServerAddress address, const ChannelArgs& args) override
|
864
857
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
865
858
|
if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
|
866
859
|
// Determine health check service name.
|
867
860
|
absl::optional<std::string> health_check_service_name;
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
bool inhibit_health_checking = grpc_channel_args_find_bool(
|
872
|
-
&args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
|
873
|
-
if (!inhibit_health_checking) {
|
874
|
-
health_check_service_name = health_check_service_name_arg;
|
875
|
-
}
|
861
|
+
if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
|
862
|
+
health_check_service_name =
|
863
|
+
args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
|
876
864
|
}
|
877
865
|
// Construct channel args for subchannel.
|
878
|
-
|
879
|
-
|
880
|
-
|
881
|
-
GRPC_ARG_INHIBIT_HEALTH_CHECKING,
|
882
|
-
GRPC_ARG_CHANNELZ_CHANNEL_NODE,
|
883
|
-
};
|
884
|
-
// Add channel args needed for the subchannel.
|
885
|
-
absl::InlinedVector<grpc_arg, 2> args_to_add = {
|
886
|
-
SubchannelPoolInterface::CreateChannelArg(
|
887
|
-
chand_->subchannel_pool_.get()),
|
888
|
-
};
|
889
|
-
// Check if default authority arg is already set.
|
890
|
-
const char* default_authority =
|
891
|
-
grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
|
892
|
-
// Add args from subchannel address.
|
893
|
-
if (address.args() != nullptr) {
|
894
|
-
for (size_t j = 0; j < address.args()->num_args; ++j) {
|
895
|
-
grpc_arg& arg = address.args()->args[j];
|
896
|
-
if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
|
897
|
-
// Don't add default authority arg from subchannel address if
|
898
|
-
// it's already set at the channel level -- the value from the
|
899
|
-
// application should take precedence over what is set by the
|
900
|
-
// resolver.
|
901
|
-
if (default_authority != nullptr) continue;
|
902
|
-
default_authority = arg.value.string;
|
903
|
-
}
|
904
|
-
args_to_add.emplace_back(arg);
|
905
|
-
}
|
906
|
-
}
|
907
|
-
// If we haven't already set the default authority arg, add it from
|
908
|
-
// the channel.
|
909
|
-
if (default_authority == nullptr) {
|
910
|
-
// Remove it, just in case it's actually present but is the wrong type.
|
911
|
-
args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
|
912
|
-
args_to_add.push_back(grpc_channel_arg_string_create(
|
913
|
-
const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
|
914
|
-
const_cast<char*>(chand_->default_authority_.c_str())));
|
915
|
-
}
|
916
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
|
917
|
-
&args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
|
918
|
-
args_to_add.size());
|
866
|
+
ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
|
867
|
+
args, address.args(), chand_->subchannel_pool_,
|
868
|
+
chand_->default_authority_);
|
919
869
|
// Create subchannel.
|
920
870
|
RefCountedPtr<Subchannel> subchannel =
|
921
871
|
chand_->client_channel_factory_->CreateSubchannel(address.address(),
|
922
|
-
|
923
|
-
grpc_channel_args_destroy(new_args);
|
872
|
+
subchannel_args);
|
924
873
|
if (subchannel == nullptr) return nullptr;
|
925
874
|
// Make sure the subchannel has updated keepalive time.
|
926
875
|
subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
|
@@ -929,13 +878,12 @@ class ClientChannel::ClientChannelControlHelper
|
|
929
878
|
chand_, std::move(subchannel), std::move(health_check_service_name));
|
930
879
|
}
|
931
880
|
|
932
|
-
void UpdateState(
|
933
|
-
|
934
|
-
|
935
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
881
|
+
void UpdateState(grpc_connectivity_state state, const absl::Status& status,
|
882
|
+
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker)
|
883
|
+
override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
936
884
|
if (chand_->resolver_ == nullptr) return; // Shutting down.
|
937
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
938
|
-
const char* extra = chand_->disconnect_error_
|
885
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
886
|
+
const char* extra = chand_->disconnect_error_.ok()
|
939
887
|
? ""
|
940
888
|
: " (ignoring -- channel shutting down)";
|
941
889
|
gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
|
@@ -943,7 +891,7 @@ class ClientChannel::ClientChannelControlHelper
|
|
943
891
|
picker.get(), extra);
|
944
892
|
}
|
945
893
|
// Do update only if not shutting down.
|
946
|
-
if (chand_->disconnect_error_
|
894
|
+
if (chand_->disconnect_error_.ok()) {
|
947
895
|
chand_->UpdateStateAndPickerLocked(state, status, "helper",
|
948
896
|
std::move(picker));
|
949
897
|
}
|
@@ -952,7 +900,7 @@ class ClientChannel::ClientChannelControlHelper
|
|
952
900
|
void RequestReresolution() override
|
953
901
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
954
902
|
if (chand_->resolver_ == nullptr) return; // Shutting down.
|
955
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
903
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
956
904
|
gpr_log(GPR_INFO, "chand=%p: started name re-resolving", chand_);
|
957
905
|
}
|
958
906
|
chand_->resolver_->RequestReresolutionLocked();
|
@@ -962,6 +910,10 @@ class ClientChannel::ClientChannelControlHelper
|
|
962
910
|
return chand_->default_authority_;
|
963
911
|
}
|
964
912
|
|
913
|
+
grpc_event_engine::experimental::EventEngine* GetEventEngine() override {
|
914
|
+
return chand_->owning_stack_->EventEngine();
|
915
|
+
}
|
916
|
+
|
965
917
|
void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
|
966
918
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
967
919
|
if (chand_->resolver_ == nullptr) return; // Shutting down.
|
@@ -987,9 +939,9 @@ class ClientChannel::ClientChannelControlHelper
|
|
987
939
|
// ClientChannel implementation
|
988
940
|
//
|
989
941
|
|
990
|
-
ClientChannel* ClientChannel::GetFromChannel(
|
942
|
+
ClientChannel* ClientChannel::GetFromChannel(Channel* channel) {
|
991
943
|
grpc_channel_element* elem =
|
992
|
-
grpc_channel_stack_last_element(
|
944
|
+
grpc_channel_stack_last_element(channel->channel_stack());
|
993
945
|
if (elem->filter != &kFilterVtable) return nullptr;
|
994
946
|
return static_cast<ClientChannel*>(elem->channel_data);
|
995
947
|
}
|
@@ -998,7 +950,7 @@ grpc_error_handle ClientChannel::Init(grpc_channel_element* elem,
|
|
998
950
|
grpc_channel_element_args* args) {
|
999
951
|
GPR_ASSERT(args->is_last);
|
1000
952
|
GPR_ASSERT(elem->filter == &kFilterVtable);
|
1001
|
-
grpc_error_handle error
|
953
|
+
grpc_error_handle error;
|
1002
954
|
new (elem->channel_data) ClientChannel(args, &error);
|
1003
955
|
return error;
|
1004
956
|
}
|
@@ -1011,37 +963,29 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
|
|
1011
963
|
namespace {
|
1012
964
|
|
1013
965
|
RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
|
1014
|
-
const
|
1015
|
-
|
1016
|
-
args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
|
1017
|
-
if (use_local_subchannel_pool) {
|
966
|
+
const ChannelArgs& args) {
|
967
|
+
if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
|
1018
968
|
return MakeRefCounted<LocalSubchannelPool>();
|
1019
969
|
}
|
1020
970
|
return GlobalSubchannelPool::instance();
|
1021
971
|
}
|
1022
972
|
|
1023
|
-
channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
|
1024
|
-
return grpc_channel_args_find_pointer<channelz::ChannelNode>(
|
1025
|
-
args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
1026
|
-
}
|
1027
|
-
|
1028
973
|
} // namespace
|
1029
974
|
|
1030
975
|
ClientChannel::ClientChannel(grpc_channel_element_args* args,
|
1031
976
|
grpc_error_handle* error)
|
1032
|
-
:
|
1033
|
-
|
977
|
+
: channel_args_(args->channel_args),
|
978
|
+
deadline_checking_enabled_(grpc_deadline_checking_enabled(channel_args_)),
|
1034
979
|
owning_stack_(args->channel_stack),
|
1035
|
-
client_channel_factory_(
|
1036
|
-
|
1037
|
-
channelz_node_(GetChannelzNode(args->channel_args)),
|
980
|
+
client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
|
981
|
+
channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
|
1038
982
|
interested_parties_(grpc_pollset_set_create()),
|
1039
983
|
service_config_parser_index_(
|
1040
984
|
internal::ClientChannelServiceConfigParser::ParserIndex()),
|
1041
985
|
work_serializer_(std::make_shared<WorkSerializer>()),
|
1042
986
|
state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
|
1043
|
-
subchannel_pool_(GetSubchannelPool(
|
1044
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
987
|
+
subchannel_pool_(GetSubchannelPool(channel_args_)) {
|
988
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1045
989
|
gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
|
1046
990
|
this, owning_stack_);
|
1047
991
|
}
|
@@ -1049,82 +993,76 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
|
|
1049
993
|
grpc_client_channel_start_backup_polling(interested_parties_);
|
1050
994
|
// Check client channel factory.
|
1051
995
|
if (client_channel_factory_ == nullptr) {
|
1052
|
-
*error =
|
996
|
+
*error = GRPC_ERROR_CREATE(
|
1053
997
|
"Missing client channel factory in args for client channel filter");
|
1054
998
|
return;
|
1055
999
|
}
|
1056
1000
|
// Get default service config. If none is specified via the client API,
|
1057
1001
|
// we use an empty config.
|
1058
|
-
|
1059
|
-
|
1060
|
-
if (service_config_json
|
1061
|
-
*error =
|
1062
|
-
|
1063
|
-
ServiceConfigImpl::Create(
|
1064
|
-
if (
|
1065
|
-
|
1002
|
+
absl::optional<absl::string_view> service_config_json =
|
1003
|
+
channel_args_.GetString(GRPC_ARG_SERVICE_CONFIG);
|
1004
|
+
if (!service_config_json.has_value()) service_config_json = "{}";
|
1005
|
+
*error = absl::OkStatus();
|
1006
|
+
auto service_config =
|
1007
|
+
ServiceConfigImpl::Create(channel_args_, *service_config_json);
|
1008
|
+
if (!service_config.ok()) {
|
1009
|
+
*error = absl_status_to_grpc_error(service_config.status());
|
1066
1010
|
return;
|
1067
1011
|
}
|
1012
|
+
default_service_config_ = std::move(*service_config);
|
1068
1013
|
// Get URI to resolve, using proxy mapper if needed.
|
1069
|
-
|
1070
|
-
|
1071
|
-
if (server_uri
|
1072
|
-
*error =
|
1014
|
+
absl::optional<std::string> server_uri =
|
1015
|
+
channel_args_.GetOwnedString(GRPC_ARG_SERVER_URI);
|
1016
|
+
if (!server_uri.has_value()) {
|
1017
|
+
*error = GRPC_ERROR_CREATE(
|
1073
1018
|
"target URI channel arg missing or wrong type in client channel "
|
1074
1019
|
"filter");
|
1075
1020
|
return;
|
1076
1021
|
}
|
1077
|
-
uri_to_resolve_ =
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
1081
|
-
&new_args);
|
1082
|
-
if (proxy_name != nullptr) {
|
1083
|
-
uri_to_resolve_ = proxy_name;
|
1084
|
-
gpr_free(proxy_name);
|
1085
|
-
}
|
1022
|
+
uri_to_resolve_ = CoreConfiguration::Get()
|
1023
|
+
.proxy_mapper_registry()
|
1024
|
+
.MapName(*server_uri, &channel_args_)
|
1025
|
+
.value_or(*server_uri);
|
1086
1026
|
// Make sure the URI to resolve is valid, so that we know that
|
1087
1027
|
// resolver creation will succeed later.
|
1088
1028
|
if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
|
1089
1029
|
uri_to_resolve_)) {
|
1090
|
-
*error =
|
1030
|
+
*error = GRPC_ERROR_CREATE(
|
1091
1031
|
absl::StrCat("the target uri is not valid: ", uri_to_resolve_));
|
1092
1032
|
return;
|
1093
1033
|
}
|
1094
1034
|
// Strip out service config channel arg, so that it doesn't affect
|
1095
1035
|
// subchannel uniqueness when the args flow down to that layer.
|
1096
|
-
|
1097
|
-
channel_args_ = grpc_channel_args_copy_and_remove(
|
1098
|
-
new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
|
1099
|
-
grpc_channel_args_destroy(new_args);
|
1036
|
+
channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
|
1100
1037
|
// Set initial keepalive time.
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1038
|
+
auto keepalive_arg = channel_args_.GetInt(GRPC_ARG_KEEPALIVE_TIME_MS);
|
1039
|
+
if (keepalive_arg.has_value()) {
|
1040
|
+
keepalive_time_ = Clamp(*keepalive_arg, 1, INT_MAX);
|
1041
|
+
} else {
|
1042
|
+
keepalive_time_ = -1; // unset
|
1043
|
+
}
|
1104
1044
|
// Set default authority.
|
1105
|
-
|
1106
|
-
|
1107
|
-
if (default_authority
|
1045
|
+
absl::optional<std::string> default_authority =
|
1046
|
+
channel_args_.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY);
|
1047
|
+
if (!default_authority.has_value()) {
|
1108
1048
|
default_authority_ =
|
1109
1049
|
CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
|
1110
|
-
server_uri);
|
1050
|
+
*server_uri);
|
1111
1051
|
} else {
|
1112
|
-
default_authority_ = default_authority;
|
1052
|
+
default_authority_ = std::move(*default_authority);
|
1113
1053
|
}
|
1114
1054
|
// Success.
|
1115
|
-
*error =
|
1055
|
+
*error = absl::OkStatus();
|
1116
1056
|
}
|
1117
1057
|
|
1118
1058
|
ClientChannel::~ClientChannel() {
|
1119
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1059
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1120
1060
|
gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
|
1121
1061
|
}
|
1122
1062
|
DestroyResolverAndLbPolicyLocked();
|
1123
|
-
grpc_channel_args_destroy(channel_args_);
|
1124
1063
|
// Stop backup polling.
|
1125
1064
|
grpc_client_channel_stop_backup_polling(interested_parties_);
|
1126
1065
|
grpc_pollset_set_destroy(interested_parties_);
|
1127
|
-
GRPC_ERROR_UNREF(disconnect_error_);
|
1128
1066
|
}
|
1129
1067
|
|
1130
1068
|
OrphanablePtr<ClientChannel::LoadBalancedCall>
|
@@ -1138,6 +1076,29 @@ ClientChannel::CreateLoadBalancedCall(
|
|
1138
1076
|
call_dispatch_controller, is_transparent_retry));
|
1139
1077
|
}
|
1140
1078
|
|
1079
|
+
ChannelArgs ClientChannel::MakeSubchannelArgs(
|
1080
|
+
const ChannelArgs& channel_args, const ChannelArgs& address_args,
|
1081
|
+
const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
|
1082
|
+
const std::string& channel_default_authority) {
|
1083
|
+
// Note that we start with the channel-level args and then apply the
|
1084
|
+
// per-address args, so that if a value is present in both, the one
|
1085
|
+
// in the channel-level args is used. This is particularly important
|
1086
|
+
// for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
|
1087
|
+
// resolvers to set on a per-address basis only if the application
|
1088
|
+
// did not explicitly set it at the channel level.
|
1089
|
+
return channel_args.UnionWith(address_args)
|
1090
|
+
.SetObject(subchannel_pool)
|
1091
|
+
// If we haven't already set the default authority arg (i.e., it
|
1092
|
+
// was not explicitly set by the application nor overridden by
|
1093
|
+
// the resolver), add it from the channel's default.
|
1094
|
+
.SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
|
1095
|
+
// Remove channel args that should not affect subchannel
|
1096
|
+
// uniqueness.
|
1097
|
+
.Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
|
1098
|
+
.Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
|
1099
|
+
.Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
|
1100
|
+
}
|
1101
|
+
|
1141
1102
|
namespace {
|
1142
1103
|
|
1143
1104
|
RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
@@ -1149,41 +1110,41 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
|
1149
1110
|
}
|
1150
1111
|
// Try the deprecated LB policy name from the service config.
|
1151
1112
|
// If not, try the setting from channel args.
|
1152
|
-
|
1113
|
+
absl::optional<absl::string_view> policy_name;
|
1153
1114
|
if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
|
1154
|
-
policy_name = parsed_service_config->parsed_deprecated_lb_policy()
|
1115
|
+
policy_name = parsed_service_config->parsed_deprecated_lb_policy();
|
1155
1116
|
} else {
|
1156
|
-
policy_name =
|
1157
|
-
GRPC_ARG_LB_POLICY_NAME);
|
1117
|
+
policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
|
1158
1118
|
bool requires_config = false;
|
1159
|
-
if (policy_name
|
1160
|
-
(!
|
1161
|
-
|
1119
|
+
if (policy_name.has_value() &&
|
1120
|
+
(!CoreConfiguration::Get()
|
1121
|
+
.lb_policy_registry()
|
1122
|
+
.LoadBalancingPolicyExists(*policy_name, &requires_config) ||
|
1162
1123
|
requires_config)) {
|
1163
1124
|
if (requires_config) {
|
1164
1125
|
gpr_log(GPR_ERROR,
|
1165
1126
|
"LB policy: %s passed through channel_args must not "
|
1166
1127
|
"require a config. Using pick_first instead.",
|
1167
|
-
policy_name);
|
1128
|
+
std::string(*policy_name).c_str());
|
1168
1129
|
} else {
|
1169
1130
|
gpr_log(GPR_ERROR,
|
1170
1131
|
"LB policy: %s passed through channel_args does not exist. "
|
1171
1132
|
"Using pick_first instead.",
|
1172
|
-
policy_name);
|
1133
|
+
std::string(*policy_name).c_str());
|
1173
1134
|
}
|
1174
1135
|
policy_name = "pick_first";
|
1175
1136
|
}
|
1176
1137
|
}
|
1177
1138
|
// Use pick_first if nothing was specified and we didn't select grpclb
|
1178
1139
|
// above.
|
1179
|
-
if (policy_name
|
1140
|
+
if (!policy_name.has_value()) policy_name = "pick_first";
|
1180
1141
|
// Now that we have the policy name, construct an empty config for it.
|
1181
1142
|
Json config_json = Json::Array{Json::Object{
|
1182
|
-
{policy_name, Json::Object{}},
|
1143
|
+
{std::string(*policy_name), Json::Object{}},
|
1183
1144
|
}};
|
1184
|
-
|
1185
|
-
|
1186
|
-
|
1145
|
+
auto lb_policy_config =
|
1146
|
+
CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
|
1147
|
+
config_json);
|
1187
1148
|
// The policy name came from one of three places:
|
1188
1149
|
// - The deprecated loadBalancingPolicy field in the service config,
|
1189
1150
|
// in which case the code in ClientChannelServiceConfigParser
|
@@ -1193,9 +1154,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
|
1193
1154
|
// - A channel arg, in which case we check that the specified policy exists
|
1194
1155
|
// and accepts an empty config. If not, we revert to using pick_first
|
1195
1156
|
// lb_policy
|
1196
|
-
GPR_ASSERT(lb_policy_config
|
1197
|
-
|
1198
|
-
return lb_policy_config;
|
1157
|
+
GPR_ASSERT(lb_policy_config.ok());
|
1158
|
+
return std::move(*lb_policy_config);
|
1199
1159
|
}
|
1200
1160
|
|
1201
1161
|
} // namespace
|
@@ -1203,9 +1163,12 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
|
1203
1163
|
void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
1204
1164
|
// Handle race conditions.
|
1205
1165
|
if (resolver_ == nullptr) return;
|
1206
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1166
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1207
1167
|
gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
|
1208
1168
|
}
|
1169
|
+
// Grab resolver result health callback.
|
1170
|
+
auto resolver_callback = std::move(result.result_health_callback);
|
1171
|
+
absl::Status resolver_result_status;
|
1209
1172
|
// We only want to trace the address resolution in the follow cases:
|
1210
1173
|
// (a) Address resolution resulted in service config change.
|
1211
1174
|
// (b) Address resolution that causes number of backends to go from
|
@@ -1215,7 +1178,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1215
1178
|
// (d) Address resolution that causes a new LB policy to be created.
|
1216
1179
|
//
|
1217
1180
|
// We track a list of strings to eventually be concatenated and traced.
|
1218
|
-
|
1181
|
+
std::vector<const char*> trace_strings;
|
1219
1182
|
const bool resolution_contains_addresses =
|
1220
1183
|
result.addresses.ok() && !result.addresses->empty();
|
1221
1184
|
if (!resolution_contains_addresses &&
|
@@ -1236,14 +1199,14 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1236
1199
|
RefCountedPtr<ServiceConfig> service_config;
|
1237
1200
|
RefCountedPtr<ConfigSelector> config_selector;
|
1238
1201
|
if (!result.service_config.ok()) {
|
1239
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1202
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1240
1203
|
gpr_log(GPR_INFO, "chand=%p: resolver returned service config error: %s",
|
1241
1204
|
this, result.service_config.status().ToString().c_str());
|
1242
1205
|
}
|
1243
1206
|
// If the service config was invalid, then fallback to the
|
1244
1207
|
// previously returned service config.
|
1245
1208
|
if (saved_service_config_ != nullptr) {
|
1246
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1209
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1247
1210
|
gpr_log(GPR_INFO,
|
1248
1211
|
"chand=%p: resolver returned invalid service config. "
|
1249
1212
|
"Continuing to use previous service config.",
|
@@ -1257,10 +1220,12 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1257
1220
|
// TRANSIENT_FAILURE.
|
1258
1221
|
OnResolverErrorLocked(result.service_config.status());
|
1259
1222
|
trace_strings.push_back("no valid service config");
|
1223
|
+
resolver_result_status =
|
1224
|
+
absl::UnavailableError("no valid service config");
|
1260
1225
|
}
|
1261
1226
|
} else if (*result.service_config == nullptr) {
|
1262
1227
|
// Resolver did not return any service config.
|
1263
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1228
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1264
1229
|
gpr_log(GPR_INFO,
|
1265
1230
|
"chand=%p: resolver returned no service config. Using default "
|
1266
1231
|
"service config for channel.",
|
@@ -1270,7 +1235,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1270
1235
|
} else {
|
1271
1236
|
// Use ServiceConfig and ConfigSelector returned by resolver.
|
1272
1237
|
service_config = std::move(*result.service_config);
|
1273
|
-
config_selector =
|
1238
|
+
config_selector = result.args.GetObjectRef<ConfigSelector>();
|
1274
1239
|
}
|
1275
1240
|
// Note: The only case in which service_config is null here is if the resolver
|
1276
1241
|
// returned a service config error and we don't have a previous service
|
@@ -1294,14 +1259,14 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1294
1259
|
// If either has changed, apply the global parameters now.
|
1295
1260
|
if (service_config_changed || config_selector_changed) {
|
1296
1261
|
// Update service config in control plane.
|
1297
|
-
UpdateServiceConfigInControlPlaneLocked(
|
1298
|
-
|
1299
|
-
|
1300
|
-
} else if (GRPC_TRACE_FLAG_ENABLED(
|
1262
|
+
UpdateServiceConfigInControlPlaneLocked(
|
1263
|
+
std::move(service_config), std::move(config_selector),
|
1264
|
+
std::string(lb_policy_config->name()));
|
1265
|
+
} else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1301
1266
|
gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
|
1302
1267
|
}
|
1303
1268
|
// Create or update LB policy, as needed.
|
1304
|
-
CreateOrUpdateLbPolicyLocked(
|
1269
|
+
resolver_result_status = CreateOrUpdateLbPolicyLocked(
|
1305
1270
|
std::move(lb_policy_config),
|
1306
1271
|
parsed_service_config->health_check_service_name(), std::move(result));
|
1307
1272
|
if (service_config_changed || config_selector_changed) {
|
@@ -1315,6 +1280,10 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1315
1280
|
trace_strings.push_back("Service config changed");
|
1316
1281
|
}
|
1317
1282
|
}
|
1283
|
+
// Invoke resolver callback if needed.
|
1284
|
+
if (resolver_callback != nullptr) {
|
1285
|
+
resolver_callback(std::move(resolver_result_status));
|
1286
|
+
}
|
1318
1287
|
// Add channel trace event.
|
1319
1288
|
if (!trace_strings.empty()) {
|
1320
1289
|
std::string message =
|
@@ -1328,7 +1297,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
|
|
1328
1297
|
|
1329
1298
|
void ClientChannel::OnResolverErrorLocked(absl::Status status) {
|
1330
1299
|
if (resolver_ == nullptr) return;
|
1331
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1300
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1332
1301
|
gpr_log(GPR_INFO, "chand=%p: resolver transient failure: %s", this,
|
1333
1302
|
status.ToString().c_str());
|
1334
1303
|
}
|
@@ -1336,31 +1305,30 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
|
|
1336
1305
|
// result, then we continue to let it set the connectivity state.
|
1337
1306
|
// Otherwise, we go into TRANSIENT_FAILURE.
|
1338
1307
|
if (lb_policy_ == nullptr) {
|
1339
|
-
grpc_error_handle error = absl_status_to_grpc_error(status);
|
1340
1308
|
{
|
1341
1309
|
MutexLock lock(&resolution_mu_);
|
1342
1310
|
// Update resolver transient failure.
|
1343
|
-
resolver_transient_failure_error_ =
|
1311
|
+
resolver_transient_failure_error_ =
|
1312
|
+
MaybeRewriteIllegalStatusCode(status, "resolver");
|
1344
1313
|
// Process calls that were queued waiting for the resolver result.
|
1345
1314
|
for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
|
1346
1315
|
call = call->next) {
|
1347
1316
|
grpc_call_element* elem = call->elem;
|
1348
1317
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1349
|
-
grpc_error_handle error
|
1318
|
+
grpc_error_handle error;
|
1350
1319
|
if (calld->CheckResolutionLocked(elem, &error)) {
|
1351
1320
|
calld->AsyncResolutionDone(elem, error);
|
1352
1321
|
}
|
1353
1322
|
}
|
1354
1323
|
}
|
1355
|
-
GRPC_ERROR_UNREF(error);
|
1356
1324
|
// Update connectivity state.
|
1357
1325
|
UpdateStateAndPickerLocked(
|
1358
1326
|
GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
|
1359
|
-
|
1327
|
+
MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(status));
|
1360
1328
|
}
|
1361
1329
|
}
|
1362
1330
|
|
1363
|
-
|
1331
|
+
absl::Status ClientChannel::CreateOrUpdateLbPolicyLocked(
|
1364
1332
|
RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
|
1365
1333
|
const absl::optional<std::string>& health_check_service_name,
|
1366
1334
|
Resolver::Result result) {
|
@@ -1369,43 +1337,39 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
|
|
1369
1337
|
update_args.addresses = std::move(result.addresses);
|
1370
1338
|
update_args.config = std::move(lb_policy_config);
|
1371
1339
|
update_args.resolution_note = std::move(result.resolution_note);
|
1372
|
-
// Add health check service name to channel args.
|
1373
|
-
absl::InlinedVector<grpc_arg, 1> args_to_add;
|
1374
|
-
if (health_check_service_name.has_value()) {
|
1375
|
-
args_to_add.push_back(grpc_channel_arg_string_create(
|
1376
|
-
const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
|
1377
|
-
const_cast<char*>(health_check_service_name->c_str())));
|
1378
|
-
}
|
1379
1340
|
// Remove the config selector from channel args so that we're not holding
|
1380
1341
|
// unnecessary refs that cause it to be destroyed somewhere other than in the
|
1381
1342
|
// WorkSerializer.
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1343
|
+
update_args.args = result.args.Remove(GRPC_ARG_CONFIG_SELECTOR);
|
1344
|
+
// Add health check service name to channel args.
|
1345
|
+
if (health_check_service_name.has_value()) {
|
1346
|
+
update_args.args = update_args.args.Set(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
|
1347
|
+
*health_check_service_name);
|
1348
|
+
}
|
1385
1349
|
// Create policy if needed.
|
1386
1350
|
if (lb_policy_ == nullptr) {
|
1387
|
-
lb_policy_ = CreateLbPolicyLocked(
|
1351
|
+
lb_policy_ = CreateLbPolicyLocked(update_args.args);
|
1388
1352
|
}
|
1389
1353
|
// Update the policy.
|
1390
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1354
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1391
1355
|
gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
|
1392
1356
|
lb_policy_.get());
|
1393
1357
|
}
|
1394
|
-
lb_policy_->UpdateLocked(std::move(update_args));
|
1358
|
+
return lb_policy_->UpdateLocked(std::move(update_args));
|
1395
1359
|
}
|
1396
1360
|
|
1397
1361
|
// Creates a new LB policy.
|
1398
1362
|
OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
|
1399
|
-
const
|
1363
|
+
const ChannelArgs& args) {
|
1400
1364
|
LoadBalancingPolicy::Args lb_policy_args;
|
1401
1365
|
lb_policy_args.work_serializer = work_serializer_;
|
1402
1366
|
lb_policy_args.channel_control_helper =
|
1403
|
-
|
1404
|
-
lb_policy_args.args =
|
1367
|
+
std::make_unique<ClientChannelControlHelper>(this);
|
1368
|
+
lb_policy_args.args = args;
|
1405
1369
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
1406
1370
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
1407
|
-
&
|
1408
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1371
|
+
&grpc_client_channel_trace);
|
1372
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1409
1373
|
gpr_log(GPR_INFO, "chand=%p: created new LB policy %p", this,
|
1410
1374
|
lb_policy.get());
|
1411
1375
|
}
|
@@ -1442,9 +1406,8 @@ void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
|
|
1442
1406
|
RefCountedPtr<ServiceConfig> service_config,
|
1443
1407
|
RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
|
1444
1408
|
std::string service_config_json(service_config->json_string());
|
1445
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1446
|
-
gpr_log(GPR_INFO,
|
1447
|
-
"chand=%p: resolver returned updated service config: \"%s\"", this,
|
1409
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1410
|
+
gpr_log(GPR_INFO, "chand=%p: using service config: \"%s\"", this,
|
1448
1411
|
service_config_json.c_str());
|
1449
1412
|
}
|
1450
1413
|
// Save service config.
|
@@ -1457,7 +1420,7 @@ void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
|
|
1457
1420
|
}
|
1458
1421
|
// Save config selector.
|
1459
1422
|
saved_config_selector_ = std::move(config_selector);
|
1460
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1423
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1461
1424
|
gpr_log(GPR_INFO, "chand=%p: using ConfigSelector %p", this,
|
1462
1425
|
saved_config_selector_.get());
|
1463
1426
|
}
|
@@ -1468,7 +1431,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1468
1431
|
RefCountedPtr<ServiceConfig> service_config = saved_service_config_;
|
1469
1432
|
// Grab ref to config selector. Use default if resolver didn't supply one.
|
1470
1433
|
RefCountedPtr<ConfigSelector> config_selector = saved_config_selector_;
|
1471
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1434
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1472
1435
|
gpr_log(GPR_INFO, "chand=%p: switching to ConfigSelector %p", this,
|
1473
1436
|
saved_config_selector_.get());
|
1474
1437
|
}
|
@@ -1476,19 +1439,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1476
1439
|
config_selector =
|
1477
1440
|
MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
|
1478
1441
|
}
|
1479
|
-
|
1480
|
-
|
1481
|
-
const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
|
1482
|
-
&kClientChannelArgPointerVtable),
|
1483
|
-
grpc_channel_arg_pointer_create(
|
1484
|
-
const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
|
1485
|
-
&kServiceConfigObjArgPointerVtable),
|
1486
|
-
};
|
1487
|
-
grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
|
1488
|
-
channel_args_, args_to_add.data(), args_to_add.size());
|
1489
|
-
new_args = config_selector->ModifyChannelArgs(new_args);
|
1442
|
+
ChannelArgs new_args =
|
1443
|
+
channel_args_.SetObject(this).SetObject(service_config);
|
1490
1444
|
bool enable_retries =
|
1491
|
-
|
1445
|
+
!new_args.WantMinimalStack() &&
|
1446
|
+
new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
|
1492
1447
|
// Construct dynamic filter stack.
|
1493
1448
|
std::vector<const grpc_channel_filter*> filters =
|
1494
1449
|
config_selector->GetFilters();
|
@@ -1500,7 +1455,6 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1500
1455
|
RefCountedPtr<DynamicFilters> dynamic_filters =
|
1501
1456
|
DynamicFilters::Create(new_args, std::move(filters));
|
1502
1457
|
GPR_ASSERT(dynamic_filters != nullptr);
|
1503
|
-
grpc_channel_args_destroy(new_args);
|
1504
1458
|
// Grab data plane lock to update service config.
|
1505
1459
|
//
|
1506
1460
|
// We defer unreffing the old values (and deallocating memory) until
|
@@ -1528,7 +1482,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1528
1482
|
ExecCtx::Get()->InvalidateNow();
|
1529
1483
|
grpc_call_element* elem = call->elem;
|
1530
1484
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1531
|
-
grpc_error_handle error
|
1485
|
+
grpc_error_handle error;
|
1532
1486
|
if (calld->CheckResolutionLocked(elem, &error)) {
|
1533
1487
|
calld->AsyncResolutionDone(elem, error);
|
1534
1488
|
}
|
@@ -1539,33 +1493,33 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
|
|
1539
1493
|
}
|
1540
1494
|
|
1541
1495
|
void ClientChannel::CreateResolverLocked() {
|
1542
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1496
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1543
1497
|
gpr_log(GPR_INFO, "chand=%p: starting name resolution", this);
|
1544
1498
|
}
|
1545
1499
|
resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
|
1546
1500
|
uri_to_resolve_.c_str(), channel_args_, interested_parties_,
|
1547
|
-
work_serializer_,
|
1501
|
+
work_serializer_, std::make_unique<ResolverResultHandler>(this));
|
1548
1502
|
// Since the validity of the args was checked when the channel was created,
|
1549
1503
|
// CreateResolver() must return a non-null result.
|
1550
1504
|
GPR_ASSERT(resolver_ != nullptr);
|
1551
1505
|
UpdateStateAndPickerLocked(
|
1552
1506
|
GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
|
1553
|
-
|
1507
|
+
MakeRefCounted<LoadBalancingPolicy::QueuePicker>(nullptr));
|
1554
1508
|
resolver_->StartLocked();
|
1555
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1509
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1556
1510
|
gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
|
1557
1511
|
}
|
1558
1512
|
}
|
1559
1513
|
|
1560
1514
|
void ClientChannel::DestroyResolverAndLbPolicyLocked() {
|
1561
1515
|
if (resolver_ != nullptr) {
|
1562
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1516
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1563
1517
|
gpr_log(GPR_INFO, "chand=%p: shutting down resolver=%p", this,
|
1564
1518
|
resolver_.get());
|
1565
1519
|
}
|
1566
1520
|
resolver_.reset();
|
1567
1521
|
if (lb_policy_ != nullptr) {
|
1568
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1522
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1569
1523
|
gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
|
1570
1524
|
lb_policy_.get());
|
1571
1525
|
}
|
@@ -1579,7 +1533,7 @@ void ClientChannel::DestroyResolverAndLbPolicyLocked() {
|
|
1579
1533
|
void ClientChannel::UpdateStateAndPickerLocked(
|
1580
1534
|
grpc_connectivity_state state, const absl::Status& status,
|
1581
1535
|
const char* reason,
|
1582
|
-
|
1536
|
+
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) {
|
1583
1537
|
// Special case for IDLE and SHUTDOWN states.
|
1584
1538
|
if (picker == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
|
1585
1539
|
saved_service_config_.reset();
|
@@ -1626,7 +1580,7 @@ void ClientChannel::UpdateStateAndPickerLocked(
|
|
1626
1580
|
// on the stale value, which results in the timer firing too early. To
|
1627
1581
|
// avoid this, we invalidate the cached value for each call we process.
|
1628
1582
|
ExecCtx::Get()->InvalidateNow();
|
1629
|
-
grpc_error_handle error
|
1583
|
+
grpc_error_handle error;
|
1630
1584
|
if (call->lb_call->PickSubchannelLocked(&error)) {
|
1631
1585
|
call->lb_call->AsyncPickDone(error);
|
1632
1586
|
}
|
@@ -1670,7 +1624,7 @@ T HandlePickResult(
|
|
1670
1624
|
|
1671
1625
|
grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
|
1672
1626
|
if (state_tracker_.state() != GRPC_CHANNEL_READY) {
|
1673
|
-
return
|
1627
|
+
return GRPC_ERROR_CREATE("channel not connected");
|
1674
1628
|
}
|
1675
1629
|
LoadBalancingPolicy::PickResult result;
|
1676
1630
|
{
|
@@ -1686,13 +1640,16 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
|
|
1686
1640
|
complete_pick->subchannel.get());
|
1687
1641
|
RefCountedPtr<ConnectedSubchannel> connected_subchannel =
|
1688
1642
|
subchannel->connected_subchannel();
|
1643
|
+
if (connected_subchannel == nullptr) {
|
1644
|
+
return GRPC_ERROR_CREATE("LB pick for ping not connected");
|
1645
|
+
}
|
1689
1646
|
connected_subchannel->Ping(op->send_ping.on_initiate,
|
1690
1647
|
op->send_ping.on_ack);
|
1691
|
-
return
|
1648
|
+
return absl::OkStatus();
|
1692
1649
|
},
|
1693
1650
|
// Queue pick.
|
1694
1651
|
[](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
|
1695
|
-
return
|
1652
|
+
return GRPC_ERROR_CREATE("LB picker queued call");
|
1696
1653
|
},
|
1697
1654
|
// Fail pick.
|
1698
1655
|
[](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
|
@@ -1716,9 +1673,8 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
|
|
1716
1673
|
// Ping.
|
1717
1674
|
if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
|
1718
1675
|
grpc_error_handle error = DoPingLocked(op);
|
1719
|
-
if (error
|
1720
|
-
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
|
1721
|
-
GRPC_ERROR_REF(error));
|
1676
|
+
if (!error.ok()) {
|
1677
|
+
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate, error);
|
1722
1678
|
ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
|
1723
1679
|
}
|
1724
1680
|
op->bind_pollset = nullptr;
|
@@ -1732,34 +1688,34 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
|
|
1732
1688
|
}
|
1733
1689
|
}
|
1734
1690
|
// Disconnect or enter IDLE.
|
1735
|
-
if (op->disconnect_with_error
|
1736
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
1691
|
+
if (!op->disconnect_with_error.ok()) {
|
1692
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
|
1737
1693
|
gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
|
1738
|
-
|
1694
|
+
StatusToString(op->disconnect_with_error).c_str());
|
1739
1695
|
}
|
1740
1696
|
DestroyResolverAndLbPolicyLocked();
|
1741
1697
|
intptr_t value;
|
1742
1698
|
if (grpc_error_get_int(op->disconnect_with_error,
|
1743
|
-
|
1699
|
+
StatusIntProperty::ChannelConnectivityState,
|
1700
|
+
&value) &&
|
1744
1701
|
static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
|
1745
|
-
if (disconnect_error_
|
1702
|
+
if (disconnect_error_.ok()) {
|
1746
1703
|
// Enter IDLE state.
|
1747
1704
|
UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
|
1748
1705
|
"channel entering IDLE", nullptr);
|
1749
1706
|
}
|
1750
|
-
GRPC_ERROR_UNREF(op->disconnect_with_error);
|
1751
1707
|
} else {
|
1752
1708
|
// Disconnect.
|
1753
|
-
GPR_ASSERT(disconnect_error_
|
1709
|
+
GPR_ASSERT(disconnect_error_.ok());
|
1754
1710
|
disconnect_error_ = op->disconnect_with_error;
|
1755
1711
|
UpdateStateAndPickerLocked(
|
1756
1712
|
GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
|
1757
|
-
|
1713
|
+
MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(
|
1758
1714
|
grpc_error_to_absl_status(op->disconnect_with_error)));
|
1759
1715
|
}
|
1760
1716
|
}
|
1761
1717
|
GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
|
1762
|
-
ExecCtx::Run(DEBUG_LOCATION, op->on_consumed,
|
1718
|
+
ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
|
1763
1719
|
}
|
1764
1720
|
|
1765
1721
|
void ClientChannel::StartTransportOp(grpc_channel_element* elem,
|
@@ -1863,12 +1819,9 @@ ClientChannel::CallData::CallData(grpc_call_element* elem,
|
|
1863
1819
|
GPR_LIKELY(chand.deadline_checking_enabled_)
|
1864
1820
|
? args.deadline
|
1865
1821
|
: Timestamp::InfFuture()),
|
1866
|
-
path_(
|
1822
|
+
path_(CSliceRef(args.path)),
|
1867
1823
|
call_start_time_(args.start_time),
|
1868
1824
|
deadline_(args.deadline),
|
1869
|
-
arena_(args.arena),
|
1870
|
-
owning_call_(args.call_stack),
|
1871
|
-
call_combiner_(args.call_combiner),
|
1872
1825
|
call_context_(args.context) {
|
1873
1826
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1874
1827
|
gpr_log(GPR_INFO, "chand=%p calld=%p: created call", &chand, this);
|
@@ -1876,8 +1829,7 @@ ClientChannel::CallData::CallData(grpc_call_element* elem,
|
|
1876
1829
|
}
|
1877
1830
|
|
1878
1831
|
ClientChannel::CallData::~CallData() {
|
1879
|
-
|
1880
|
-
GRPC_ERROR_UNREF(cancel_error_);
|
1832
|
+
CSliceUnref(path_);
|
1881
1833
|
// Make sure there are no remaining pending batches.
|
1882
1834
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
1883
1835
|
GPR_ASSERT(pending_batches_[i] == nullptr);
|
@@ -1888,7 +1840,7 @@ grpc_error_handle ClientChannel::CallData::Init(
|
|
1888
1840
|
grpc_call_element* elem, const grpc_call_element_args* args) {
|
1889
1841
|
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
1890
1842
|
new (elem->call_data) CallData(elem, *chand, *args);
|
1891
|
-
return
|
1843
|
+
return absl::OkStatus();
|
1892
1844
|
}
|
1893
1845
|
|
1894
1846
|
void ClientChannel::CallData::Destroy(
|
@@ -1902,24 +1854,34 @@ void ClientChannel::CallData::Destroy(
|
|
1902
1854
|
dynamic_call->SetAfterCallStackDestroy(then_schedule_closure);
|
1903
1855
|
} else {
|
1904
1856
|
// TODO(yashkt) : This can potentially be a Closure::Run
|
1905
|
-
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure,
|
1857
|
+
ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
|
1906
1858
|
}
|
1907
1859
|
}
|
1908
1860
|
|
1909
1861
|
void ClientChannel::CallData::StartTransportStreamOpBatch(
|
1910
1862
|
grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
|
1911
|
-
GPR_TIMER_SCOPE("cc_start_transport_stream_op_batch", 0);
|
1912
1863
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
1913
1864
|
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
1865
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
|
1866
|
+
!GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
|
1867
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from above: %s", chand,
|
1868
|
+
calld, grpc_transport_stream_op_batch_string(batch).c_str());
|
1869
|
+
}
|
1914
1870
|
if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
|
1915
|
-
grpc_deadline_state_client_start_transport_stream_op_batch(
|
1871
|
+
grpc_deadline_state_client_start_transport_stream_op_batch(
|
1872
|
+
&calld->deadline_state_, batch);
|
1916
1873
|
}
|
1917
1874
|
// Intercept recv_trailing_metadata to call CallDispatchController::Commit(),
|
1918
1875
|
// in case we wind up failing the call before we get down to the retry
|
1919
1876
|
// or LB call layer.
|
1920
1877
|
if (batch->recv_trailing_metadata) {
|
1921
|
-
calld->
|
1922
|
-
batch
|
1878
|
+
calld->original_recv_trailing_metadata_ready_ =
|
1879
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
1880
|
+
GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready_,
|
1881
|
+
RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
|
1882
|
+
elem, nullptr);
|
1883
|
+
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
1884
|
+
&calld->recv_trailing_metadata_ready_;
|
1923
1885
|
}
|
1924
1886
|
// If we already have a dynamic call, pass the batch down to it.
|
1925
1887
|
// Note that once we have done so, we do not need to acquire the channel's
|
@@ -1935,15 +1897,14 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1935
1897
|
// We do not yet have a dynamic call.
|
1936
1898
|
//
|
1937
1899
|
// If we've previously been cancelled, immediately fail any new batches.
|
1938
|
-
if (GPR_UNLIKELY(calld->cancel_error_
|
1900
|
+
if (GPR_UNLIKELY(!calld->cancel_error_.ok())) {
|
1939
1901
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1940
1902
|
gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
|
1941
|
-
chand, calld,
|
1942
|
-
grpc_error_std_string(calld->cancel_error_).c_str());
|
1903
|
+
chand, calld, StatusToString(calld->cancel_error_).c_str());
|
1943
1904
|
}
|
1944
1905
|
// Note: This will release the call combiner.
|
1945
1906
|
grpc_transport_stream_op_batch_finish_with_failure(
|
1946
|
-
batch,
|
1907
|
+
batch, calld->cancel_error_, calld->call_combiner());
|
1947
1908
|
return;
|
1948
1909
|
}
|
1949
1910
|
// Handle cancellation.
|
@@ -1953,19 +1914,16 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1953
1914
|
// cancelled before any batches are passed down (e.g., if the deadline
|
1954
1915
|
// is in the past when the call starts), we can return the right
|
1955
1916
|
// error to the caller when the first batch does get passed down.
|
1956
|
-
|
1957
|
-
calld->cancel_error_ =
|
1958
|
-
GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
|
1917
|
+
calld->cancel_error_ = batch->payload->cancel_stream.cancel_error;
|
1959
1918
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
1960
1919
|
gpr_log(GPR_INFO, "chand=%p calld=%p: recording cancel_error=%s", chand,
|
1961
|
-
calld,
|
1920
|
+
calld, StatusToString(calld->cancel_error_).c_str());
|
1962
1921
|
}
|
1963
1922
|
// Fail all pending batches.
|
1964
|
-
calld->PendingBatchesFail(elem,
|
1965
|
-
NoYieldCallCombiner);
|
1923
|
+
calld->PendingBatchesFail(elem, calld->cancel_error_, NoYieldCallCombiner);
|
1966
1924
|
// Note: This will release the call combiner.
|
1967
1925
|
grpc_transport_stream_op_batch_finish_with_failure(
|
1968
|
-
batch,
|
1926
|
+
batch, calld->cancel_error_, calld->call_combiner());
|
1969
1927
|
return;
|
1970
1928
|
}
|
1971
1929
|
// Add the batch to the pending list.
|
@@ -1980,7 +1938,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1980
1938
|
"config",
|
1981
1939
|
chand, calld);
|
1982
1940
|
}
|
1983
|
-
CheckResolution(elem,
|
1941
|
+
CheckResolution(elem, absl::OkStatus());
|
1984
1942
|
} else {
|
1985
1943
|
// For all other batches, release the call combiner.
|
1986
1944
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
@@ -1988,7 +1946,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
|
|
1988
1946
|
"chand=%p calld=%p: saved batch, yielding call combiner", chand,
|
1989
1947
|
calld);
|
1990
1948
|
}
|
1991
|
-
GRPC_CALL_COMBINER_STOP(calld->
|
1949
|
+
GRPC_CALL_COMBINER_STOP(calld->call_combiner(),
|
1992
1950
|
"batch does not include send_initial_metadata");
|
1993
1951
|
}
|
1994
1952
|
}
|
@@ -2039,24 +1997,23 @@ void ClientChannel::CallData::FailPendingBatchInCallCombiner(
|
|
2039
1997
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2040
1998
|
CallData* calld = static_cast<CallData*>(batch->handler_private.extra_arg);
|
2041
1999
|
// Note: This will release the call combiner.
|
2042
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2043
|
-
|
2000
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
2001
|
+
calld->call_combiner());
|
2044
2002
|
}
|
2045
2003
|
|
2046
2004
|
// This is called via the call combiner, so access to calld is synchronized.
|
2047
2005
|
void ClientChannel::CallData::PendingBatchesFail(
|
2048
2006
|
grpc_call_element* elem, grpc_error_handle error,
|
2049
2007
|
YieldCallCombinerPredicate yield_call_combiner_predicate) {
|
2050
|
-
GPR_ASSERT(error
|
2008
|
+
GPR_ASSERT(!error.ok());
|
2051
2009
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2052
2010
|
size_t num_batches = 0;
|
2053
2011
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
2054
2012
|
if (pending_batches_[i] != nullptr) ++num_batches;
|
2055
2013
|
}
|
2056
|
-
gpr_log(
|
2057
|
-
|
2058
|
-
|
2059
|
-
grpc_error_std_string(error).c_str());
|
2014
|
+
gpr_log(
|
2015
|
+
GPR_INFO, "chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
|
2016
|
+
elem->channel_data, this, num_batches, StatusToString(error).c_str());
|
2060
2017
|
}
|
2061
2018
|
CallCombinerClosureList closures;
|
2062
2019
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2066,17 +2023,16 @@ void ClientChannel::CallData::PendingBatchesFail(
|
|
2066
2023
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2067
2024
|
FailPendingBatchInCallCombiner, batch,
|
2068
2025
|
grpc_schedule_on_exec_ctx);
|
2069
|
-
closures.Add(&batch->handler_private.closure,
|
2026
|
+
closures.Add(&batch->handler_private.closure, error,
|
2070
2027
|
"PendingBatchesFail");
|
2071
2028
|
batch = nullptr;
|
2072
2029
|
}
|
2073
2030
|
}
|
2074
2031
|
if (yield_call_combiner_predicate(closures)) {
|
2075
|
-
closures.RunClosures(
|
2032
|
+
closures.RunClosures(call_combiner());
|
2076
2033
|
} else {
|
2077
|
-
closures.RunClosuresWithoutYielding(
|
2034
|
+
closures.RunClosuresWithoutYielding(call_combiner());
|
2078
2035
|
}
|
2079
|
-
GRPC_ERROR_UNREF(error);
|
2080
2036
|
}
|
2081
2037
|
|
2082
2038
|
// This is called via the call combiner, so access to calld is synchronized.
|
@@ -2112,13 +2068,13 @@ void ClientChannel::CallData::PendingBatchesResume(grpc_call_element* elem) {
|
|
2112
2068
|
batch->handler_private.extra_arg = elem;
|
2113
2069
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2114
2070
|
ResumePendingBatchInCallCombiner, batch, nullptr);
|
2115
|
-
closures.Add(&batch->handler_private.closure,
|
2071
|
+
closures.Add(&batch->handler_private.closure, absl::OkStatus(),
|
2116
2072
|
"resuming pending batch from client channel call");
|
2117
2073
|
batch = nullptr;
|
2118
2074
|
}
|
2119
2075
|
}
|
2120
2076
|
// Note: This will release the call combiner.
|
2121
|
-
closures.RunClosures(
|
2077
|
+
closures.RunClosures(call_combiner());
|
2122
2078
|
}
|
2123
2079
|
|
2124
2080
|
//
|
@@ -2131,10 +2087,10 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
|
|
2131
2087
|
public:
|
2132
2088
|
explicit ResolverQueuedCallCanceller(grpc_call_element* elem) : elem_(elem) {
|
2133
2089
|
auto* calld = static_cast<CallData*>(elem->call_data);
|
2134
|
-
GRPC_CALL_STACK_REF(calld->
|
2090
|
+
GRPC_CALL_STACK_REF(calld->owning_call(), "ResolverQueuedCallCanceller");
|
2135
2091
|
GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this,
|
2136
2092
|
grpc_schedule_on_exec_ctx);
|
2137
|
-
calld->
|
2093
|
+
calld->call_combiner()->SetNotifyOnCancel(&closure_);
|
2138
2094
|
}
|
2139
2095
|
|
2140
2096
|
private:
|
@@ -2144,22 +2100,22 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
|
|
2144
2100
|
auto* calld = static_cast<CallData*>(self->elem_->call_data);
|
2145
2101
|
{
|
2146
2102
|
MutexLock lock(&chand->resolution_mu_);
|
2147
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2103
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2148
2104
|
gpr_log(GPR_INFO,
|
2149
2105
|
"chand=%p calld=%p: cancelling resolver queued pick: "
|
2150
2106
|
"error=%s self=%p calld->resolver_pick_canceller=%p",
|
2151
|
-
chand, calld,
|
2107
|
+
chand, calld, StatusToString(error).c_str(), self,
|
2152
2108
|
calld->resolver_call_canceller_);
|
2153
2109
|
}
|
2154
|
-
if (calld->resolver_call_canceller_ == self && error
|
2110
|
+
if (calld->resolver_call_canceller_ == self && !error.ok()) {
|
2155
2111
|
// Remove pick from list of queued picks.
|
2156
2112
|
calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
|
2157
2113
|
// Fail pending batches on the call.
|
2158
|
-
calld->PendingBatchesFail(self->elem_,
|
2114
|
+
calld->PendingBatchesFail(self->elem_, error,
|
2159
2115
|
YieldCallCombinerIfPendingBatchesFound);
|
2160
2116
|
}
|
2161
2117
|
}
|
2162
|
-
GRPC_CALL_STACK_UNREF(calld->
|
2118
|
+
GRPC_CALL_STACK_UNREF(calld->owning_call(), "ResolvingQueuedCallCanceller");
|
2163
2119
|
delete self;
|
2164
2120
|
}
|
2165
2121
|
|
@@ -2171,7 +2127,7 @@ void ClientChannel::CallData::MaybeRemoveCallFromResolverQueuedCallsLocked(
|
|
2171
2127
|
grpc_call_element* elem) {
|
2172
2128
|
if (!queued_pending_resolver_result_) return;
|
2173
2129
|
auto* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2174
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2130
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2175
2131
|
gpr_log(GPR_INFO,
|
2176
2132
|
"chand=%p calld=%p: removing from resolver queued picks list",
|
2177
2133
|
chand, this);
|
@@ -2180,13 +2136,19 @@ void ClientChannel::CallData::MaybeRemoveCallFromResolverQueuedCallsLocked(
|
|
2180
2136
|
queued_pending_resolver_result_ = false;
|
2181
2137
|
// Lame the call combiner canceller.
|
2182
2138
|
resolver_call_canceller_ = nullptr;
|
2139
|
+
// Add trace annotation
|
2140
|
+
auto* call_tracer =
|
2141
|
+
static_cast<CallTracer*>(call_context_[GRPC_CONTEXT_CALL_TRACER].value);
|
2142
|
+
if (call_tracer != nullptr) {
|
2143
|
+
call_tracer->RecordAnnotation("Delayed name resolution complete.");
|
2144
|
+
}
|
2183
2145
|
}
|
2184
2146
|
|
2185
2147
|
void ClientChannel::CallData::MaybeAddCallToResolverQueuedCallsLocked(
|
2186
2148
|
grpc_call_element* elem) {
|
2187
2149
|
if (queued_pending_resolver_result_) return;
|
2188
2150
|
auto* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2189
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2151
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2190
2152
|
gpr_log(GPR_INFO, "chand=%p calld=%p: adding to resolver queued picks list",
|
2191
2153
|
chand, this);
|
2192
2154
|
}
|
@@ -2200,26 +2162,29 @@ void ClientChannel::CallData::MaybeAddCallToResolverQueuedCallsLocked(
|
|
2200
2162
|
grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
|
2201
2163
|
grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
|
2202
2164
|
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2203
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2165
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2204
2166
|
gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
|
2205
2167
|
chand, this);
|
2206
2168
|
}
|
2207
2169
|
ConfigSelector* config_selector = chand->config_selector_.get();
|
2208
2170
|
if (config_selector != nullptr) {
|
2209
2171
|
// Use the ConfigSelector to determine the config for the call.
|
2210
|
-
|
2211
|
-
config_selector->GetCallConfig({&path_, initial_metadata,
|
2212
|
-
if (call_config.
|
2172
|
+
auto call_config =
|
2173
|
+
config_selector->GetCallConfig({&path_, initial_metadata, arena()});
|
2174
|
+
if (!call_config.ok()) {
|
2175
|
+
return absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
|
2176
|
+
call_config.status(), "ConfigSelector"));
|
2177
|
+
}
|
2213
2178
|
// Create a ClientChannelServiceConfigCallData for the call. This stores
|
2214
2179
|
// a ref to the ServiceConfig and caches the right set of parsed configs
|
2215
2180
|
// to use for the call. The ClientChannelServiceConfigCallData will store
|
2216
2181
|
// itself in the call context, so that it can be accessed by filters
|
2217
2182
|
// below us in the stack, and it will be cleaned up when the call ends.
|
2218
2183
|
auto* service_config_call_data =
|
2219
|
-
|
2220
|
-
std::move(call_config
|
2221
|
-
std::move(call_config
|
2222
|
-
call_config
|
2184
|
+
arena()->New<ClientChannelServiceConfigCallData>(
|
2185
|
+
std::move(call_config->service_config), call_config->method_configs,
|
2186
|
+
std::move(call_config->call_attributes),
|
2187
|
+
call_config->call_dispatch_controller, call_context_);
|
2223
2188
|
// Apply our own method params to the call.
|
2224
2189
|
auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
|
2225
2190
|
service_config_call_data->GetMethodParsedConfig(
|
@@ -2234,55 +2199,48 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
|
|
2234
2199
|
method_params->timeout();
|
2235
2200
|
if (per_method_deadline < deadline_) {
|
2236
2201
|
deadline_ = per_method_deadline;
|
2237
|
-
grpc_deadline_state_reset(
|
2202
|
+
grpc_deadline_state_reset(&deadline_state_, deadline_);
|
2238
2203
|
}
|
2239
2204
|
}
|
2240
2205
|
// If the service config set wait_for_ready and the application
|
2241
2206
|
// did not explicitly set it, use the value from the service config.
|
2242
|
-
|
2243
|
-
|
2244
|
-
|
2207
|
+
auto* wait_for_ready =
|
2208
|
+
pending_batches_[0]
|
2209
|
+
->payload->send_initial_metadata.send_initial_metadata
|
2210
|
+
->GetOrCreatePointer(WaitForReady());
|
2245
2211
|
if (method_params->wait_for_ready().has_value() &&
|
2246
|
-
!
|
2247
|
-
|
2248
|
-
if (method_params->wait_for_ready().value()) {
|
2249
|
-
*send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
2250
|
-
} else {
|
2251
|
-
*send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
|
2252
|
-
}
|
2212
|
+
!wait_for_ready->explicitly_set) {
|
2213
|
+
wait_for_ready->value = method_params->wait_for_ready().value();
|
2253
2214
|
}
|
2254
2215
|
}
|
2255
2216
|
// Set the dynamic filter stack.
|
2256
2217
|
dynamic_filters_ = chand->dynamic_filters_;
|
2257
2218
|
}
|
2258
|
-
return
|
2219
|
+
return absl::OkStatus();
|
2259
2220
|
}
|
2260
2221
|
|
2261
2222
|
void ClientChannel::CallData::
|
2262
2223
|
RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
2263
2224
|
void* arg, grpc_error_handle error) {
|
2264
|
-
auto*
|
2225
|
+
auto* elem = static_cast<grpc_call_element*>(arg);
|
2226
|
+
auto* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2227
|
+
auto* calld = static_cast<CallData*>(elem->call_data);
|
2265
2228
|
auto* service_config_call_data =
|
2266
2229
|
static_cast<ClientChannelServiceConfigCallData*>(
|
2267
|
-
|
2230
|
+
calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2231
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2232
|
+
gpr_log(GPR_INFO,
|
2233
|
+
"chand=%p calld=%p: got recv_trailing_metadata_ready: error=%s "
|
2234
|
+
"service_config_call_data=%p",
|
2235
|
+
chand, calld, StatusToString(error).c_str(),
|
2236
|
+
service_config_call_data);
|
2237
|
+
}
|
2268
2238
|
if (service_config_call_data != nullptr) {
|
2269
2239
|
service_config_call_data->call_dispatch_controller()->Commit();
|
2270
2240
|
}
|
2271
2241
|
// Chain to original callback.
|
2272
|
-
Closure::Run(DEBUG_LOCATION,
|
2273
|
-
|
2274
|
-
}
|
2275
|
-
|
2276
|
-
void ClientChannel::CallData::
|
2277
|
-
InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
|
2278
|
-
grpc_transport_stream_op_batch* batch) {
|
2279
|
-
original_recv_trailing_metadata_ready_ =
|
2280
|
-
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
2281
|
-
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
|
2282
|
-
RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
|
2283
|
-
this, nullptr);
|
2284
|
-
batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
2285
|
-
&recv_trailing_metadata_ready_;
|
2242
|
+
Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
|
2243
|
+
error);
|
2286
2244
|
}
|
2287
2245
|
|
2288
2246
|
void ClientChannel::CallData::AsyncResolutionDone(grpc_call_element* elem,
|
@@ -2297,13 +2255,13 @@ void ClientChannel::CallData::ResolutionDone(void* arg,
|
|
2297
2255
|
grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
|
2298
2256
|
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2299
2257
|
CallData* calld = static_cast<CallData*>(elem->call_data);
|
2300
|
-
if (error
|
2301
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2258
|
+
if (!error.ok()) {
|
2259
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2302
2260
|
gpr_log(GPR_INFO,
|
2303
2261
|
"chand=%p calld=%p: error applying config to call: error=%s",
|
2304
|
-
chand, calld,
|
2262
|
+
chand, calld, StatusToString(error).c_str());
|
2305
2263
|
}
|
2306
|
-
calld->PendingBatchesFail(elem,
|
2264
|
+
calld->PendingBatchesFail(elem, error, YieldCallCombiner);
|
2307
2265
|
return;
|
2308
2266
|
}
|
2309
2267
|
calld->CreateDynamicCall(elem);
|
@@ -2321,7 +2279,6 @@ void ClientChannel::CallData::CheckResolution(void* arg,
|
|
2321
2279
|
}
|
2322
2280
|
if (resolution_complete) {
|
2323
2281
|
ResolutionDone(elem, error);
|
2324
|
-
GRPC_ERROR_UNREF(error);
|
2325
2282
|
}
|
2326
2283
|
}
|
2327
2284
|
|
@@ -2330,6 +2287,9 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
|
|
2330
2287
|
ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
|
2331
2288
|
// If we're still in IDLE, we need to start resolving.
|
2332
2289
|
if (GPR_UNLIKELY(chand->CheckConnectivityState(false) == GRPC_CHANNEL_IDLE)) {
|
2290
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2291
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand, this);
|
2292
|
+
}
|
2333
2293
|
// Bounce into the control plane work serializer to start resolving,
|
2334
2294
|
// in case we are still in IDLE state. Since we are holding on to the
|
2335
2295
|
// resolution mutex here, we offload it on the ExecCtx so that we don't
|
@@ -2350,23 +2310,25 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
|
|
2350
2310
|
DEBUG_LOCATION);
|
2351
2311
|
},
|
2352
2312
|
chand, nullptr),
|
2353
|
-
|
2313
|
+
absl::OkStatus());
|
2354
2314
|
}
|
2355
2315
|
// Get send_initial_metadata batch and flags.
|
2356
2316
|
auto& send_initial_metadata =
|
2357
2317
|
pending_batches_[0]->payload->send_initial_metadata;
|
2358
2318
|
grpc_metadata_batch* initial_metadata_batch =
|
2359
2319
|
send_initial_metadata.send_initial_metadata;
|
2360
|
-
const uint32_t send_initial_metadata_flags =
|
2361
|
-
send_initial_metadata.send_initial_metadata_flags;
|
2362
2320
|
// If we don't yet have a resolver result, we need to queue the call
|
2363
2321
|
// until we get one.
|
2364
2322
|
if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
|
2365
2323
|
// If the resolver returned transient failure before returning the
|
2366
2324
|
// first service config, fail any non-wait_for_ready calls.
|
2367
2325
|
absl::Status resolver_error = chand->resolver_transient_failure_error_;
|
2368
|
-
if (!resolver_error.ok() &&
|
2369
|
-
|
2326
|
+
if (!resolver_error.ok() &&
|
2327
|
+
!initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
|
2328
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2329
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
|
2330
|
+
chand, this);
|
2331
|
+
}
|
2370
2332
|
MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
|
2371
2333
|
*error = absl_status_to_grpc_error(resolver_error);
|
2372
2334
|
return true;
|
@@ -2374,6 +2336,10 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
|
|
2374
2336
|
// Either the resolver has not yet returned a result, or it has
|
2375
2337
|
// returned transient failure but the call is wait_for_ready. In
|
2376
2338
|
// either case, queue the call.
|
2339
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2340
|
+
gpr_log(GPR_INFO, "chand=%p calld=%p: queuing to wait for resolution",
|
2341
|
+
chand, this);
|
2342
|
+
}
|
2377
2343
|
MaybeAddCallToResolverQueuedCallsLocked(elem);
|
2378
2344
|
return false;
|
2379
2345
|
}
|
@@ -2393,23 +2359,23 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
|
|
2393
2359
|
path_,
|
2394
2360
|
call_start_time_,
|
2395
2361
|
deadline_,
|
2396
|
-
|
2362
|
+
arena(),
|
2397
2363
|
call_context_,
|
2398
|
-
|
2399
|
-
grpc_error_handle error
|
2364
|
+
call_combiner()};
|
2365
|
+
grpc_error_handle error;
|
2400
2366
|
DynamicFilters* channel_stack = args.channel_stack.get();
|
2401
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2367
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2402
2368
|
gpr_log(
|
2403
2369
|
GPR_INFO,
|
2404
2370
|
"chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
|
2405
2371
|
chand, this, channel_stack);
|
2406
2372
|
}
|
2407
2373
|
dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
|
2408
|
-
if (error
|
2409
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2374
|
+
if (!error.ok()) {
|
2375
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2410
2376
|
gpr_log(GPR_INFO,
|
2411
2377
|
"chand=%p calld=%p: failed to create dynamic call: error=%s",
|
2412
|
-
chand, this,
|
2378
|
+
chand, this, StatusToString(error).c_str());
|
2413
2379
|
}
|
2414
2380
|
PendingBatchesFail(elem, error, YieldCallCombiner);
|
2415
2381
|
return;
|
@@ -2427,6 +2393,7 @@ class ClientChannel::LoadBalancedCall::Metadata
|
|
2427
2393
|
explicit Metadata(grpc_metadata_batch* batch) : batch_(batch) {}
|
2428
2394
|
|
2429
2395
|
void Add(absl::string_view key, absl::string_view value) override {
|
2396
|
+
if (batch_ == nullptr) return;
|
2430
2397
|
// Gross, egregious hack to support legacy grpclb behavior.
|
2431
2398
|
// TODO(ctiller): Use a promise context for this once that plumbing is done.
|
2432
2399
|
if (key == GrpcLbClientStatsMetadata::key()) {
|
@@ -2447,6 +2414,7 @@ class ClientChannel::LoadBalancedCall::Metadata
|
|
2447
2414
|
|
2448
2415
|
std::vector<std::pair<std::string, std::string>> TestOnlyCopyToVector()
|
2449
2416
|
override {
|
2417
|
+
if (batch_ == nullptr) return {};
|
2450
2418
|
Encoder encoder;
|
2451
2419
|
batch_->Encode(&encoder);
|
2452
2420
|
return encoder.Take();
|
@@ -2454,6 +2422,7 @@ class ClientChannel::LoadBalancedCall::Metadata
|
|
2454
2422
|
|
2455
2423
|
absl::optional<absl::string_view> Lookup(absl::string_view key,
|
2456
2424
|
std::string* buffer) const override {
|
2425
|
+
if (batch_ == nullptr) return absl::nullopt;
|
2457
2426
|
return batch_->GetStringValue(key, buffer);
|
2458
2427
|
}
|
2459
2428
|
|
@@ -2493,25 +2462,16 @@ class ClientChannel::LoadBalancedCall::Metadata
|
|
2493
2462
|
// ClientChannel::LoadBalancedCall::LbCallState
|
2494
2463
|
//
|
2495
2464
|
|
2496
|
-
|
2497
|
-
|
2498
|
-
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
2503
|
-
|
2504
|
-
|
2505
|
-
|
2506
|
-
auto& call_attributes = service_config_call_data->call_attributes();
|
2507
|
-
auto it = call_attributes.find(key);
|
2508
|
-
if (it == call_attributes.end()) return absl::string_view();
|
2509
|
-
return it->second;
|
2510
|
-
}
|
2511
|
-
|
2512
|
-
private:
|
2513
|
-
LoadBalancedCall* lb_call_;
|
2514
|
-
};
|
2465
|
+
absl::string_view
|
2466
|
+
ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
|
2467
|
+
UniqueTypeName type) {
|
2468
|
+
auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
|
2469
|
+
lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
2470
|
+
auto& call_attributes = service_config_call_data->call_attributes();
|
2471
|
+
auto it = call_attributes.find(type);
|
2472
|
+
if (it == call_attributes.end()) return absl::string_view();
|
2473
|
+
return it->second;
|
2474
|
+
}
|
2515
2475
|
|
2516
2476
|
//
|
2517
2477
|
// ClientChannel::LoadBalancedCall::BackendMetricAccessor
|
@@ -2524,17 +2484,35 @@ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
|
|
2524
2484
|
: lb_call_(lb_call) {}
|
2525
2485
|
|
2526
2486
|
const BackendMetricData* GetBackendMetricData() override {
|
2527
|
-
if (lb_call_->backend_metric_data_ == nullptr
|
2487
|
+
if (lb_call_->backend_metric_data_ == nullptr &&
|
2488
|
+
lb_call_->recv_trailing_metadata_ != nullptr) {
|
2528
2489
|
if (const auto* md = lb_call_->recv_trailing_metadata_->get_pointer(
|
2529
|
-
|
2490
|
+
EndpointLoadMetricsBinMetadata())) {
|
2491
|
+
BackendMetricAllocator allocator(lb_call_->arena_);
|
2530
2492
|
lb_call_->backend_metric_data_ =
|
2531
|
-
ParseBackendMetricData(
|
2493
|
+
ParseBackendMetricData(md->as_string_view(), &allocator);
|
2532
2494
|
}
|
2533
2495
|
}
|
2534
2496
|
return lb_call_->backend_metric_data_;
|
2535
2497
|
}
|
2536
2498
|
|
2537
2499
|
private:
|
2500
|
+
class BackendMetricAllocator : public BackendMetricAllocatorInterface {
|
2501
|
+
public:
|
2502
|
+
explicit BackendMetricAllocator(Arena* arena) : arena_(arena) {}
|
2503
|
+
|
2504
|
+
BackendMetricData* AllocateBackendMetricData() override {
|
2505
|
+
return arena_->New<BackendMetricData>();
|
2506
|
+
}
|
2507
|
+
|
2508
|
+
char* AllocateString(size_t size) override {
|
2509
|
+
return static_cast<char*>(arena_->Alloc(size));
|
2510
|
+
}
|
2511
|
+
|
2512
|
+
private:
|
2513
|
+
Arena* arena_;
|
2514
|
+
};
|
2515
|
+
|
2538
2516
|
LoadBalancedCall* lb_call_;
|
2539
2517
|
};
|
2540
2518
|
|
@@ -2560,11 +2538,11 @@ ClientChannel::LoadBalancedCall::LoadBalancedCall(
|
|
2560
2538
|
ConfigSelector::CallDispatchController* call_dispatch_controller,
|
2561
2539
|
bool is_transparent_retry)
|
2562
2540
|
: InternallyRefCounted(
|
2563
|
-
GRPC_TRACE_FLAG_ENABLED(
|
2541
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)
|
2564
2542
|
? "LoadBalancedCall"
|
2565
2543
|
: nullptr),
|
2566
2544
|
chand_(chand),
|
2567
|
-
path_(
|
2545
|
+
path_(CSliceRef(args.path)),
|
2568
2546
|
deadline_(args.deadline),
|
2569
2547
|
arena_(args.arena),
|
2570
2548
|
owning_call_(args.call_stack),
|
@@ -2574,14 +2552,15 @@ ClientChannel::LoadBalancedCall::LoadBalancedCall(
|
|
2574
2552
|
on_call_destruction_complete_(on_call_destruction_complete),
|
2575
2553
|
call_dispatch_controller_(call_dispatch_controller),
|
2576
2554
|
call_attempt_tracer_(
|
2577
|
-
GetCallAttemptTracer(args.context, is_transparent_retry)) {
|
2555
|
+
GetCallAttemptTracer(args.context, is_transparent_retry)) {
|
2556
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2557
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: created", chand_, this);
|
2558
|
+
}
|
2559
|
+
}
|
2578
2560
|
|
2579
2561
|
ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
|
2580
|
-
GRPC_ERROR_UNREF(cancel_error_);
|
2581
|
-
GRPC_ERROR_UNREF(failure_error_);
|
2582
2562
|
if (backend_metric_data_ != nullptr) {
|
2583
|
-
backend_metric_data_->
|
2584
|
-
BackendMetricData::~BackendMetricData();
|
2563
|
+
backend_metric_data_->BackendMetricData::~BackendMetricData();
|
2585
2564
|
}
|
2586
2565
|
// Make sure there are no remaining pending batches.
|
2587
2566
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2589,11 +2568,17 @@ ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
|
|
2589
2568
|
}
|
2590
2569
|
if (on_call_destruction_complete_ != nullptr) {
|
2591
2570
|
ExecCtx::Run(DEBUG_LOCATION, on_call_destruction_complete_,
|
2592
|
-
|
2571
|
+
absl::OkStatus());
|
2593
2572
|
}
|
2594
2573
|
}
|
2595
2574
|
|
2596
2575
|
void ClientChannel::LoadBalancedCall::Orphan() {
|
2576
|
+
// If the recv_trailing_metadata op was never started, then notify
|
2577
|
+
// about call completion here, as best we can. We assume status
|
2578
|
+
// CANCELLED in this case.
|
2579
|
+
if (recv_trailing_metadata_ == nullptr) {
|
2580
|
+
RecordCallCompletion(absl::CancelledError("call cancelled"));
|
2581
|
+
}
|
2597
2582
|
// Compute latency and report it to the tracer.
|
2598
2583
|
if (call_attempt_tracer_ != nullptr) {
|
2599
2584
|
gpr_timespec latency =
|
@@ -2620,7 +2605,7 @@ size_t ClientChannel::LoadBalancedCall::GetBatchIndex(
|
|
2620
2605
|
void ClientChannel::LoadBalancedCall::PendingBatchesAdd(
|
2621
2606
|
grpc_transport_stream_op_batch* batch) {
|
2622
2607
|
const size_t idx = GetBatchIndex(batch);
|
2623
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2608
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2624
2609
|
gpr_log(GPR_INFO,
|
2625
2610
|
"chand=%p lb_call=%p: adding pending batch at index %" PRIuPTR,
|
2626
2611
|
chand_, this, idx);
|
@@ -2636,25 +2621,24 @@ void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
|
|
2636
2621
|
static_cast<grpc_transport_stream_op_batch*>(arg);
|
2637
2622
|
auto* self = static_cast<LoadBalancedCall*>(batch->handler_private.extra_arg);
|
2638
2623
|
// Note: This will release the call combiner.
|
2639
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2640
|
-
|
2624
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
2625
|
+
self->call_combiner_);
|
2641
2626
|
}
|
2642
2627
|
|
2643
2628
|
// This is called via the call combiner, so access to calld is synchronized.
|
2644
2629
|
void ClientChannel::LoadBalancedCall::PendingBatchesFail(
|
2645
2630
|
grpc_error_handle error,
|
2646
2631
|
YieldCallCombinerPredicate yield_call_combiner_predicate) {
|
2647
|
-
GPR_ASSERT(error
|
2648
|
-
GRPC_ERROR_UNREF(failure_error_);
|
2632
|
+
GPR_ASSERT(!error.ok());
|
2649
2633
|
failure_error_ = error;
|
2650
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2634
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2651
2635
|
size_t num_batches = 0;
|
2652
2636
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
2653
2637
|
if (pending_batches_[i] != nullptr) ++num_batches;
|
2654
2638
|
}
|
2655
2639
|
gpr_log(GPR_INFO,
|
2656
2640
|
"chand=%p lb_call=%p: failing %" PRIuPTR " pending batches: %s",
|
2657
|
-
chand_, this, num_batches,
|
2641
|
+
chand_, this, num_batches, StatusToString(error).c_str());
|
2658
2642
|
}
|
2659
2643
|
CallCombinerClosureList closures;
|
2660
2644
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
@@ -2664,7 +2648,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
|
|
2664
2648
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2665
2649
|
FailPendingBatchInCallCombiner, batch,
|
2666
2650
|
grpc_schedule_on_exec_ctx);
|
2667
|
-
closures.Add(&batch->handler_private.closure,
|
2651
|
+
closures.Add(&batch->handler_private.closure, error,
|
2668
2652
|
"PendingBatchesFail");
|
2669
2653
|
batch = nullptr;
|
2670
2654
|
}
|
@@ -2689,7 +2673,7 @@ void ClientChannel::LoadBalancedCall::ResumePendingBatchInCallCombiner(
|
|
2689
2673
|
|
2690
2674
|
// This is called via the call combiner, so access to calld is synchronized.
|
2691
2675
|
void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
|
2692
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2676
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2693
2677
|
size_t num_batches = 0;
|
2694
2678
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
2695
2679
|
if (pending_batches_[i] != nullptr) ++num_batches;
|
@@ -2707,7 +2691,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
|
|
2707
2691
|
GRPC_CLOSURE_INIT(&batch->handler_private.closure,
|
2708
2692
|
ResumePendingBatchInCallCombiner, batch,
|
2709
2693
|
grpc_schedule_on_exec_ctx);
|
2710
|
-
closures.Add(&batch->handler_private.closure,
|
2694
|
+
closures.Add(&batch->handler_private.closure, absl::OkStatus(),
|
2711
2695
|
"resuming pending batch from LB call");
|
2712
2696
|
batch = nullptr;
|
2713
2697
|
}
|
@@ -2718,17 +2702,24 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
|
|
2718
2702
|
|
2719
2703
|
void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
2720
2704
|
grpc_transport_stream_op_batch* batch) {
|
2705
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace) ||
|
2706
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
|
2707
|
+
gpr_log(GPR_INFO,
|
2708
|
+
"chand=%p lb_call=%p: batch started from above: %s, "
|
2709
|
+
"call_attempt_tracer_=%p",
|
2710
|
+
chand_, this, grpc_transport_stream_op_batch_string(batch).c_str(),
|
2711
|
+
call_attempt_tracer_);
|
2712
|
+
}
|
2721
2713
|
// Handle call tracing.
|
2722
2714
|
if (call_attempt_tracer_ != nullptr) {
|
2723
2715
|
// Record send ops in tracer.
|
2724
2716
|
if (batch->cancel_stream) {
|
2725
2717
|
call_attempt_tracer_->RecordCancel(
|
2726
|
-
|
2718
|
+
batch->payload->cancel_stream.cancel_error);
|
2727
2719
|
}
|
2728
2720
|
if (batch->send_initial_metadata) {
|
2729
2721
|
call_attempt_tracer_->RecordSendInitialMetadata(
|
2730
|
-
batch->payload->send_initial_metadata.send_initial_metadata
|
2731
|
-
batch->payload->send_initial_metadata.send_initial_metadata_flags);
|
2722
|
+
batch->payload->send_initial_metadata.send_initial_metadata);
|
2732
2723
|
peer_string_ = batch->payload->send_initial_metadata.peer_string;
|
2733
2724
|
original_send_initial_metadata_on_complete_ = batch->on_complete;
|
2734
2725
|
GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
|
@@ -2781,7 +2772,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2781
2772
|
// the channel's data plane mutex, which is more efficient (especially for
|
2782
2773
|
// streaming calls).
|
2783
2774
|
if (subchannel_call_ != nullptr) {
|
2784
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2775
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2785
2776
|
gpr_log(GPR_INFO,
|
2786
2777
|
"chand=%p lb_call=%p: starting batch on subchannel_call=%p",
|
2787
2778
|
chand_, this, subchannel_call_.get());
|
@@ -2792,14 +2783,14 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2792
2783
|
// We do not yet have a subchannel call.
|
2793
2784
|
//
|
2794
2785
|
// If we've previously been cancelled, immediately fail any new batches.
|
2795
|
-
if (GPR_UNLIKELY(cancel_error_
|
2796
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2786
|
+
if (GPR_UNLIKELY(!cancel_error_.ok())) {
|
2787
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2797
2788
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
|
2798
|
-
chand_, this,
|
2789
|
+
chand_, this, StatusToString(cancel_error_).c_str());
|
2799
2790
|
}
|
2800
2791
|
// Note: This will release the call combiner.
|
2801
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2802
|
-
|
2792
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
|
2793
|
+
call_combiner_);
|
2803
2794
|
return;
|
2804
2795
|
}
|
2805
2796
|
// Handle cancellation.
|
@@ -2809,17 +2800,16 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2809
2800
|
// cancelled before any batches are passed down (e.g., if the deadline
|
2810
2801
|
// is in the past when the call starts), we can return the right
|
2811
2802
|
// error to the caller when the first batch does get passed down.
|
2812
|
-
|
2813
|
-
|
2814
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
2803
|
+
cancel_error_ = batch->payload->cancel_stream.cancel_error;
|
2804
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2815
2805
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
|
2816
|
-
chand_, this,
|
2806
|
+
chand_, this, StatusToString(cancel_error_).c_str());
|
2817
2807
|
}
|
2818
2808
|
// Fail all pending batches.
|
2819
|
-
PendingBatchesFail(
|
2809
|
+
PendingBatchesFail(cancel_error_, NoYieldCallCombiner);
|
2820
2810
|
// Note: This will release the call combiner.
|
2821
|
-
grpc_transport_stream_op_batch_finish_with_failure(
|
2822
|
-
|
2811
|
+
grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
|
2812
|
+
call_combiner_);
|
2823
2813
|
return;
|
2824
2814
|
}
|
2825
2815
|
// Add the batch to the pending list.
|
@@ -2827,15 +2817,15 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2827
2817
|
// For batches containing a send_initial_metadata op, acquire the
|
2828
2818
|
// channel's data plane mutex to pick a subchannel.
|
2829
2819
|
if (GPR_LIKELY(batch->send_initial_metadata)) {
|
2830
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2820
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2831
2821
|
gpr_log(GPR_INFO,
|
2832
2822
|
"chand=%p lb_call=%p: grabbing data plane mutex to perform pick",
|
2833
2823
|
chand_, this);
|
2834
2824
|
}
|
2835
|
-
PickSubchannel(this,
|
2825
|
+
PickSubchannel(this, absl::OkStatus());
|
2836
2826
|
} else {
|
2837
2827
|
// For all other batches, release the call combiner.
|
2838
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2828
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2839
2829
|
gpr_log(GPR_INFO,
|
2840
2830
|
"chand=%p lb_call=%p: saved batch, yielding call combiner",
|
2841
2831
|
chand_, this);
|
@@ -2848,44 +2838,66 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
|
|
2848
2838
|
void ClientChannel::LoadBalancedCall::SendInitialMetadataOnComplete(
|
2849
2839
|
void* arg, grpc_error_handle error) {
|
2850
2840
|
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2841
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2842
|
+
gpr_log(GPR_INFO,
|
2843
|
+
"chand=%p lb_call=%p: got on_complete for send_initial_metadata: "
|
2844
|
+
"error=%s",
|
2845
|
+
self->chand_, self, StatusToString(error).c_str());
|
2846
|
+
}
|
2851
2847
|
self->call_attempt_tracer_->RecordOnDoneSendInitialMetadata(
|
2852
2848
|
self->peer_string_);
|
2853
2849
|
Closure::Run(DEBUG_LOCATION,
|
2854
|
-
self->original_send_initial_metadata_on_complete_,
|
2855
|
-
GRPC_ERROR_REF(error));
|
2850
|
+
self->original_send_initial_metadata_on_complete_, error);
|
2856
2851
|
}
|
2857
2852
|
|
2858
2853
|
void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
|
2859
2854
|
void* arg, grpc_error_handle error) {
|
2860
2855
|
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2861
|
-
if (
|
2856
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2857
|
+
gpr_log(GPR_INFO,
|
2858
|
+
"chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
|
2859
|
+
self->chand_, self, StatusToString(error).c_str());
|
2860
|
+
}
|
2861
|
+
if (error.ok()) {
|
2862
2862
|
// recv_initial_metadata_flags is not populated for clients
|
2863
2863
|
self->call_attempt_tracer_->RecordReceivedInitialMetadata(
|
2864
2864
|
self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
|
2865
2865
|
}
|
2866
2866
|
Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
|
2867
|
-
|
2867
|
+
error);
|
2868
2868
|
}
|
2869
2869
|
|
2870
2870
|
void ClientChannel::LoadBalancedCall::RecvMessageReady(
|
2871
2871
|
void* arg, grpc_error_handle error) {
|
2872
2872
|
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2873
|
-
if (
|
2873
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2874
|
+
gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
|
2875
|
+
self->chand_, self, StatusToString(error).c_str());
|
2876
|
+
}
|
2877
|
+
if (self->recv_message_->has_value()) {
|
2874
2878
|
self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
|
2875
2879
|
}
|
2876
|
-
Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
|
2877
|
-
GRPC_ERROR_REF(error));
|
2880
|
+
Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_, error);
|
2878
2881
|
}
|
2879
2882
|
|
2880
2883
|
void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
|
2881
2884
|
void* arg, grpc_error_handle error) {
|
2882
2885
|
auto* self = static_cast<LoadBalancedCall*>(arg);
|
2886
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2887
|
+
gpr_log(GPR_INFO,
|
2888
|
+
"chand=%p lb_call=%p: got recv_trailing_metadata_ready: error=%s "
|
2889
|
+
"call_attempt_tracer_=%p lb_subchannel_call_tracker_=%p "
|
2890
|
+
"failure_error_=%s",
|
2891
|
+
self->chand_, self, StatusToString(error).c_str(),
|
2892
|
+
self->call_attempt_tracer_, self->lb_subchannel_call_tracker_.get(),
|
2893
|
+
StatusToString(self->failure_error_).c_str());
|
2894
|
+
}
|
2883
2895
|
// Check if we have a tracer or an LB callback to invoke.
|
2884
2896
|
if (self->call_attempt_tracer_ != nullptr ||
|
2885
2897
|
self->lb_subchannel_call_tracker_ != nullptr) {
|
2886
2898
|
// Get the call's status.
|
2887
2899
|
absl::Status status;
|
2888
|
-
if (error
|
2900
|
+
if (!error.ok()) {
|
2889
2901
|
// Get status from error.
|
2890
2902
|
grpc_status_code code;
|
2891
2903
|
std::string message;
|
@@ -2905,34 +2917,40 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
|
|
2905
2917
|
status = absl::Status(static_cast<absl::StatusCode>(code), message);
|
2906
2918
|
}
|
2907
2919
|
}
|
2908
|
-
|
2909
|
-
if (self->call_attempt_tracer_ != nullptr) {
|
2910
|
-
self->call_attempt_tracer_->RecordReceivedTrailingMetadata(
|
2911
|
-
status, self->recv_trailing_metadata_,
|
2912
|
-
*self->transport_stream_stats_);
|
2913
|
-
}
|
2914
|
-
// If the LB policy requested a callback for trailing metadata, invoke
|
2915
|
-
// the callback.
|
2916
|
-
if (self->lb_subchannel_call_tracker_ != nullptr) {
|
2917
|
-
Metadata trailing_metadata(self->recv_trailing_metadata_);
|
2918
|
-
BackendMetricAccessor backend_metric_accessor(self);
|
2919
|
-
LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
|
2920
|
-
status, &trailing_metadata, &backend_metric_accessor};
|
2921
|
-
self->lb_subchannel_call_tracker_->Finish(args);
|
2922
|
-
self->lb_subchannel_call_tracker_.reset();
|
2923
|
-
}
|
2920
|
+
self->RecordCallCompletion(status);
|
2924
2921
|
}
|
2925
2922
|
// Chain to original callback.
|
2926
|
-
if (self->failure_error_
|
2923
|
+
if (!self->failure_error_.ok()) {
|
2927
2924
|
error = self->failure_error_;
|
2928
|
-
self->failure_error_ =
|
2929
|
-
} else {
|
2930
|
-
error = GRPC_ERROR_REF(error);
|
2925
|
+
self->failure_error_ = absl::OkStatus();
|
2931
2926
|
}
|
2932
2927
|
Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
|
2933
2928
|
error);
|
2934
2929
|
}
|
2935
2930
|
|
2931
|
+
void ClientChannel::LoadBalancedCall::RecordCallCompletion(
|
2932
|
+
absl::Status status) {
|
2933
|
+
// If we have a tracer, notify it.
|
2934
|
+
if (call_attempt_tracer_ != nullptr) {
|
2935
|
+
call_attempt_tracer_->RecordReceivedTrailingMetadata(
|
2936
|
+
status, recv_trailing_metadata_, transport_stream_stats_);
|
2937
|
+
}
|
2938
|
+
// If the LB policy requested a callback for trailing metadata, invoke
|
2939
|
+
// the callback.
|
2940
|
+
if (lb_subchannel_call_tracker_ != nullptr) {
|
2941
|
+
Metadata trailing_metadata(recv_trailing_metadata_);
|
2942
|
+
BackendMetricAccessor backend_metric_accessor(this);
|
2943
|
+
const char* peer_string =
|
2944
|
+
peer_string_ != nullptr
|
2945
|
+
? reinterpret_cast<char*>(gpr_atm_acq_load(peer_string_))
|
2946
|
+
: "";
|
2947
|
+
LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
|
2948
|
+
peer_string, status, &trailing_metadata, &backend_metric_accessor};
|
2949
|
+
lb_subchannel_call_tracker_->Finish(args);
|
2950
|
+
lb_subchannel_call_tracker_.reset();
|
2951
|
+
}
|
2952
|
+
}
|
2953
|
+
|
2936
2954
|
void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
|
2937
2955
|
SubchannelCall::Args call_args = {
|
2938
2956
|
std::move(connected_subchannel_), pollent_, path_.Ref(), /*start_time=*/0,
|
@@ -2940,18 +2958,18 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
|
|
2940
2958
|
// TODO(roth): When we implement hedging support, we will probably
|
2941
2959
|
// need to use a separate call context for each subchannel call.
|
2942
2960
|
call_context_, call_combiner_};
|
2943
|
-
grpc_error_handle error
|
2961
|
+
grpc_error_handle error;
|
2944
2962
|
subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
|
2945
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
2963
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2946
2964
|
gpr_log(GPR_INFO,
|
2947
2965
|
"chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand_,
|
2948
|
-
this, subchannel_call_.get(),
|
2966
|
+
this, subchannel_call_.get(), StatusToString(error).c_str());
|
2949
2967
|
}
|
2950
2968
|
if (on_call_destruction_complete_ != nullptr) {
|
2951
2969
|
subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
|
2952
2970
|
on_call_destruction_complete_ = nullptr;
|
2953
2971
|
}
|
2954
|
-
if (GPR_UNLIKELY(error
|
2972
|
+
if (GPR_UNLIKELY(!error.ok())) {
|
2955
2973
|
PendingBatchesFail(error, YieldCallCombiner);
|
2956
2974
|
} else {
|
2957
2975
|
PendingBatchesResume();
|
@@ -2981,19 +2999,19 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
|
|
2981
2999
|
auto* chand = lb_call->chand_;
|
2982
3000
|
{
|
2983
3001
|
MutexLock lock(&chand->data_plane_mu_);
|
2984
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3002
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
2985
3003
|
gpr_log(GPR_INFO,
|
2986
3004
|
"chand=%p lb_call=%p: cancelling queued pick: "
|
2987
3005
|
"error=%s self=%p calld->pick_canceller=%p",
|
2988
|
-
chand, lb_call,
|
3006
|
+
chand, lb_call, StatusToString(error).c_str(), self,
|
2989
3007
|
lb_call->lb_call_canceller_);
|
2990
3008
|
}
|
2991
|
-
if (lb_call->lb_call_canceller_ == self && error
|
3009
|
+
if (lb_call->lb_call_canceller_ == self && !error.ok()) {
|
2992
3010
|
lb_call->call_dispatch_controller_->Commit();
|
2993
3011
|
// Remove pick from list of queued picks.
|
2994
3012
|
lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
|
2995
3013
|
// Fail pending batches on the call.
|
2996
|
-
lb_call->PendingBatchesFail(
|
3014
|
+
lb_call->PendingBatchesFail(error,
|
2997
3015
|
YieldCallCombinerIfPendingBatchesFound);
|
2998
3016
|
}
|
2999
3017
|
}
|
@@ -3007,7 +3025,7 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
|
|
3007
3025
|
|
3008
3026
|
void ClientChannel::LoadBalancedCall::MaybeRemoveCallFromLbQueuedCallsLocked() {
|
3009
3027
|
if (!queued_pending_lb_pick_) return;
|
3010
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3028
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3011
3029
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: removing from queued picks list",
|
3012
3030
|
chand_, this);
|
3013
3031
|
}
|
@@ -3015,11 +3033,15 @@ void ClientChannel::LoadBalancedCall::MaybeRemoveCallFromLbQueuedCallsLocked() {
|
|
3015
3033
|
queued_pending_lb_pick_ = false;
|
3016
3034
|
// Lame the call combiner canceller.
|
3017
3035
|
lb_call_canceller_ = nullptr;
|
3036
|
+
// Add trace annotation
|
3037
|
+
if (call_attempt_tracer_ != nullptr) {
|
3038
|
+
call_attempt_tracer_->RecordAnnotation("Delayed LB pick complete.");
|
3039
|
+
}
|
3018
3040
|
}
|
3019
3041
|
|
3020
3042
|
void ClientChannel::LoadBalancedCall::MaybeAddCallToLbQueuedCallsLocked() {
|
3021
3043
|
if (queued_pending_lb_pick_) return;
|
3022
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3044
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3023
3045
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
|
3024
3046
|
chand_, this);
|
3025
3047
|
}
|
@@ -3039,13 +3061,13 @@ void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
|
|
3039
3061
|
void ClientChannel::LoadBalancedCall::PickDone(void* arg,
|
3040
3062
|
grpc_error_handle error) {
|
3041
3063
|
auto* self = static_cast<LoadBalancedCall*>(arg);
|
3042
|
-
if (error
|
3043
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3064
|
+
if (!error.ok()) {
|
3065
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3044
3066
|
gpr_log(GPR_INFO,
|
3045
3067
|
"chand=%p lb_call=%p: failed to pick subchannel: error=%s",
|
3046
|
-
self->chand_, self,
|
3068
|
+
self->chand_, self, StatusToString(error).c_str());
|
3047
3069
|
}
|
3048
|
-
self->PendingBatchesFail(
|
3070
|
+
self->PendingBatchesFail(error, YieldCallCombiner);
|
3049
3071
|
return;
|
3050
3072
|
}
|
3051
3073
|
self->call_dispatch_controller_->Commit();
|
@@ -3062,7 +3084,6 @@ void ClientChannel::LoadBalancedCall::PickSubchannel(void* arg,
|
|
3062
3084
|
}
|
3063
3085
|
if (pick_complete) {
|
3064
3086
|
PickDone(self, error);
|
3065
|
-
GRPC_ERROR_UNREF(error);
|
3066
3087
|
}
|
3067
3088
|
}
|
3068
3089
|
|
@@ -3075,8 +3096,6 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
|
3075
3096
|
pending_batches_[0]->payload->send_initial_metadata;
|
3076
3097
|
grpc_metadata_batch* initial_metadata_batch =
|
3077
3098
|
send_initial_metadata.send_initial_metadata;
|
3078
|
-
const uint32_t send_initial_metadata_flags =
|
3079
|
-
send_initial_metadata.send_initial_metadata_flags;
|
3080
3099
|
// Perform LB pick.
|
3081
3100
|
LoadBalancingPolicy::PickArgs pick_args;
|
3082
3101
|
pick_args.path = path_.as_string_view();
|
@@ -3090,7 +3109,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
|
3090
3109
|
// CompletePick
|
3091
3110
|
[this](LoadBalancingPolicy::PickResult::Complete* complete_pick)
|
3092
3111
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3093
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3112
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3094
3113
|
gpr_log(GPR_INFO,
|
3095
3114
|
"chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
|
3096
3115
|
chand_, this, complete_pick->subchannel.get());
|
@@ -3106,7 +3125,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
|
3106
3125
|
// yet seen that change and given us a new picker), then just
|
3107
3126
|
// queue the pick. We'll try again as soon as we get a new picker.
|
3108
3127
|
if (connected_subchannel_ == nullptr) {
|
3109
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3128
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3110
3129
|
gpr_log(GPR_INFO,
|
3111
3130
|
"chand=%p lb_call=%p: subchannel returned by LB picker "
|
3112
3131
|
"has no connected subchannel; queueing pick",
|
@@ -3126,7 +3145,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
|
3126
3145
|
// QueuePick
|
3127
3146
|
[this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/)
|
3128
3147
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3129
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3148
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3130
3149
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
|
3131
3150
|
this);
|
3132
3151
|
}
|
@@ -3134,22 +3153,19 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
|
3134
3153
|
return false;
|
3135
3154
|
},
|
3136
3155
|
// FailPick
|
3137
|
-
[this,
|
3156
|
+
[this, initial_metadata_batch,
|
3138
3157
|
&error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
|
3139
3158
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3140
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3159
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3141
3160
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s",
|
3142
3161
|
chand_, this, fail_pick->status.ToString().c_str());
|
3143
3162
|
}
|
3144
3163
|
// If wait_for_ready is false, then the error indicates the RPC
|
3145
3164
|
// attempt's final status.
|
3146
|
-
if ((
|
3147
|
-
|
3148
|
-
|
3149
|
-
|
3150
|
-
*error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
3151
|
-
"Failed to pick subchannel", &lb_error, 1);
|
3152
|
-
GRPC_ERROR_UNREF(lb_error);
|
3165
|
+
if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
|
3166
|
+
->value) {
|
3167
|
+
*error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
|
3168
|
+
std::move(fail_pick->status), "LB pick"));
|
3153
3169
|
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3154
3170
|
return true;
|
3155
3171
|
}
|
@@ -3161,13 +3177,14 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
|
|
3161
3177
|
// DropPick
|
3162
3178
|
[this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick)
|
3163
3179
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
|
3164
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
3180
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
3165
3181
|
gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
|
3166
3182
|
chand_, this, drop_pick->status.ToString().c_str());
|
3167
3183
|
}
|
3168
|
-
*error =
|
3169
|
-
|
3170
|
-
|
3184
|
+
*error = grpc_error_set_int(
|
3185
|
+
absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
|
3186
|
+
std::move(drop_pick->status), "LB drop")),
|
3187
|
+
StatusIntProperty::kLbPolicyDrop, 1);
|
3171
3188
|
MaybeRemoveCallFromLbQueuedCallsLocked();
|
3172
3189
|
return true;
|
3173
3190
|
});
|