grpc 1.64.3 → 1.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +57 -58
- data/include/grpc/event_engine/event_engine.h +13 -6
- data/include/grpc/impl/channel_arg_names.h +7 -3
- data/include/grpc/module.modulemap +1 -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/channelz/channel_trace.cc +1 -1
- data/src/core/channelz/channel_trace.h +1 -1
- data/src/core/channelz/channelz.cc +3 -3
- data/src/core/channelz/channelz.h +7 -7
- data/src/core/channelz/channelz_registry.cc +4 -3
- 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 +266 -709
- data/src/core/client_channel/client_channel_filter.h +11 -64
- data/src/core/client_channel/client_channel_internal.h +16 -5
- data/src/core/client_channel/client_channel_plugin.cc +1 -14
- data/src/core/client_channel/client_channel_service_config.h +3 -3
- data/src/core/client_channel/config_selector.cc +1 -1
- data/src/core/client_channel/config_selector.h +1 -1
- data/src/core/client_channel/dynamic_filters.cc +3 -3
- 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/retry_filter.cc +2 -9
- data/src/core/client_channel/retry_filter.h +2 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
- 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 +220 -112
- data/src/core/client_channel/subchannel.h +31 -18
- 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 +36 -49
- data/src/core/client_channel/subchannel_stream_client.h +2 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
- 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 +8 -15
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
- 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 +1 -0
- data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
- data/src/core/ext/filters/http/client_authority_filter.h +1 -0
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
- data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
- data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
- data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
- data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
- 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 +2 -6
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
- data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
- data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
- data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
- data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
- data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
- data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
- data/src/core/handshaker/handshaker.cc +6 -14
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
- data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
- data/src/core/handshaker/security/secure_endpoint.cc +38 -32
- data/src/core/handshaker/security/secure_endpoint.h +0 -2
- data/src/core/handshaker/security/security_handshaker.cc +25 -37
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
- data/src/core/lib/address_utils/parse_address.cc +27 -39
- data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
- data/src/core/lib/avl/avl.h +1 -1
- data/src/core/lib/channel/channel_args.cc +13 -17
- data/src/core/lib/channel/channel_args.h +19 -8
- data/src/core/lib/channel/channel_stack.cc +5 -63
- data/src/core/lib/channel/channel_stack.h +13 -37
- data/src/core/lib/channel/channel_stack_builder.h +0 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
- data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
- data/src/core/lib/channel/connected_channel.cc +37 -676
- data/src/core/lib/channel/promise_based_filter.cc +41 -47
- data/src/core/lib/channel/promise_based_filter.h +124 -477
- data/src/core/lib/channel/status_util.cc +1 -1
- data/src/core/lib/compression/compression.cc +1 -1
- data/src/core/lib/compression/message_compress.cc +6 -6
- data/src/core/lib/config/config_vars.cc +3 -8
- data/src/core/lib/config/config_vars.h +1 -5
- data/src/core/lib/debug/event_log.h +1 -1
- data/src/core/lib/debug/trace.cc +43 -59
- 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 +5 -7
- data/src/core/lib/event_engine/ares_resolver.h +1 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
- data/src/core/lib/event_engine/event_engine.cc +29 -4
- data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
- data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
- data/src/core/lib/event_engine/forkable.cc +4 -5
- data/src/core/lib/event_engine/forkable.h +0 -11
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
- data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
- data/src/core/lib/event_engine/shim.cc +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
- data/src/core/lib/event_engine/thread_local.h +1 -1
- data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
- data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
- data/src/core/lib/event_engine/trace.h +6 -17
- data/src/core/lib/event_engine/windows/iocp.h +1 -1
- data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
- data/src/core/lib/event_engine/windows/win_socket.h +4 -5
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
- data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
- data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
- data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
- data/src/core/lib/experiments/experiments.cc +35 -151
- data/src/core/lib/experiments/experiments.h +12 -45
- data/src/core/lib/gprpp/bitset.h +1 -1
- data/src/core/lib/gprpp/crash.cc +2 -3
- data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
- 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/glob.cc +70 -0
- data/src/core/lib/gprpp/glob.h +29 -0
- data/src/core/lib/gprpp/per_cpu.cc +1 -1
- data/src/core/lib/gprpp/posix/stat.cc +3 -4
- data/src/core/lib/gprpp/posix/thd.cc +8 -9
- data/src/core/lib/gprpp/ref_counted.h +30 -22
- data/src/core/lib/gprpp/single_set_ptr.h +5 -3
- data/src/core/lib/gprpp/status_helper.cc +11 -30
- data/src/core/lib/gprpp/status_helper.h +3 -31
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +3 -2
- data/src/core/lib/gprpp/unique_type_name.h +1 -1
- data/src/core/lib/gprpp/validation_errors.cc +10 -1
- data/src/core/lib/gprpp/validation_errors.h +11 -0
- data/src/core/lib/gprpp/windows/stat.cc +3 -4
- data/src/core/lib/gprpp/windows/thd.cc +3 -2
- data/src/core/lib/gprpp/work_serializer.cc +48 -57
- data/src/core/lib/iomgr/buffer_list.cc +4 -2
- data/src/core/lib/iomgr/call_combiner.cc +18 -27
- data/src/core/lib/iomgr/call_combiner.h +1 -3
- data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
- data/src/core/lib/iomgr/closure.h +2 -4
- data/src/core/lib/iomgr/combiner.cc +6 -8
- data/src/core/lib/iomgr/combiner.h +0 -2
- data/src/core/lib/iomgr/endpoint.cc +0 -6
- data/src/core/lib/iomgr/endpoint.h +0 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
- data/src/core/lib/iomgr/error.cc +13 -21
- data/src/core/lib/iomgr/error.h +1 -1
- data/src/core/lib/iomgr/ev_apple.cc +3 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
- data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
- data/src/core/lib/iomgr/ev_posix.cc +8 -9
- data/src/core/lib/iomgr/ev_posix.h +10 -7
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
- data/src/core/lib/iomgr/exec_ctx.cc +2 -2
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +6 -15
- 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_posix.cc +2 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
- data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
- data/src/core/lib/iomgr/iocp_windows.cc +4 -3
- data/src/core/lib/iomgr/iomgr.cc +13 -17
- data/src/core/lib/iomgr/lockfree_event.cc +3 -5
- data/src/core/lib/iomgr/pollset.h +0 -2
- data/src/core/lib/iomgr/pollset_windows.cc +0 -2
- data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
- data/src/core/lib/iomgr/socket_windows.cc +4 -6
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
- data/src/core/lib/iomgr/tcp_posix.cc +57 -84
- data/src/core/lib/iomgr/tcp_posix.h +0 -2
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
- data/src/core/lib/iomgr/tcp_windows.cc +25 -41
- data/src/core/lib/iomgr/timer_generic.cc +17 -20
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/iomgr/timer_manager.cc +17 -30
- data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
- data/src/core/lib/iomgr/vsock.cc +1 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
- data/src/core/lib/promise/activity.h +27 -4
- data/src/core/lib/promise/cancel_callback.h +24 -0
- data/src/core/lib/promise/context.h +11 -0
- data/src/core/lib/promise/detail/basic_seq.h +1 -2
- data/src/core/lib/promise/detail/join_state.h +354 -398
- data/src/core/lib/promise/detail/promise_like.h +6 -5
- data/src/core/lib/promise/detail/seq_state.h +1178 -1178
- data/src/core/lib/promise/for_each.h +6 -6
- data/src/core/lib/promise/interceptor_list.h +6 -7
- data/src/core/lib/promise/latch.h +9 -9
- data/src/core/lib/promise/map.h +17 -0
- data/src/core/lib/promise/observable.h +182 -0
- data/src/core/lib/promise/party.cc +7 -8
- data/src/core/lib/promise/party.h +10 -8
- data/src/core/lib/promise/pipe.h +16 -35
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/status_flag.h +2 -0
- data/src/core/lib/resource_quota/arena.cc +56 -79
- data/src/core/lib/resource_quota/arena.h +118 -209
- data/src/core/lib/resource_quota/memory_quota.cc +12 -13
- data/src/core/lib/resource_quota/memory_quota.h +2 -3
- data/src/core/lib/resource_quota/periodic_update.cc +1 -1
- data/src/core/lib/resource_quota/resource_quota.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
- data/src/core/lib/security/authorization/matchers.cc +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
- data/src/core/lib/security/context/security_context.cc +12 -13
- data/src/core/lib/security/context/security_context.h +31 -8
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
- 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 -5
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
- data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
- data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
- data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
- 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 +8 -12
- data/src/core/lib/security/security_connector/security_connector.cc +1 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
- data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/slice.h +1 -1
- data/src/core/lib/slice/slice_refcount.h +2 -4
- data/src/core/lib/slice/slice_string_helpers.cc +1 -1
- data/src/core/lib/surface/api_trace.h +1 -3
- data/src/core/lib/surface/call.cc +64 -3738
- data/src/core/lib/surface/call.h +41 -143
- data/src/core/lib/surface/call_log_batch.cc +1 -1
- 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 +8 -3
- data/src/core/lib/surface/channel.h +10 -7
- data/src/core/lib/surface/channel_create.cc +14 -6
- data/src/core/lib/surface/channel_create.h +3 -2
- data/src/core/lib/surface/channel_init.cc +21 -77
- data/src/core/lib/surface/channel_init.h +19 -97
- 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 +28 -33
- data/src/core/lib/surface/completion_queue.h +0 -8
- 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 +7 -6
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/legacy_channel.cc +40 -27
- data/src/core/lib/surface/legacy_channel.h +9 -18
- 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/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -5
- data/src/core/lib/transport/bdp_estimator.h +2 -4
- data/src/core/lib/transport/call_arena_allocator.h +9 -7
- data/src/core/lib/transport/call_destination.h +76 -0
- data/src/core/lib/transport/call_filters.cc +28 -10
- data/src/core/lib/transport/call_filters.h +128 -22
- data/src/core/lib/transport/call_spine.cc +5 -6
- data/src/core/lib/transport/call_spine.h +159 -334
- data/src/core/lib/transport/connectivity_state.cc +8 -10
- data/src/core/lib/transport/connectivity_state.h +0 -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/metadata_batch.h +10 -1
- data/src/core/lib/transport/metadata_info.h +1 -1
- data/src/core/lib/transport/transport.cc +3 -6
- data/src/core/lib/transport/transport.h +43 -40
- data/src/core/load_balancing/child_policy_handler.cc +8 -8
- data/src/core/load_balancing/endpoint_list.cc +5 -5
- data/src/core/load_balancing/endpoint_list.h +1 -1
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
- data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
- data/src/core/load_balancing/health_check_client.cc +10 -13
- data/src/core/load_balancing/lb_policy.cc +5 -8
- data/src/core/load_balancing/lb_policy.h +19 -3
- data/src/core/load_balancing/lb_policy_factory.h +1 -1
- data/src/core/load_balancing/lb_policy_registry.cc +2 -3
- data/src/core/load_balancing/lb_policy_registry.h +1 -1
- data/src/core/load_balancing/oob_backend_metric.cc +2 -4
- data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
- data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
- data/src/core/load_balancing/priority/priority.cc +26 -28
- data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
- data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
- data/src/core/load_balancing/rls/rls.cc +82 -82
- data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
- data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
- data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
- data/src/core/load_balancing/xds/cds.cc +14 -16
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
- data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
- data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
- data/src/core/load_balancing/xds/xds_override_host.h +3 -3
- data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
- data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
- data/src/core/resolver/binder/binder_resolver.cc +3 -2
- data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
- data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
- data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
- data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
- data/src/core/resolver/endpoint_addresses.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/resolver/fake/fake_resolver.h +1 -1
- data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
- data/src/core/resolver/polling_resolver.cc +30 -35
- data/src/core/resolver/resolver.cc +2 -6
- data/src/core/resolver/resolver.h +0 -2
- data/src/core/resolver/resolver_registry.cc +6 -8
- data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
- data/src/core/resolver/xds/xds_resolver.cc +13 -15
- data/src/core/server/server.cc +269 -389
- data/src/core/server/server.h +37 -19
- data/src/core/server/server_call_tracer_filter.cc +7 -14
- data/src/core/server/server_config_selector.h +1 -1
- data/src/core/server/server_config_selector_filter.cc +3 -3
- data/src/core/server/server_interface.h +2 -0
- data/src/core/server/xds_channel_stack_modifier.cc +1 -1
- data/src/core/server/xds_channel_stack_modifier.h +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +1 -4
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_call_data.h +13 -11
- data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
- data/src/core/service_config/service_config_impl.cc +5 -5
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/service_config/service_config_parser.cc +3 -6
- data/src/core/service_config/service_config_parser.h +1 -1
- data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
- data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
- data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
- data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
- data/src/core/telemetry/metrics.cc +178 -0
- data/src/core/telemetry/metrics.h +562 -0
- data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats.h +5 -5
- data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
- data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
- data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +14 -17
- data/src/core/tsi/local_transport_security.cc +6 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
- data/src/core/tsi/ssl_transport_security.cc +76 -81
- data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
- data/src/core/tsi/ssl_transport_security_utils.h +11 -0
- data/src/core/tsi/transport_security.cc +0 -4
- data/src/core/tsi/transport_security.h +0 -2
- data/src/core/tsi/transport_security_interface.h +0 -4
- 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} +25 -26
- data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
- data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
- data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
- data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
- data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
- data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
- data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
- data/src/core/{lib/http → util/http_client}/parser.h +5 -6
- data/src/core/{lib → util}/json/json.h +5 -4
- data/src/core/{lib → util}/json/json_args.h +5 -5
- data/src/core/{lib → util}/json/json_channel_args.h +6 -6
- data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
- data/src/core/{lib → util}/json/json_object_loader.h +7 -7
- data/src/core/{lib → util}/json/json_reader.cc +3 -2
- data/src/core/{lib → util}/json/json_reader.h +6 -6
- data/src/core/{lib → util}/json/json_util.cc +4 -4
- data/src/core/{lib → util}/json/json_util.h +6 -6
- data/src/core/{lib → util}/json/json_writer.cc +3 -3
- data/src/core/{lib → util}/json/json_writer.h +6 -6
- data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
- data/src/core/util/log.cc +165 -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/time.cc +1 -1
- data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
- 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}/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/time.cc +1 -1
- data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
- data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
- data/src/core/xds/grpc/certificate_provider_store.h +4 -4
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
- data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
- data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
- data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
- data/src/core/xds/grpc/xds_client_grpc.h +2 -2
- data/src/core/xds/grpc/xds_cluster.cc +4 -5
- data/src/core/xds/grpc/xds_cluster.h +1 -1
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
- data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
- data/src/core/xds/grpc/xds_common_types.cc +1 -1
- data/src/core/xds/grpc/xds_common_types.h +1 -1
- data/src/core/xds/grpc/xds_endpoint.cc +4 -5
- data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
- data/src/core/xds/grpc/xds_http_filters.h +2 -2
- data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
- data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
- data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
- data/src/core/xds/grpc/xds_listener.cc +4 -6
- data/src/core/xds/grpc/xds_route_config.cc +7 -8
- data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
- data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
- data/src/core/xds/xds_client/xds_api.cc +5 -9
- data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
- data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
- data/src/core/xds/xds_client/xds_client.cc +39 -45
- data/src/core/xds/xds_client/xds_client.h +0 -3
- data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
- data/src/core/xds/xds_client/xds_client_stats.h +2 -2
- 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_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.h +2 -2
- data/src/ruby/ext/grpc/rb_server.c +39 -22
- 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/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
- data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -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 +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
- 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_vfy.c +7 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
- data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
- metadata +103 -93
- 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/handshaker/security/tsi_error.cc +0 -31
- data/src/core/handshaker/security/tsi_error.h +0 -30
- 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 -105
- data/src/core/lib/channel/metrics.cc +0 -334
- data/src/core/lib/channel/metrics.h +0 -365
- data/src/core/lib/event_engine/trace.cc +0 -25
- data/src/core/lib/gpr/log.cc +0 -166
- 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/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 -172
- data/src/core/lib/transport/batch_builder.h +0 -474
- 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/src/core/{lib/gpr → util}/alloc.cc +0 -0
- /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}/posix/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync.cc +0 -0
- /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
- /data/src/core/{lib/gpr → util}/time.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
- /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -0,0 +1,369 @@
|
|
1
|
+
// Copyright 2024 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_SRC_CORE_LIB_SURFACE_FILTER_STACK_CALL_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_SURFACE_FILTER_STACK_CALL_H
|
17
|
+
|
18
|
+
#include <inttypes.h>
|
19
|
+
#include <limits.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
#include <string.h>
|
22
|
+
|
23
|
+
#include <atomic>
|
24
|
+
#include <cstdint>
|
25
|
+
#include <string>
|
26
|
+
#include <vector>
|
27
|
+
|
28
|
+
#include "absl/log/check.h"
|
29
|
+
#include "absl/strings/str_cat.h"
|
30
|
+
#include "absl/strings/str_join.h"
|
31
|
+
#include "absl/strings/string_view.h"
|
32
|
+
|
33
|
+
#include <grpc/byte_buffer.h>
|
34
|
+
#include <grpc/compression.h>
|
35
|
+
#include <grpc/event_engine/event_engine.h>
|
36
|
+
#include <grpc/grpc.h>
|
37
|
+
#include <grpc/impl/call.h>
|
38
|
+
#include <grpc/impl/propagation_bits.h>
|
39
|
+
#include <grpc/slice.h>
|
40
|
+
#include <grpc/slice_buffer.h>
|
41
|
+
#include <grpc/status.h>
|
42
|
+
#include <grpc/support/alloc.h>
|
43
|
+
#include <grpc/support/atm.h>
|
44
|
+
#include <grpc/support/log.h>
|
45
|
+
#include <grpc/support/port_platform.h>
|
46
|
+
#include <grpc/support/string_util.h>
|
47
|
+
|
48
|
+
#include "src/core/lib/channel/channel_stack.h"
|
49
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
50
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
51
|
+
#include "src/core/lib/iomgr/call_combiner.h"
|
52
|
+
#include "src/core/lib/iomgr/polling_entity.h"
|
53
|
+
#include "src/core/lib/promise/context.h"
|
54
|
+
#include "src/core/lib/resource_quota/arena.h"
|
55
|
+
#include "src/core/lib/slice/slice_buffer.h"
|
56
|
+
#include "src/core/lib/surface/call.h"
|
57
|
+
#include "src/core/lib/surface/channel.h"
|
58
|
+
#include "src/core/lib/surface/completion_queue.h"
|
59
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
60
|
+
#include "src/core/lib/transport/transport.h"
|
61
|
+
#include "src/core/server/server_interface.h"
|
62
|
+
#include "src/core/telemetry/call_tracer.h"
|
63
|
+
#include "src/core/util/alloc.h"
|
64
|
+
|
65
|
+
namespace grpc_core {
|
66
|
+
|
67
|
+
///////////////////////////////////////////////////////////////////////////////
|
68
|
+
// FilterStackCall
|
69
|
+
// To be removed once promise conversion is complete
|
70
|
+
|
71
|
+
class FilterStackCall final : public Call {
|
72
|
+
public:
|
73
|
+
~FilterStackCall() override {
|
74
|
+
gpr_free(static_cast<void*>(const_cast<char*>(final_info_.error_string)));
|
75
|
+
}
|
76
|
+
|
77
|
+
bool Completed() override {
|
78
|
+
return gpr_atm_acq_load(&received_final_op_atm_) != 0;
|
79
|
+
}
|
80
|
+
|
81
|
+
// TODO(ctiller): return absl::StatusOr<SomeSmartPointer<Call>>?
|
82
|
+
static grpc_error_handle Create(grpc_call_create_args* args,
|
83
|
+
grpc_call** out_call);
|
84
|
+
|
85
|
+
static Call* FromTopElem(grpc_call_element* elem) {
|
86
|
+
return FromCallStack(grpc_call_stack_from_top_element(elem));
|
87
|
+
}
|
88
|
+
|
89
|
+
grpc_call_stack* call_stack() override {
|
90
|
+
return reinterpret_cast<grpc_call_stack*>(
|
91
|
+
reinterpret_cast<char*>(this) +
|
92
|
+
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(*this)));
|
93
|
+
}
|
94
|
+
|
95
|
+
grpc_call_element* call_elem(size_t idx) {
|
96
|
+
return grpc_call_stack_element(call_stack(), idx);
|
97
|
+
}
|
98
|
+
|
99
|
+
CallCombiner* call_combiner() { return &call_combiner_; }
|
100
|
+
|
101
|
+
void CancelWithError(grpc_error_handle error) override;
|
102
|
+
void SetCompletionQueue(grpc_completion_queue* cq) override;
|
103
|
+
grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
|
104
|
+
bool is_notify_tag_closure) override;
|
105
|
+
void ExternalRef() override { ext_ref_.Ref(); }
|
106
|
+
void ExternalUnref() override;
|
107
|
+
void InternalRef(const char* reason) override {
|
108
|
+
GRPC_CALL_STACK_REF(call_stack(), reason);
|
109
|
+
}
|
110
|
+
void InternalUnref(const char* reason) override {
|
111
|
+
GRPC_CALL_STACK_UNREF(call_stack(), reason);
|
112
|
+
}
|
113
|
+
|
114
|
+
bool is_trailers_only() const override {
|
115
|
+
bool result = is_trailers_only_;
|
116
|
+
DCHECK(!result || recv_initial_metadata_.TransportSize() == 0);
|
117
|
+
return result;
|
118
|
+
}
|
119
|
+
|
120
|
+
bool failed_before_recv_message() const override {
|
121
|
+
return call_failed_before_recv_message_;
|
122
|
+
}
|
123
|
+
|
124
|
+
uint32_t test_only_message_flags() override {
|
125
|
+
return test_only_last_message_flags_;
|
126
|
+
}
|
127
|
+
|
128
|
+
absl::string_view GetServerAuthority() const override {
|
129
|
+
const Slice* authority_metadata =
|
130
|
+
recv_initial_metadata_.get_pointer(HttpAuthorityMetadata());
|
131
|
+
if (authority_metadata == nullptr) return "";
|
132
|
+
return authority_metadata->as_string_view();
|
133
|
+
}
|
134
|
+
|
135
|
+
static size_t InitialSizeEstimate() {
|
136
|
+
return sizeof(FilterStackCall) +
|
137
|
+
sizeof(BatchControl) * kMaxConcurrentBatches;
|
138
|
+
}
|
139
|
+
|
140
|
+
char* GetPeer() final;
|
141
|
+
|
142
|
+
grpc_compression_options compression_options() override {
|
143
|
+
return channel_->compression_options();
|
144
|
+
}
|
145
|
+
|
146
|
+
void DeleteThis() {
|
147
|
+
auto arena = this->arena()->Ref();
|
148
|
+
this->~FilterStackCall();
|
149
|
+
}
|
150
|
+
|
151
|
+
Channel* channel() const { return channel_.get(); }
|
152
|
+
|
153
|
+
private:
|
154
|
+
class ScopedContext : public promise_detail::Context<Arena> {
|
155
|
+
public:
|
156
|
+
explicit ScopedContext(FilterStackCall* call)
|
157
|
+
: promise_detail::Context<Arena>(call->arena()) {}
|
158
|
+
};
|
159
|
+
|
160
|
+
static constexpr gpr_atm kRecvNone = 0;
|
161
|
+
static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
|
162
|
+
|
163
|
+
enum class PendingOp {
|
164
|
+
kRecvMessage,
|
165
|
+
kRecvInitialMetadata,
|
166
|
+
kRecvTrailingMetadata,
|
167
|
+
kSends
|
168
|
+
};
|
169
|
+
static intptr_t PendingOpMask(PendingOp op) {
|
170
|
+
return static_cast<intptr_t>(1) << static_cast<intptr_t>(op);
|
171
|
+
}
|
172
|
+
static std::string PendingOpString(intptr_t pending_ops) {
|
173
|
+
std::vector<absl::string_view> pending_op_strings;
|
174
|
+
if (pending_ops & PendingOpMask(PendingOp::kRecvMessage)) {
|
175
|
+
pending_op_strings.push_back("kRecvMessage");
|
176
|
+
}
|
177
|
+
if (pending_ops & PendingOpMask(PendingOp::kRecvInitialMetadata)) {
|
178
|
+
pending_op_strings.push_back("kRecvInitialMetadata");
|
179
|
+
}
|
180
|
+
if (pending_ops & PendingOpMask(PendingOp::kRecvTrailingMetadata)) {
|
181
|
+
pending_op_strings.push_back("kRecvTrailingMetadata");
|
182
|
+
}
|
183
|
+
if (pending_ops & PendingOpMask(PendingOp::kSends)) {
|
184
|
+
pending_op_strings.push_back("kSends");
|
185
|
+
}
|
186
|
+
return absl::StrCat("{", absl::StrJoin(pending_op_strings, ","), "}");
|
187
|
+
}
|
188
|
+
struct BatchControl {
|
189
|
+
FilterStackCall* call_ = nullptr;
|
190
|
+
CallTracerAnnotationInterface* call_tracer_ = nullptr;
|
191
|
+
grpc_transport_stream_op_batch op_;
|
192
|
+
// Share memory for cq_completion and notify_tag as they are never needed
|
193
|
+
// simultaneously. Each byte used in this data structure count as six bytes
|
194
|
+
// per call, so any savings we can make are worthwhile,
|
195
|
+
|
196
|
+
// We use notify_tag to determine whether or not to send notification to the
|
197
|
+
// completion queue. Once we've made that determination, we can reuse the
|
198
|
+
// memory for cq_completion.
|
199
|
+
union {
|
200
|
+
grpc_cq_completion cq_completion;
|
201
|
+
struct {
|
202
|
+
// Any given op indicates completion by either (a) calling a closure or
|
203
|
+
// (b) sending a notification on the call's completion queue. If
|
204
|
+
// \a is_closure is true, \a tag indicates a closure to be invoked;
|
205
|
+
// otherwise, \a tag indicates the tag to be used in the notification to
|
206
|
+
// be sent to the completion queue.
|
207
|
+
void* tag;
|
208
|
+
bool is_closure;
|
209
|
+
} notify_tag;
|
210
|
+
} completion_data_;
|
211
|
+
grpc_closure start_batch_;
|
212
|
+
grpc_closure finish_batch_;
|
213
|
+
std::atomic<intptr_t> ops_pending_{0};
|
214
|
+
AtomicError batch_error_;
|
215
|
+
void set_pending_ops(uintptr_t ops) {
|
216
|
+
ops_pending_.store(ops, std::memory_order_release);
|
217
|
+
}
|
218
|
+
bool completed_batch_step(PendingOp op) {
|
219
|
+
auto mask = PendingOpMask(op);
|
220
|
+
auto r = ops_pending_.fetch_sub(mask, std::memory_order_acq_rel);
|
221
|
+
GRPC_TRACE_VLOG(call, 2)
|
222
|
+
<< "BATCH:" << this << " COMPLETE:" << PendingOpString(mask)
|
223
|
+
<< " REMAINING:" << PendingOpString(r & ~mask)
|
224
|
+
<< " (tag:" << completion_data_.notify_tag.tag << ")";
|
225
|
+
CHECK_NE((r & mask), 0);
|
226
|
+
return r == mask;
|
227
|
+
}
|
228
|
+
|
229
|
+
void PostCompletion();
|
230
|
+
void FinishStep(PendingOp op);
|
231
|
+
void ProcessDataAfterMetadata();
|
232
|
+
void ReceivingStreamReady(grpc_error_handle error);
|
233
|
+
void ReceivingInitialMetadataReady(grpc_error_handle error);
|
234
|
+
void ReceivingTrailingMetadataReady(grpc_error_handle error);
|
235
|
+
void FinishBatch(grpc_error_handle error);
|
236
|
+
};
|
237
|
+
|
238
|
+
FilterStackCall(RefCountedPtr<Arena> arena,
|
239
|
+
const grpc_call_create_args& args);
|
240
|
+
|
241
|
+
static void ReleaseCall(void* call, grpc_error_handle);
|
242
|
+
static void DestroyCall(void* call, grpc_error_handle);
|
243
|
+
|
244
|
+
static FilterStackCall* FromCallStack(grpc_call_stack* call_stack) {
|
245
|
+
return reinterpret_cast<FilterStackCall*>(
|
246
|
+
reinterpret_cast<char*>(call_stack) -
|
247
|
+
GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)));
|
248
|
+
}
|
249
|
+
|
250
|
+
void ExecuteBatch(grpc_transport_stream_op_batch* batch,
|
251
|
+
grpc_closure* start_batch_closure);
|
252
|
+
void SetFinalStatus(grpc_error_handle error);
|
253
|
+
BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
|
254
|
+
bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
|
255
|
+
bool is_trailing);
|
256
|
+
void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
|
257
|
+
void RecvInitialFilter(grpc_metadata_batch* b);
|
258
|
+
void RecvTrailingFilter(grpc_metadata_batch* b,
|
259
|
+
grpc_error_handle batch_error);
|
260
|
+
|
261
|
+
grpc_compression_algorithm incoming_compression_algorithm() override {
|
262
|
+
return incoming_compression_algorithm_;
|
263
|
+
}
|
264
|
+
void SetIncomingCompressionAlgorithm(
|
265
|
+
grpc_compression_algorithm algorithm) override {
|
266
|
+
incoming_compression_algorithm_ = algorithm;
|
267
|
+
}
|
268
|
+
|
269
|
+
RefCountedPtr<Channel> channel_;
|
270
|
+
RefCount ext_ref_;
|
271
|
+
CallCombiner call_combiner_;
|
272
|
+
grpc_completion_queue* cq_;
|
273
|
+
grpc_polling_entity pollent_;
|
274
|
+
|
275
|
+
/// has grpc_call_unref been called
|
276
|
+
bool destroy_called_ = false;
|
277
|
+
// Trailers-only response status
|
278
|
+
bool is_trailers_only_ = false;
|
279
|
+
/// which ops are in-flight
|
280
|
+
bool sent_initial_metadata_ = false;
|
281
|
+
bool sending_message_ = false;
|
282
|
+
bool sent_final_op_ = false;
|
283
|
+
bool received_initial_metadata_ = false;
|
284
|
+
bool receiving_message_ = false;
|
285
|
+
bool requested_final_op_ = false;
|
286
|
+
gpr_atm received_final_op_atm_ = 0;
|
287
|
+
|
288
|
+
BatchControl* active_batches_[kMaxConcurrentBatches] = {};
|
289
|
+
grpc_transport_stream_op_batch_payload stream_op_payload_;
|
290
|
+
|
291
|
+
// first idx: is_receiving, second idx: is_trailing
|
292
|
+
grpc_metadata_batch send_initial_metadata_;
|
293
|
+
grpc_metadata_batch send_trailing_metadata_;
|
294
|
+
grpc_metadata_batch recv_initial_metadata_;
|
295
|
+
grpc_metadata_batch recv_trailing_metadata_;
|
296
|
+
|
297
|
+
// Buffered read metadata waiting to be returned to the application.
|
298
|
+
// Element 0 is initial metadata, element 1 is trailing metadata.
|
299
|
+
grpc_metadata_array* buffered_metadata_[2] = {};
|
300
|
+
|
301
|
+
// Call data useful used for reporting. Only valid after the call has
|
302
|
+
// completed
|
303
|
+
grpc_call_final_info final_info_;
|
304
|
+
|
305
|
+
SliceBuffer send_slice_buffer_;
|
306
|
+
absl::optional<SliceBuffer> receiving_slice_buffer_;
|
307
|
+
uint32_t receiving_stream_flags_;
|
308
|
+
uint32_t test_only_last_message_flags_ = 0;
|
309
|
+
// Compression algorithm for *incoming* data
|
310
|
+
grpc_compression_algorithm incoming_compression_algorithm_ =
|
311
|
+
GRPC_COMPRESS_NONE;
|
312
|
+
|
313
|
+
bool call_failed_before_recv_message_ = false;
|
314
|
+
grpc_byte_buffer** receiving_buffer_ = nullptr;
|
315
|
+
grpc_slice receiving_slice_ = grpc_empty_slice();
|
316
|
+
grpc_closure receiving_stream_ready_;
|
317
|
+
grpc_closure receiving_initial_metadata_ready_;
|
318
|
+
grpc_closure receiving_trailing_metadata_ready_;
|
319
|
+
// Status about operation of call
|
320
|
+
bool sent_server_trailing_metadata_ = false;
|
321
|
+
gpr_atm cancelled_with_error_ = 0;
|
322
|
+
|
323
|
+
grpc_closure release_call_;
|
324
|
+
|
325
|
+
union {
|
326
|
+
struct {
|
327
|
+
grpc_status_code* status;
|
328
|
+
grpc_slice* status_details;
|
329
|
+
const char** error_string;
|
330
|
+
} client;
|
331
|
+
struct {
|
332
|
+
int* cancelled;
|
333
|
+
// backpointer to owning server if this is a server side call.
|
334
|
+
ServerInterface* core_server;
|
335
|
+
} server;
|
336
|
+
} final_op_;
|
337
|
+
AtomicError status_error_;
|
338
|
+
|
339
|
+
// recv_state can contain one of the following values:
|
340
|
+
// RECV_NONE : : no initial metadata and messages received
|
341
|
+
// RECV_INITIAL_METADATA_FIRST : received initial metadata first
|
342
|
+
// a batch_control* : received messages first
|
343
|
+
|
344
|
+
// +------1------RECV_NONE------3-----+
|
345
|
+
// | |
|
346
|
+
// | |
|
347
|
+
// v v
|
348
|
+
// RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
|
349
|
+
// | ^ | ^
|
350
|
+
// | | | |
|
351
|
+
// +-----2-----+ +-----4-----+
|
352
|
+
|
353
|
+
// For 1, 4: See receiving_initial_metadata_ready() function
|
354
|
+
// For 2, 3: See receiving_stream_ready() function
|
355
|
+
gpr_atm recv_state_ = 0;
|
356
|
+
};
|
357
|
+
|
358
|
+
// Create a new call based on \a args.
|
359
|
+
// Regardless of success or failure, always returns a valid new call into *call
|
360
|
+
//
|
361
|
+
grpc_error_handle grpc_call_create(grpc_call_create_args* args,
|
362
|
+
grpc_call** call);
|
363
|
+
|
364
|
+
// Given the top call_element, get the call object.
|
365
|
+
grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element);
|
366
|
+
|
367
|
+
} // namespace grpc_core
|
368
|
+
|
369
|
+
#endif // GRPC_SRC_CORE_LIB_SURFACE_FILTER_STACK_CALL_H
|
@@ -19,6 +19,7 @@
|
|
19
19
|
#include "src/core/lib/surface/init.h"
|
20
20
|
|
21
21
|
#include "absl/base/thread_annotations.h"
|
22
|
+
#include "absl/log/log.h"
|
22
23
|
|
23
24
|
#include <grpc/fork.h>
|
24
25
|
#include <grpc/grpc.h>
|
@@ -66,10 +67,10 @@ static bool g_shutting_down ABSL_GUARDED_BY(g_init_mu) = false;
|
|
66
67
|
namespace grpc_core {
|
67
68
|
void RegisterSecurityFilters(CoreConfiguration::Builder* builder) {
|
68
69
|
builder->channel_init()
|
69
|
-
->
|
70
|
+
->RegisterV2Filter<ClientAuthFilter>(GRPC_CLIENT_SUBCHANNEL)
|
70
71
|
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
71
72
|
builder->channel_init()
|
72
|
-
->
|
73
|
+
->RegisterV2Filter<ClientAuthFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
73
74
|
.IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
|
74
75
|
builder->channel_init()
|
75
76
|
->RegisterFilter<ServerAuthFilter>(GRPC_SERVER_CHANNEL)
|
@@ -137,7 +138,7 @@ void grpc_shutdown_from_cleanup_thread(void* /*ignored*/) {
|
|
137
138
|
return;
|
138
139
|
}
|
139
140
|
grpc_shutdown_internal_locked();
|
140
|
-
|
141
|
+
VLOG(2) << "grpc_shutdown from cleanup thread done";
|
141
142
|
}
|
142
143
|
|
143
144
|
void grpc_shutdown(void) {
|
@@ -155,14 +156,14 @@ void grpc_shutdown(void) {
|
|
155
156
|
0) &&
|
156
157
|
grpc_core::ExecCtx::Get() == nullptr) {
|
157
158
|
// just run clean-up when this is called on non-executor thread.
|
158
|
-
|
159
|
+
VLOG(2) << "grpc_shutdown starts clean-up now";
|
159
160
|
g_shutting_down = true;
|
160
161
|
grpc_shutdown_internal_locked();
|
161
|
-
|
162
|
+
VLOG(2) << "grpc_shutdown done";
|
162
163
|
} else {
|
163
164
|
// spawn a detached thread to do the actual clean up in case we are
|
164
165
|
// currently in an executor thread.
|
165
|
-
|
166
|
+
VLOG(2) << "grpc_shutdown spawns clean-up thread";
|
166
167
|
g_initializations++;
|
167
168
|
g_shutting_down = true;
|
168
169
|
grpc_core::Thread cleanup_thread(
|
@@ -36,7 +36,6 @@
|
|
36
36
|
#include "src/core/lib/channel/promise_based_filter.h"
|
37
37
|
#include "src/core/lib/config/core_configuration.h"
|
38
38
|
#include "src/core/lib/debug/trace.h"
|
39
|
-
#include "src/core/lib/gpr/useful.h"
|
40
39
|
#include "src/core/lib/gprpp/debug_location.h"
|
41
40
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
42
41
|
#include "src/core/lib/gprpp/sync.h"
|
@@ -49,6 +48,7 @@
|
|
49
48
|
#include "src/core/lib/transport/connectivity_state.h"
|
50
49
|
#include "src/core/lib/transport/metadata_batch.h"
|
51
50
|
#include "src/core/lib/transport/transport.h"
|
51
|
+
#include "src/core/util/useful.h"
|
52
52
|
|
53
53
|
// Avoid some IWYU confusion:
|
54
54
|
// IWYU pragma: no_include "src/core/lib/gprpp/orphanable.h"
|
@@ -36,10 +36,7 @@
|
|
36
36
|
#include "src/core/lib/channel/channel_fwd.h"
|
37
37
|
#include "src/core/lib/channel/channel_stack.h"
|
38
38
|
#include "src/core/lib/channel/channel_stack_builder_impl.h"
|
39
|
-
#include "src/core/lib/channel/metrics.h"
|
40
39
|
#include "src/core/lib/config/core_configuration.h"
|
41
|
-
#include "src/core/lib/debug/stats.h"
|
42
|
-
#include "src/core/lib/debug/stats_data.h"
|
43
40
|
#include "src/core/lib/gprpp/crash.h"
|
44
41
|
#include "src/core/lib/gprpp/dual_ref_counted.h"
|
45
42
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
@@ -57,10 +54,13 @@
|
|
57
54
|
#include "src/core/lib/surface/init_internally.h"
|
58
55
|
#include "src/core/lib/surface/lame_client.h"
|
59
56
|
#include "src/core/lib/transport/transport.h"
|
57
|
+
#include "src/core/telemetry/metrics.h"
|
58
|
+
#include "src/core/telemetry/stats.h"
|
59
|
+
#include "src/core/telemetry/stats_data.h"
|
60
60
|
|
61
61
|
namespace grpc_core {
|
62
62
|
|
63
|
-
absl::StatusOr<
|
63
|
+
absl::StatusOr<RefCountedPtr<Channel>> LegacyChannel::Create(
|
64
64
|
std::string target, ChannelArgs args,
|
65
65
|
grpc_channel_stack_type channel_stack_type) {
|
66
66
|
if (grpc_channel_stack_type_is_client(channel_stack_type)) {
|
@@ -92,31 +92,46 @@ absl::StatusOr<OrphanablePtr<Channel>> LegacyChannel::Create(
|
|
92
92
|
if (channel_stack_type == GRPC_SERVER_CHANNEL) {
|
93
93
|
*(*r)->stats_plugin_group =
|
94
94
|
GlobalStatsPluginRegistry::GetStatsPluginsForServer(args);
|
95
|
+
// Add per-server stats plugins.
|
96
|
+
auto* stats_plugin_list = args.GetPointer<
|
97
|
+
std::shared_ptr<std::vector<std::shared_ptr<StatsPlugin>>>>(
|
98
|
+
GRPC_ARG_EXPERIMENTAL_STATS_PLUGINS);
|
99
|
+
if (stats_plugin_list != nullptr) {
|
100
|
+
for (const auto& plugin : **stats_plugin_list) {
|
101
|
+
(*r)->stats_plugin_group->AddStatsPlugin(
|
102
|
+
plugin, plugin->GetServerScopeConfig(args));
|
103
|
+
}
|
104
|
+
}
|
95
105
|
} else {
|
96
106
|
std::string authority = args.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY)
|
97
107
|
.value_or(CoreConfiguration::Get()
|
98
108
|
.resolver_registry()
|
99
109
|
.GetDefaultAuthority(target));
|
110
|
+
experimental::StatsPluginChannelScope scope(target, authority);
|
100
111
|
*(*r)->stats_plugin_group =
|
101
|
-
GlobalStatsPluginRegistry::GetStatsPluginsForChannel(
|
102
|
-
|
112
|
+
GlobalStatsPluginRegistry::GetStatsPluginsForChannel(scope);
|
113
|
+
// Add per-channel stats plugins.
|
114
|
+
auto* stats_plugin_list = args.GetPointer<
|
115
|
+
std::shared_ptr<std::vector<std::shared_ptr<StatsPlugin>>>>(
|
116
|
+
GRPC_ARG_EXPERIMENTAL_STATS_PLUGINS);
|
117
|
+
if (stats_plugin_list != nullptr) {
|
118
|
+
for (const auto& plugin : **stats_plugin_list) {
|
119
|
+
(*r)->stats_plugin_group->AddStatsPlugin(
|
120
|
+
plugin, plugin->GetChannelScopeConfig(scope));
|
121
|
+
}
|
122
|
+
}
|
103
123
|
}
|
104
|
-
return
|
124
|
+
return MakeRefCounted<LegacyChannel>(
|
105
125
|
grpc_channel_stack_type_is_client(builder.channel_stack_type()),
|
106
|
-
|
126
|
+
std::move(target), args, std::move(*r));
|
107
127
|
}
|
108
128
|
|
109
|
-
LegacyChannel::LegacyChannel(bool is_client,
|
110
|
-
std::string target,
|
129
|
+
LegacyChannel::LegacyChannel(bool is_client, std::string target,
|
111
130
|
const ChannelArgs& channel_args,
|
112
131
|
RefCountedPtr<grpc_channel_stack> channel_stack)
|
113
132
|
: Channel(std::move(target), channel_args),
|
114
133
|
is_client_(is_client),
|
115
|
-
|
116
|
-
channel_stack_(std::move(channel_stack)),
|
117
|
-
allocator_(channel_args.GetObject<ResourceQuota>()
|
118
|
-
->memory_quota()
|
119
|
-
->CreateMemoryOwner()) {
|
134
|
+
channel_stack_(std::move(channel_stack)) {
|
120
135
|
// We need to make sure that grpc_shutdown() does not shut things down
|
121
136
|
// until after the channel is destroyed. However, the channel may not
|
122
137
|
// actually be destroyed by the time grpc_channel_destroy() returns,
|
@@ -147,13 +162,12 @@ LegacyChannel::LegacyChannel(bool is_client, bool is_promising,
|
|
147
162
|
};
|
148
163
|
}
|
149
164
|
|
150
|
-
void LegacyChannel::
|
165
|
+
void LegacyChannel::Orphaned() {
|
151
166
|
grpc_transport_op* op = grpc_make_transport_op(nullptr);
|
152
167
|
op->disconnect_with_error = GRPC_ERROR_CREATE("Channel Destroyed");
|
153
168
|
grpc_channel_element* elem =
|
154
169
|
grpc_channel_stack_element(channel_stack_.get(), 0);
|
155
170
|
elem->filter->start_transport_op(elem, op);
|
156
|
-
Unref();
|
157
171
|
}
|
158
172
|
|
159
173
|
bool LegacyChannel::IsLame() const {
|
@@ -170,7 +184,7 @@ grpc_call* LegacyChannel::CreateCall(
|
|
170
184
|
CHECK(is_client_);
|
171
185
|
CHECK(!(cq != nullptr && pollset_set_alternative != nullptr));
|
172
186
|
grpc_call_create_args args;
|
173
|
-
args.channel =
|
187
|
+
args.channel = RefAsSubclass<LegacyChannel>();
|
174
188
|
args.server = nullptr;
|
175
189
|
args.parent = parent_call;
|
176
190
|
args.propagation_mask = propagation_mask;
|
@@ -207,9 +221,9 @@ bool LegacyChannel::SupportsConnectivityWatcher() const {
|
|
207
221
|
// A fire-and-forget object to handle external connectivity state watches.
|
208
222
|
class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
|
209
223
|
public:
|
210
|
-
StateWatcher(
|
211
|
-
|
212
|
-
Timestamp deadline)
|
224
|
+
StateWatcher(WeakRefCountedPtr<LegacyChannel> channel,
|
225
|
+
grpc_completion_queue* cq, void* tag,
|
226
|
+
grpc_connectivity_state last_observed_state, Timestamp deadline)
|
213
227
|
: channel_(std::move(channel)),
|
214
228
|
cq_(cq),
|
215
229
|
tag_(tag),
|
@@ -290,7 +304,7 @@ class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
|
|
290
304
|
|
291
305
|
static void WatchComplete(void* arg, grpc_error_handle error) {
|
292
306
|
RefCountedPtr<StateWatcher> self(static_cast<StateWatcher*>(arg));
|
293
|
-
if (GRPC_TRACE_FLAG_ENABLED(
|
307
|
+
if (GRPC_TRACE_FLAG_ENABLED(op_failure)) {
|
294
308
|
GRPC_LOG_IF_ERROR("watch_completion_error", error);
|
295
309
|
}
|
296
310
|
MutexLock lock(&self->mu_);
|
@@ -316,7 +330,7 @@ class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
|
|
316
330
|
self->WeakUnref();
|
317
331
|
}
|
318
332
|
|
319
|
-
|
333
|
+
WeakRefCountedPtr<LegacyChannel> channel_;
|
320
334
|
grpc_completion_queue* cq_;
|
321
335
|
void* tag_;
|
322
336
|
|
@@ -336,8 +350,8 @@ class LegacyChannel::StateWatcher final : public DualRefCounted<StateWatcher> {
|
|
336
350
|
void LegacyChannel::WatchConnectivityState(
|
337
351
|
grpc_connectivity_state last_observed_state, Timestamp deadline,
|
338
352
|
grpc_completion_queue* cq, void* tag) {
|
339
|
-
new StateWatcher(
|
340
|
-
deadline);
|
353
|
+
new StateWatcher(WeakRefAsSubclass<LegacyChannel>(), cq, tag,
|
354
|
+
last_observed_state, deadline);
|
341
355
|
}
|
342
356
|
|
343
357
|
void LegacyChannel::AddConnectivityWatcher(
|
@@ -404,8 +418,7 @@ void LegacyChannel::Ping(grpc_completion_queue* cq, void* tag) {
|
|
404
418
|
ClientChannelFilter* LegacyChannel::GetClientChannelFilter() const {
|
405
419
|
grpc_channel_element* elem =
|
406
420
|
grpc_channel_stack_last_element(channel_stack_.get());
|
407
|
-
if (elem->filter != &ClientChannelFilter::
|
408
|
-
elem->filter != &ClientChannelFilter::kFilterVtableWithoutPromises) {
|
421
|
+
if (elem->filter != &ClientChannelFilter::kFilter) {
|
409
422
|
return nullptr;
|
410
423
|
}
|
411
424
|
return static_cast<ClientChannelFilter*>(elem->channel_data);
|
@@ -32,7 +32,6 @@
|
|
32
32
|
#include "src/core/lib/channel/channel_args.h"
|
33
33
|
#include "src/core/lib/channel/channel_fwd.h"
|
34
34
|
#include "src/core/lib/channel/channel_stack.h" // IWYU pragma: keep
|
35
|
-
#include "src/core/lib/debug/stats.h"
|
36
35
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
37
36
|
#include "src/core/lib/gprpp/time.h"
|
38
37
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
@@ -40,31 +39,23 @@
|
|
40
39
|
#include "src/core/lib/surface/channel.h"
|
41
40
|
#include "src/core/lib/surface/channel_stack_type.h"
|
42
41
|
#include "src/core/lib/transport/call_arena_allocator.h"
|
42
|
+
#include "src/core/lib/transport/transport.h"
|
43
|
+
#include "src/core/telemetry/stats.h"
|
43
44
|
|
44
45
|
namespace grpc_core {
|
45
46
|
|
46
47
|
class LegacyChannel final : public Channel {
|
47
48
|
public:
|
48
|
-
static absl::StatusOr<
|
49
|
+
static absl::StatusOr<RefCountedPtr<Channel>> Create(
|
49
50
|
std::string target, ChannelArgs args,
|
50
51
|
grpc_channel_stack_type channel_stack_type);
|
51
52
|
|
52
53
|
// Do not instantiate directly -- use Create() instead.
|
53
|
-
LegacyChannel(bool is_client,
|
54
|
+
LegacyChannel(bool is_client, std::string target,
|
54
55
|
const ChannelArgs& channel_args,
|
55
56
|
RefCountedPtr<grpc_channel_stack> channel_stack);
|
56
57
|
|
57
|
-
void
|
58
|
-
|
59
|
-
Arena* CreateArena() override {
|
60
|
-
const size_t initial_size = call_size_estimator_.CallSizeEstimate();
|
61
|
-
global_stats().IncrementCallInitialSize(initial_size);
|
62
|
-
return Arena::Create(initial_size, &allocator_);
|
63
|
-
}
|
64
|
-
void DestroyArena(Arena* arena) override {
|
65
|
-
call_size_estimator_.UpdateCallSizeEstimate(arena->TotalUsedBytes());
|
66
|
-
arena->Destroy();
|
67
|
-
}
|
58
|
+
void Orphaned() override;
|
68
59
|
|
69
60
|
bool IsLame() const override;
|
70
61
|
|
@@ -74,6 +65,10 @@ class LegacyChannel final : public Channel {
|
|
74
65
|
absl::optional<Slice> authority, Timestamp deadline,
|
75
66
|
bool registered_method) override;
|
76
67
|
|
68
|
+
void StartCall(UnstartedCallHandler) override {
|
69
|
+
Crash("StartCall() not supported on LegacyChannel");
|
70
|
+
}
|
71
|
+
|
77
72
|
grpc_event_engine::experimental::EventEngine* event_engine() const override {
|
78
73
|
return channel_stack_->EventEngine();
|
79
74
|
}
|
@@ -99,7 +94,6 @@ class LegacyChannel final : public Channel {
|
|
99
94
|
void Ping(grpc_completion_queue* cq, void* tag) override;
|
100
95
|
|
101
96
|
bool is_client() const override { return is_client_; }
|
102
|
-
bool is_promising() const override { return is_promising_; }
|
103
97
|
grpc_channel_stack* channel_stack() const override {
|
104
98
|
return channel_stack_.get();
|
105
99
|
}
|
@@ -112,10 +106,7 @@ class LegacyChannel final : public Channel {
|
|
112
106
|
ClientChannelFilter* GetClientChannelFilter() const;
|
113
107
|
|
114
108
|
const bool is_client_;
|
115
|
-
const bool is_promising_;
|
116
109
|
RefCountedPtr<grpc_channel_stack> channel_stack_;
|
117
|
-
CallSizeEstimator call_size_estimator_{1024};
|
118
|
-
grpc_event_engine::experimental::MemoryAllocator allocator_;
|
119
110
|
};
|
120
111
|
|
121
112
|
} // namespace grpc_core
|