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,449 @@
|
|
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_CALL_UTILS_H
|
16
|
+
#define GRPC_SRC_CORE_LIB_SURFACE_CALL_UTILS_H
|
17
|
+
|
18
|
+
#include <inttypes.h>
|
19
|
+
#include <limits.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
#include <string.h>
|
22
|
+
|
23
|
+
#include <algorithm>
|
24
|
+
#include <atomic>
|
25
|
+
#include <cstdint>
|
26
|
+
#include <string>
|
27
|
+
#include <type_traits>
|
28
|
+
#include <utility>
|
29
|
+
|
30
|
+
#include "absl/log/check.h"
|
31
|
+
#include "absl/status/status.h"
|
32
|
+
#include "absl/strings/str_cat.h"
|
33
|
+
#include "absl/strings/string_view.h"
|
34
|
+
|
35
|
+
#include <grpc/byte_buffer.h>
|
36
|
+
#include <grpc/compression.h>
|
37
|
+
#include <grpc/event_engine/event_engine.h>
|
38
|
+
#include <grpc/grpc.h>
|
39
|
+
#include <grpc/impl/call.h>
|
40
|
+
#include <grpc/impl/propagation_bits.h>
|
41
|
+
#include <grpc/slice.h>
|
42
|
+
#include <grpc/slice_buffer.h>
|
43
|
+
#include <grpc/status.h>
|
44
|
+
#include <grpc/support/alloc.h>
|
45
|
+
#include <grpc/support/atm.h>
|
46
|
+
#include <grpc/support/log.h>
|
47
|
+
#include <grpc/support/port_platform.h>
|
48
|
+
#include <grpc/support/string_util.h>
|
49
|
+
|
50
|
+
#include "src/core/lib/gprpp/crash.h"
|
51
|
+
#include "src/core/lib/promise/activity.h"
|
52
|
+
#include "src/core/lib/promise/cancel_callback.h"
|
53
|
+
#include "src/core/lib/promise/map.h"
|
54
|
+
#include "src/core/lib/promise/poll.h"
|
55
|
+
#include "src/core/lib/promise/seq.h"
|
56
|
+
#include "src/core/lib/promise/status_flag.h"
|
57
|
+
#include "src/core/lib/surface/completion_queue.h"
|
58
|
+
#include "src/core/lib/transport/message.h"
|
59
|
+
#include "src/core/lib/transport/metadata.h"
|
60
|
+
#include "src/core/lib/transport/metadata_batch.h"
|
61
|
+
|
62
|
+
namespace grpc_core {
|
63
|
+
|
64
|
+
class PublishToAppEncoder {
|
65
|
+
public:
|
66
|
+
explicit PublishToAppEncoder(grpc_metadata_array* dest,
|
67
|
+
const grpc_metadata_batch* encoding,
|
68
|
+
bool is_client)
|
69
|
+
: dest_(dest), encoding_(encoding), is_client_(is_client) {}
|
70
|
+
|
71
|
+
void Encode(const Slice& key, const Slice& value) {
|
72
|
+
Append(key.c_slice(), value.c_slice());
|
73
|
+
}
|
74
|
+
|
75
|
+
// Catch anything that is not explicitly handled, and do not publish it to the
|
76
|
+
// application. If new metadata is added to a batch that needs to be
|
77
|
+
// published, it should be called out here.
|
78
|
+
template <typename Which>
|
79
|
+
void Encode(Which, const typename Which::ValueType&) {}
|
80
|
+
|
81
|
+
void Encode(UserAgentMetadata, const Slice& slice) {
|
82
|
+
Append(UserAgentMetadata::key(), slice);
|
83
|
+
}
|
84
|
+
|
85
|
+
void Encode(HostMetadata, const Slice& slice) {
|
86
|
+
Append(HostMetadata::key(), slice);
|
87
|
+
}
|
88
|
+
|
89
|
+
void Encode(GrpcPreviousRpcAttemptsMetadata, uint32_t count) {
|
90
|
+
Append(GrpcPreviousRpcAttemptsMetadata::key(), count);
|
91
|
+
}
|
92
|
+
|
93
|
+
void Encode(GrpcRetryPushbackMsMetadata, Duration count) {
|
94
|
+
Append(GrpcRetryPushbackMsMetadata::key(), count.millis());
|
95
|
+
}
|
96
|
+
|
97
|
+
void Encode(LbTokenMetadata, const Slice& slice) {
|
98
|
+
Append(LbTokenMetadata::key(), slice);
|
99
|
+
}
|
100
|
+
|
101
|
+
private:
|
102
|
+
void Append(absl::string_view key, int64_t value) {
|
103
|
+
Append(StaticSlice::FromStaticString(key).c_slice(),
|
104
|
+
Slice::FromInt64(value).c_slice());
|
105
|
+
}
|
106
|
+
|
107
|
+
void Append(absl::string_view key, const Slice& value) {
|
108
|
+
Append(StaticSlice::FromStaticString(key).c_slice(), value.c_slice());
|
109
|
+
}
|
110
|
+
|
111
|
+
void Append(grpc_slice key, grpc_slice value) {
|
112
|
+
if (dest_->count == dest_->capacity) {
|
113
|
+
Crash(absl::StrCat(
|
114
|
+
"Too many metadata entries: capacity=", dest_->capacity, " on ",
|
115
|
+
is_client_ ? "client" : "server", " encoding ", encoding_->count(),
|
116
|
+
" elements: ", encoding_->DebugString().c_str()));
|
117
|
+
}
|
118
|
+
auto* mdusr = &dest_->metadata[dest_->count++];
|
119
|
+
mdusr->key = key;
|
120
|
+
mdusr->value = value;
|
121
|
+
}
|
122
|
+
|
123
|
+
grpc_metadata_array* const dest_;
|
124
|
+
const grpc_metadata_batch* const encoding_;
|
125
|
+
const bool is_client_;
|
126
|
+
};
|
127
|
+
|
128
|
+
void PublishMetadataArray(grpc_metadata_batch* md, grpc_metadata_array* array,
|
129
|
+
bool is_client);
|
130
|
+
void CToMetadata(grpc_metadata* metadata, size_t count, grpc_metadata_batch* b);
|
131
|
+
const char* GrpcOpTypeName(grpc_op_type op);
|
132
|
+
|
133
|
+
bool ValidateMetadata(size_t count, grpc_metadata* metadata);
|
134
|
+
void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
|
135
|
+
bool is_notify_tag_closure);
|
136
|
+
|
137
|
+
inline bool AreWriteFlagsValid(uint32_t flags) {
|
138
|
+
// check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
|
139
|
+
const uint32_t allowed_write_positions =
|
140
|
+
(GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
|
141
|
+
const uint32_t invalid_positions = ~allowed_write_positions;
|
142
|
+
return !(flags & invalid_positions);
|
143
|
+
}
|
144
|
+
|
145
|
+
inline bool AreInitialMetadataFlagsValid(uint32_t flags) {
|
146
|
+
// check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
|
147
|
+
uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
|
148
|
+
return !(flags & invalid_positions);
|
149
|
+
}
|
150
|
+
|
151
|
+
// One batch operation
|
152
|
+
// Wrapper around promise steps to perform once of the batch operations for the
|
153
|
+
// legacy grpc surface api.
|
154
|
+
template <typename SetupResult, grpc_op_type kOp>
|
155
|
+
class OpHandlerImpl {
|
156
|
+
public:
|
157
|
+
using PromiseFactory = promise_detail::OncePromiseFactory<void, SetupResult>;
|
158
|
+
using Promise = typename PromiseFactory::Promise;
|
159
|
+
static_assert(!std::is_same<Promise, void>::value,
|
160
|
+
"PromiseFactory must return a promise");
|
161
|
+
|
162
|
+
OpHandlerImpl() : state_(State::kDismissed) {}
|
163
|
+
explicit OpHandlerImpl(SetupResult result) : state_(State::kPromiseFactory) {
|
164
|
+
Construct(&promise_factory_, std::move(result));
|
165
|
+
}
|
166
|
+
|
167
|
+
~OpHandlerImpl() {
|
168
|
+
switch (state_) {
|
169
|
+
case State::kDismissed:
|
170
|
+
break;
|
171
|
+
case State::kPromiseFactory:
|
172
|
+
Destruct(&promise_factory_);
|
173
|
+
break;
|
174
|
+
case State::kPromise:
|
175
|
+
Destruct(&promise_);
|
176
|
+
break;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
OpHandlerImpl(const OpHandlerImpl&) = delete;
|
181
|
+
OpHandlerImpl& operator=(const OpHandlerImpl&) = delete;
|
182
|
+
OpHandlerImpl(OpHandlerImpl&& other) noexcept : state_(other.state_) {
|
183
|
+
switch (state_) {
|
184
|
+
case State::kDismissed:
|
185
|
+
break;
|
186
|
+
case State::kPromiseFactory:
|
187
|
+
Construct(&promise_factory_, std::move(other.promise_factory_));
|
188
|
+
break;
|
189
|
+
case State::kPromise:
|
190
|
+
Construct(&promise_, std::move(other.promise_));
|
191
|
+
break;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
OpHandlerImpl& operator=(OpHandlerImpl&& other) noexcept = delete;
|
195
|
+
|
196
|
+
Poll<StatusFlag> operator()() {
|
197
|
+
switch (state_) {
|
198
|
+
case State::kDismissed:
|
199
|
+
return Success{};
|
200
|
+
case State::kPromiseFactory: {
|
201
|
+
auto promise = promise_factory_.Make();
|
202
|
+
Destruct(&promise_factory_);
|
203
|
+
Construct(&promise_, std::move(promise));
|
204
|
+
state_ = State::kPromise;
|
205
|
+
}
|
206
|
+
ABSL_FALLTHROUGH_INTENDED;
|
207
|
+
case State::kPromise: {
|
208
|
+
GRPC_TRACE_LOG(call, INFO)
|
209
|
+
<< Activity::current()->DebugTag() << "BeginPoll " << OpName();
|
210
|
+
auto r = poll_cast<StatusFlag>(promise_());
|
211
|
+
GRPC_TRACE_LOG(call, INFO)
|
212
|
+
<< Activity::current()->DebugTag() << "EndPoll " << OpName()
|
213
|
+
<< " --> "
|
214
|
+
<< (r.pending() ? "PENDING" : (r.value().ok() ? "OK" : "FAILURE"));
|
215
|
+
return r;
|
216
|
+
}
|
217
|
+
}
|
218
|
+
GPR_UNREACHABLE_CODE(return Pending{});
|
219
|
+
}
|
220
|
+
|
221
|
+
private:
|
222
|
+
enum class State {
|
223
|
+
kDismissed,
|
224
|
+
kPromiseFactory,
|
225
|
+
kPromise,
|
226
|
+
};
|
227
|
+
|
228
|
+
static const char* OpName() { return GrpcOpTypeName(kOp); }
|
229
|
+
|
230
|
+
// gcc-12 has problems with this being a variant
|
231
|
+
GPR_NO_UNIQUE_ADDRESS State state_;
|
232
|
+
union {
|
233
|
+
PromiseFactory promise_factory_;
|
234
|
+
Promise promise_;
|
235
|
+
};
|
236
|
+
};
|
237
|
+
|
238
|
+
template <grpc_op_type op_type, typename PromiseFactory>
|
239
|
+
auto OpHandler(PromiseFactory setup) {
|
240
|
+
return OpHandlerImpl<PromiseFactory, op_type>(std::move(setup));
|
241
|
+
}
|
242
|
+
|
243
|
+
class BatchOpIndex {
|
244
|
+
public:
|
245
|
+
BatchOpIndex(const grpc_op* ops, size_t nops) : ops_(ops) {
|
246
|
+
for (size_t i = 0; i < nops; i++) {
|
247
|
+
idxs_[ops[i].op] = static_cast<uint8_t>(i);
|
248
|
+
}
|
249
|
+
}
|
250
|
+
|
251
|
+
// 1. Check if op_type is in the batch
|
252
|
+
// 2. If it is, run the setup function in the context of the API call (NOT in
|
253
|
+
// the call party).
|
254
|
+
// 3. This setup function returns a promise factory which we'll then run *in*
|
255
|
+
// the party to do initial setup, and have it return the promise that we'll
|
256
|
+
// ultimately poll on til completion.
|
257
|
+
// Once we express our surface API in terms of core internal types this whole
|
258
|
+
// dance will go away.
|
259
|
+
template <grpc_op_type op_type, typename SetupFn>
|
260
|
+
auto OpHandler(SetupFn setup) {
|
261
|
+
using SetupResult = decltype(std::declval<SetupFn>()(grpc_op()));
|
262
|
+
using Impl = OpHandlerImpl<SetupResult, op_type>;
|
263
|
+
if (const grpc_op* op = this->op(op_type)) {
|
264
|
+
auto r = setup(*op);
|
265
|
+
return Impl(std::move(r));
|
266
|
+
} else {
|
267
|
+
return Impl();
|
268
|
+
}
|
269
|
+
}
|
270
|
+
|
271
|
+
const grpc_op* op(grpc_op_type op_type) const {
|
272
|
+
return idxs_[op_type] == 255 ? nullptr : &ops_[idxs_[op_type]];
|
273
|
+
}
|
274
|
+
|
275
|
+
private:
|
276
|
+
const grpc_op* const ops_;
|
277
|
+
std::array<uint8_t, 8> idxs_{255, 255, 255, 255, 255, 255, 255, 255};
|
278
|
+
};
|
279
|
+
|
280
|
+
// Defines a promise that calls grpc_cq_end_op() (on first poll) and then waits
|
281
|
+
// for the callback supplied to grpc_cq_end_op() to be called, before resolving
|
282
|
+
// to Empty{}
|
283
|
+
class WaitForCqEndOp {
|
284
|
+
public:
|
285
|
+
WaitForCqEndOp(bool is_closure, void* tag, grpc_error_handle error,
|
286
|
+
grpc_completion_queue* cq)
|
287
|
+
: state_{NotStarted{is_closure, tag, std::move(error), cq}} {}
|
288
|
+
|
289
|
+
Poll<Empty> operator()();
|
290
|
+
|
291
|
+
WaitForCqEndOp(const WaitForCqEndOp&) = delete;
|
292
|
+
WaitForCqEndOp& operator=(const WaitForCqEndOp&) = delete;
|
293
|
+
WaitForCqEndOp(WaitForCqEndOp&& other) noexcept
|
294
|
+
: state_(std::move(absl::get<NotStarted>(other.state_))) {
|
295
|
+
other.state_.emplace<Invalid>();
|
296
|
+
}
|
297
|
+
WaitForCqEndOp& operator=(WaitForCqEndOp&& other) noexcept {
|
298
|
+
state_ = std::move(absl::get<NotStarted>(other.state_));
|
299
|
+
other.state_.emplace<Invalid>();
|
300
|
+
return *this;
|
301
|
+
}
|
302
|
+
|
303
|
+
private:
|
304
|
+
struct NotStarted {
|
305
|
+
bool is_closure;
|
306
|
+
void* tag;
|
307
|
+
grpc_error_handle error;
|
308
|
+
grpc_completion_queue* cq;
|
309
|
+
};
|
310
|
+
struct Started {
|
311
|
+
explicit Started(Waker waker) : waker(std::move(waker)) {}
|
312
|
+
Waker waker;
|
313
|
+
grpc_cq_completion completion;
|
314
|
+
std::atomic<bool> done{false};
|
315
|
+
};
|
316
|
+
struct Invalid {};
|
317
|
+
using State = absl::variant<NotStarted, Started, Invalid>;
|
318
|
+
|
319
|
+
static std::string StateString(const State& state);
|
320
|
+
|
321
|
+
State state_{Invalid{}};
|
322
|
+
};
|
323
|
+
|
324
|
+
template <typename FalliblePart, typename FinalPart>
|
325
|
+
auto InfallibleBatch(FalliblePart fallible_part, FinalPart final_part,
|
326
|
+
bool is_notify_tag_closure, void* notify_tag,
|
327
|
+
grpc_completion_queue* cq) {
|
328
|
+
// Perform fallible_part, then final_part, then wait for the
|
329
|
+
// completion queue to be done.
|
330
|
+
// If cancelled, we'll ensure the completion queue is notified.
|
331
|
+
// There's a slight bug here in that if we cancel this promise after
|
332
|
+
// the WaitForCqEndOp we'll double post -- but we don't currently do that.
|
333
|
+
return OnCancelFactory(
|
334
|
+
[fallible_part = std::move(fallible_part),
|
335
|
+
final_part = std::move(final_part), is_notify_tag_closure, notify_tag,
|
336
|
+
cq]() mutable {
|
337
|
+
return LogPollBatch(notify_tag,
|
338
|
+
Seq(std::move(fallible_part), std::move(final_part),
|
339
|
+
[is_notify_tag_closure, notify_tag, cq]() {
|
340
|
+
return WaitForCqEndOp(is_notify_tag_closure,
|
341
|
+
notify_tag,
|
342
|
+
absl::OkStatus(), cq);
|
343
|
+
}));
|
344
|
+
},
|
345
|
+
[cq, notify_tag]() {
|
346
|
+
grpc_cq_end_op(
|
347
|
+
cq, notify_tag, absl::OkStatus(),
|
348
|
+
[](void*, grpc_cq_completion* completion) { delete completion; },
|
349
|
+
nullptr, new grpc_cq_completion);
|
350
|
+
});
|
351
|
+
}
|
352
|
+
|
353
|
+
template <typename FalliblePart>
|
354
|
+
auto FallibleBatch(FalliblePart fallible_part, bool is_notify_tag_closure,
|
355
|
+
void* notify_tag, grpc_completion_queue* cq) {
|
356
|
+
// Perform fallible_part, then wait for the completion queue to be done.
|
357
|
+
// If cancelled, we'll ensure the completion queue is notified.
|
358
|
+
// There's a slight bug here in that if we cancel this promise after
|
359
|
+
// the WaitForCqEndOp we'll double post -- but we don't currently do that.
|
360
|
+
return OnCancelFactory(
|
361
|
+
[fallible_part = std::move(fallible_part), is_notify_tag_closure,
|
362
|
+
notify_tag, cq]() mutable {
|
363
|
+
return LogPollBatch(
|
364
|
+
notify_tag,
|
365
|
+
Seq(std::move(fallible_part),
|
366
|
+
[is_notify_tag_closure, notify_tag, cq](StatusFlag r) {
|
367
|
+
return WaitForCqEndOp(is_notify_tag_closure, notify_tag,
|
368
|
+
StatusCast<absl::Status>(r), cq);
|
369
|
+
}));
|
370
|
+
},
|
371
|
+
[cq]() {
|
372
|
+
grpc_cq_end_op(
|
373
|
+
cq, nullptr, absl::CancelledError(),
|
374
|
+
[](void*, grpc_cq_completion* completion) { delete completion; },
|
375
|
+
nullptr, new grpc_cq_completion);
|
376
|
+
});
|
377
|
+
}
|
378
|
+
|
379
|
+
template <typename F>
|
380
|
+
class PollBatchLogger {
|
381
|
+
public:
|
382
|
+
PollBatchLogger(void* tag, F f) : tag_(tag), f_(std::move(f)) {}
|
383
|
+
|
384
|
+
auto operator()() {
|
385
|
+
GRPC_TRACE_LOG(call, INFO) << "Poll batch " << tag_;
|
386
|
+
auto r = f_();
|
387
|
+
GRPC_TRACE_LOG(call, INFO)
|
388
|
+
<< "Poll batch " << tag_ << " --> " << ResultString(r);
|
389
|
+
return r;
|
390
|
+
}
|
391
|
+
|
392
|
+
private:
|
393
|
+
template <typename T>
|
394
|
+
static std::string ResultString(Poll<T> r) {
|
395
|
+
if (r.pending()) return "PENDING";
|
396
|
+
return ResultString(r.value());
|
397
|
+
}
|
398
|
+
static std::string ResultString(Empty) { return "DONE"; }
|
399
|
+
|
400
|
+
void* tag_;
|
401
|
+
F f_;
|
402
|
+
};
|
403
|
+
|
404
|
+
template <typename F>
|
405
|
+
PollBatchLogger<F> LogPollBatch(void* tag, F f) {
|
406
|
+
return PollBatchLogger<F>(tag, std::move(f));
|
407
|
+
}
|
408
|
+
|
409
|
+
class MessageReceiver {
|
410
|
+
public:
|
411
|
+
grpc_compression_algorithm incoming_compression_algorithm() const {
|
412
|
+
return incoming_compression_algorithm_;
|
413
|
+
}
|
414
|
+
|
415
|
+
void SetIncomingCompressionAlgorithm(
|
416
|
+
grpc_compression_algorithm incoming_compression_algorithm) {
|
417
|
+
incoming_compression_algorithm_ = incoming_compression_algorithm;
|
418
|
+
}
|
419
|
+
|
420
|
+
uint32_t last_message_flags() const { return test_only_last_message_flags_; }
|
421
|
+
|
422
|
+
template <typename Puller>
|
423
|
+
auto MakeBatchOp(const grpc_op& op, Puller* puller) {
|
424
|
+
CHECK_EQ(recv_message_, nullptr);
|
425
|
+
recv_message_ = op.data.recv_message.recv_message;
|
426
|
+
return [this, puller]() mutable {
|
427
|
+
return Map(puller->PullMessage(),
|
428
|
+
[this](ValueOrFailure<absl::optional<MessageHandle>> msg) {
|
429
|
+
return FinishRecvMessage(std::move(msg));
|
430
|
+
});
|
431
|
+
};
|
432
|
+
}
|
433
|
+
|
434
|
+
private:
|
435
|
+
StatusFlag FinishRecvMessage(
|
436
|
+
ValueOrFailure<absl::optional<MessageHandle>> result);
|
437
|
+
|
438
|
+
grpc_byte_buffer** recv_message_ = nullptr;
|
439
|
+
uint32_t test_only_last_message_flags_ = 0;
|
440
|
+
// Compression algorithm for incoming data
|
441
|
+
grpc_compression_algorithm incoming_compression_algorithm_ =
|
442
|
+
GRPC_COMPRESS_NONE;
|
443
|
+
};
|
444
|
+
|
445
|
+
std::string MakeErrorString(const ServerMetadata* trailing_metadata);
|
446
|
+
|
447
|
+
} // namespace grpc_core
|
448
|
+
|
449
|
+
#endif // GRPC_SRC_CORE_LIB_SURFACE_CALL_UTILS_H
|
@@ -29,11 +29,11 @@
|
|
29
29
|
#include "src/core/channelz/channelz.h"
|
30
30
|
#include "src/core/lib/channel/channel_args.h"
|
31
31
|
#include "src/core/lib/compression/compression_internal.h"
|
32
|
-
#include "src/core/lib/debug/stats.h"
|
33
|
-
#include "src/core/lib/debug/stats_data.h"
|
34
32
|
#include "src/core/lib/debug/trace.h"
|
35
33
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
36
34
|
#include "src/core/lib/surface/api_trace.h"
|
35
|
+
#include "src/core/telemetry/stats.h"
|
36
|
+
#include "src/core/telemetry/stats_data.h"
|
37
37
|
|
38
38
|
namespace grpc_core {
|
39
39
|
|
@@ -65,7 +65,12 @@ Channel::RegisteredCall::~RegisteredCall() {}
|
|
65
65
|
Channel::Channel(std::string target, const ChannelArgs& channel_args)
|
66
66
|
: target_(std::move(target)),
|
67
67
|
channelz_node_(channel_args.GetObjectRef<channelz::ChannelNode>()),
|
68
|
-
compression_options_(CompressionOptionsFromChannelArgs(channel_args))
|
68
|
+
compression_options_(CompressionOptionsFromChannelArgs(channel_args)),
|
69
|
+
call_arena_allocator_(MakeRefCounted<CallArenaAllocator>(
|
70
|
+
channel_args.GetObject<ResourceQuota>()
|
71
|
+
->memory_quota()
|
72
|
+
->CreateMemoryOwner(),
|
73
|
+
1024)) {}
|
69
74
|
|
70
75
|
Channel::RegisteredCall* Channel::RegisterCall(const char* method,
|
71
76
|
const char* host) {
|
@@ -40,8 +40,11 @@
|
|
40
40
|
#include "src/core/lib/gprpp/time.h"
|
41
41
|
#include "src/core/lib/iomgr/iomgr_fwd.h"
|
42
42
|
#include "src/core/lib/resource_quota/arena.h"
|
43
|
+
#include "src/core/lib/resource_quota/resource_quota.h"
|
43
44
|
#include "src/core/lib/slice/slice.h"
|
44
45
|
#include "src/core/lib/surface/channel_stack_type.h"
|
46
|
+
#include "src/core/lib/transport/call_arena_allocator.h"
|
47
|
+
#include "src/core/lib/transport/call_destination.h"
|
45
48
|
#include "src/core/lib/transport/connectivity_state.h"
|
46
49
|
|
47
50
|
// Forward declaration to avoid dependency loop.
|
@@ -52,7 +55,7 @@ namespace grpc_core {
|
|
52
55
|
// Forward declaration to avoid dependency loop.
|
53
56
|
class Transport;
|
54
57
|
|
55
|
-
class Channel : public
|
58
|
+
class Channel : public UnstartedCallDestination,
|
56
59
|
public CppImplOf<Channel, grpc_channel> {
|
57
60
|
public:
|
58
61
|
struct RegisteredCall {
|
@@ -66,11 +69,6 @@ class Channel : public RefCounted<Channel>,
|
|
66
69
|
~RegisteredCall();
|
67
70
|
};
|
68
71
|
|
69
|
-
virtual void Orphan() = 0;
|
70
|
-
|
71
|
-
virtual Arena* CreateArena() = 0;
|
72
|
-
virtual void DestroyArena(Arena* arena) = 0;
|
73
|
-
|
74
72
|
virtual bool IsLame() const = 0;
|
75
73
|
|
76
74
|
// TODO(roth): This should return a C++ type.
|
@@ -129,6 +127,10 @@ class Channel : public RefCounted<Channel>,
|
|
129
127
|
virtual bool is_client() const { return true; }
|
130
128
|
virtual bool is_promising() const { return true; }
|
131
129
|
|
130
|
+
CallArenaAllocator* call_arena_allocator() const {
|
131
|
+
return call_arena_allocator_.get();
|
132
|
+
}
|
133
|
+
|
132
134
|
protected:
|
133
135
|
Channel(std::string target, const ChannelArgs& channel_args);
|
134
136
|
|
@@ -143,6 +145,7 @@ class Channel : public RefCounted<Channel>,
|
|
143
145
|
// the C++ or other wrapped language Channel that registered these calls).
|
144
146
|
std::map<std::pair<std::string, std::string>, RegisteredCall>
|
145
147
|
registration_table_ ABSL_GUARDED_BY(mu_);
|
148
|
+
const RefCountedPtr<CallArenaAllocator> call_arena_allocator_;
|
146
149
|
};
|
147
150
|
|
148
151
|
} // namespace grpc_core
|
@@ -150,7 +153,7 @@ class Channel : public RefCounted<Channel>,
|
|
150
153
|
/// The same as grpc_channel_destroy, but doesn't create an ExecCtx, and so
|
151
154
|
/// is safe to use from within core.
|
152
155
|
inline void grpc_channel_destroy_internal(grpc_channel* channel) {
|
153
|
-
grpc_core::Channel::FromC(channel)->
|
156
|
+
grpc_core::Channel::FromC(channel)->Unref();
|
154
157
|
}
|
155
158
|
|
156
159
|
// Return the channel's compression options.
|
@@ -14,6 +14,8 @@
|
|
14
14
|
// limitations under the License.
|
15
15
|
//
|
16
16
|
|
17
|
+
#include "src/core/lib/surface/channel_create.h"
|
18
|
+
|
17
19
|
#include "absl/log/check.h"
|
18
20
|
|
19
21
|
#include <grpc/grpc.h>
|
@@ -22,17 +24,19 @@
|
|
22
24
|
#include <grpc/support/port_platform.h>
|
23
25
|
|
24
26
|
#include "src/core/channelz/channelz.h"
|
27
|
+
#include "src/core/client_channel/client_channel.h"
|
25
28
|
#include "src/core/lib/channel/channel_args.h"
|
26
29
|
#include "src/core/lib/config/core_configuration.h"
|
27
|
-
#include "src/core/lib/
|
28
|
-
#include "src/core/lib/debug/stats_data.h"
|
30
|
+
#include "src/core/lib/experiments/experiments.h"
|
29
31
|
#include "src/core/lib/surface/channel.h"
|
30
32
|
#include "src/core/lib/surface/lame_client.h"
|
31
33
|
#include "src/core/lib/surface/legacy_channel.h"
|
34
|
+
#include "src/core/telemetry/stats.h"
|
35
|
+
#include "src/core/telemetry/stats_data.h"
|
32
36
|
|
33
37
|
namespace grpc_core {
|
34
38
|
|
35
|
-
absl::StatusOr<
|
39
|
+
absl::StatusOr<RefCountedPtr<Channel>> ChannelCreate(
|
36
40
|
std::string target, ChannelArgs args,
|
37
41
|
grpc_channel_stack_type channel_stack_type, Transport* optional_transport) {
|
38
42
|
global_stats().IncrementClientChannelsCreated();
|
@@ -77,9 +81,13 @@ absl::StatusOr<OrphanablePtr<Channel>> ChannelCreate(
|
|
77
81
|
if (optional_transport != nullptr) {
|
78
82
|
args = args.SetObject(optional_transport);
|
79
83
|
}
|
80
|
-
// Delegate to
|
81
|
-
|
82
|
-
|
84
|
+
// Delegate to appropriate channel impl.
|
85
|
+
if (!args.GetBool(GRPC_ARG_USE_V3_STACK).value_or(false)) {
|
86
|
+
return LegacyChannel::Create(std::move(target), std::move(args),
|
87
|
+
channel_stack_type);
|
88
|
+
}
|
89
|
+
CHECK_EQ(channel_stack_type, GRPC_CLIENT_CHANNEL);
|
90
|
+
return ClientChannel::Create(std::move(target), std::move(args));
|
83
91
|
}
|
84
92
|
|
85
93
|
} // namespace grpc_core
|
@@ -24,16 +24,17 @@
|
|
24
24
|
#include <grpc/support/port_platform.h>
|
25
25
|
|
26
26
|
#include "src/core/lib/channel/channel_args.h"
|
27
|
-
#include "src/core/lib/gprpp/orphanable.h"
|
28
27
|
#include "src/core/lib/surface/channel.h"
|
29
28
|
#include "src/core/lib/surface/channel_stack_type.h"
|
30
29
|
|
30
|
+
#define GRPC_ARG_USE_V3_STACK "grpc.internal.use_v3_stack"
|
31
|
+
|
31
32
|
namespace grpc_core {
|
32
33
|
|
33
34
|
class Transport;
|
34
35
|
|
35
36
|
// Creates a client channel.
|
36
|
-
absl::StatusOr<
|
37
|
+
absl::StatusOr<RefCountedPtr<Channel>> ChannelCreate(
|
37
38
|
std::string target, ChannelArgs args,
|
38
39
|
grpc_channel_stack_type channel_stack_type, Transport* optional_transport);
|
39
40
|
|