grpc 1.63.0 → 1.65.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +105 -103
- data/include/grpc/credentials.h +1222 -0
- data/include/grpc/event_engine/event_engine.h +13 -6
- data/include/grpc/grpc.h +7 -0
- data/include/grpc/grpc_crl_provider.h +1 -0
- data/include/grpc/grpc_security.h +0 -1171
- data/include/grpc/impl/channel_arg_names.h +7 -6
- data/include/grpc/module.modulemap +2 -0
- data/include/grpc/passive_listener.h +62 -0
- data/include/grpc/support/log.h +7 -17
- data/include/grpc/support/port_platform.h +3 -0
- data/src/core/{lib/channel → channelz}/channel_trace.cc +57 -63
- data/src/core/{lib/channel → channelz}/channel_trace.h +22 -20
- data/src/core/{lib/channel → channelz}/channelz.cc +71 -9
- data/src/core/{lib/channel → channelz}/channelz.h +52 -13
- data/src/core/{lib/channel → channelz}/channelz_registry.cc +11 -9
- data/src/core/{lib/channel → channelz}/channelz_registry.h +6 -6
- data/src/core/client_channel/backup_poller.cc +4 -5
- data/src/core/client_channel/client_channel.cc +1324 -0
- data/src/core/client_channel/client_channel.h +243 -0
- data/src/core/client_channel/client_channel_filter.cc +312 -759
- data/src/core/client_channel/client_channel_filter.h +13 -68
- data/src/core/client_channel/client_channel_internal.h +19 -7
- data/src/core/client_channel/client_channel_plugin.cc +1 -14
- data/src/core/client_channel/client_channel_service_config.h +4 -4
- data/src/core/client_channel/config_selector.cc +1 -1
- data/src/core/client_channel/config_selector.h +5 -4
- data/src/core/client_channel/connector.h +1 -1
- data/src/core/client_channel/dynamic_filters.cc +6 -5
- data/src/core/client_channel/dynamic_filters.h +1 -3
- data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
- data/src/core/client_channel/load_balanced_call_destination.h +49 -0
- data/src/core/client_channel/local_subchannel_pool.cc +5 -3
- data/src/core/client_channel/retry_filter.cc +3 -10
- data/src/core/client_channel/retry_filter.h +5 -9
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +70 -76
- data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
- data/src/core/client_channel/retry_service_config.cc +4 -5
- data/src/core/client_channel/retry_service_config.h +3 -3
- data/src/core/client_channel/subchannel.cc +241 -129
- data/src/core/client_channel/subchannel.h +31 -19
- data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
- data/src/core/client_channel/subchannel_pool_interface.h +2 -4
- data/src/core/client_channel/subchannel_stream_client.cc +41 -52
- data/src/core/client_channel/subchannel_stream_client.h +2 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -13
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +3 -2
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
- data/src/core/ext/filters/census/grpc_context.cc +2 -4
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +16 -15
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +12 -11
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +11 -16
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +5 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +6 -4
- data/src/core/ext/filters/http/client/http_client_filter.h +6 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -3
- data/src/core/ext/filters/http/client_authority_filter.h +6 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +19 -23
- data/src/core/ext/filters/http/message_compress/compression_filter.h +10 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +4 -4
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -5
- data/src/core/ext/filters/message_size/message_size_filter.cc +16 -28
- data/src/core/ext/filters/message_size/message_size_filter.h +14 -12
- data/src/core/ext/filters/rbac/rbac_filter.cc +13 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +6 -5
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +14 -18
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +4 -2
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +5 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.h +2 -2
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +23 -38
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -8
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +233 -158
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +36 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +1 -2
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -7
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +190 -165
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -11
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +3 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +2 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -8
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -6
- data/src/core/ext/transport/chttp2/transport/frame.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -9
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +9 -7
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +10 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +10 -9
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +29 -31
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -13
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +3 -3
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -23
- data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +29 -39
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +2 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +1 -4
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +30 -15
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +7 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +10 -11
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/varint.h +4 -3
- data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/write_size_policy.h +2 -2
- data/src/core/ext/transport/chttp2/transport/writing.cc +59 -47
- data/src/core/ext/transport/inproc/inproc_transport.cc +65 -41
- data/src/core/ext/transport/inproc/inproc_transport.h +2 -5
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +20 -23
- data/src/core/ext/transport/inproc/legacy_inproc_transport.h +1 -4
- data/src/core/{lib/transport → handshaker/endpoint_info}/endpoint_info_handshaker.cc +6 -6
- data/src/core/{lib/transport → handshaker/endpoint_info}/endpoint_info_handshaker.h +3 -3
- data/src/core/{lib/transport → handshaker}/handshaker.cc +14 -20
- data/src/core/{lib/transport → handshaker}/handshaker.h +4 -5
- data/src/core/{lib/transport → handshaker}/handshaker_factory.h +19 -3
- data/src/core/{lib/transport → handshaker}/handshaker_registry.cc +3 -3
- data/src/core/{lib/transport → handshaker}/handshaker_registry.h +6 -6
- data/src/core/{lib/transport → handshaker/http_connect}/http_connect_handshaker.cc +16 -25
- data/src/core/{lib/transport → handshaker/http_connect}/http_connect_handshaker.h +3 -3
- data/src/core/{client_channel → handshaker/http_connect}/http_proxy_mapper.cc +16 -18
- data/src/core/{client_channel → handshaker/http_connect}/http_proxy_mapper.h +6 -6
- data/src/core/{lib/handshaker → handshaker}/proxy_mapper.h +5 -5
- data/src/core/{lib/handshaker → handshaker}/proxy_mapper_registry.cc +3 -3
- data/src/core/{lib/handshaker → handshaker}/proxy_mapper_registry.h +6 -6
- data/src/core/{lib/security/transport → handshaker/security}/secure_endpoint.cc +42 -36
- data/src/core/{lib/security/transport → handshaker/security}/secure_endpoint.h +4 -7
- data/src/core/{lib/security/transport → handshaker/security}/security_handshaker.cc +35 -47
- data/src/core/{lib/security/transport → handshaker/security}/security_handshaker.h +5 -6
- data/src/core/{lib/transport → handshaker/tcp_connect}/tcp_connect_handshaker.cc +10 -9
- data/src/core/{lib/transport → handshaker/tcp_connect}/tcp_connect_handshaker.h +3 -3
- data/src/core/lib/address_utils/parse_address.cc +30 -40
- data/src/core/lib/address_utils/parse_address.h +2 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +20 -15
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +2 -2
- data/src/core/lib/backoff/backoff.h +2 -2
- data/src/core/lib/backoff/random_early_detection.cc +2 -2
- data/src/core/lib/backoff/random_early_detection.h +2 -2
- data/src/core/lib/channel/call_finalization.h +2 -2
- data/src/core/lib/channel/channel_args.cc +17 -21
- data/src/core/lib/channel/channel_args.h +20 -10
- data/src/core/lib/channel/channel_args_preconditioning.cc +2 -2
- data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
- data/src/core/lib/channel/channel_stack.cc +13 -70
- data/src/core/lib/channel/channel_stack.h +14 -39
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +2 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -150
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -4
- data/src/core/lib/channel/connected_channel.cc +40 -694
- data/src/core/lib/channel/promise_based_filter.cc +111 -122
- data/src/core/lib/channel/promise_based_filter.h +219 -531
- data/src/core/lib/channel/status_util.cc +3 -3
- data/src/core/lib/channel/status_util.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -3
- data/src/core/lib/compression/compression_internal.cc +3 -3
- data/src/core/lib/compression/compression_internal.h +1 -2
- data/src/core/lib/compression/message_compress.cc +15 -14
- data/src/core/lib/compression/message_compress.h +1 -2
- data/src/core/lib/config/config_vars.cc +5 -10
- data/src/core/lib/config/config_vars.h +3 -7
- data/src/core/lib/config/config_vars_non_generated.cc +2 -2
- data/src/core/lib/config/core_configuration.cc +9 -8
- data/src/core/lib/config/core_configuration.h +8 -8
- data/src/core/lib/config/load_config.cc +4 -4
- data/src/core/lib/config/load_config.h +2 -2
- data/src/core/lib/debug/event_log.cc +3 -3
- data/src/core/lib/debug/event_log.h +3 -3
- data/src/core/lib/debug/trace.cc +44 -61
- data/src/core/lib/debug/trace.h +2 -97
- data/src/core/lib/debug/trace_flags.cc +255 -0
- data/src/core/lib/debug/trace_flags.h +133 -0
- data/src/core/lib/debug/trace_impl.h +115 -0
- data/src/core/lib/event_engine/ares_resolver.cc +23 -26
- data/src/core/lib/event_engine/ares_resolver.h +3 -5
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +4 -2
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +3 -3
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +19 -23
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +1 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -2
- data/src/core/lib/event_engine/common_closures.h +1 -2
- data/src/core/lib/event_engine/default_event_engine.cc +1 -2
- data/src/core/lib/event_engine/default_event_engine.h +1 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -2
- data/src/core/lib/event_engine/default_event_engine_factory.h +1 -2
- data/src/core/lib/event_engine/event_engine.cc +29 -5
- data/src/core/lib/event_engine/event_engine_context.h +1 -2
- data/src/core/lib/event_engine/extensions/can_track_errors.h +2 -2
- data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +2 -2
- data/src/core/lib/event_engine/extensions/supports_fd.h +8 -2
- data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
- data/src/core/lib/event_engine/forkable.cc +11 -11
- data/src/core/lib/event_engine/forkable.h +1 -13
- data/src/core/lib/event_engine/grpc_polled_fd.h +1 -2
- data/src/core/lib/event_engine/handle_containers.h +1 -2
- data/src/core/lib/event_engine/memory_allocator_factory.h +1 -2
- data/src/core/lib/event_engine/poller.h +1 -2
- data/src/core/lib/event_engine/posix.h +1 -2
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +1 -2
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +11 -11
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +1 -2
- data/src/core/lib/event_engine/posix_engine/event_poller.h +1 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +5 -5
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +2 -2
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +43 -58
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +14 -13
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +34 -17
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +1 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +17 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +1 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +24 -28
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +22 -20
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -3
- data/src/core/lib/event_engine/posix_engine/timer.cc +2 -3
- data/src/core/lib/event_engine/posix_engine/timer.h +1 -2
- data/src/core/lib/event_engine/posix_engine/timer_heap.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +2 -2
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +9 -11
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -2
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +2 -2
- data/src/core/lib/event_engine/query_extensions.h +3 -2
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -2
- data/src/core/lib/event_engine/resolved_address.cc +5 -4
- data/src/core/lib/event_engine/resolved_address_internal.h +1 -2
- data/src/core/lib/event_engine/shim.cc +3 -3
- data/src/core/lib/event_engine/slice.cc +4 -3
- data/src/core/lib/event_engine/slice_buffer.cc +1 -2
- data/src/core/lib/event_engine/tcp_socket_utils.cc +18 -16
- data/src/core/lib/event_engine/tcp_socket_utils.h +1 -2
- data/src/core/lib/event_engine/thread_local.cc +2 -2
- data/src/core/lib/event_engine/thread_local.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -2
- data/src/core/lib/event_engine/thread_pool/thread_count.h +2 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +1 -2
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +2 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +27 -28
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +4 -8
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +16 -15
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +5 -5
- data/src/core/lib/event_engine/time_util.cc +1 -2
- data/src/core/lib/event_engine/time_util.h +1 -2
- data/src/core/lib/event_engine/trace.h +7 -19
- data/src/core/lib/event_engine/utils.cc +1 -2
- data/src/core/lib/event_engine/utils.h +1 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -30
- data/src/core/lib/event_engine/windows/iocp.cc +10 -8
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +32 -22
- data/src/core/lib/event_engine/windows/win_socket.h +4 -5
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +24 -25
- data/src/core/lib/event_engine/windows/windows_engine.cc +205 -90
- data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
- data/src/core/lib/event_engine/windows/windows_listener.cc +19 -29
- data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +2 -2
- data/src/core/lib/event_engine/work_queue/basic_work_queue.h +1 -2
- data/src/core/lib/event_engine/work_queue/work_queue.h +1 -2
- data/src/core/lib/experiments/config.cc +16 -14
- data/src/core/lib/experiments/config.h +2 -2
- data/src/core/lib/experiments/experiments.cc +57 -158
- data/src/core/lib/experiments/experiments.h +35 -52
- data/src/core/lib/gprpp/atomic_utils.h +2 -2
- data/src/core/lib/gprpp/bitset.h +3 -3
- data/src/core/lib/gprpp/chunked_vector.h +6 -5
- data/src/core/lib/gprpp/construct_destruct.h +2 -2
- data/src/core/lib/gprpp/crash.cc +3 -5
- data/src/core/lib/gprpp/crash.h +2 -2
- data/src/core/lib/gprpp/debug_location.h +2 -2
- data/src/core/lib/gprpp/directory_reader.h +2 -2
- data/src/core/lib/gprpp/down_cast.h +3 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +54 -41
- data/src/core/lib/gprpp/dump_args.cc +54 -0
- data/src/core/lib/gprpp/dump_args.h +69 -0
- data/src/core/lib/gprpp/env.h +2 -2
- data/src/core/lib/gprpp/examine_stack.cc +2 -2
- data/src/core/lib/gprpp/examine_stack.h +2 -2
- data/src/core/lib/gprpp/fork.cc +1 -2
- data/src/core/lib/gprpp/fork.h +2 -2
- data/src/core/lib/gprpp/glob.cc +70 -0
- data/src/core/lib/gprpp/glob.h +29 -0
- data/src/core/lib/gprpp/host_port.cc +6 -4
- data/src/core/lib/gprpp/host_port.h +2 -2
- data/src/core/lib/gprpp/linux/env.cc +2 -2
- data/src/core/lib/gprpp/load_file.cc +1 -2
- data/src/core/lib/gprpp/load_file.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +2 -2
- data/src/core/lib/gprpp/match.h +2 -2
- data/src/core/lib/gprpp/memory.h +1 -2
- data/src/core/lib/gprpp/mpscq.cc +2 -2
- data/src/core/lib/gprpp/mpscq.h +5 -4
- data/src/core/lib/gprpp/no_destruct.h +2 -2
- data/src/core/lib/gprpp/notification.h +2 -2
- data/src/core/lib/gprpp/orphanable.h +2 -2
- data/src/core/lib/gprpp/overload.h +2 -2
- data/src/core/lib/gprpp/per_cpu.cc +2 -3
- data/src/core/lib/gprpp/per_cpu.h +1 -2
- data/src/core/lib/gprpp/posix/directory_reader.cc +2 -2
- data/src/core/lib/gprpp/posix/stat.cc +8 -7
- data/src/core/lib/gprpp/posix/thd.cc +18 -19
- data/src/core/lib/gprpp/ref_counted.h +35 -26
- data/src/core/lib/gprpp/ref_counted_ptr.h +2 -2
- data/src/core/lib/gprpp/ref_counted_string.cc +1 -2
- data/src/core/lib/gprpp/ref_counted_string.h +2 -2
- data/src/core/lib/gprpp/single_set_ptr.h +9 -6
- data/src/core/lib/gprpp/sorted_pack.h +2 -2
- data/src/core/lib/gprpp/stat.h +2 -2
- data/src/core/lib/gprpp/status_helper.cc +14 -33
- data/src/core/lib/gprpp/status_helper.h +5 -33
- data/src/core/lib/gprpp/strerror.cc +2 -2
- data/src/core/lib/gprpp/strerror.h +2 -2
- data/src/core/lib/gprpp/sync.h +5 -5
- data/src/core/lib/gprpp/table.h +2 -2
- data/src/core/lib/gprpp/tchar.cc +2 -2
- data/src/core/lib/gprpp/thd.h +7 -7
- data/src/core/lib/gprpp/time.cc +9 -10
- data/src/core/lib/gprpp/time.h +4 -4
- data/src/core/lib/gprpp/time_averaged_stats.cc +2 -2
- data/src/core/lib/gprpp/time_util.cc +5 -4
- data/src/core/lib/gprpp/time_util.h +1 -2
- data/src/core/lib/gprpp/unique_type_name.h +3 -3
- data/src/core/lib/gprpp/uuid_v4.cc +2 -2
- data/src/core/lib/gprpp/uuid_v4.h +2 -2
- data/src/core/lib/gprpp/validation_errors.cc +12 -3
- data/src/core/lib/gprpp/validation_errors.h +13 -2
- data/src/core/lib/gprpp/windows/stat.cc +6 -5
- data/src/core/lib/gprpp/windows/thd.cc +7 -4
- data/src/core/lib/gprpp/work_serializer.cc +53 -62
- data/src/core/lib/gprpp/work_serializer.h +1 -2
- data/src/core/lib/iomgr/buffer_list.cc +5 -4
- data/src/core/lib/iomgr/buffer_list.h +1 -2
- data/src/core/lib/iomgr/call_combiner.cc +23 -31
- data/src/core/lib/iomgr/call_combiner.h +2 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
- data/src/core/lib/iomgr/closure.cc +2 -2
- data/src/core/lib/iomgr/closure.h +6 -7
- data/src/core/lib/iomgr/combiner.cc +13 -14
- data/src/core/lib/iomgr/combiner.h +1 -4
- data/src/core/lib/iomgr/endpoint.cc +1 -7
- data/src/core/lib/iomgr/endpoint.h +1 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -46
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -5
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +15 -15
- data/src/core/lib/iomgr/error.cc +16 -24
- data/src/core/lib/iomgr/error.h +4 -4
- data/src/core/lib/iomgr/ev_apple.cc +3 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +58 -56
- data/src/core/lib/iomgr/ev_poll_posix.cc +47 -38
- data/src/core/lib/iomgr/ev_posix.cc +9 -11
- data/src/core/lib/iomgr/ev_posix.h +11 -8
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -4
- data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +17 -31
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -2
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +1 -2
- data/src/core/lib/iomgr/exec_ctx.cc +7 -7
- data/src/core/lib/iomgr/exec_ctx.h +7 -5
- data/src/core/lib/iomgr/executor.cc +13 -23
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/fork_posix.cc +8 -10
- data/src/core/lib/iomgr/fork_windows.cc +3 -1
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +2 -2
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.cc +5 -4
- data/src/core/lib/iomgr/iocp_windows.cc +13 -9
- data/src/core/lib/iomgr/iocp_windows.h +0 -1
- data/src/core/lib/iomgr/iomgr.cc +14 -19
- data/src/core/lib/iomgr/iomgr.h +2 -2
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +4 -2
- data/src/core/lib/iomgr/lockfree_event.cc +7 -8
- data/src/core/lib/iomgr/lockfree_event.h +1 -2
- data/src/core/lib/iomgr/polling_entity.cc +5 -5
- data/src/core/lib/iomgr/pollset.cc +2 -2
- data/src/core/lib/iomgr/pollset.h +0 -3
- data/src/core/lib/iomgr/pollset_set.cc +2 -2
- data/src/core/lib/iomgr/pollset_set_windows.cc +2 -2
- data/src/core/lib/iomgr/pollset_windows.cc +0 -2
- data/src/core/lib/iomgr/pollset_windows.h +0 -1
- data/src/core/lib/iomgr/python_util.h +1 -2
- data/src/core/lib/iomgr/resolve_address.cc +1 -2
- data/src/core/lib/iomgr/resolve_address.h +1 -2
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +2 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.h +2 -2
- data/src/core/lib/iomgr/resolved_address.h +2 -2
- data/src/core/lib/iomgr/sockaddr_utils_posix.cc +3 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -3
- data/src/core/lib/iomgr/socket_mutator.h +1 -2
- data/src/core/lib/iomgr/socket_utils.h +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +28 -33
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -2
- data/src/core/lib/iomgr/socket_windows.cc +8 -9
- data/src/core/lib/iomgr/tcp_client.cc +2 -2
- data/src/core/lib/iomgr/tcp_client.h +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +14 -19
- data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
- data/src/core/lib/iomgr/tcp_posix.cc +99 -125
- data/src/core/lib/iomgr/tcp_posix.h +0 -2
- data/src/core/lib/iomgr/tcp_server.cc +2 -2
- data/src/core/lib/iomgr/tcp_server.h +1 -2
- data/src/core/lib/iomgr/tcp_server_posix.cc +35 -38
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +10 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -8
- data/src/core/lib/iomgr/tcp_server_windows.cc +25 -30
- data/src/core/lib/iomgr/tcp_windows.cc +33 -47
- data/src/core/lib/iomgr/timer.cc +2 -2
- data/src/core/lib/iomgr/timer.h +1 -2
- data/src/core/lib/iomgr/timer_generic.cc +20 -23
- data/src/core/lib/iomgr/timer_generic.h +0 -1
- data/src/core/lib/iomgr/timer_heap.cc +2 -3
- data/src/core/lib/iomgr/timer_manager.cc +21 -33
- data/src/core/lib/iomgr/timer_manager.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -2
- data/src/core/lib/iomgr/unix_sockets_posix.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +3 -1
- data/src/core/lib/iomgr/vsock.cc +3 -3
- data/src/core/lib/iomgr/vsock.h +1 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
- data/src/core/lib/matchers/matchers.cc +2 -2
- data/src/core/lib/matchers/matchers.h +2 -2
- data/src/core/lib/promise/activity.cc +4 -3
- data/src/core/lib/promise/activity.h +34 -11
- data/src/core/lib/promise/all_ok.h +2 -2
- data/src/core/lib/promise/arena_promise.h +2 -2
- data/src/core/lib/promise/cancel_callback.h +24 -0
- data/src/core/lib/promise/context.h +14 -3
- data/src/core/lib/promise/detail/basic_seq.h +1 -2
- data/src/core/lib/promise/detail/join_state.h +365 -408
- data/src/core/lib/promise/detail/promise_factory.h +2 -2
- data/src/core/lib/promise/detail/promise_like.h +15 -8
- data/src/core/lib/promise/detail/seq_state.h +1192 -1192
- data/src/core/lib/promise/detail/status.h +4 -3
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +2 -2
- data/src/core/lib/promise/for_each.h +91 -30
- data/src/core/lib/promise/if.h +2 -2
- data/src/core/lib/promise/interceptor_list.h +9 -10
- data/src/core/lib/promise/latch.h +17 -17
- data/src/core/lib/promise/loop.h +2 -2
- data/src/core/lib/promise/map.h +19 -2
- data/src/core/lib/promise/observable.h +182 -0
- data/src/core/lib/promise/party.cc +22 -23
- data/src/core/lib/promise/party.h +19 -17
- data/src/core/lib/promise/pipe.h +31 -50
- data/src/core/lib/promise/poll.h +6 -5
- data/src/core/lib/promise/prioritized_race.h +2 -2
- data/src/core/lib/promise/promise.h +3 -2
- data/src/core/lib/promise/race.h +2 -2
- data/src/core/lib/promise/seq.h +2 -2
- data/src/core/lib/promise/sleep.cc +1 -2
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/status_flag.h +10 -8
- data/src/core/lib/promise/try_join.h +4 -3
- data/src/core/lib/promise/try_seq.h +4 -3
- data/src/core/lib/resource_quota/api.cc +1 -2
- data/src/core/lib/resource_quota/api.h +1 -2
- data/src/core/lib/resource_quota/arena.cc +57 -81
- data/src/core/lib/resource_quota/arena.h +119 -211
- data/src/core/lib/resource_quota/connection_quota.cc +8 -9
- data/src/core/lib/resource_quota/connection_quota.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +20 -21
- data/src/core/lib/resource_quota/memory_quota.h +6 -7
- data/src/core/lib/resource_quota/periodic_update.cc +3 -3
- data/src/core/lib/resource_quota/periodic_update.h +2 -2
- data/src/core/lib/resource_quota/resource_quota.cc +2 -2
- data/src/core/lib/resource_quota/resource_quota.h +2 -3
- data/src/core/lib/resource_quota/thread_quota.cc +4 -3
- data/src/core/lib/resource_quota/thread_quota.h +2 -2
- data/src/core/lib/security/authorization/audit_logging.cc +6 -6
- data/src/core/lib/security/authorization/audit_logging.h +1 -2
- data/src/core/lib/security/authorization/authorization_engine.h +2 -2
- data/src/core/lib/security/authorization/authorization_policy_provider.h +2 -3
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +2 -3
- data/src/core/lib/security/authorization/evaluate_args.cc +8 -11
- data/src/core/lib/security/authorization/evaluate_args.h +1 -2
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +4 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -2
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +9 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +8 -8
- data/src/core/lib/security/authorization/matchers.cc +4 -5
- data/src/core/lib/security/authorization/matchers.h +2 -2
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -2
- data/src/core/lib/security/authorization/rbac_policy.h +1 -2
- data/src/core/lib/security/authorization/stdout_logger.cc +4 -3
- data/src/core/lib/security/authorization/stdout_logger.h +1 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +4 -4
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +6 -6
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +2 -2
- data/src/core/lib/security/context/security_context.cc +17 -16
- data/src/core/lib/security/context/security_context.h +33 -10
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -3
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +4 -3
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -6
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry.h +4 -4
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +7 -5
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +9 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -3
- data/src/core/lib/security/credentials/credentials.cc +10 -9
- data/src/core/lib/security/credentials/credentials.h +5 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +9 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -4
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -2
- data/src/core/lib/security/credentials/external/aws_request_signer.h +2 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +16 -17
- data/src/core/lib/security/credentials/external/external_account_credentials.h +5 -5
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +3 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -7
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +3 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +4 -5
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +19 -18
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -5
- data/src/core/lib/security/credentials/iam/iam_credentials.h +3 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +19 -19
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +10 -8
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +65 -69
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
- data/src/core/lib/security/credentials/local/local_credentials.cc +1 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +6 -6
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +9 -10
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -5
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +28 -34
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +6 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +26 -25
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_match.cc +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +28 -36
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +5 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -22
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +1 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +15 -18
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -6
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -8
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +27 -30
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +20 -17
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +6 -5
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/load_system_roots.h +1 -2
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +8 -8
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +1 -2
- data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +19 -23
- data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +8 -10
- data/src/core/lib/security/security_connector/security_connector.h +4 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +23 -25
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +29 -30
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +42 -53
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +3 -3
- data/src/core/lib/security/transport/auth_filters.h +14 -13
- data/src/core/lib/security/transport/client_auth_filter.cc +13 -18
- data/src/core/lib/security/transport/server_auth_filter.cc +10 -13
- data/src/core/lib/security/util/json_util.cc +1 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/percent_encoding.cc +4 -3
- data/src/core/lib/slice/slice.cc +11 -10
- data/src/core/lib/slice/slice.h +5 -5
- data/src/core/lib/slice/slice_buffer.cc +15 -14
- data/src/core/lib/slice/slice_buffer.h +1 -2
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_refcount.h +3 -6
- data/src/core/lib/slice/slice_string_helpers.cc +3 -3
- data/src/core/lib/slice/slice_string_helpers.h +1 -2
- data/src/core/lib/surface/api_trace.h +2 -5
- data/src/core/lib/surface/byte_buffer.cc +1 -2
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -3
- data/src/core/lib/surface/call.cc +102 -3899
- data/src/core/lib/surface/call.h +158 -90
- data/src/core/lib/surface/call_details.cc +1 -2
- data/src/core/lib/surface/call_log_batch.cc +2 -3
- data/src/core/lib/surface/call_test_only.h +1 -2
- data/src/core/lib/surface/call_utils.cc +276 -0
- data/src/core/lib/surface/call_utils.h +449 -0
- data/src/core/lib/surface/channel.cc +17 -11
- data/src/core/lib/surface/channel.h +12 -10
- data/src/core/lib/surface/channel_create.cc +18 -9
- data/src/core/lib/surface/channel_create.h +5 -4
- data/src/core/lib/surface/channel_init.cc +27 -83
- data/src/core/lib/surface/channel_init.h +27 -100
- data/src/core/lib/surface/channel_stack_type.cc +2 -2
- data/src/core/lib/surface/client_call.cc +419 -0
- data/src/core/lib/surface/client_call.h +180 -0
- data/src/core/lib/surface/completion_queue.cc +45 -51
- data/src/core/lib/surface/completion_queue.h +1 -10
- data/src/core/lib/surface/completion_queue_factory.cc +9 -8
- data/src/core/lib/surface/completion_queue_factory.h +1 -2
- data/src/core/lib/surface/event_string.cc +2 -2
- data/src/core/lib/surface/event_string.h +1 -2
- data/src/core/lib/surface/filter_stack_call.cc +1157 -0
- data/src/core/lib/surface/filter_stack_call.h +369 -0
- data/src/core/lib/surface/init.cc +8 -8
- data/src/core/lib/surface/init_internally.cc +2 -2
- data/src/core/lib/surface/lame_client.cc +10 -13
- data/src/core/lib/surface/lame_client.h +6 -11
- data/src/core/lib/surface/legacy_channel.cc +52 -39
- data/src/core/lib/surface/legacy_channel.h +11 -21
- data/src/core/lib/surface/metadata_array.cc +1 -2
- data/src/core/lib/surface/server_call.cc +222 -0
- data/src/core/lib/surface/server_call.h +167 -0
- data/src/core/lib/surface/validate_metadata.cc +1 -2
- data/src/core/lib/surface/validate_metadata.h +3 -3
- data/src/core/lib/surface/version.cc +3 -4
- data/src/core/lib/transport/bdp_estimator.cc +7 -7
- data/src/core/lib/transport/bdp_estimator.h +6 -8
- data/src/core/lib/transport/{call_size_estimator.cc → call_arena_allocator.cc} +3 -3
- data/src/core/lib/transport/{call_size_estimator.h → call_arena_allocator.h} +29 -6
- data/src/core/lib/transport/call_destination.h +76 -0
- data/src/core/lib/transport/call_filters.cc +54 -21
- data/src/core/lib/transport/call_filters.h +240 -84
- data/src/core/lib/transport/call_final_info.cc +2 -2
- data/src/core/lib/transport/call_final_info.h +1 -2
- data/src/core/lib/transport/call_spine.cc +17 -19
- data/src/core/lib/transport/call_spine.h +238 -215
- data/src/core/lib/transport/connectivity_state.cc +9 -12
- data/src/core/lib/transport/connectivity_state.h +1 -4
- data/src/core/lib/transport/error_utils.cc +1 -2
- data/src/core/lib/transport/error_utils.h +1 -2
- data/src/core/lib/transport/interception_chain.cc +155 -0
- data/src/core/lib/transport/interception_chain.h +236 -0
- data/src/core/lib/transport/message.cc +1 -2
- data/src/core/lib/transport/metadata.cc +2 -2
- data/src/core/lib/transport/metadata_batch.cc +2 -2
- data/src/core/lib/transport/metadata_batch.h +43 -5
- data/src/core/lib/transport/metadata_compression_traits.h +2 -2
- data/src/core/lib/transport/metadata_info.cc +2 -2
- data/src/core/lib/transport/metadata_info.h +1 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -2
- data/src/core/lib/transport/parsed_metadata.h +1 -2
- data/src/core/lib/transport/simple_slice_based_metadata.h +2 -2
- data/src/core/lib/transport/status_conversion.cc +2 -2
- data/src/core/lib/transport/status_conversion.h +1 -2
- data/src/core/lib/transport/timeout_encoding.cc +5 -5
- data/src/core/lib/transport/timeout_encoding.h +2 -2
- data/src/core/lib/transport/transport.cc +4 -8
- data/src/core/lib/transport/transport.h +80 -74
- data/src/core/lib/transport/transport_op_string.cc +1 -2
- data/src/core/lib/uri/uri_parser.cc +3 -3
- data/src/core/lib/uri/uri_parser.h +2 -2
- data/src/core/load_balancing/address_filtering.cc +2 -2
- data/src/core/load_balancing/address_filtering.h +2 -2
- data/src/core/load_balancing/backend_metric_data.h +2 -2
- data/src/core/load_balancing/backend_metric_parser.cc +2 -2
- data/src/core/load_balancing/backend_metric_parser.h +2 -2
- data/src/core/load_balancing/child_policy_handler.cc +14 -14
- data/src/core/load_balancing/child_policy_handler.h +2 -2
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/endpoint_list.cc +11 -13
- data/src/core/load_balancing/endpoint_list.h +16 -10
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +29 -30
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +20 -8
- data/src/core/load_balancing/grpclb/grpclb.cc +65 -70
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +3 -3
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.h +1 -2
- data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +1 -2
- data/src/core/load_balancing/grpclb/grpclb_client_stats.h +1 -2
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +4 -6
- data/src/core/load_balancing/grpclb/load_balancer_api.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +14 -18
- data/src/core/load_balancing/health_check_client.h +2 -2
- data/src/core/load_balancing/health_check_client_internal.h +1 -2
- data/src/core/load_balancing/lb_policy.cc +7 -10
- data/src/core/load_balancing/lb_policy.h +20 -5
- data/src/core/load_balancing/lb_policy_factory.h +3 -3
- data/src/core/load_balancing/lb_policy_registry.cc +5 -6
- data/src/core/load_balancing/lb_policy_registry.h +3 -3
- data/src/core/load_balancing/oob_backend_metric.cc +6 -9
- data/src/core/load_balancing/oob_backend_metric.h +2 -2
- data/src/core/load_balancing/oob_backend_metric_internal.h +1 -2
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +36 -38
- data/src/core/load_balancing/outlier_detection/outlier_detection.h +5 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +1141 -156
- data/src/core/load_balancing/priority/priority.cc +41 -38
- data/src/core/load_balancing/ring_hash/ring_hash.cc +45 -30
- data/src/core/load_balancing/ring_hash/ring_hash.h +5 -5
- data/src/core/load_balancing/rls/rls.cc +106 -99
- data/src/core/load_balancing/round_robin/round_robin.cc +43 -35
- data/src/core/load_balancing/subchannel_interface.h +1 -2
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +4 -4
- data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.h +2 -2
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +79 -58
- data/src/core/load_balancing/weighted_target/weighted_target.cc +29 -32
- data/src/core/load_balancing/weighted_target/weighted_target.h +1 -1
- data/src/core/load_balancing/xds/cds.cc +25 -28
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +28 -28
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +17 -20
- data/src/core/load_balancing/xds/xds_override_host.cc +46 -47
- data/src/core/load_balancing/xds/xds_override_host.h +5 -5
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +12 -15
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +1 -2
- data/src/core/resolver/binder/binder_resolver.cc +7 -6
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +2 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -3
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -3
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +36 -35
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +20 -27
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -7
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -2
- data/src/core/resolver/dns/dns_resolver_plugin.cc +10 -10
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +9 -14
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +3 -3
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +7 -7
- data/src/core/resolver/dns/event_engine/service_config_helper.h +2 -2
- data/src/core/resolver/dns/native/dns_resolver.cc +11 -13
- data/src/core/resolver/endpoint_addresses.cc +5 -5
- data/src/core/resolver/endpoint_addresses.h +2 -2
- data/src/core/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/resolver/fake/fake_resolver.h +2 -3
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +22 -23
- data/src/core/resolver/polling_resolver.cc +35 -40
- data/src/core/resolver/polling_resolver.h +1 -2
- data/src/core/resolver/resolver.cc +3 -7
- data/src/core/resolver/resolver.h +2 -4
- data/src/core/resolver/resolver_factory.h +3 -3
- data/src/core/resolver/resolver_registry.cc +11 -13
- data/src/core/resolver/resolver_registry.h +3 -3
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +5 -6
- data/src/core/resolver/xds/xds_dependency_manager.cc +27 -27
- data/src/core/resolver/xds/xds_dependency_manager.h +7 -7
- data/src/core/resolver/xds/xds_resolver.cc +32 -39
- data/src/core/resolver/xds/xds_resolver_attributes.h +2 -2
- data/src/core/{lib/surface → server}/server.cc +306 -424
- data/src/core/{lib/surface → server}/server.h +43 -26
- data/src/core/{lib/channel → server}/server_call_tracer_filter.cc +16 -20
- data/src/core/{lib/channel → server}/server_call_tracer_filter.h +3 -3
- data/src/core/{ext/filters/server_config_selector → server}/server_config_selector.h +6 -6
- data/src/core/{ext/filters/server_config_selector → server}/server_config_selector_filter.cc +39 -40
- data/src/core/{ext/filters/server_config_selector → server}/server_config_selector_filter.h +3 -3
- data/src/core/{lib/surface → server}/server_interface.h +6 -4
- data/src/core/{ext/xds → server}/xds_channel_stack_modifier.cc +4 -4
- data/src/core/{ext/xds → server}/xds_channel_stack_modifier.h +5 -6
- data/src/core/{ext/xds → server}/xds_server_config_fetcher.cc +24 -26
- data/src/core/service_config/service_config.h +2 -3
- data/src/core/service_config/service_config_call_data.h +15 -13
- data/src/core/service_config/service_config_channel_arg_filter.cc +12 -11
- data/src/core/service_config/service_config_impl.cc +7 -7
- data/src/core/service_config/service_config_impl.h +4 -4
- data/src/core/service_config/service_config_parser.cc +4 -8
- data/src/core/service_config/service_config_parser.h +3 -3
- data/src/core/{lib/channel → telemetry}/call_tracer.cc +25 -35
- data/src/core/{lib/channel → telemetry}/call_tracer.h +33 -11
- data/src/core/{lib/debug → telemetry}/histogram_view.cc +2 -2
- data/src/core/{lib/debug → telemetry}/histogram_view.h +5 -5
- data/src/core/telemetry/metrics.cc +178 -0
- data/src/core/telemetry/metrics.h +562 -0
- data/src/core/{lib/debug → telemetry}/stats.cc +3 -3
- data/src/core/{lib/debug → telemetry}/stats.h +7 -7
- data/src/core/{lib/debug → telemetry}/stats_data.cc +3 -3
- data/src/core/{lib/debug → telemetry}/stats_data.h +6 -6
- data/src/core/{lib/channel → telemetry}/tcp_tracer.h +5 -5
- data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -2
- data/src/core/tsi/alts/crypt/gsec.cc +1 -2
- data/src/core/tsi/alts/crypt/gsec.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_counter.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -15
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +2 -2
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +1 -2
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -2
- data/src/core/tsi/alts/frame_protector/frame_handler.h +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +63 -64
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -2
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +54 -53
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +7 -5
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -2
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +4 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +10 -8
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +6 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +1 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +10 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +1 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +2 -2
- data/src/core/tsi/fake_transport_security.cc +20 -21
- data/src/core/tsi/local_transport_security.cc +7 -7
- data/src/core/tsi/local_transport_security.h +1 -2
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +6 -5
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +15 -14
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -4
- data/src/core/tsi/ssl_transport_security.cc +96 -100
- data/src/core/tsi/ssl_transport_security.h +1 -2
- data/src/core/tsi/ssl_transport_security_utils.cc +85 -28
- data/src/core/tsi/ssl_transport_security_utils.h +12 -2
- data/src/core/tsi/ssl_types.h +2 -2
- data/src/core/tsi/transport_security.cc +1 -6
- data/src/core/tsi/transport_security.h +2 -4
- data/src/core/tsi/transport_security_grpc.cc +2 -2
- data/src/core/tsi/transport_security_grpc.h +1 -2
- data/src/core/tsi/transport_security_interface.h +2 -6
- data/src/core/{lib/gpr → util}/alloc.cc +3 -1
- data/src/core/{lib/gpr → util}/alloc.h +3 -3
- data/src/core/{lib/gpr → util}/android/log.cc +0 -19
- data/src/core/{lib/gpr → util}/atm.cc +1 -1
- data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +26 -26
- data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +9 -9
- data/src/core/{lib/http → util/http_client}/format_request.cc +2 -2
- data/src/core/{lib/http → util/http_client}/format_request.h +4 -4
- data/src/core/{lib/http → util/http_client}/httpcli.cc +12 -13
- data/src/core/{lib/http → util/http_client}/httpcli.h +5 -5
- data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +10 -10
- data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +3 -3
- data/src/core/{lib/http → util/http_client}/parser.cc +6 -7
- data/src/core/{lib/http → util/http_client}/parser.h +3 -5
- data/src/core/{lib → util}/json/json.h +3 -3
- data/src/core/{lib → util}/json/json_args.h +3 -3
- data/src/core/{lib → util}/json/json_channel_args.h +4 -4
- data/src/core/{lib → util}/json/json_object_loader.cc +1 -1
- data/src/core/{lib → util}/json/json_object_loader.h +5 -5
- data/src/core/{lib → util}/json/json_reader.cc +4 -3
- data/src/core/{lib → util}/json/json_reader.h +4 -4
- data/src/core/{lib → util}/json/json_util.cc +3 -3
- data/src/core/{lib → util}/json/json_util.h +4 -4
- data/src/core/{lib → util}/json/json_writer.cc +1 -1
- data/src/core/{lib → util}/json/json_writer.h +4 -4
- data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
- data/src/core/util/log.cc +167 -0
- data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
- data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
- data/src/core/{lib/gpr → util}/posix/sync.cc +25 -23
- data/src/core/{lib/gpr → util}/posix/time.cc +10 -7
- data/src/core/{lib/gpr → util}/posix/tmpfile.cc +5 -3
- data/src/core/{lib/gpr → util}/spinlock.h +3 -3
- data/src/core/{lib/gpr → util}/string.cc +2 -2
- data/src/core/{lib/gpr → util}/string.h +3 -3
- data/src/core/{lib/gpr → util}/sync.cc +5 -3
- data/src/core/{lib/gpr → util}/time.cc +10 -8
- data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
- data/src/core/{lib/gpr → util}/time_precise.h +3 -3
- data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
- data/src/core/{lib/gpr → util}/useful.h +3 -3
- data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
- data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/sync.cc +3 -1
- data/src/core/{lib/gpr → util}/windows/time.cc +5 -2
- data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
- data/src/core/{ext/xds → xds/grpc}/certificate_provider_store.cc +5 -6
- data/src/core/{ext/xds → xds/grpc}/certificate_provider_store.h +8 -9
- data/src/core/{ext/xds → xds/grpc}/file_watcher_certificate_provider_factory.cc +5 -6
- data/src/core/{ext/xds → xds/grpc}/file_watcher_certificate_provider_factory.h +7 -8
- data/src/core/{ext/xds → xds/grpc}/upb_utils.h +5 -5
- data/src/core/{ext/xds → xds/grpc}/xds_audit_logger_registry.cc +4 -4
- data/src/core/{ext/xds → xds/grpc}/xds_audit_logger_registry.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_bootstrap_grpc.cc +7 -8
- data/src/core/{ext/xds → xds/grpc}/xds_bootstrap_grpc.h +14 -14
- data/src/core/{ext/xds → xds/grpc}/xds_certificate_provider.cc +5 -5
- data/src/core/{ext/xds → xds/grpc}/xds_certificate_provider.h +5 -6
- data/src/core/{ext/xds → xds/grpc}/xds_client_grpc.cc +51 -34
- data/src/core/{ext/xds → xds/grpc}/xds_client_grpc.h +10 -11
- data/src/core/{ext/xds → xds/grpc}/xds_cluster.cc +22 -14
- data/src/core/{ext/xds → xds/grpc}/xds_cluster.h +12 -13
- data/src/core/{ext/xds → xds/grpc}/xds_cluster_specifier_plugin.cc +6 -6
- data/src/core/{ext/xds → xds/grpc}/xds_cluster_specifier_plugin.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_common_types.cc +6 -7
- data/src/core/{ext/xds → xds/grpc}/xds_common_types.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_endpoint.cc +11 -12
- data/src/core/{ext/xds → xds/grpc}/xds_endpoint.h +9 -9
- data/src/core/{ext/xds → xds/grpc}/xds_health_status.cc +3 -3
- data/src/core/{ext/xds → xds/grpc}/xds_health_status.h +5 -5
- data/src/core/{ext/xds → xds/grpc}/xds_http_fault_filter.cc +6 -7
- data/src/core/{ext/xds → xds/grpc}/xds_http_fault_filter.h +8 -8
- data/src/core/{ext/xds → xds/grpc}/xds_http_filters.cc +8 -9
- data/src/core/{ext/xds → xds/grpc}/xds_http_filters.h +9 -9
- data/src/core/{ext/xds → xds/grpc}/xds_http_rbac_filter.cc +9 -10
- data/src/core/{ext/xds → xds/grpc}/xds_http_rbac_filter.h +8 -8
- data/src/core/{ext/xds → xds/grpc}/xds_http_stateful_session_filter.cc +7 -8
- data/src/core/{ext/xds → xds/grpc}/xds_http_stateful_session_filter.h +8 -8
- data/src/core/{ext/xds → xds/grpc}/xds_lb_policy_registry.cc +3 -4
- data/src/core/{ext/xds → xds/grpc}/xds_lb_policy_registry.h +7 -7
- data/src/core/{ext/xds → xds/grpc}/xds_listener.cc +12 -14
- data/src/core/{ext/xds → xds/grpc}/xds_listener.h +12 -12
- data/src/core/{ext/xds → xds/grpc}/xds_route_config.cc +23 -24
- data/src/core/{ext/xds → xds/grpc}/xds_route_config.h +11 -11
- data/src/core/{ext/xds → xds/grpc}/xds_routing.cc +6 -6
- data/src/core/{ext/xds → xds/grpc}/xds_routing.h +8 -8
- data/src/core/{ext/xds → xds/grpc}/xds_transport_grpc.cc +16 -16
- data/src/core/{ext/xds → xds/grpc}/xds_transport_grpc.h +7 -8
- data/src/core/{ext/xds → xds/xds_client}/xds_api.cc +9 -14
- data/src/core/{ext/xds → xds/xds_client}/xds_api.h +7 -7
- data/src/core/{ext/xds → xds/xds_client}/xds_bootstrap.cc +4 -4
- data/src/core/{ext/xds → xds/xds_client}/xds_bootstrap.h +6 -6
- data/src/core/{ext/xds → xds/xds_client}/xds_channel_args.h +3 -3
- data/src/core/{ext/xds → xds/xds_client}/xds_client.cc +60 -62
- data/src/core/{ext/xds → xds/xds_client}/xds_client.h +10 -14
- data/src/core/{ext/xds → xds/xds_client}/xds_client_stats.cc +23 -22
- data/src/core/{ext/xds → xds/xds_client}/xds_client_stats.h +8 -8
- data/src/core/{ext/xds → xds/xds_client}/xds_metrics.h +7 -5
- data/src/core/{ext/xds → xds/xds_client}/xds_resource_type.h +6 -6
- data/src/core/{ext/xds → xds/xds_client}/xds_resource_type_impl.h +7 -7
- data/src/core/{ext/xds → xds/xds_client}/xds_transport.h +6 -6
- data/src/ruby/bin/math_pb.rb +1 -22
- data/src/ruby/ext/grpc/rb_call.c +8 -1
- data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_call_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_channel.c +1 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
- data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +130 -130
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +198 -197
- data/src/ruby/ext/grpc/rb_server.c +40 -22
- data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +1 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
- data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
- data/third_party/abseil-cpp/absl/log/check.h +209 -0
- data/third_party/abseil-cpp/absl/log/internal/check_impl.h +150 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +118 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +420 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +13 -18
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +25 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +3 -18
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +19 -15
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_des.c +48 -66
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +20 -28
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
- data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.c +0 -15
- data/third_party/boringssl-with-bazel/src/crypto/crypto.c +7 -61
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +7 -7
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1539 -0
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +36 -20
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +81 -60
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +41 -120
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +13 -13
- data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh.c +137 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh_asn1.c +120 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +30 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +6 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +31 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +46 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +8 -5
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +14 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +0 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +11 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +11 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +22 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +6 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +78 -29
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +62 -27
- data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -17
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +44 -41
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +13 -12
- data/third_party/boringssl-with-bazel/src/crypto/spx/spx.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +26 -33
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +4 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_cpols.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_crld.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_lib.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +21 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +8 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +1 -6
- data/third_party/boringssl-with-bazel/{err_data.c → src/gen/crypto/err_data.c} +487 -485
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +85 -42
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +12 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +10 -11
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +17 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +13 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +15 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +131 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/{kyber.h → experimental/kyber.h} +10 -0
- data/third_party/boringssl-with-bazel/src/{crypto/spx/internal.h → include/openssl/experimental/spx.h} +24 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +63 -53
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +19 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +26 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +358 -102
- data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +10 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/target.h +13 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2931 -2453
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -8
- data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +19 -18
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +3 -9
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -58
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +17 -7
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +69 -16
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +145 -114
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +243 -189
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +59 -385
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +21 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +423 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +108 -81
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +116 -93
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +6 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +48 -116
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +21 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +36 -3
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +53 -18
- data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +1 -1
- metadata +207 -196
- data/src/core/client_channel/client_channel_channelz.cc +0 -93
- data/src/core/client_channel/client_channel_channelz.h +0 -85
- data/src/core/ext/filters/deadline/deadline_filter.cc +0 -407
- data/src/core/ext/filters/deadline/deadline_filter.h +0 -85
- data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
- data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
- data/src/core/lib/channel/channel_stack_trace.cc +0 -19
- data/src/core/lib/channel/channel_stack_trace.h +0 -24
- data/src/core/lib/channel/context.h +0 -77
- data/src/core/lib/channel/metrics.cc +0 -396
- data/src/core/lib/channel/metrics.h +0 -406
- data/src/core/lib/event_engine/trace.cc +0 -25
- data/src/core/lib/gpr/log.cc +0 -166
- data/src/core/lib/gpr/log_internal.h +0 -55
- data/src/core/lib/iomgr/ev_windows.cc +0 -30
- data/src/core/lib/promise/trace.cc +0 -20
- data/src/core/lib/promise/trace.h +0 -24
- data/src/core/lib/resource_quota/trace.cc +0 -19
- data/src/core/lib/resource_quota/trace.h +0 -24
- data/src/core/lib/security/transport/tsi_error.cc +0 -31
- data/src/core/lib/security/transport/tsi_error.h +0 -30
- data/src/core/lib/slice/slice_refcount.cc +0 -20
- data/src/core/lib/surface/api_trace.cc +0 -25
- data/src/core/lib/surface/call_trace.h +0 -24
- data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
- data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
- data/src/core/lib/transport/batch_builder.cc +0 -170
- data/src/core/lib/transport/batch_builder.h +0 -476
- data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
- data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
- data/third_party/boringssl-with-bazel/src/include/openssl/pki/certificate.h +0 -83
- data/third_party/boringssl-with-bazel/src/include/openssl/pki/signature_verify_cache.h +0 -41
- /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include <vector>
|
|
31
31
|
|
|
32
32
|
#include "absl/cleanup/cleanup.h"
|
|
33
|
+
#include "absl/log/check.h"
|
|
33
34
|
#include "absl/status/status.h"
|
|
34
35
|
#include "absl/status/statusor.h"
|
|
35
36
|
#include "absl/strings/cord.h"
|
|
@@ -49,8 +50,8 @@
|
|
|
49
50
|
#include <grpc/support/string_util.h>
|
|
50
51
|
#include <grpc/support/time.h>
|
|
51
52
|
|
|
53
|
+
#include "src/core/channelz/channel_trace.h"
|
|
52
54
|
#include "src/core/client_channel/backup_poller.h"
|
|
53
|
-
#include "src/core/client_channel/client_channel_channelz.h"
|
|
54
55
|
#include "src/core/client_channel/client_channel_internal.h"
|
|
55
56
|
#include "src/core/client_channel/client_channel_service_config.h"
|
|
56
57
|
#include "src/core/client_channel/config_selector.h"
|
|
@@ -60,15 +61,13 @@
|
|
|
60
61
|
#include "src/core/client_channel/retry_filter.h"
|
|
61
62
|
#include "src/core/client_channel/subchannel.h"
|
|
62
63
|
#include "src/core/client_channel/subchannel_interface_internal.h"
|
|
63
|
-
#include "src/core/
|
|
64
|
+
#include "src/core/handshaker/proxy_mapper_registry.h"
|
|
64
65
|
#include "src/core/lib/channel/channel_args.h"
|
|
65
66
|
#include "src/core/lib/channel/channel_stack.h"
|
|
66
|
-
#include "src/core/lib/channel/channel_trace.h"
|
|
67
67
|
#include "src/core/lib/channel/status_util.h"
|
|
68
68
|
#include "src/core/lib/config/core_configuration.h"
|
|
69
69
|
#include "src/core/lib/debug/trace.h"
|
|
70
70
|
#include "src/core/lib/experiments/experiments.h"
|
|
71
|
-
#include "src/core/lib/gpr/useful.h"
|
|
72
71
|
#include "src/core/lib/gprpp/crash.h"
|
|
73
72
|
#include "src/core/lib/gprpp/debug_location.h"
|
|
74
73
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
|
@@ -76,12 +75,10 @@
|
|
|
76
75
|
#include "src/core/lib/gprpp/sync.h"
|
|
77
76
|
#include "src/core/lib/gprpp/unique_type_name.h"
|
|
78
77
|
#include "src/core/lib/gprpp/work_serializer.h"
|
|
79
|
-
#include "src/core/lib/handshaker/proxy_mapper_registry.h"
|
|
80
78
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
|
81
79
|
#include "src/core/lib/iomgr/polling_entity.h"
|
|
82
80
|
#include "src/core/lib/iomgr/pollset_set.h"
|
|
83
81
|
#include "src/core/lib/iomgr/resolved_address.h"
|
|
84
|
-
#include "src/core/lib/json/json.h"
|
|
85
82
|
#include "src/core/lib/promise/cancel_callback.h"
|
|
86
83
|
#include "src/core/lib/promise/context.h"
|
|
87
84
|
#include "src/core/lib/promise/latch.h"
|
|
@@ -105,6 +102,8 @@
|
|
|
105
102
|
#include "src/core/resolver/resolver_registry.h"
|
|
106
103
|
#include "src/core/service_config/service_config_call_data.h"
|
|
107
104
|
#include "src/core/service_config/service_config_impl.h"
|
|
105
|
+
#include "src/core/util/json/json.h"
|
|
106
|
+
#include "src/core/util/useful.h"
|
|
108
107
|
|
|
109
108
|
//
|
|
110
109
|
// Client channel filter
|
|
@@ -114,10 +113,6 @@ namespace grpc_core {
|
|
|
114
113
|
|
|
115
114
|
using internal::ClientChannelMethodParsedConfig;
|
|
116
115
|
|
|
117
|
-
TraceFlag grpc_client_channel_trace(false, "client_channel");
|
|
118
|
-
TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
|
|
119
|
-
TraceFlag grpc_client_channel_lb_call_trace(false, "client_channel_lb_call");
|
|
120
|
-
|
|
121
116
|
//
|
|
122
117
|
// ClientChannelFilter::CallData definition
|
|
123
118
|
//
|
|
@@ -160,7 +155,6 @@ class ClientChannelFilter::CallData {
|
|
|
160
155
|
virtual Arena* arena() const = 0;
|
|
161
156
|
virtual grpc_polling_entity* pollent() = 0;
|
|
162
157
|
virtual grpc_metadata_batch* send_initial_metadata() = 0;
|
|
163
|
-
virtual grpc_call_context_element* call_context() const = 0;
|
|
164
158
|
|
|
165
159
|
// Helper function for CheckResolution(). Returns true if the call
|
|
166
160
|
// can continue (i.e., there is a valid resolution result, or there is
|
|
@@ -210,22 +204,19 @@ class ClientChannelFilter::FilterBasedCallData final
|
|
|
210
204
|
const grpc_call_element_args& args);
|
|
211
205
|
~FilterBasedCallData() override;
|
|
212
206
|
|
|
213
|
-
grpc_call_element* elem() const { return
|
|
214
|
-
grpc_call_stack* owning_call() const { return
|
|
215
|
-
CallCombiner* call_combiner() const { return
|
|
207
|
+
grpc_call_element* elem() const { return elem_; }
|
|
208
|
+
grpc_call_stack* owning_call() const { return owning_call_; }
|
|
209
|
+
CallCombiner* call_combiner() const { return call_combiner_; }
|
|
216
210
|
|
|
217
211
|
ClientChannelFilter* chand() const override {
|
|
218
212
|
return static_cast<ClientChannelFilter*>(elem()->channel_data);
|
|
219
213
|
}
|
|
220
|
-
Arena* arena() const override { return
|
|
214
|
+
Arena* arena() const override { return arena_; }
|
|
221
215
|
grpc_polling_entity* pollent() override { return pollent_; }
|
|
222
216
|
grpc_metadata_batch* send_initial_metadata() override {
|
|
223
217
|
return pending_batches_[0]
|
|
224
218
|
->payload->send_initial_metadata.send_initial_metadata;
|
|
225
219
|
}
|
|
226
|
-
grpc_call_context_element* call_context() const override {
|
|
227
|
-
return call_context_;
|
|
228
|
-
}
|
|
229
220
|
|
|
230
221
|
// Returns the index into pending_batches_ to be used for batch.
|
|
231
222
|
static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
|
|
@@ -270,10 +261,7 @@ class ClientChannelFilter::FilterBasedCallData final
|
|
|
270
261
|
void ResetDeadline(Duration timeout) override {
|
|
271
262
|
const Timestamp per_method_deadline =
|
|
272
263
|
Timestamp::FromCycleCounterRoundUp(call_start_time_) + timeout;
|
|
273
|
-
|
|
274
|
-
deadline_ = per_method_deadline;
|
|
275
|
-
grpc_deadline_state_reset(&deadline_state_, deadline_);
|
|
276
|
-
}
|
|
264
|
+
arena_->GetContext<Call>()->UpdateDeadline(per_method_deadline);
|
|
277
265
|
}
|
|
278
266
|
|
|
279
267
|
void CreateDynamicCall();
|
|
@@ -282,12 +270,13 @@ class ClientChannelFilter::FilterBasedCallData final
|
|
|
282
270
|
void* arg, grpc_error_handle error);
|
|
283
271
|
|
|
284
272
|
grpc_slice path_; // Request path.
|
|
285
|
-
grpc_call_context_element* call_context_;
|
|
286
273
|
gpr_cycle_counter call_start_time_;
|
|
287
274
|
Timestamp deadline_;
|
|
288
275
|
|
|
289
|
-
|
|
290
|
-
|
|
276
|
+
Arena* const arena_;
|
|
277
|
+
grpc_call_element* const elem_;
|
|
278
|
+
grpc_call_stack* const owning_call_;
|
|
279
|
+
CallCombiner* const call_combiner_;
|
|
291
280
|
|
|
292
281
|
grpc_polling_entity* pollent_ = nullptr;
|
|
293
282
|
|
|
@@ -311,121 +300,12 @@ class ClientChannelFilter::FilterBasedCallData final
|
|
|
311
300
|
grpc_error_handle cancel_error_;
|
|
312
301
|
};
|
|
313
302
|
|
|
314
|
-
class ClientChannelFilter::PromiseBasedCallData final
|
|
315
|
-
: public ClientChannelFilter::CallData {
|
|
316
|
-
public:
|
|
317
|
-
explicit PromiseBasedCallData(ClientChannelFilter* chand) : chand_(chand) {}
|
|
318
|
-
|
|
319
|
-
~PromiseBasedCallData() override {
|
|
320
|
-
if (was_queued_ && client_initial_metadata_ != nullptr) {
|
|
321
|
-
MutexLock lock(&chand_->resolution_mu_);
|
|
322
|
-
RemoveCallFromResolverQueuedCallsLocked();
|
|
323
|
-
chand_->resolver_queued_calls_.erase(this);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
ArenaPromise<absl::StatusOr<CallArgs>> MakeNameResolutionPromise(
|
|
328
|
-
CallArgs call_args) {
|
|
329
|
-
pollent_ = NowOrNever(call_args.polling_entity->WaitAndCopy()).value();
|
|
330
|
-
client_initial_metadata_ = std::move(call_args.client_initial_metadata);
|
|
331
|
-
// If we're still in IDLE, we need to start resolving.
|
|
332
|
-
if (GPR_UNLIKELY(chand_->CheckConnectivityState(false) ==
|
|
333
|
-
GRPC_CHANNEL_IDLE)) {
|
|
334
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
|
335
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: %striggering exit idle", chand_,
|
|
336
|
-
this, GetContext<Activity>()->DebugTag().c_str());
|
|
337
|
-
}
|
|
338
|
-
// Bounce into the control plane work serializer to start resolving.
|
|
339
|
-
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ExitIdle");
|
|
340
|
-
chand_->work_serializer_->Run(
|
|
341
|
-
[chand = chand_]()
|
|
342
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
|
343
|
-
chand->CheckConnectivityState(/*try_to_connect=*/true);
|
|
344
|
-
GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_, "ExitIdle");
|
|
345
|
-
},
|
|
346
|
-
DEBUG_LOCATION);
|
|
347
|
-
}
|
|
348
|
-
return [this, call_args = std::move(
|
|
349
|
-
call_args)]() mutable -> Poll<absl::StatusOr<CallArgs>> {
|
|
350
|
-
auto result = CheckResolution(was_queued_);
|
|
351
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
|
352
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: %sCheckResolution returns %s",
|
|
353
|
-
chand_, this, GetContext<Activity>()->DebugTag().c_str(),
|
|
354
|
-
result.has_value() ? result->ToString().c_str() : "Pending");
|
|
355
|
-
}
|
|
356
|
-
if (!result.has_value()) return Pending{};
|
|
357
|
-
if (!result->ok()) return *result;
|
|
358
|
-
call_args.client_initial_metadata = std::move(client_initial_metadata_);
|
|
359
|
-
return std::move(call_args);
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
private:
|
|
364
|
-
ClientChannelFilter* chand() const override { return chand_; }
|
|
365
|
-
Arena* arena() const override { return GetContext<Arena>(); }
|
|
366
|
-
grpc_polling_entity* pollent() override { return &pollent_; }
|
|
367
|
-
grpc_metadata_batch* send_initial_metadata() override {
|
|
368
|
-
return client_initial_metadata_.get();
|
|
369
|
-
}
|
|
370
|
-
grpc_call_context_element* call_context() const override {
|
|
371
|
-
return GetContext<grpc_call_context_element>();
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
void OnAddToQueueLocked() override
|
|
375
|
-
ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::resolution_mu_) {
|
|
376
|
-
waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
377
|
-
was_queued_ = true;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
void RetryCheckResolutionLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
|
381
|
-
&ClientChannelFilter::resolution_mu_) override {
|
|
382
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
|
383
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: RetryCheckResolutionLocked(): %s",
|
|
384
|
-
chand_, this, waker_.ActivityDebugTag().c_str());
|
|
385
|
-
}
|
|
386
|
-
waker_.WakeupAsync();
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
void ResetDeadline(Duration timeout) override {
|
|
390
|
-
CallContext* call_context = GetContext<CallContext>();
|
|
391
|
-
const Timestamp per_method_deadline =
|
|
392
|
-
Timestamp::FromCycleCounterRoundUp(call_context->call_start_time()) +
|
|
393
|
-
timeout;
|
|
394
|
-
call_context->UpdateDeadline(per_method_deadline);
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
ClientChannelFilter* chand_;
|
|
398
|
-
grpc_polling_entity pollent_;
|
|
399
|
-
ClientMetadataHandle client_initial_metadata_;
|
|
400
|
-
bool was_queued_ = false;
|
|
401
|
-
Waker waker_ ABSL_GUARDED_BY(&ClientChannelFilter::resolution_mu_);
|
|
402
|
-
};
|
|
403
|
-
|
|
404
303
|
//
|
|
405
304
|
// Filter vtable
|
|
406
305
|
//
|
|
407
306
|
|
|
408
|
-
const grpc_channel_filter ClientChannelFilter::
|
|
307
|
+
const grpc_channel_filter ClientChannelFilter::kFilter = {
|
|
409
308
|
ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch,
|
|
410
|
-
ClientChannelFilter::MakeCallPromise,
|
|
411
|
-
/* init_call: */ nullptr,
|
|
412
|
-
ClientChannelFilter::StartTransportOp,
|
|
413
|
-
sizeof(ClientChannelFilter::FilterBasedCallData),
|
|
414
|
-
ClientChannelFilter::FilterBasedCallData::Init,
|
|
415
|
-
ClientChannelFilter::FilterBasedCallData::SetPollent,
|
|
416
|
-
ClientChannelFilter::FilterBasedCallData::Destroy,
|
|
417
|
-
sizeof(ClientChannelFilter),
|
|
418
|
-
ClientChannelFilter::Init,
|
|
419
|
-
grpc_channel_stack_no_post_init,
|
|
420
|
-
ClientChannelFilter::Destroy,
|
|
421
|
-
ClientChannelFilter::GetChannelInfo,
|
|
422
|
-
"client-channel",
|
|
423
|
-
};
|
|
424
|
-
|
|
425
|
-
const grpc_channel_filter ClientChannelFilter::kFilterVtableWithoutPromises = {
|
|
426
|
-
ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch,
|
|
427
|
-
nullptr,
|
|
428
|
-
/* init_call: */ nullptr,
|
|
429
309
|
ClientChannelFilter::StartTransportOp,
|
|
430
310
|
sizeof(ClientChannelFilter::FilterBasedCallData),
|
|
431
311
|
ClientChannelFilter::FilterBasedCallData::Init,
|
|
@@ -445,10 +325,9 @@ const grpc_channel_filter ClientChannelFilter::kFilterVtableWithoutPromises = {
|
|
|
445
325
|
|
|
446
326
|
namespace {
|
|
447
327
|
|
|
448
|
-
ClientChannelServiceConfigCallData* GetServiceConfigCallData(
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
|
|
328
|
+
ClientChannelServiceConfigCallData* GetServiceConfigCallData(Arena* arena) {
|
|
329
|
+
return DownCast<ClientChannelServiceConfigCallData*>(
|
|
330
|
+
arena->GetContext<ServiceConfigCallData>());
|
|
452
331
|
}
|
|
453
332
|
|
|
454
333
|
class DynamicTerminationFilter final {
|
|
@@ -459,8 +338,8 @@ class DynamicTerminationFilter final {
|
|
|
459
338
|
|
|
460
339
|
static grpc_error_handle Init(grpc_channel_element* elem,
|
|
461
340
|
grpc_channel_element_args* args) {
|
|
462
|
-
|
|
463
|
-
|
|
341
|
+
CHECK(args->is_last);
|
|
342
|
+
CHECK(elem->filter == &kFilterVtable);
|
|
464
343
|
new (elem->channel_data) DynamicTerminationFilter(args->channel_args);
|
|
465
344
|
return absl::OkStatus();
|
|
466
345
|
}
|
|
@@ -476,19 +355,6 @@ class DynamicTerminationFilter final {
|
|
|
476
355
|
static void GetChannelInfo(grpc_channel_element* /*elem*/,
|
|
477
356
|
const grpc_channel_info* /*info*/) {}
|
|
478
357
|
|
|
479
|
-
static ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
|
480
|
-
grpc_channel_element* elem, CallArgs call_args, NextPromiseFactory) {
|
|
481
|
-
auto* chand = static_cast<DynamicTerminationFilter*>(elem->channel_data);
|
|
482
|
-
return chand->chand_->CreateLoadBalancedCallPromise(
|
|
483
|
-
std::move(call_args),
|
|
484
|
-
[]() {
|
|
485
|
-
auto* service_config_call_data =
|
|
486
|
-
GetServiceConfigCallData(GetContext<grpc_call_context_element>());
|
|
487
|
-
service_config_call_data->Commit();
|
|
488
|
-
},
|
|
489
|
-
/*is_transparent_retry=*/false);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
358
|
private:
|
|
493
359
|
explicit DynamicTerminationFilter(const ChannelArgs& args)
|
|
494
360
|
: chand_(args.GetObject<ClientChannelFilter>()) {}
|
|
@@ -532,21 +398,18 @@ class DynamicTerminationFilter::CallData final {
|
|
|
532
398
|
auto* calld = static_cast<CallData*>(elem->call_data);
|
|
533
399
|
auto* chand = static_cast<DynamicTerminationFilter*>(elem->channel_data);
|
|
534
400
|
ClientChannelFilter* client_channel = chand->chand_;
|
|
535
|
-
grpc_call_element_args args = {calld->owning_call_,
|
|
536
|
-
calld->
|
|
537
|
-
/*start_time=*/0,
|
|
538
|
-
calld->arena_,
|
|
539
|
-
auto* service_config_call_data =
|
|
540
|
-
GetServiceConfigCallData(calld->call_context_);
|
|
401
|
+
grpc_call_element_args args = {calld->owning_call_, nullptr,
|
|
402
|
+
calld->path_,
|
|
403
|
+
/*start_time=*/0, calld->deadline_,
|
|
404
|
+
calld->arena_, calld->call_combiner_};
|
|
405
|
+
auto* service_config_call_data = GetServiceConfigCallData(calld->arena_);
|
|
541
406
|
calld->lb_call_ = client_channel->CreateLoadBalancedCall(
|
|
542
407
|
args, pollent, nullptr,
|
|
543
408
|
[service_config_call_data]() { service_config_call_data->Commit(); },
|
|
544
409
|
/*is_transparent_retry=*/false);
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
client_channel, calld->lb_call_.get());
|
|
549
|
-
}
|
|
410
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
411
|
+
<< "chand=" << chand << " dynamic_termination_calld=" << client_channel
|
|
412
|
+
<< ": create lb_call=" << calld->lb_call_.get();
|
|
550
413
|
}
|
|
551
414
|
|
|
552
415
|
private:
|
|
@@ -555,8 +418,7 @@ class DynamicTerminationFilter::CallData final {
|
|
|
555
418
|
deadline_(args.deadline),
|
|
556
419
|
arena_(args.arena),
|
|
557
420
|
owning_call_(args.call_stack),
|
|
558
|
-
call_combiner_(args.call_combiner)
|
|
559
|
-
call_context_(args.context) {}
|
|
421
|
+
call_combiner_(args.call_combiner) {}
|
|
560
422
|
|
|
561
423
|
~CallData() { CSliceUnref(path_); }
|
|
562
424
|
|
|
@@ -565,15 +427,12 @@ class DynamicTerminationFilter::CallData final {
|
|
|
565
427
|
Arena* arena_;
|
|
566
428
|
grpc_call_stack* owning_call_;
|
|
567
429
|
CallCombiner* call_combiner_;
|
|
568
|
-
grpc_call_context_element* call_context_;
|
|
569
430
|
|
|
570
431
|
OrphanablePtr<ClientChannelFilter::FilterBasedLoadBalancedCall> lb_call_;
|
|
571
432
|
};
|
|
572
433
|
|
|
573
434
|
const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
|
|
574
435
|
DynamicTerminationFilter::CallData::StartTransportStreamOpBatch,
|
|
575
|
-
DynamicTerminationFilter::MakeCallPromise,
|
|
576
|
-
/* init_call: */ nullptr,
|
|
577
436
|
DynamicTerminationFilter::StartTransportOp,
|
|
578
437
|
sizeof(DynamicTerminationFilter::CallData),
|
|
579
438
|
DynamicTerminationFilter::CallData::Init,
|
|
@@ -601,9 +460,8 @@ class ClientChannelFilter::ResolverResultHandler final
|
|
|
601
460
|
}
|
|
602
461
|
|
|
603
462
|
~ResolverResultHandler() override {
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
}
|
|
463
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
464
|
+
<< "chand=" << chand_ << ": resolver shutdown complete";
|
|
607
465
|
GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ResolverResultHandler");
|
|
608
466
|
}
|
|
609
467
|
|
|
@@ -633,18 +491,18 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
633
491
|
public:
|
|
634
492
|
SubchannelWrapper(ClientChannelFilter* chand,
|
|
635
493
|
RefCountedPtr<Subchannel> subchannel)
|
|
636
|
-
: SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(
|
|
494
|
+
: SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(client_channel)
|
|
637
495
|
? "SubchannelWrapper"
|
|
638
496
|
: nullptr),
|
|
639
497
|
chand_(chand),
|
|
640
498
|
subchannel_(std::move(subchannel)) {
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
chand, this, subchannel_.get());
|
|
645
|
-
}
|
|
499
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
500
|
+
<< "chand=" << chand << ": creating subchannel wrapper " << this
|
|
501
|
+
<< " for subchannel " << subchannel_.get();
|
|
646
502
|
GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "SubchannelWrapper");
|
|
647
|
-
|
|
503
|
+
#ifndef NDEBUG
|
|
504
|
+
DCHECK(chand_->work_serializer_->RunningInWorkSerializer());
|
|
505
|
+
#endif
|
|
648
506
|
if (chand_->channelz_node_ != nullptr) {
|
|
649
507
|
auto* subchannel_node = subchannel_->channelz_node();
|
|
650
508
|
if (subchannel_node != nullptr) {
|
|
@@ -661,18 +519,16 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
661
519
|
}
|
|
662
520
|
|
|
663
521
|
~SubchannelWrapper() override {
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
chand_, this, subchannel_.get());
|
|
668
|
-
}
|
|
522
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
523
|
+
<< "chand=" << chand_ << ": destroying subchannel wrapper " << this
|
|
524
|
+
<< "for subchannel " << subchannel_.get();
|
|
669
525
|
if (!IsWorkSerializerDispatchEnabled()) {
|
|
670
526
|
chand_->subchannel_wrappers_.erase(this);
|
|
671
527
|
if (chand_->channelz_node_ != nullptr) {
|
|
672
528
|
auto* subchannel_node = subchannel_->channelz_node();
|
|
673
529
|
if (subchannel_node != nullptr) {
|
|
674
530
|
auto it = chand_->subchannel_refcount_map_.find(subchannel_.get());
|
|
675
|
-
|
|
531
|
+
CHECK(it != chand_->subchannel_refcount_map_.end());
|
|
676
532
|
--it->second;
|
|
677
533
|
if (it->second == 0) {
|
|
678
534
|
chand_->channelz_node_->RemoveChildSubchannel(
|
|
@@ -699,7 +555,7 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
699
555
|
if (subchannel_node != nullptr) {
|
|
700
556
|
auto it =
|
|
701
557
|
chand_->subchannel_refcount_map_.find(subchannel_.get());
|
|
702
|
-
|
|
558
|
+
CHECK(it != chand_->subchannel_refcount_map_.end());
|
|
703
559
|
--it->second;
|
|
704
560
|
if (it->second == 0) {
|
|
705
561
|
chand_->channelz_node_->RemoveChildSubchannel(
|
|
@@ -717,7 +573,7 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
717
573
|
std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
|
|
718
574
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
|
719
575
|
auto& watcher_wrapper = watcher_map_[watcher.get()];
|
|
720
|
-
|
|
576
|
+
CHECK_EQ(watcher_wrapper, nullptr);
|
|
721
577
|
watcher_wrapper = new WatcherWrapper(
|
|
722
578
|
std::move(watcher),
|
|
723
579
|
RefAsSubclass<SubchannelWrapper>(DEBUG_LOCATION, "WatcherWrapper"));
|
|
@@ -729,7 +585,7 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
729
585
|
void CancelConnectivityStateWatch(ConnectivityStateWatcherInterface* watcher)
|
|
730
586
|
override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
|
731
587
|
auto it = watcher_map_.find(watcher);
|
|
732
|
-
|
|
588
|
+
CHECK(it != watcher_map_.end());
|
|
733
589
|
subchannel_->CancelConnectivityStateWatch(it->second);
|
|
734
590
|
watcher_map_.erase(it);
|
|
735
591
|
}
|
|
@@ -746,7 +602,7 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
746
602
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
|
747
603
|
static_cast<InternalSubchannelDataWatcherInterface*>(watcher.get())
|
|
748
604
|
->SetSubchannel(subchannel_.get());
|
|
749
|
-
|
|
605
|
+
CHECK(data_watchers_.insert(std::move(watcher)).second);
|
|
750
606
|
}
|
|
751
607
|
|
|
752
608
|
void CancelDataWatcher(DataWatcherInterface* watcher) override
|
|
@@ -798,12 +654,11 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
798
654
|
void OnConnectivityStateChange(
|
|
799
655
|
RefCountedPtr<ConnectivityStateWatcherInterface> self,
|
|
800
656
|
grpc_connectivity_state state, const absl::Status& status) override {
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
}
|
|
657
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
658
|
+
<< "chand=" << parent_->chand_
|
|
659
|
+
<< ": connectivity change for subchannel wrapper " << parent_.get()
|
|
660
|
+
<< " subchannel " << parent_->subchannel_.get()
|
|
661
|
+
<< "hopping into work_serializer";
|
|
807
662
|
self.release(); // Held by callback.
|
|
808
663
|
parent_->chand_->work_serializer_->Run(
|
|
809
664
|
[this, state, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
|
|
@@ -822,15 +677,13 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
822
677
|
void ApplyUpdateInControlPlaneWorkSerializer(grpc_connectivity_state state,
|
|
823
678
|
const absl::Status& status)
|
|
824
679
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
status.ToString().c_str());
|
|
833
|
-
}
|
|
680
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
681
|
+
<< "chand=" << parent_->chand_
|
|
682
|
+
<< ": processing connectivity change in work serializer for "
|
|
683
|
+
"subchannel wrapper "
|
|
684
|
+
<< parent_.get() << " subchannel " << parent_->subchannel_.get()
|
|
685
|
+
<< " watcher=" << watcher_.get()
|
|
686
|
+
<< " state=" << ConnectivityStateName(state) << " status=" << status;
|
|
834
687
|
absl::optional<absl::Cord> keepalive_throttling =
|
|
835
688
|
status.GetPayload(kKeepaliveThrottlingKey);
|
|
836
689
|
if (keepalive_throttling.has_value()) {
|
|
@@ -839,10 +692,10 @@ class ClientChannelFilter::SubchannelWrapper final
|
|
|
839
692
|
&new_keepalive_time)) {
|
|
840
693
|
if (new_keepalive_time > parent_->chand_->keepalive_time_) {
|
|
841
694
|
parent_->chand_->keepalive_time_ = new_keepalive_time;
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
695
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
696
|
+
<< "chand=" << parent_->chand_
|
|
697
|
+
<< ": throttling keepalive time to "
|
|
698
|
+
<< parent_->chand_->keepalive_time_;
|
|
846
699
|
// Propagate the new keepalive time to all subchannels. This is so
|
|
847
700
|
// that new transports created by any subchannel (and not just the
|
|
848
701
|
// subchannel that received the GOAWAY), use the new keepalive time.
|
|
@@ -922,7 +775,7 @@ ClientChannelFilter::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
|
|
|
922
775
|
{
|
|
923
776
|
MutexLock lock(&chand_->external_watchers_mu_);
|
|
924
777
|
// Will be deleted when the watch is complete.
|
|
925
|
-
|
|
778
|
+
CHECK(chand->external_watchers_[on_complete] == nullptr);
|
|
926
779
|
// Store a ref to the watcher in the external_watchers_ map.
|
|
927
780
|
chand->external_watchers_[on_complete] =
|
|
928
781
|
RefAsSubclass<ExternalConnectivityWatcher>(
|
|
@@ -1107,7 +960,7 @@ class ClientChannelFilter::ClientChannelControlHelper final
|
|
|
1107
960
|
const ChannelArgs& args) override
|
|
1108
961
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
|
1109
962
|
if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
|
|
1110
|
-
ChannelArgs subchannel_args =
|
|
963
|
+
ChannelArgs subchannel_args = Subchannel::MakeSubchannelArgs(
|
|
1111
964
|
args, per_address_args, chand_->subchannel_pool_,
|
|
1112
965
|
chand_->default_authority_);
|
|
1113
966
|
// Create subchannel.
|
|
@@ -1125,14 +978,13 @@ class ClientChannelFilter::ClientChannelControlHelper final
|
|
|
1125
978
|
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker)
|
|
1126
979
|
override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
|
1127
980
|
if (chand_->resolver_ == nullptr) return; // Shutting down.
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
}
|
|
981
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
982
|
+
<< "chand=" << chand_
|
|
983
|
+
<< ": update: state=" << ConnectivityStateName(state) << " status=("
|
|
984
|
+
<< status << ") picker=" << picker.get()
|
|
985
|
+
<< (chand_->disconnect_error_.ok()
|
|
986
|
+
? ""
|
|
987
|
+
: " (ignoring -- channel shutting down)");
|
|
1136
988
|
// Do update only if not shutting down.
|
|
1137
989
|
if (chand_->disconnect_error_.ok()) {
|
|
1138
990
|
chand_->UpdateStateAndPickerLocked(state, status, "helper",
|
|
@@ -1143,9 +995,8 @@ class ClientChannelFilter::ClientChannelControlHelper final
|
|
|
1143
995
|
void RequestReresolution() override
|
|
1144
996
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
|
|
1145
997
|
if (chand_->resolver_ == nullptr) return; // Shutting down.
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
}
|
|
998
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
999
|
+
<< "chand=" << chand_ << ": started name re-resolving";
|
|
1149
1000
|
chand_->resolver_->RequestReresolutionLocked();
|
|
1150
1001
|
}
|
|
1151
1002
|
|
|
@@ -1200,9 +1051,8 @@ class ClientChannelFilter::ClientChannelControlHelper final
|
|
|
1200
1051
|
|
|
1201
1052
|
grpc_error_handle ClientChannelFilter::Init(grpc_channel_element* elem,
|
|
1202
1053
|
grpc_channel_element_args* args) {
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
elem->filter == &kFilterVtableWithoutPromises);
|
|
1054
|
+
CHECK(args->is_last);
|
|
1055
|
+
CHECK(elem->filter == &kFilter);
|
|
1206
1056
|
grpc_error_handle error;
|
|
1207
1057
|
new (elem->channel_data) ClientChannelFilter(args, &error);
|
|
1208
1058
|
return error;
|
|
@@ -1228,9 +1078,6 @@ RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
|
|
|
1228
1078
|
ClientChannelFilter::ClientChannelFilter(grpc_channel_element_args* args,
|
|
1229
1079
|
grpc_error_handle* error)
|
|
1230
1080
|
: channel_args_(args->channel_args),
|
|
1231
|
-
deadline_checking_enabled_(
|
|
1232
|
-
channel_args_.GetBool(GRPC_ARG_ENABLE_DEADLINE_CHECKS)
|
|
1233
|
-
.value_or(!channel_args_.WantMinimalStack())),
|
|
1234
1081
|
owning_stack_(args->channel_stack),
|
|
1235
1082
|
client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
|
|
1236
1083
|
channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
|
|
@@ -1241,10 +1088,9 @@ ClientChannelFilter::ClientChannelFilter(grpc_channel_element_args* args,
|
|
|
1241
1088
|
std::make_shared<WorkSerializer>(*args->channel_stack->event_engine)),
|
|
1242
1089
|
state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
|
|
1243
1090
|
subchannel_pool_(GetSubchannelPool(channel_args_)) {
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
}
|
|
1091
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1092
|
+
<< "chand=" << this << ": creating client_channel for channel stack "
|
|
1093
|
+
<< owning_stack_;
|
|
1248
1094
|
// Start backup polling.
|
|
1249
1095
|
grpc_client_channel_start_backup_polling(interested_parties_);
|
|
1250
1096
|
// Check client channel factory.
|
|
@@ -1313,30 +1159,14 @@ ClientChannelFilter::ClientChannelFilter(grpc_channel_element_args* args,
|
|
|
1313
1159
|
}
|
|
1314
1160
|
|
|
1315
1161
|
ClientChannelFilter::~ClientChannelFilter() {
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
}
|
|
1162
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1163
|
+
<< "chand=" << this << ": destroying channel";
|
|
1319
1164
|
DestroyResolverAndLbPolicyLocked();
|
|
1320
1165
|
// Stop backup polling.
|
|
1321
1166
|
grpc_client_channel_stop_backup_polling(interested_parties_);
|
|
1322
1167
|
grpc_pollset_set_destroy(interested_parties_);
|
|
1323
1168
|
}
|
|
1324
1169
|
|
|
1325
|
-
ArenaPromise<ServerMetadataHandle> ClientChannelFilter::MakeCallPromise(
|
|
1326
|
-
grpc_channel_element* elem, CallArgs call_args, NextPromiseFactory) {
|
|
1327
|
-
auto* chand = static_cast<ClientChannelFilter*>(elem->channel_data);
|
|
1328
|
-
// TODO(roth): Is this the right lifetime story for calld?
|
|
1329
|
-
auto* calld = GetContext<Arena>()->ManagedNew<PromiseBasedCallData>(chand);
|
|
1330
|
-
return TrySeq(
|
|
1331
|
-
// Name resolution.
|
|
1332
|
-
calld->MakeNameResolutionPromise(std::move(call_args)),
|
|
1333
|
-
// Dynamic filter stack.
|
|
1334
|
-
[calld](CallArgs call_args) mutable {
|
|
1335
|
-
return calld->dynamic_filters()->channel_stack()->MakeClientCallPromise(
|
|
1336
|
-
std::move(call_args));
|
|
1337
|
-
});
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
1170
|
OrphanablePtr<ClientChannelFilter::FilterBasedLoadBalancedCall>
|
|
1341
1171
|
ClientChannelFilter::CreateLoadBalancedCall(
|
|
1342
1172
|
const grpc_call_element_args& args, grpc_polling_entity* pollent,
|
|
@@ -1349,42 +1179,6 @@ ClientChannelFilter::CreateLoadBalancedCall(
|
|
|
1349
1179
|
std::move(on_commit), is_transparent_retry));
|
|
1350
1180
|
}
|
|
1351
1181
|
|
|
1352
|
-
ArenaPromise<ServerMetadataHandle>
|
|
1353
|
-
ClientChannelFilter::CreateLoadBalancedCallPromise(
|
|
1354
|
-
CallArgs call_args, absl::AnyInvocable<void()> on_commit,
|
|
1355
|
-
bool is_transparent_retry) {
|
|
1356
|
-
OrphanablePtr<PromiseBasedLoadBalancedCall> lb_call(
|
|
1357
|
-
GetContext<Arena>()->New<PromiseBasedLoadBalancedCall>(
|
|
1358
|
-
this, std::move(on_commit), is_transparent_retry));
|
|
1359
|
-
auto* call_ptr = lb_call.get();
|
|
1360
|
-
return call_ptr->MakeCallPromise(std::move(call_args), std::move(lb_call));
|
|
1361
|
-
}
|
|
1362
|
-
|
|
1363
|
-
ChannelArgs ClientChannelFilter::MakeSubchannelArgs(
|
|
1364
|
-
const ChannelArgs& channel_args, const ChannelArgs& address_args,
|
|
1365
|
-
const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
|
|
1366
|
-
const std::string& channel_default_authority) {
|
|
1367
|
-
// Note that we start with the channel-level args and then apply the
|
|
1368
|
-
// per-address args, so that if a value is present in both, the one
|
|
1369
|
-
// in the channel-level args is used. This is particularly important
|
|
1370
|
-
// for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
|
|
1371
|
-
// resolvers to set on a per-address basis only if the application
|
|
1372
|
-
// did not explicitly set it at the channel level.
|
|
1373
|
-
return channel_args.UnionWith(address_args)
|
|
1374
|
-
.SetObject(subchannel_pool)
|
|
1375
|
-
// If we haven't already set the default authority arg (i.e., it
|
|
1376
|
-
// was not explicitly set by the application nor overridden by
|
|
1377
|
-
// the resolver), add it from the channel's default.
|
|
1378
|
-
.SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
|
|
1379
|
-
// Remove channel args that should not affect subchannel
|
|
1380
|
-
// uniqueness.
|
|
1381
|
-
.Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
|
|
1382
|
-
.Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
|
|
1383
|
-
.Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE)
|
|
1384
|
-
// Remove all keys with the no-subchannel prefix.
|
|
1385
|
-
.RemoveAllKeysWithPrefix(GRPC_ARG_NO_SUBCHANNEL_PREFIX);
|
|
1386
|
-
}
|
|
1387
|
-
|
|
1388
1182
|
void ClientChannelFilter::ReprocessQueuedResolverCalls() {
|
|
1389
1183
|
for (CallData* calld : resolver_queued_calls_) {
|
|
1390
1184
|
calld->RemoveCallFromResolverQueuedCallsLocked();
|
|
@@ -1448,7 +1242,7 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
|
|
|
1448
1242
|
// - A channel arg, in which case we check that the specified policy exists
|
|
1449
1243
|
// and accepts an empty config. If not, we revert to using pick_first
|
|
1450
1244
|
// lb_policy
|
|
1451
|
-
|
|
1245
|
+
CHECK(lb_policy_config.ok());
|
|
1452
1246
|
return std::move(*lb_policy_config);
|
|
1453
1247
|
}
|
|
1454
1248
|
|
|
@@ -1458,9 +1252,8 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
|
|
|
1458
1252
|
Resolver::Result result) {
|
|
1459
1253
|
// Handle race conditions.
|
|
1460
1254
|
if (resolver_ == nullptr) return;
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
}
|
|
1255
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1256
|
+
<< "chand=" << this << ": got resolver result";
|
|
1464
1257
|
// Grab resolver result health callback.
|
|
1465
1258
|
auto resolver_callback = std::move(result.result_health_callback);
|
|
1466
1259
|
absl::Status resolver_result_status;
|
|
@@ -1494,19 +1287,16 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
|
|
|
1494
1287
|
RefCountedPtr<ServiceConfig> service_config;
|
|
1495
1288
|
RefCountedPtr<ConfigSelector> config_selector;
|
|
1496
1289
|
if (!result.service_config.ok()) {
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
}
|
|
1290
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1291
|
+
<< "chand=" << this << ": resolver returned service config error: "
|
|
1292
|
+
<< result.service_config.status();
|
|
1501
1293
|
// If the service config was invalid, then fallback to the
|
|
1502
1294
|
// previously returned service config.
|
|
1503
1295
|
if (saved_service_config_ != nullptr) {
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
this);
|
|
1509
|
-
}
|
|
1296
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1297
|
+
<< "chand=" << this
|
|
1298
|
+
<< ": resolver returned invalid service config. "
|
|
1299
|
+
"Continuing to use previous service config.";
|
|
1510
1300
|
service_config = saved_service_config_;
|
|
1511
1301
|
config_selector = saved_config_selector_;
|
|
1512
1302
|
} else {
|
|
@@ -1520,12 +1310,10 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
|
|
|
1520
1310
|
}
|
|
1521
1311
|
} else if (*result.service_config == nullptr) {
|
|
1522
1312
|
// Resolver did not return any service config.
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
this);
|
|
1528
|
-
}
|
|
1313
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1314
|
+
<< "chand=" << this
|
|
1315
|
+
<< ": resolver returned no service config. Using default service "
|
|
1316
|
+
"config for channel.";
|
|
1529
1317
|
service_config = default_service_config_;
|
|
1530
1318
|
} else {
|
|
1531
1319
|
// Use ServiceConfig and ConfigSelector returned by resolver.
|
|
@@ -1557,8 +1345,9 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
|
|
|
1557
1345
|
UpdateServiceConfigInControlPlaneLocked(
|
|
1558
1346
|
std::move(service_config), std::move(config_selector),
|
|
1559
1347
|
std::string(lb_policy_config->name()));
|
|
1560
|
-
} else
|
|
1561
|
-
|
|
1348
|
+
} else {
|
|
1349
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1350
|
+
<< "chand=" << this << ": service config not changed";
|
|
1562
1351
|
}
|
|
1563
1352
|
// Create or update LB policy, as needed.
|
|
1564
1353
|
resolver_result_status = CreateOrUpdateLbPolicyLocked(
|
|
@@ -1592,10 +1381,8 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
|
|
|
1592
1381
|
|
|
1593
1382
|
void ClientChannelFilter::OnResolverErrorLocked(absl::Status status) {
|
|
1594
1383
|
if (resolver_ == nullptr) return;
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
status.ToString().c_str());
|
|
1598
|
-
}
|
|
1384
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1385
|
+
<< "chand=" << this << ": resolver transient failure: " << status;
|
|
1599
1386
|
// If we already have an LB policy from a previous resolution
|
|
1600
1387
|
// result, then we continue to let it set the connectivity state.
|
|
1601
1388
|
// Otherwise, we go into TRANSIENT_FAILURE.
|
|
@@ -1641,10 +1428,8 @@ absl::Status ClientChannelFilter::CreateOrUpdateLbPolicyLocked(
|
|
|
1641
1428
|
lb_policy_ = CreateLbPolicyLocked(update_args.args);
|
|
1642
1429
|
}
|
|
1643
1430
|
// Update the policy.
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
lb_policy_.get());
|
|
1647
|
-
}
|
|
1431
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1432
|
+
<< "chand=" << this << ": Updating child policy " << lb_policy_.get();
|
|
1648
1433
|
return lb_policy_->UpdateLocked(std::move(update_args));
|
|
1649
1434
|
}
|
|
1650
1435
|
|
|
@@ -1666,11 +1451,9 @@ OrphanablePtr<LoadBalancingPolicy> ClientChannelFilter::CreateLbPolicyLocked(
|
|
|
1666
1451
|
lb_policy_args.args = args;
|
|
1667
1452
|
OrphanablePtr<LoadBalancingPolicy> lb_policy =
|
|
1668
1453
|
MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
|
|
1669
|
-
&
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
lb_policy.get());
|
|
1673
|
-
}
|
|
1454
|
+
&client_channel_trace);
|
|
1455
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1456
|
+
<< "chand=" << this << ": created new LB policy " << lb_policy.get();
|
|
1674
1457
|
grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
|
|
1675
1458
|
interested_parties_);
|
|
1676
1459
|
return lb_policy;
|
|
@@ -1680,10 +1463,9 @@ void ClientChannelFilter::UpdateServiceConfigInControlPlaneLocked(
|
|
|
1680
1463
|
RefCountedPtr<ServiceConfig> service_config,
|
|
1681
1464
|
RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
|
|
1682
1465
|
std::string service_config_json(service_config->json_string());
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
}
|
|
1466
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1467
|
+
<< "chand=" << this << ": using service config: \"" << service_config_json
|
|
1468
|
+
<< "\"";
|
|
1687
1469
|
// Save service config.
|
|
1688
1470
|
saved_service_config_ = std::move(service_config);
|
|
1689
1471
|
// Swap out the data used by GetChannelInfo().
|
|
@@ -1694,10 +1476,9 @@ void ClientChannelFilter::UpdateServiceConfigInControlPlaneLocked(
|
|
|
1694
1476
|
}
|
|
1695
1477
|
// Save config selector.
|
|
1696
1478
|
saved_config_selector_ = std::move(config_selector);
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
}
|
|
1479
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1480
|
+
<< "chand=" << this << ": using ConfigSelector "
|
|
1481
|
+
<< saved_config_selector_.get();
|
|
1701
1482
|
}
|
|
1702
1483
|
|
|
1703
1484
|
void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked() {
|
|
@@ -1705,10 +1486,9 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked() {
|
|
|
1705
1486
|
RefCountedPtr<ServiceConfig> service_config = saved_service_config_;
|
|
1706
1487
|
// Grab ref to config selector. Use default if resolver didn't supply one.
|
|
1707
1488
|
RefCountedPtr<ConfigSelector> config_selector = saved_config_selector_;
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
}
|
|
1489
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1490
|
+
<< "chand=" << this << ": switching to ConfigSelector "
|
|
1491
|
+
<< saved_config_selector_.get();
|
|
1712
1492
|
if (config_selector == nullptr) {
|
|
1713
1493
|
config_selector =
|
|
1714
1494
|
MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
|
|
@@ -1728,7 +1508,7 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked() {
|
|
|
1728
1508
|
}
|
|
1729
1509
|
RefCountedPtr<DynamicFilters> dynamic_filters =
|
|
1730
1510
|
DynamicFilters::Create(new_args, std::move(filters));
|
|
1731
|
-
|
|
1511
|
+
CHECK(dynamic_filters != nullptr);
|
|
1732
1512
|
// Grab data plane lock to update service config.
|
|
1733
1513
|
//
|
|
1734
1514
|
// We defer unreffing the old values (and deallocating memory) until
|
|
@@ -1750,30 +1530,26 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked() {
|
|
|
1750
1530
|
}
|
|
1751
1531
|
|
|
1752
1532
|
void ClientChannelFilter::CreateResolverLocked() {
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
}
|
|
1533
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1534
|
+
<< "chand=" << this << ": starting name resolution for "
|
|
1535
|
+
<< uri_to_resolve_;
|
|
1757
1536
|
resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
|
|
1758
1537
|
uri_to_resolve_, channel_args_, interested_parties_, work_serializer_,
|
|
1759
1538
|
std::make_unique<ResolverResultHandler>(this));
|
|
1760
1539
|
// Since the validity of the args was checked when the channel was created,
|
|
1761
1540
|
// CreateResolver() must return a non-null result.
|
|
1762
|
-
|
|
1541
|
+
CHECK(resolver_ != nullptr);
|
|
1763
1542
|
UpdateStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status(),
|
|
1764
1543
|
"started resolving");
|
|
1765
1544
|
resolver_->StartLocked();
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
}
|
|
1545
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1546
|
+
<< "chand=" << this << ": created resolver=" << resolver_.get();
|
|
1769
1547
|
}
|
|
1770
1548
|
|
|
1771
1549
|
void ClientChannelFilter::DestroyResolverAndLbPolicyLocked() {
|
|
1772
1550
|
if (resolver_ != nullptr) {
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
resolver_.get());
|
|
1776
|
-
}
|
|
1551
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1552
|
+
<< "chand=" << this << ": shutting down resolver=" << resolver_.get();
|
|
1777
1553
|
resolver_.reset();
|
|
1778
1554
|
// Clear resolution state.
|
|
1779
1555
|
saved_service_config_.reset();
|
|
@@ -1793,10 +1569,9 @@ void ClientChannelFilter::DestroyResolverAndLbPolicyLocked() {
|
|
|
1793
1569
|
}
|
|
1794
1570
|
// Clear LB policy if set.
|
|
1795
1571
|
if (lb_policy_ != nullptr) {
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
}
|
|
1572
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1573
|
+
<< "chand=" << this
|
|
1574
|
+
<< ": shutting down lb_policy=" << lb_policy_.get();
|
|
1800
1575
|
grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
|
|
1801
1576
|
interested_parties_);
|
|
1802
1577
|
lb_policy_.reset();
|
|
@@ -1868,7 +1643,7 @@ T HandlePickResult(
|
|
|
1868
1643
|
}
|
|
1869
1644
|
auto* drop_pick =
|
|
1870
1645
|
absl::get_if<LoadBalancingPolicy::PickResult::Drop>(&result->result);
|
|
1871
|
-
|
|
1646
|
+
CHECK_NE(drop_pick, nullptr);
|
|
1872
1647
|
return drop_func(drop_pick);
|
|
1873
1648
|
}
|
|
1874
1649
|
|
|
@@ -1942,10 +1717,9 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
|
|
|
1942
1717
|
}
|
|
1943
1718
|
// Disconnect or enter IDLE.
|
|
1944
1719
|
if (!op->disconnect_with_error.ok()) {
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
}
|
|
1720
|
+
GRPC_TRACE_LOG(client_channel, INFO)
|
|
1721
|
+
<< "chand=" << this << ": disconnect_with_error: "
|
|
1722
|
+
<< StatusToString(op->disconnect_with_error);
|
|
1949
1723
|
DestroyResolverAndLbPolicyLocked();
|
|
1950
1724
|
intptr_t value;
|
|
1951
1725
|
if (grpc_error_get_int(op->disconnect_with_error,
|
|
@@ -1962,7 +1736,7 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
|
|
|
1962
1736
|
}
|
|
1963
1737
|
} else {
|
|
1964
1738
|
// Disconnect.
|
|
1965
|
-
|
|
1739
|
+
CHECK(disconnect_error_.ok());
|
|
1966
1740
|
disconnect_error_ = op->disconnect_with_error;
|
|
1967
1741
|
UpdateStateAndPickerLocked(
|
|
1968
1742
|
GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
|
|
@@ -1980,7 +1754,7 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
|
|
|
1980
1754
|
void ClientChannelFilter::StartTransportOp(grpc_channel_element* elem,
|
|
1981
1755
|
grpc_transport_op* op) {
|
|
1982
1756
|
auto* chand = static_cast<ClientChannelFilter*>(elem->channel_data);
|
|
1983
|
-
|
|
1757
|
+
CHECK(op->set_accept_stream == false);
|
|
1984
1758
|
// Handle bind_pollset.
|
|
1985
1759
|
if (op->bind_pollset != nullptr) {
|
|
1986
1760
|
grpc_pollset_set_add_pollset(chand->interested_parties_, op->bind_pollset);
|
|
@@ -2050,11 +1824,9 @@ void ClientChannelFilter::RemoveConnectivityWatcher(
|
|
|
2050
1824
|
//
|
|
2051
1825
|
|
|
2052
1826
|
void ClientChannelFilter::CallData::RemoveCallFromResolverQueuedCallsLocked() {
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
chand(), this);
|
|
2057
|
-
}
|
|
1827
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
1828
|
+
<< "chand=" << chand() << " calld=" << this
|
|
1829
|
+
<< ": removing from resolver queued picks list";
|
|
2058
1830
|
// Remove call's pollent from channel's interested_parties.
|
|
2059
1831
|
grpc_polling_entity_del_from_pollset_set(pollent(),
|
|
2060
1832
|
chand()->interested_parties_);
|
|
@@ -2065,12 +1837,10 @@ void ClientChannelFilter::CallData::RemoveCallFromResolverQueuedCallsLocked() {
|
|
|
2065
1837
|
}
|
|
2066
1838
|
|
|
2067
1839
|
void ClientChannelFilter::CallData::AddCallToResolverQueuedCallsLocked() {
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
chand(), this, grpc_polling_entity_string(pollent()).c_str());
|
|
2073
|
-
}
|
|
1840
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
1841
|
+
<< "chand=" << chand() << " calld=" << this
|
|
1842
|
+
<< ": adding to resolver queued picks list; pollent="
|
|
1843
|
+
<< grpc_polling_entity_string(pollent());
|
|
2074
1844
|
// Add call's pollent to channel's interested_parties, so that I/O
|
|
2075
1845
|
// can be done under the call's CQ.
|
|
2076
1846
|
grpc_polling_entity_add_to_pollset_set(pollent(),
|
|
@@ -2082,10 +1852,9 @@ void ClientChannelFilter::CallData::AddCallToResolverQueuedCallsLocked() {
|
|
|
2082
1852
|
|
|
2083
1853
|
grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked(
|
|
2084
1854
|
const absl::StatusOr<RefCountedPtr<ConfigSelector>>& config_selector) {
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
}
|
|
1855
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
1856
|
+
<< "chand=" << chand() << " calld=" << this
|
|
1857
|
+
<< ": applying service config to call";
|
|
2089
1858
|
if (!config_selector.ok()) return config_selector.status();
|
|
2090
1859
|
// Create a ClientChannelServiceConfigCallData for the call. This stores
|
|
2091
1860
|
// a ref to the ServiceConfig and caches the right set of parsed configs
|
|
@@ -2093,7 +1862,7 @@ grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked(
|
|
|
2093
1862
|
// itself in the call context, so that it can be accessed by filters
|
|
2094
1863
|
// below us in the stack, and it will be cleaned up when the call ends.
|
|
2095
1864
|
auto* service_config_call_data =
|
|
2096
|
-
arena()->New<ClientChannelServiceConfigCallData>(arena()
|
|
1865
|
+
arena()->New<ClientChannelServiceConfigCallData>(arena());
|
|
2097
1866
|
// Use the ConfigSelector to determine the config for the call.
|
|
2098
1867
|
absl::Status call_config_status =
|
|
2099
1868
|
(*config_selector)
|
|
@@ -2110,8 +1879,7 @@ grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked(
|
|
|
2110
1879
|
if (method_params != nullptr) {
|
|
2111
1880
|
// If the deadline from the service config is shorter than the one
|
|
2112
1881
|
// from the client API, reset the deadline timer.
|
|
2113
|
-
if (
|
|
2114
|
-
method_params->timeout() != Duration::Zero()) {
|
|
1882
|
+
if (method_params->timeout() != Duration::Zero()) {
|
|
2115
1883
|
ResetDeadline(method_params->timeout());
|
|
2116
1884
|
}
|
|
2117
1885
|
// If the service config set wait_for_ready and the application
|
|
@@ -2151,17 +1919,14 @@ absl::optional<absl::Status> ClientChannelFilter::CallData::CheckResolution(
|
|
|
2151
1919
|
}
|
|
2152
1920
|
// Handle errors.
|
|
2153
1921
|
if (!error.ok()) {
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
chand(), this, StatusToString(error).c_str());
|
|
2158
|
-
}
|
|
1922
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
1923
|
+
<< "chand=" << chand() << " calld=" << this
|
|
1924
|
+
<< ": error applying config to call: error=" << StatusToString(error);
|
|
2159
1925
|
return error;
|
|
2160
1926
|
}
|
|
2161
1927
|
// If the call was queued, add trace annotation.
|
|
2162
1928
|
if (was_queued) {
|
|
2163
|
-
auto* call_tracer =
|
|
2164
|
-
call_context()[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
|
|
1929
|
+
auto* call_tracer = arena()->GetContext<CallTracerAnnotationInterface>();
|
|
2165
1930
|
if (call_tracer != nullptr) {
|
|
2166
1931
|
call_tracer->RecordAnnotation("Delayed name resolution complete.");
|
|
2167
1932
|
}
|
|
@@ -2179,20 +1944,18 @@ bool ClientChannelFilter::CallData::CheckResolutionLocked(
|
|
|
2179
1944
|
absl::Status resolver_error = chand()->resolver_transient_failure_error_;
|
|
2180
1945
|
if (!resolver_error.ok() &&
|
|
2181
1946
|
!send_initial_metadata()->GetOrCreatePointer(WaitForReady())->value) {
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
}
|
|
1947
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
1948
|
+
<< "chand=" << chand() << " calld=" << this
|
|
1949
|
+
<< ": resolution failed, failing call";
|
|
2186
1950
|
*config_selector = absl_status_to_grpc_error(resolver_error);
|
|
2187
1951
|
return true;
|
|
2188
1952
|
}
|
|
2189
1953
|
// Either the resolver has not yet returned a result, or it has
|
|
2190
1954
|
// returned transient failure but the call is wait_for_ready. In
|
|
2191
1955
|
// either case, queue the call.
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
}
|
|
1956
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
1957
|
+
<< "chand=" << chand() << " calld=" << this
|
|
1958
|
+
<< ": no resolver result yet";
|
|
2196
1959
|
return false;
|
|
2197
1960
|
}
|
|
2198
1961
|
// Result found.
|
|
@@ -2208,25 +1971,21 @@ bool ClientChannelFilter::CallData::CheckResolutionLocked(
|
|
|
2208
1971
|
ClientChannelFilter::FilterBasedCallData::FilterBasedCallData(
|
|
2209
1972
|
grpc_call_element* elem, const grpc_call_element_args& args)
|
|
2210
1973
|
: path_(CSliceRef(args.path)),
|
|
2211
|
-
call_context_(args.context),
|
|
2212
1974
|
call_start_time_(args.start_time),
|
|
2213
1975
|
deadline_(args.deadline),
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
|
|
2221
|
-
gpr_log(GPR_INFO, "chand=%p calld=%p: created call", chand(), this);
|
|
2222
|
-
}
|
|
1976
|
+
arena_(args.arena),
|
|
1977
|
+
elem_(elem),
|
|
1978
|
+
owning_call_(args.call_stack),
|
|
1979
|
+
call_combiner_(args.call_combiner) {
|
|
1980
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
1981
|
+
<< "chand=" << chand() << " calld=" << this << ": created call";
|
|
2223
1982
|
}
|
|
2224
1983
|
|
|
2225
1984
|
ClientChannelFilter::FilterBasedCallData::~FilterBasedCallData() {
|
|
2226
1985
|
CSliceUnref(path_);
|
|
2227
1986
|
// Make sure there are no remaining pending batches.
|
|
2228
1987
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
|
2229
|
-
|
|
1988
|
+
CHECK_EQ(pending_batches_[i], nullptr);
|
|
2230
1989
|
}
|
|
2231
1990
|
}
|
|
2232
1991
|
|
|
@@ -2255,15 +2014,11 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
|
|
|
2255
2014
|
grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
|
|
2256
2015
|
auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
|
|
2257
2016
|
auto* chand = static_cast<ClientChannelFilter*>(elem->channel_data);
|
|
2258
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
|
2259
|
-
!GRPC_TRACE_FLAG_ENABLED(
|
|
2017
|
+
if (GRPC_TRACE_FLAG_ENABLED(client_channel_call) &&
|
|
2018
|
+
!GRPC_TRACE_FLAG_ENABLED(channel)) {
|
|
2260
2019
|
gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from above: %s", chand,
|
|
2261
2020
|
calld, grpc_transport_stream_op_batch_string(batch, false).c_str());
|
|
2262
2021
|
}
|
|
2263
|
-
if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
|
|
2264
|
-
grpc_deadline_state_client_start_transport_stream_op_batch(
|
|
2265
|
-
&calld->deadline_state_, batch);
|
|
2266
|
-
}
|
|
2267
2022
|
// Intercept recv_trailing_metadata to commit the call, in case we wind up
|
|
2268
2023
|
// failing the call before we get down to the retry or LB call layer.
|
|
2269
2024
|
if (batch->recv_trailing_metadata) {
|
|
@@ -2279,10 +2034,9 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
|
|
|
2279
2034
|
// Note that once we have done so, we do not need to acquire the channel's
|
|
2280
2035
|
// resolution mutex, which is more efficient (especially for streaming calls).
|
|
2281
2036
|
if (calld->dynamic_call_ != nullptr) {
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
}
|
|
2037
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2038
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2039
|
+
<< ": starting batch on dynamic_call=" << calld->dynamic_call_.get();
|
|
2286
2040
|
calld->dynamic_call_->StartTransportStreamOpBatch(batch);
|
|
2287
2041
|
return;
|
|
2288
2042
|
}
|
|
@@ -2290,10 +2044,10 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
|
|
|
2290
2044
|
//
|
|
2291
2045
|
// If we've previously been cancelled, immediately fail any new batches.
|
|
2292
2046
|
if (GPR_UNLIKELY(!calld->cancel_error_.ok())) {
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2047
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2048
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2049
|
+
<< ": failing batch with error: "
|
|
2050
|
+
<< StatusToString(calld->cancel_error_);
|
|
2297
2051
|
// Note: This will release the call combiner.
|
|
2298
2052
|
grpc_transport_stream_op_batch_finish_with_failure(
|
|
2299
2053
|
batch, calld->cancel_error_, calld->call_combiner());
|
|
@@ -2307,10 +2061,9 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
|
|
|
2307
2061
|
// is in the past when the call starts), we can return the right
|
|
2308
2062
|
// error to the caller when the first batch does get passed down.
|
|
2309
2063
|
calld->cancel_error_ = batch->payload->cancel_stream.cancel_error;
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
}
|
|
2064
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2065
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2066
|
+
<< ": recording cancel_error=" << StatusToString(calld->cancel_error_);
|
|
2314
2067
|
// Fail all pending batches.
|
|
2315
2068
|
calld->PendingBatchesFail(calld->cancel_error_, NoYieldCallCombiner);
|
|
2316
2069
|
// Note: This will release the call combiner.
|
|
@@ -2324,19 +2077,15 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
|
|
|
2324
2077
|
// channel's resolution mutex to apply the service config to the call,
|
|
2325
2078
|
// after which we will create a dynamic call.
|
|
2326
2079
|
if (GPR_LIKELY(batch->send_initial_metadata)) {
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
"config",
|
|
2331
|
-
chand, calld);
|
|
2332
|
-
}
|
|
2080
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2081
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2082
|
+
<< ": grabbing resolution mutex to apply service ";
|
|
2333
2083
|
// If we're still in IDLE, we need to start resolving.
|
|
2334
2084
|
if (GPR_UNLIKELY(chand->CheckConnectivityState(false) ==
|
|
2335
2085
|
GRPC_CHANNEL_IDLE)) {
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
}
|
|
2086
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2087
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2088
|
+
<< ": triggering exit idle";
|
|
2340
2089
|
// Bounce into the control plane work serializer to start resolving.
|
|
2341
2090
|
GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "ExitIdle");
|
|
2342
2091
|
chand->work_serializer_->Run(
|
|
@@ -2349,11 +2098,9 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
|
|
|
2349
2098
|
calld->TryCheckResolution(/*was_queued=*/false);
|
|
2350
2099
|
} else {
|
|
2351
2100
|
// For all other batches, release the call combiner.
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
calld);
|
|
2356
|
-
}
|
|
2101
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2102
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2103
|
+
<< ": saved batch, yielding call combiner";
|
|
2357
2104
|
GRPC_CALL_COMBINER_STOP(calld->call_combiner(),
|
|
2358
2105
|
"batch does not include send_initial_metadata");
|
|
2359
2106
|
}
|
|
@@ -2382,13 +2129,11 @@ size_t ClientChannelFilter::FilterBasedCallData::GetBatchIndex(
|
|
|
2382
2129
|
void ClientChannelFilter::FilterBasedCallData::PendingBatchesAdd(
|
|
2383
2130
|
grpc_transport_stream_op_batch* batch) {
|
|
2384
2131
|
const size_t idx = GetBatchIndex(batch);
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
chand(), this, idx);
|
|
2389
|
-
}
|
|
2132
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2133
|
+
<< "chand=" << chand() << " calld=" << this
|
|
2134
|
+
<< ": adding pending batch at index " << idx;
|
|
2390
2135
|
grpc_transport_stream_op_batch*& pending = pending_batches_[idx];
|
|
2391
|
-
|
|
2136
|
+
CHECK_EQ(pending, nullptr);
|
|
2392
2137
|
pending = batch;
|
|
2393
2138
|
}
|
|
2394
2139
|
|
|
@@ -2408,8 +2153,8 @@ void ClientChannelFilter::FilterBasedCallData::FailPendingBatchInCallCombiner(
|
|
|
2408
2153
|
void ClientChannelFilter::FilterBasedCallData::PendingBatchesFail(
|
|
2409
2154
|
grpc_error_handle error,
|
|
2410
2155
|
YieldCallCombinerPredicate yield_call_combiner_predicate) {
|
|
2411
|
-
|
|
2412
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
|
2156
|
+
CHECK(!error.ok());
|
|
2157
|
+
if (GRPC_TRACE_FLAG_ENABLED(client_channel_call)) {
|
|
2413
2158
|
size_t num_batches = 0;
|
|
2414
2159
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
|
2415
2160
|
if (pending_batches_[i] != nullptr) ++num_batches;
|
|
@@ -2452,7 +2197,7 @@ void ClientChannelFilter::FilterBasedCallData::ResumePendingBatchInCallCombiner(
|
|
|
2452
2197
|
// This is called via the call combiner, so access to calld is synchronized.
|
|
2453
2198
|
void ClientChannelFilter::FilterBasedCallData::PendingBatchesResume() {
|
|
2454
2199
|
// Retries not enabled; send down batches as-is.
|
|
2455
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
|
2200
|
+
if (GRPC_TRACE_FLAG_ENABLED(client_channel_call)) {
|
|
2456
2201
|
size_t num_batches = 0;
|
|
2457
2202
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
|
2458
2203
|
if (pending_batches_[i] != nullptr) ++num_batches;
|
|
@@ -2498,13 +2243,13 @@ class ClientChannelFilter::FilterBasedCallData::ResolverQueuedCallCanceller
|
|
|
2498
2243
|
auto* chand = calld->chand();
|
|
2499
2244
|
{
|
|
2500
2245
|
MutexLock lock(&chand->resolution_mu_);
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2246
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2247
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2248
|
+
<< ": cancelling resolver queued pick: "
|
|
2249
|
+
"error="
|
|
2250
|
+
<< StatusToString(error) << " self=" << self
|
|
2251
|
+
<< " calld->resolver_pick_canceller="
|
|
2252
|
+
<< calld->resolver_call_canceller_;
|
|
2508
2253
|
if (calld->resolver_call_canceller_ == self && !error.ok()) {
|
|
2509
2254
|
// Remove pick from list of queued picks.
|
|
2510
2255
|
calld->RemoveCallFromResolverQueuedCallsLocked();
|
|
@@ -2552,24 +2297,19 @@ void ClientChannelFilter::FilterBasedCallData::RetryCheckResolutionLocked() {
|
|
|
2552
2297
|
}
|
|
2553
2298
|
|
|
2554
2299
|
void ClientChannelFilter::FilterBasedCallData::CreateDynamicCall() {
|
|
2555
|
-
DynamicFilters::Call::Args args = {dynamic_filters(), pollent_,
|
|
2556
|
-
call_start_time_, deadline_,
|
|
2557
|
-
|
|
2300
|
+
DynamicFilters::Call::Args args = {dynamic_filters(), pollent_, path_,
|
|
2301
|
+
call_start_time_, deadline_, arena(),
|
|
2302
|
+
call_combiner()};
|
|
2558
2303
|
grpc_error_handle error;
|
|
2559
2304
|
DynamicFilters* channel_stack = args.channel_stack.get();
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
"chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
|
|
2564
|
-
chand(), this, channel_stack);
|
|
2565
|
-
}
|
|
2305
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2306
|
+
<< "chand=" << chand() << " calld=" << this
|
|
2307
|
+
<< ": creating dynamic call stack on channel_stack=" << channel_stack;
|
|
2566
2308
|
dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
|
|
2567
2309
|
if (!error.ok()) {
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
chand(), this, StatusToString(error).c_str());
|
|
2572
|
-
}
|
|
2310
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2311
|
+
<< "chand=" << chand() << " calld=" << this
|
|
2312
|
+
<< ": failed to create dynamic call: error=" << StatusToString(error);
|
|
2573
2313
|
PendingBatchesFail(error, YieldCallCombiner);
|
|
2574
2314
|
return;
|
|
2575
2315
|
}
|
|
@@ -2581,15 +2321,11 @@ void ClientChannelFilter::FilterBasedCallData::
|
|
|
2581
2321
|
void* arg, grpc_error_handle error) {
|
|
2582
2322
|
auto* calld = static_cast<FilterBasedCallData*>(arg);
|
|
2583
2323
|
auto* chand = calld->chand();
|
|
2584
|
-
auto* service_config_call_data =
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
"service_config_call_data=%p",
|
|
2590
|
-
chand, calld, StatusToString(error).c_str(),
|
|
2591
|
-
service_config_call_data);
|
|
2592
|
-
}
|
|
2324
|
+
auto* service_config_call_data = GetServiceConfigCallData(calld->arena());
|
|
2325
|
+
GRPC_TRACE_LOG(client_channel_call, INFO)
|
|
2326
|
+
<< "chand=" << chand << " calld=" << calld
|
|
2327
|
+
<< ": got recv_trailing_metadata_ready: error=" << StatusToString(error)
|
|
2328
|
+
<< " service_config_call_data=" << service_config_call_data;
|
|
2593
2329
|
if (service_config_call_data != nullptr) {
|
|
2594
2330
|
service_config_call_data->Commit();
|
|
2595
2331
|
}
|
|
@@ -2607,7 +2343,7 @@ class ClientChannelFilter::LoadBalancedCall::LbCallState final
|
|
|
2607
2343
|
public:
|
|
2608
2344
|
explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
|
|
2609
2345
|
|
|
2610
|
-
void* Alloc(size_t size) override { return lb_call_->
|
|
2346
|
+
void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
|
|
2611
2347
|
|
|
2612
2348
|
// Internal API to allow first-party LB policies to access per-call
|
|
2613
2349
|
// attributes set by the ConfigSelector.
|
|
@@ -2702,8 +2438,7 @@ class ClientChannelFilter::LoadBalancedCall::Metadata final
|
|
|
2702
2438
|
ServiceConfigCallData::CallAttributeInterface*
|
|
2703
2439
|
ClientChannelFilter::LoadBalancedCall::LbCallState::GetCallAttribute(
|
|
2704
2440
|
UniqueTypeName type) const {
|
|
2705
|
-
auto* service_config_call_data =
|
|
2706
|
-
GetServiceConfigCallData(lb_call_->call_context_);
|
|
2441
|
+
auto* service_config_call_data = GetServiceConfigCallData(lb_call_->arena_);
|
|
2707
2442
|
return service_config_call_data->GetCallAttribute(type);
|
|
2708
2443
|
}
|
|
2709
2444
|
|
|
@@ -2729,7 +2464,7 @@ class ClientChannelFilter::LoadBalancedCall::BackendMetricAccessor final
|
|
|
2729
2464
|
recv_trailing_metadata_ != nullptr) {
|
|
2730
2465
|
if (const auto* md = recv_trailing_metadata_->get_pointer(
|
|
2731
2466
|
EndpointLoadMetricsBinMetadata())) {
|
|
2732
|
-
BackendMetricAllocator allocator(lb_call_->
|
|
2467
|
+
BackendMetricAllocator allocator(lb_call_->arena_);
|
|
2733
2468
|
lb_call_->backend_metric_data_ =
|
|
2734
2469
|
ParseBackendMetricData(md->as_string_view(), &allocator);
|
|
2735
2470
|
}
|
|
@@ -2764,31 +2499,28 @@ class ClientChannelFilter::LoadBalancedCall::BackendMetricAccessor final
|
|
|
2764
2499
|
|
|
2765
2500
|
namespace {
|
|
2766
2501
|
|
|
2767
|
-
void CreateCallAttemptTracer(
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
context[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
|
|
2502
|
+
void CreateCallAttemptTracer(Arena* arena, bool is_transparent_retry) {
|
|
2503
|
+
auto* call_tracer = DownCast<ClientCallTracer*>(
|
|
2504
|
+
arena->GetContext<CallTracerAnnotationInterface>());
|
|
2771
2505
|
if (call_tracer == nullptr) return;
|
|
2772
2506
|
auto* tracer = call_tracer->StartNewAttempt(is_transparent_retry);
|
|
2773
|
-
|
|
2507
|
+
arena->SetContext<CallTracerInterface>(tracer);
|
|
2774
2508
|
}
|
|
2775
2509
|
|
|
2776
2510
|
} // namespace
|
|
2777
2511
|
|
|
2778
2512
|
ClientChannelFilter::LoadBalancedCall::LoadBalancedCall(
|
|
2779
|
-
ClientChannelFilter* chand,
|
|
2513
|
+
ClientChannelFilter* chand, Arena* arena,
|
|
2780
2514
|
absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
|
|
2781
|
-
: InternallyRefCounted(
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
: nullptr),
|
|
2515
|
+
: InternallyRefCounted(GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call)
|
|
2516
|
+
? "LoadBalancedCall"
|
|
2517
|
+
: nullptr),
|
|
2785
2518
|
chand_(chand),
|
|
2786
2519
|
on_commit_(std::move(on_commit)),
|
|
2787
|
-
|
|
2788
|
-
CreateCallAttemptTracer(
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
}
|
|
2520
|
+
arena_(arena) {
|
|
2521
|
+
CreateCallAttemptTracer(arena, is_transparent_retry);
|
|
2522
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2523
|
+
<< "chand=" << chand_ << " lb_call=" << this << ": created";
|
|
2792
2524
|
}
|
|
2793
2525
|
|
|
2794
2526
|
ClientChannelFilter::LoadBalancedCall::~LoadBalancedCall() {
|
|
@@ -2829,10 +2561,9 @@ void ClientChannelFilter::LoadBalancedCall::RecordLatency() {
|
|
|
2829
2561
|
|
|
2830
2562
|
void ClientChannelFilter::LoadBalancedCall::
|
|
2831
2563
|
RemoveCallFromLbQueuedCallsLocked() {
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
}
|
|
2564
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2565
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2566
|
+
<< ": removing from queued picks list";
|
|
2836
2567
|
// Remove pollset_set linkage.
|
|
2837
2568
|
grpc_polling_entity_del_from_pollset_set(pollent(),
|
|
2838
2569
|
chand_->interested_parties_);
|
|
@@ -2843,10 +2574,9 @@ void ClientChannelFilter::LoadBalancedCall::
|
|
|
2843
2574
|
}
|
|
2844
2575
|
|
|
2845
2576
|
void ClientChannelFilter::LoadBalancedCall::AddCallToLbQueuedCallsLocked() {
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
}
|
|
2577
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2578
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2579
|
+
<< ": adding to queued picks list";
|
|
2850
2580
|
// Add call's pollent to channel's interested_parties, so that I/O
|
|
2851
2581
|
// can be done under the call's CQ.
|
|
2852
2582
|
grpc_polling_entity_add_to_pollset_set(pollent(),
|
|
@@ -2888,10 +2618,9 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
|
|
|
2888
2618
|
};
|
|
2889
2619
|
}
|
|
2890
2620
|
// Grab mutex and take a ref to the picker.
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
}
|
|
2621
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2622
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2623
|
+
<< ": grabbing LB mutex to get picker";
|
|
2895
2624
|
RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker;
|
|
2896
2625
|
{
|
|
2897
2626
|
MutexLock lock(&chand_->lb_mu_);
|
|
@@ -2901,17 +2630,15 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
|
|
|
2901
2630
|
// TODO(roth): Fix race condition in channel_idle filter and any
|
|
2902
2631
|
// other possible causes of this.
|
|
2903
2632
|
if (pickers.back() == nullptr) {
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
}
|
|
2633
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2634
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2635
|
+
<< ": picker is null, failing call";
|
|
2908
2636
|
return absl::InternalError("picker is null -- shouldn't happen");
|
|
2909
2637
|
}
|
|
2910
2638
|
// Do pick.
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
}
|
|
2639
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2640
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2641
|
+
<< ": performing pick with picker=" << pickers.back().get();
|
|
2915
2642
|
grpc_error_handle error;
|
|
2916
2643
|
bool pick_complete = PickSubchannelImpl(pickers.back().get(), &error);
|
|
2917
2644
|
if (!pick_complete) {
|
|
@@ -2919,11 +2646,9 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
|
|
|
2919
2646
|
MutexLock lock(&chand_->lb_mu_);
|
|
2920
2647
|
// If picker has been swapped out since we grabbed it, try again.
|
|
2921
2648
|
if (pickers.back() != chand_->picker_) {
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
|
|
2925
|
-
chand_, this);
|
|
2926
|
-
}
|
|
2649
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2650
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2651
|
+
<< ": pick not complete, but picker changed";
|
|
2927
2652
|
if (IsWorkSerializerDispatchEnabled()) {
|
|
2928
2653
|
// Don't unref until after we release the mutex.
|
|
2929
2654
|
old_picker = std::move(pickers.back());
|
|
@@ -2942,11 +2667,9 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
|
|
|
2942
2667
|
}
|
|
2943
2668
|
// If the pick failed, fail the call.
|
|
2944
2669
|
if (!error.ok()) {
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
chand_, this, StatusToString(error).c_str());
|
|
2949
|
-
}
|
|
2670
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2671
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2672
|
+
<< ": failed to pick subchannel: error=" << StatusToString(error);
|
|
2950
2673
|
return error;
|
|
2951
2674
|
}
|
|
2952
2675
|
// Pick succeeded.
|
|
@@ -2957,11 +2680,11 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
|
|
|
2957
2680
|
|
|
2958
2681
|
bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
2959
2682
|
LoadBalancingPolicy::SubchannelPicker* picker, grpc_error_handle* error) {
|
|
2960
|
-
|
|
2683
|
+
CHECK(connected_subchannel_ == nullptr);
|
|
2961
2684
|
// Perform LB pick.
|
|
2962
2685
|
LoadBalancingPolicy::PickArgs pick_args;
|
|
2963
2686
|
Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
|
|
2964
|
-
|
|
2687
|
+
CHECK_NE(path, nullptr);
|
|
2965
2688
|
pick_args.path = path->as_string_view();
|
|
2966
2689
|
LbCallState lb_call_state(this);
|
|
2967
2690
|
pick_args.call_state = &lb_call_state;
|
|
@@ -2972,12 +2695,11 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
|
2972
2695
|
&result,
|
|
2973
2696
|
// CompletePick
|
|
2974
2697
|
[this](LoadBalancingPolicy::PickResult::Complete* complete_pick) {
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
GPR_ASSERT(complete_pick->subchannel != nullptr);
|
|
2698
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2699
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2700
|
+
<< ": LB pick succeeded: subchannel="
|
|
2701
|
+
<< complete_pick->subchannel.get();
|
|
2702
|
+
CHECK(complete_pick->subchannel != nullptr);
|
|
2981
2703
|
// Grab a ref to the connected subchannel while we're still
|
|
2982
2704
|
// holding the data plane mutex.
|
|
2983
2705
|
SubchannelWrapper* subchannel =
|
|
@@ -2988,12 +2710,10 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
|
2988
2710
|
// yet seen that change and given us a new picker), then just
|
|
2989
2711
|
// queue the pick. We'll try again as soon as we get a new picker.
|
|
2990
2712
|
if (connected_subchannel_ == nullptr) {
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
chand_, this);
|
|
2996
|
-
}
|
|
2713
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2714
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2715
|
+
<< ": subchannel returned by LB picker "
|
|
2716
|
+
"has no connected subchannel; queueing pick";
|
|
2997
2717
|
return false;
|
|
2998
2718
|
}
|
|
2999
2719
|
lb_subchannel_call_tracker_ =
|
|
@@ -3005,18 +2725,15 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
|
3005
2725
|
},
|
|
3006
2726
|
// QueuePick
|
|
3007
2727
|
[this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
this);
|
|
3011
|
-
}
|
|
2728
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2729
|
+
<< "chand=" << chand_ << " lb_call=" << this << ": LB pick queued";
|
|
3012
2730
|
return false;
|
|
3013
2731
|
},
|
|
3014
2732
|
// FailPick
|
|
3015
2733
|
[this, &error](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
}
|
|
2734
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2735
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2736
|
+
<< ": LB pick failed: " << fail_pick->status;
|
|
3020
2737
|
// If wait_for_ready is false, then the error indicates the RPC
|
|
3021
2738
|
// attempt's final status.
|
|
3022
2739
|
if (!send_initial_metadata()
|
|
@@ -3032,10 +2749,9 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
|
|
|
3032
2749
|
},
|
|
3033
2750
|
// DropPick
|
|
3034
2751
|
[this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick) {
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
}
|
|
2752
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2753
|
+
<< "chand=" << chand_ << " lb_call=" << this
|
|
2754
|
+
<< ": LB pick dropped: " << drop_pick->status;
|
|
3039
2755
|
*error = grpc_error_set_int(
|
|
3040
2756
|
absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
|
|
3041
2757
|
std::move(drop_pick->status), "LB drop")),
|
|
@@ -3052,10 +2768,8 @@ ClientChannelFilter::FilterBasedLoadBalancedCall::FilterBasedLoadBalancedCall(
|
|
|
3052
2768
|
ClientChannelFilter* chand, const grpc_call_element_args& args,
|
|
3053
2769
|
grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete,
|
|
3054
2770
|
absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
|
|
3055
|
-
: LoadBalancedCall(chand, args.
|
|
2771
|
+
: LoadBalancedCall(chand, args.arena, std::move(on_commit),
|
|
3056
2772
|
is_transparent_retry),
|
|
3057
|
-
deadline_(args.deadline),
|
|
3058
|
-
arena_(args.arena),
|
|
3059
2773
|
owning_call_(args.call_stack),
|
|
3060
2774
|
call_combiner_(args.call_combiner),
|
|
3061
2775
|
pollent_(pollent),
|
|
@@ -3065,7 +2779,7 @@ ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3065
2779
|
~FilterBasedLoadBalancedCall() {
|
|
3066
2780
|
// Make sure there are no remaining pending batches.
|
|
3067
2781
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
|
3068
|
-
|
|
2782
|
+
CHECK_EQ(pending_batches_[i], nullptr);
|
|
3069
2783
|
}
|
|
3070
2784
|
if (on_call_destruction_complete_ != nullptr) {
|
|
3071
2785
|
ExecCtx::Run(DEBUG_LOCATION, on_call_destruction_complete_,
|
|
@@ -3103,12 +2817,10 @@ size_t ClientChannelFilter::FilterBasedLoadBalancedCall::GetBatchIndex(
|
|
|
3103
2817
|
void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesAdd(
|
|
3104
2818
|
grpc_transport_stream_op_batch* batch) {
|
|
3105
2819
|
const size_t idx = GetBatchIndex(batch);
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
}
|
|
3111
|
-
GPR_ASSERT(pending_batches_[idx] == nullptr);
|
|
2820
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2821
|
+
<< "chand=" << chand() << " lb_call=" << this
|
|
2822
|
+
<< ": adding pending batch at index " << idx;
|
|
2823
|
+
CHECK_EQ(pending_batches_[idx], nullptr);
|
|
3112
2824
|
pending_batches_[idx] = batch;
|
|
3113
2825
|
}
|
|
3114
2826
|
|
|
@@ -3128,9 +2840,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3128
2840
|
void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesFail(
|
|
3129
2841
|
grpc_error_handle error,
|
|
3130
2842
|
YieldCallCombinerPredicate yield_call_combiner_predicate) {
|
|
3131
|
-
|
|
2843
|
+
CHECK(!error.ok());
|
|
3132
2844
|
failure_error_ = error;
|
|
3133
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
|
2845
|
+
if (GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call)) {
|
|
3134
2846
|
size_t num_batches = 0;
|
|
3135
2847
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
|
3136
2848
|
if (pending_batches_[i] != nullptr) ++num_batches;
|
|
@@ -3172,7 +2884,7 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3172
2884
|
|
|
3173
2885
|
// This is called via the call combiner, so access to calld is synchronized.
|
|
3174
2886
|
void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesResume() {
|
|
3175
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
|
2887
|
+
if (GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call)) {
|
|
3176
2888
|
size_t num_batches = 0;
|
|
3177
2889
|
for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
|
|
3178
2890
|
if (pending_batches_[i] != nullptr) ++num_batches;
|
|
@@ -3201,8 +2913,8 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesResume() {
|
|
|
3201
2913
|
|
|
3202
2914
|
void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
3203
2915
|
StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch) {
|
|
3204
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
|
3205
|
-
GRPC_TRACE_FLAG_ENABLED(
|
|
2916
|
+
if (GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call) ||
|
|
2917
|
+
GRPC_TRACE_FLAG_ENABLED(channel)) {
|
|
3206
2918
|
gpr_log(GPR_INFO,
|
|
3207
2919
|
"chand=%p lb_call=%p: batch started from above: %s, "
|
|
3208
2920
|
"call_attempt_tracer()=%p",
|
|
@@ -3256,11 +2968,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3256
2968
|
// the channel's data plane mutex, which is more efficient (especially for
|
|
3257
2969
|
// streaming calls).
|
|
3258
2970
|
if (subchannel_call_ != nullptr) {
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
chand(), this, subchannel_call_.get());
|
|
3263
|
-
}
|
|
2971
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2972
|
+
<< "chand=" << chand() << " lb_call=" << this
|
|
2973
|
+
<< ": starting batch on subchannel_call=" << subchannel_call_.get();
|
|
3264
2974
|
subchannel_call_->StartTransportStreamOpBatch(batch);
|
|
3265
2975
|
return;
|
|
3266
2976
|
}
|
|
@@ -3268,10 +2978,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3268
2978
|
//
|
|
3269
2979
|
// If we've previously been cancelled, immediately fail any new batches.
|
|
3270
2980
|
if (GPR_UNLIKELY(!cancel_error_.ok())) {
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
}
|
|
2981
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2982
|
+
<< "chand=" << chand() << " lb_call=" << this
|
|
2983
|
+
<< ": failing batch with error: " << StatusToString(cancel_error_);
|
|
3275
2984
|
// Note: This will release the call combiner.
|
|
3276
2985
|
grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
|
|
3277
2986
|
call_combiner_);
|
|
@@ -3285,10 +2994,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3285
2994
|
// is in the past when the call starts), we can return the right
|
|
3286
2995
|
// error to the caller when the first batch does get passed down.
|
|
3287
2996
|
cancel_error_ = batch->payload->cancel_stream.cancel_error;
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
|
|
3291
|
-
}
|
|
2997
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
2998
|
+
<< "chand=" << chand() << " lb_call=" << this
|
|
2999
|
+
<< ": recording cancel_error=" << StatusToString(cancel_error_).c_str();
|
|
3292
3000
|
// Fail all pending batches.
|
|
3293
3001
|
PendingBatchesFail(cancel_error_, NoYieldCallCombiner);
|
|
3294
3002
|
// Note: This will release the call combiner.
|
|
@@ -3304,11 +3012,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3304
3012
|
TryPick(/*was_queued=*/false);
|
|
3305
3013
|
} else {
|
|
3306
3014
|
// For all other batches, release the call combiner.
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
chand(), this);
|
|
3311
|
-
}
|
|
3015
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
3016
|
+
<< "chand=" << chand() << " lb_call=" << this
|
|
3017
|
+
<< ": saved batch, yielding call combiner";
|
|
3312
3018
|
GRPC_CALL_COMBINER_STOP(call_combiner_,
|
|
3313
3019
|
"batch does not include send_initial_metadata");
|
|
3314
3020
|
}
|
|
@@ -3317,11 +3023,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3317
3023
|
void ClientChannelFilter::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
|
|
3318
3024
|
void* arg, grpc_error_handle error) {
|
|
3319
3025
|
auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
|
|
3320
|
-
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
self->chand(), self, StatusToString(error).c_str());
|
|
3324
|
-
}
|
|
3026
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
3027
|
+
<< "chand=" << self->chand() << " lb_call=" << self
|
|
3028
|
+
<< ": got recv_initial_metadata_ready: error=" << StatusToString(error);
|
|
3325
3029
|
if (error.ok()) {
|
|
3326
3030
|
// recv_initial_metadata_flags is not populated for clients
|
|
3327
3031
|
self->call_attempt_tracer()->RecordReceivedInitialMetadata(
|
|
@@ -3336,15 +3040,12 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
|
|
|
3336
3040
|
void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
3337
3041
|
RecvTrailingMetadataReady(void* arg, grpc_error_handle error) {
|
|
3338
3042
|
auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
self->call_attempt_tracer(), self->lb_subchannel_call_tracker(),
|
|
3346
|
-
StatusToString(self->failure_error_).c_str());
|
|
3347
|
-
}
|
|
3043
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
3044
|
+
<< "chand=" << self->chand() << " lb_call=" << self
|
|
3045
|
+
<< ": got recv_trailing_metadata_ready: error=" << StatusToString(error)
|
|
3046
|
+
<< " call_attempt_tracer()=" << self->call_attempt_tracer()
|
|
3047
|
+
<< " lb_subchannel_call_tracker_=" << self->lb_subchannel_call_tracker()
|
|
3048
|
+
<< " failure_error_=" << StatusToString(self->failure_error_);
|
|
3348
3049
|
// Check if we have a tracer or an LB callback to invoke.
|
|
3349
3050
|
if (self->call_attempt_tracer() != nullptr ||
|
|
3350
3051
|
self->lb_subchannel_call_tracker() != nullptr) {
|
|
@@ -3354,8 +3055,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
|
|
|
3354
3055
|
// Get status from error.
|
|
3355
3056
|
grpc_status_code code;
|
|
3356
3057
|
std::string message;
|
|
3357
|
-
grpc_error_get_status(
|
|
3358
|
-
|
|
3058
|
+
grpc_error_get_status(
|
|
3059
|
+
error, self->arena()->GetContext<Call>()->deadline(), &code, &message,
|
|
3060
|
+
/*http_error=*/nullptr, /*error_string=*/nullptr);
|
|
3359
3061
|
status = absl::Status(static_cast<absl::StatusCode>(code), message);
|
|
3360
3062
|
} else {
|
|
3361
3063
|
// Get status from headers.
|
|
@@ -3411,13 +3113,11 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall::LbQueuedCallCanceller
|
|
|
3411
3113
|
auto* chand = lb_call->chand();
|
|
3412
3114
|
{
|
|
3413
3115
|
MutexLock lock(&chand->lb_mu_);
|
|
3414
|
-
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
lb_call->lb_call_canceller_);
|
|
3420
|
-
}
|
|
3116
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
3117
|
+
<< "chand=" << chand << " lb_call=" << lb_call
|
|
3118
|
+
<< ": cancelling queued pick: error=" << StatusToString(error)
|
|
3119
|
+
<< " self=" << self
|
|
3120
|
+
<< " calld->pick_canceller=" << lb_call->lb_call_canceller_;
|
|
3421
3121
|
if (lb_call->lb_call_canceller_ == self && !error.ok()) {
|
|
3422
3122
|
lb_call->Commit();
|
|
3423
3123
|
// Remove pick from list of queued picks.
|
|
@@ -3490,20 +3190,19 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::RetryPickLocked() {
|
|
|
3490
3190
|
|
|
3491
3191
|
void ClientChannelFilter::FilterBasedLoadBalancedCall::CreateSubchannelCall() {
|
|
3492
3192
|
Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
|
|
3493
|
-
|
|
3193
|
+
CHECK_NE(path, nullptr);
|
|
3494
3194
|
SubchannelCall::Args call_args = {
|
|
3495
3195
|
connected_subchannel()->Ref(), pollent_, path->Ref(), /*start_time=*/0,
|
|
3496
|
-
|
|
3196
|
+
arena()->GetContext<Call>()->deadline(),
|
|
3497
3197
|
// TODO(roth): When we implement hedging support, we will probably
|
|
3498
|
-
// need to use a separate call
|
|
3499
|
-
|
|
3198
|
+
// need to use a separate call arena for each subchannel call.
|
|
3199
|
+
arena(), call_combiner_};
|
|
3500
3200
|
grpc_error_handle error;
|
|
3501
3201
|
subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
}
|
|
3202
|
+
GRPC_TRACE_LOG(client_channel_lb_call, INFO)
|
|
3203
|
+
<< "chand=" << chand() << " lb_call=" << this
|
|
3204
|
+
<< ": create subchannel_call=" << subchannel_call_.get()
|
|
3205
|
+
<< ": error=" << StatusToString(error);
|
|
3507
3206
|
if (on_call_destruction_complete_ != nullptr) {
|
|
3508
3207
|
subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
|
|
3509
3208
|
on_call_destruction_complete_ = nullptr;
|
|
@@ -3515,150 +3214,4 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::CreateSubchannelCall() {
|
|
|
3515
3214
|
}
|
|
3516
3215
|
}
|
|
3517
3216
|
|
|
3518
|
-
//
|
|
3519
|
-
// ClientChannelFilter::PromiseBasedLoadBalancedCall
|
|
3520
|
-
//
|
|
3521
|
-
|
|
3522
|
-
ClientChannelFilter::PromiseBasedLoadBalancedCall::PromiseBasedLoadBalancedCall(
|
|
3523
|
-
ClientChannelFilter* chand, absl::AnyInvocable<void()> on_commit,
|
|
3524
|
-
bool is_transparent_retry)
|
|
3525
|
-
: LoadBalancedCall(chand, GetContext<grpc_call_context_element>(),
|
|
3526
|
-
std::move(on_commit), is_transparent_retry) {}
|
|
3527
|
-
|
|
3528
|
-
ArenaPromise<ServerMetadataHandle>
|
|
3529
|
-
ClientChannelFilter::PromiseBasedLoadBalancedCall::MakeCallPromise(
|
|
3530
|
-
CallArgs call_args, OrphanablePtr<PromiseBasedLoadBalancedCall> lb_call) {
|
|
3531
|
-
pollent_ = NowOrNever(call_args.polling_entity->WaitAndCopy()).value();
|
|
3532
|
-
// Record ops in tracer.
|
|
3533
|
-
if (call_attempt_tracer() != nullptr) {
|
|
3534
|
-
call_attempt_tracer()->RecordSendInitialMetadata(
|
|
3535
|
-
call_args.client_initial_metadata.get());
|
|
3536
|
-
// TODO(ctiller): Find a way to do this without registering a no-op mapper.
|
|
3537
|
-
call_args.client_to_server_messages->InterceptAndMapWithHalfClose(
|
|
3538
|
-
[](MessageHandle message) { return message; }, // No-op.
|
|
3539
|
-
[this]() {
|
|
3540
|
-
// TODO(roth): Change CallTracer API to not pass metadata
|
|
3541
|
-
// batch to this method, since the batch is always empty.
|
|
3542
|
-
grpc_metadata_batch metadata;
|
|
3543
|
-
call_attempt_tracer()->RecordSendTrailingMetadata(&metadata);
|
|
3544
|
-
});
|
|
3545
|
-
}
|
|
3546
|
-
// Extract peer name from server initial metadata.
|
|
3547
|
-
call_args.server_initial_metadata->InterceptAndMap(
|
|
3548
|
-
[self = lb_call->RefAsSubclass<PromiseBasedLoadBalancedCall>()](
|
|
3549
|
-
ServerMetadataHandle metadata) {
|
|
3550
|
-
if (self->call_attempt_tracer() != nullptr) {
|
|
3551
|
-
self->call_attempt_tracer()->RecordReceivedInitialMetadata(
|
|
3552
|
-
metadata.get());
|
|
3553
|
-
}
|
|
3554
|
-
Slice* peer_string = metadata->get_pointer(PeerString());
|
|
3555
|
-
if (peer_string != nullptr) self->peer_string_ = peer_string->Ref();
|
|
3556
|
-
return metadata;
|
|
3557
|
-
});
|
|
3558
|
-
client_initial_metadata_ = std::move(call_args.client_initial_metadata);
|
|
3559
|
-
return OnCancel(
|
|
3560
|
-
Map(TrySeq(
|
|
3561
|
-
// LB pick.
|
|
3562
|
-
[this]() -> Poll<absl::Status> {
|
|
3563
|
-
auto result = PickSubchannel(was_queued_);
|
|
3564
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
|
3565
|
-
grpc_client_channel_lb_call_trace)) {
|
|
3566
|
-
gpr_log(GPR_INFO,
|
|
3567
|
-
"chand=%p lb_call=%p: %sPickSubchannel() returns %s",
|
|
3568
|
-
chand(), this,
|
|
3569
|
-
GetContext<Activity>()->DebugTag().c_str(),
|
|
3570
|
-
result.has_value() ? result->ToString().c_str()
|
|
3571
|
-
: "Pending");
|
|
3572
|
-
}
|
|
3573
|
-
if (result == absl::nullopt) return Pending{};
|
|
3574
|
-
return std::move(*result);
|
|
3575
|
-
},
|
|
3576
|
-
[this, call_args = std::move(call_args)]() mutable
|
|
3577
|
-
-> ArenaPromise<ServerMetadataHandle> {
|
|
3578
|
-
call_args.client_initial_metadata =
|
|
3579
|
-
std::move(client_initial_metadata_);
|
|
3580
|
-
return connected_subchannel()->MakeCallPromise(
|
|
3581
|
-
std::move(call_args));
|
|
3582
|
-
}),
|
|
3583
|
-
// Record call completion.
|
|
3584
|
-
[this](ServerMetadataHandle metadata) {
|
|
3585
|
-
if (call_attempt_tracer() != nullptr ||
|
|
3586
|
-
lb_subchannel_call_tracker() != nullptr) {
|
|
3587
|
-
absl::Status status;
|
|
3588
|
-
grpc_status_code code = metadata->get(GrpcStatusMetadata())
|
|
3589
|
-
.value_or(GRPC_STATUS_UNKNOWN);
|
|
3590
|
-
if (code != GRPC_STATUS_OK) {
|
|
3591
|
-
absl::string_view message;
|
|
3592
|
-
if (const auto* grpc_message =
|
|
3593
|
-
metadata->get_pointer(GrpcMessageMetadata())) {
|
|
3594
|
-
message = grpc_message->as_string_view();
|
|
3595
|
-
}
|
|
3596
|
-
status =
|
|
3597
|
-
absl::Status(static_cast<absl::StatusCode>(code), message);
|
|
3598
|
-
}
|
|
3599
|
-
RecordCallCompletion(status, metadata.get(),
|
|
3600
|
-
&GetContext<CallContext>()
|
|
3601
|
-
->call_stats()
|
|
3602
|
-
->transport_stream_stats,
|
|
3603
|
-
peer_string_.as_string_view());
|
|
3604
|
-
}
|
|
3605
|
-
RecordLatency();
|
|
3606
|
-
return metadata;
|
|
3607
|
-
}),
|
|
3608
|
-
[lb_call = std::move(lb_call)]() {
|
|
3609
|
-
// If the waker is pending, then we need to remove ourself from
|
|
3610
|
-
// the list of queued LB calls.
|
|
3611
|
-
if (!lb_call->waker_.is_unwakeable()) {
|
|
3612
|
-
MutexLock lock(&lb_call->chand()->lb_mu_);
|
|
3613
|
-
lb_call->Commit();
|
|
3614
|
-
// Remove pick from list of queued picks.
|
|
3615
|
-
lb_call->RemoveCallFromLbQueuedCallsLocked();
|
|
3616
|
-
// Remove from queued picks list.
|
|
3617
|
-
lb_call->chand()->lb_queued_calls_.erase(lb_call.get());
|
|
3618
|
-
}
|
|
3619
|
-
// TODO(ctiller): We don't have access to the call's actual status
|
|
3620
|
-
// here, so we just assume CANCELLED. We could change this to use
|
|
3621
|
-
// CallFinalization instead of OnCancel() so that we can get the
|
|
3622
|
-
// actual status. But we should also have access to the trailing
|
|
3623
|
-
// metadata, which we don't have in either case. Ultimately, we
|
|
3624
|
-
// need a better story for code that needs to run at the end of a
|
|
3625
|
-
// call in both cancellation and non-cancellation cases that needs
|
|
3626
|
-
// access to server trailing metadata and the call's real status.
|
|
3627
|
-
if (lb_call->call_attempt_tracer() != nullptr) {
|
|
3628
|
-
lb_call->call_attempt_tracer()->RecordCancel(
|
|
3629
|
-
absl::CancelledError("call cancelled"));
|
|
3630
|
-
}
|
|
3631
|
-
if (lb_call->call_attempt_tracer() != nullptr ||
|
|
3632
|
-
lb_call->lb_subchannel_call_tracker() != nullptr) {
|
|
3633
|
-
// If we were cancelled without recording call completion, then
|
|
3634
|
-
// record call completion here, as best we can. We assume status
|
|
3635
|
-
// CANCELLED in this case.
|
|
3636
|
-
lb_call->RecordCallCompletion(absl::CancelledError("call cancelled"),
|
|
3637
|
-
nullptr, nullptr, "");
|
|
3638
|
-
}
|
|
3639
|
-
});
|
|
3640
|
-
}
|
|
3641
|
-
|
|
3642
|
-
Arena* ClientChannelFilter::PromiseBasedLoadBalancedCall::arena() const {
|
|
3643
|
-
return GetContext<Arena>();
|
|
3644
|
-
}
|
|
3645
|
-
|
|
3646
|
-
grpc_metadata_batch*
|
|
3647
|
-
ClientChannelFilter::PromiseBasedLoadBalancedCall::send_initial_metadata()
|
|
3648
|
-
const {
|
|
3649
|
-
return client_initial_metadata_.get();
|
|
3650
|
-
}
|
|
3651
|
-
|
|
3652
|
-
void ClientChannelFilter::PromiseBasedLoadBalancedCall::OnAddToQueueLocked() {
|
|
3653
|
-
waker_ = GetContext<Activity>()->MakeNonOwningWaker();
|
|
3654
|
-
was_queued_ = true;
|
|
3655
|
-
}
|
|
3656
|
-
|
|
3657
|
-
void ClientChannelFilter::PromiseBasedLoadBalancedCall::RetryPickLocked() {
|
|
3658
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
|
|
3659
|
-
gpr_log(GPR_INFO, "chand=%p lb_call=%p: RetryPickLocked()", chand(), this);
|
|
3660
|
-
}
|
|
3661
|
-
waker_.WakeupAsync();
|
|
3662
|
-
}
|
|
3663
|
-
|
|
3664
3217
|
} // namespace grpc_core
|